2019年12月29日 星期日

詞嵌入無監督自然語言翻譯--臉書團隊的 MUSE 專案

在課堂上認識的 Ruben 兄目前正在進行自然語言翻譯的研究,提到了這個 MUSE

乍聽之下沒什麼特別的,動手把玩一下才知道很神奇的,因為我給它的是兩個單語詞嵌入辭典…

換句話說我沒告訴它 cat 跟"貓"的對應關係哦,這厲害了吧 XD

2019年12月22日 星期日

2019年12月21日 星期六

廢文界的 deepfake -- textsynth.org



隨便打一段字,幫你接龍的網站,測試結果:

fastText 文本分類初探-- google colab 上執行為例

以下以中文出題的單選題為例來進行文本分類
首先掛載 google drive
import fasttext
from google.colab import drive
drive.mount('/content/drive')
train_data_file="/content/drive/My Drive/Colab Datasets/twmlestep2_train_clean.txt"
test_data_file_raw="/content/drive/My Drive/Colab Datasets/twmlestep2_test_clean.txt"

標記後的文本長得像這樣

2019年12月19日 星期四

Colab 環境的開門三件事(!)

說的是這篇 3 More Google Colab Environment Management Tips

總之 Colab 就是個 VM ,所以此文就是說它有辦法做到這三件事:

2019年12月13日 星期五

爆炸性成長的 GCN (圖卷積網路)

不過三年的時間,GCN 已經自成一個山頭,可以觀察知乎的話題,或是搜尋一下也可以知道每個月都有上百篇的中文討論出現這個關鍵字 GCN。再推薦幾篇:

2019年12月9日 星期一

HMM / CRF 與 RNN

先看看李宏毅老師教學影片 RNN-1 RNN-2  ,以及 "工程師。日常" 的整理 1 2 3 4

2019年12月1日 星期日

玩轉 corenlp(3)

在做一些測試的時候,使用 maven 是比較簡單(懶惰)的選擇

首先到 https://jdk.java.net/ 抓到新版 jdk ,解壓到自選的位置

再來到 https://maven.apache.org/download.cgi 抓到新版 maven ,解壓到自選的位置

2019年11月5日 星期二

東南亞 (SEA) 的叫車/外送獨角獸 Grab

原先這麼沒有鑑別度的公司是不會引起我的興趣的,早上我在檢查升級 emacs 到26.3 的設定時,發現之前"如何用 Org-Mode 做笔记,以及更多emacs設定"曾經參考過的一位大神 Steve Yegge 在2018年初告別了 Google 而加入 Grab ,這才開始讓我對 Grab 有了興趣。

Neural Ordinary Differential Equation - 來自古典數學的火花


2018 年 NIPS (Neural Information Processing Systems) 最佳論文的四篇中,陳天琦的這篇"Neural Ordinary Differential Equation"雖然放在第四篇,但是至今一年不到的時間,已經得到超過200篇的引用,遠超過其它三篇。作為曾經的工程學科學生,昨天看到一場 meetup 對此文的現場推導,我當場就能理解背後的數學直覺,而且不禁拍案叫絕。

2019年10月24日 星期四

org mode 中執行 anaconda python 的設定

在 .emacs 或你自訂的設定檔中加入以下設定,ipython.exe的路徑以實際情況為準

(setq org-babel-python-command "/Anaconda3/Scripts/ipython.exe")
(org-babel-do-load-languages
 'org-babel-load-languages
 '((python . t)))

在 org mode 輸入以下程式碼,在程式碼區塊中任意位置按下 C-c 可見以上結果

2019年10月17日 星期四

為何中文需要斷詞?

語言是把一個人想表達的"語境"投影到維度較低的"語言文字空間"所得到的物理現象,試想你在思考時是否有作斷詞、標點的動作? 顯然沒有,因此西方文字的共祖--拉丁文,早期也是寫出連續文字 Scriptio continua 直到西元第七、八世紀開始才流行開了以空白斷字的寫法。

2019年10月15日 星期二

2019年9月21日 星期六

2019年9月18日 星期三

漢字的標準化問題

在整理索引檔時發現一個奇怪的問題,像"糖尿"這個詞竟然出現兩次,而且有完全不同的編碼。經過一番整理之後,才了解有些字有所謂的"異體字"問題,某些字型可以看得出不同,某些字型則看來完全相同。詳細的列表可見 https://ctext.org/faq/normalization/zh

解決的方式是在後續處理之前先進行正規化,這類的例字還有 Guillain-Barré 中 é 有相當數量以 e (無重音) 出現的例子。參 https://python3-cookbook.readthedocs.io/zh_CN/latest/c02/p09_normalize_unicode_text_to_regexp.html

程式就一行,其中 ORIGINAL_TEXT 為尚未正規化的原始字串:

unicodedata.normalize('NFC', ORIGINAL_TEXT)


2019年9月7日 星期六

神仙打鼓有時錯之--javascript 檢查文字是否為數字所組成--stackoverflow篇

錯誤示範

https://stackoverflow.com/questions/175739/built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number (2000+個 up vote)

正確解答

https://stackoverflow.com/questions/4434076/best-way-to-alphanumeric-check-in-javascript (80+)

https://lowrey.me/test-if-a-string-is-alphanumeric-in-javascript/

我也被這個雷到,今天才發現,花了老子兩年才發現這個bug…

話說回來,測試真的很重要,tdd = test driven development ROCKS!!
話說回來,測試真的很重要,tdd = test driven development ROCKS!!
話說回來,測試真的很重要,tdd = test driven development ROCKS!!


2019年8月15日 星期四

正念 (mindfulness) 的反思

今天看到這則新聞,讓我驚訝不已:

Google’s former mindfulness guru steps down from nonprofit over ‘inappropriate behavior’

顯然一些嚴謹的批評者也對正念的實證效果存疑:

Why Corporations Want You to Shut Up and Meditate

誠如上文所說,整個正念已經變成了一條產業鏈,受到最低(幾乎沒有)的監管

下文比較中性的總結了正念,如同大多數科學論文的結論:需要更多的研究…

正念冥想是否被過度炒作了



2019年8月10日 星期六

windows update 1903 error 0xc1900130

哦又是m$更新搞得我一天沒筆電可用(怒)

如果你的錯誤訊息和我一樣,希望接下來的紀錄能幫到你

官方說明在此,說是2019/8下旬會修正。嗯…我比較相信diy的時程

新版驅動在此,SetupRST.exe 下載、執行、重開機後,再次安裝更新即可


2019年8月4日 星期日

$(document).ready equivalent without jQuery

哦這是什麼爛標啊…呵呵呵,不要小看這個爛標,在SO上這個問題可是被問了一次又一次,問到不要不要的

總之一句話,在 html 文件最後宣告的即時函數,會在文件載入完畢後才執行,不需要特別處理。

有兩篇千餘個讚的SO都在講這件事:

https://stackoverflow.com/questions/9899372/pure-javascript-equivalent-of-jquerys-ready-how-to-call-a-function-when-t

https://stackoverflow.com/questions/799981/document-ready-equivalent-without-jquery


2019年8月2日 星期五

StanfordNLP 初探

在 2016 的 Stanford Chinese Segmenter初探(三) 中我曾做過測試,中文的斷詞還有進步空間。時間來到 2019 年,原團隊以 PyTorch 為基礎,改寫了 CoreNLP ,成為以 Python 為實作語言的 StanfordNLP  ,安裝方式簡化為一句 pip install stanfordnlp。以2016 年相同的測試語句來進行測試,結果如下:


非常令人驚訝的是這次結果完全正確,而且提供的中文模組預設是繁體中文!! 趕快下載來試試吧。

2019年7月29日 星期一

Interactive programming, reloadable code, and the possible mapping in python / jupyter

Interactive programming (Live coding) 是 clojure 社群提出的一個概念,意思是當寫出 reloadable code 時,程式的(執行期)重載不會改寫狀態變數,只更新了函數,有點類似軟體的熱插拔的概念。這個重載是以檔案為單位的重載,因為搭配上工具(主流是 emacs 加上 figwheel (2014)或 shadow-cljs (2015) )而能夠快速、無腦的進行。必要時也可以只重載指定區域的程式碼,而使得對程式本身全面 reloadable 的要求變得更放寬,只要所重載的程式碼是 reloadable 即可。

可以想見,其它語言只要遵循適當的規範,一樣可以達到 Interactive programming / Live coding,而我認為這方面的先行者是  swank-js (2010) 以及 Christopher Wellons 的 skewer (2012),使用的語言是 javascript。 其中 swank-js 的影片相當令人印象深刻,但是 skewer 是較多人使用的,到 2018 年仍有維護。其它如 Bret Victor 的演示 (演示2 ),相信也是使用類似的技巧。

記憶所及,2010-2014開始,python 也出現了其互動環境 ipython 的較多討論,及後來的 jupyter 。這兩個環境的糾葛,這篇 IPython Or Jupyter? 寫得很好。如果使用過 jupyter notebook 的話,相信你也能輕易感受到,它其實已經具有 Live coding 的架構,而且只要遵循一些規範,一樣可以達成 reloadable 的要求。另外也有社群寫出 ijavascript 來使用 jupyter 的現成工作流程。而 javascript 由於可以直接使用 browser 內現成的 kernel / REPL ,因此可以在不安裝任何工具的情況下執行,而造就了一些 repl.it 與 codesandbox 等線上 IDE 的興起。clojure 社群也開發出了基於 jupyter 的 clojupyter 及自幹的 gorilla-repl ,這也更加使得 vim / emacs 加速式微,最後我們再來討論。

Live coding 的價值,主要是體現在需要大量使用者互動或人機介面的程式上。由於使用者的互動會改變程式中諸多變數,這些變動在程式重載後若被重寫,表示使用者/測試者必需重新輸入一次,這樣會使得整個撰寫、修改程式的循環時間拉長,讓人一不小心就失神(mind flow),降低工作效率。一個解決方案是預先寫好測試程式,這某種程度上就是 Test Driven Development (TDD) 的議題。Live coding 是另一種精神的表現,它更自由,不需要事先寫測試,自由發揮的空間更大,但這不見得是當前高度機構化的開發流程所要的。我認為可以這樣說,TDD解決的是程式邏輯的部分,這部分可以經由適當的工作分解,將開發時程平行化,故為產業界所習用;Live coding 較多用在視覺設計(如電玩),需要即時得到視覺迴饋,無法以事先撰寫的測試程式來評估效果。事實上這個做法非常的炫目,連 Unity 之類的工具都得在停止 rendering 的狀態上變動模型,我相信 Bruce Hauman 的技法也能在 WebGL / WebVR 上得到很好的應用。

最後提一下 emacs 的角色,因為當 browser 都可以拿來寫程式的時候,emacs 的 niche 是更被限縮了。而 browser 拿來寫文件早就不是新聞了,可以想見最後一根稻草會使整個 vim / emacs 的按鍵式操作被 browser 整碗捧去的時候。短期內或許還不用太擔心,因為這還涉及到程式的 focus 的處理部分,現在仍有障礙。但是未來如果再有一波自然語言對話的革命,加上 vr/ar/mr 的引入,寫程式或許就只要說說話、在空中拉拉積木就解決了,到時 vim/emacs 就真的成了時代的眼淚了。vim/emacs 最後一線的優勢就是現存的大量 legacy code ,在對 emacs 本身進行客製化時,有大量的程式碼可參考,儘管這意味著必需要學習一個看來有點奇怪的 lisp。這類工具的偏好問題,永遠夾雜著各種技術之間的競逐、互相領先和落後,不會有一個永遠的王者。但是以一個在視窗系統上存在將近30年的工具而言,emacs 真的是一代拳王無誤。


2019年7月23日 星期二

electron: 用 javascript 開發跨平台桌面應用程式

參考 https://github.com/electron/electron-quick-start#to-use 試試

技術演進真的太快了,2016年我才寫過 github electron套件從0.36.x更新到1.4.x的問題

轉眼間 electron 的版本已經到 5.0.7 了

想當年 preload.js 只是一個 dirty hack 而已,現在已經與 main.js 並列了

要分成兩個檔案,表示它們各有自己的角色、scope

加上 web page 自己,表示有三個 namespace;搞懂它們,及傳參方式,就掌握了 electron.js


2019年7月10日 星期三

機器人結合AI採收生菜啦~~

人類工作 - 1

搞不好比自駕車還早普及啊



50歲大叔回劍橋讀AI博士,研發機器人用AI收生菜

pipenv = pip + virtualenv

參考以下文章

用 pipenv 來管理 Python 開發環境

Pipenv 更簡單、更快速的 Python 套件管理工具

可以說是個 nice to have 的工具。手刻 pip/virtualenv 也沒什麼,觀念一樣是得先了解


2019年7月3日 星期三

在WIN10環境下安裝emacs (多版本共存)

參 https://github.com/jawatech/installing-emacs-on-win10

emacs 26.2 版的 org mode 中的圖片已不需安裝、下載其它套件即可顯示


2019年6月19日 星期三

蓋版廣告研究(好孩子不要學啊~~)

參 https://ithelp.ithome.com.tw/articles/10209288

雖然很容易就試出來,但放在某些頁面上會蓋不掉某些元素

這個問題的討論參 https://andyyou.github.io/2016/03/03/z-index/

基本上就是把 div 往後放,視情況加大它的 z-index

不過G社不喜歡這種廣告哦,使用上要節制點,好孩子不要學啊啊啊啊啊啊啊


2019年6月6日 星期四

2019年5月26日 星期日

OpenAI 文本產生器GPT-2 牛刀小試 -- 顯然還有進步的空間

不得不說,把名詞片語挖空的話,的確是很流暢的一個骨架。句子內的邏輯、句子間的邏輯、段落間的邏輯,整個合併起來考慮,這的確不是預測下一個單詞所考慮的問題,解決之道可能還是要考證這些層次內外的周延性;或者是倒過來說,先決定各個名詞片語/named entity,握有它們之間的關聯,再來決定使用的句法。

此一文本生成器網址為: https://talktotransformer.com/


2019年4月22日 星期一

使用 emacs + org mode 撰寫期刊論文

參考此文 http://kitchingroup.cheme.cmu.edu/blog/2014/08/08/What-we-are-using-org-mode-for/

有空時會整理一下該文的重點,畢竟接下來也許要下海惹XD

(該站文章都非常的優質,這陣子忙完後會好好拜讀一下)


2019年4月4日 星期四

與 python flask 搭配的 orm 後台工具:Flask-Admin

github首頁在 https://github.com/flask-admin/flask-admin

水管上的教學影片 https://www.youtube.com/watch?v=NYWEf9bZhHQ

簡單幾行程式碼,就可以得到像 phpmyadmin 的管理頁面,滿不錯用


2019年3月21日 星期四

2019年2月4日 星期一

BeautifulSoup 中 find_all contents children descendants select 的使用時機

初學者常看到的網路上文件或程式碼通常是這樣取得一個節點

tr.td.ul.li.table.tbody.tr

但是有一行很不起眼的註解出現在文件中:

Using a tag name as an attribute will give you only the first tag by that name:

所以如果你要存取的是同層級的第二個 tr 或 td 呢? 嘿嘿嘿…

2019年1月26日 星期六

java style humor

in fact... just showcasing my new code highlighting ;)

ref. http://ffcc626.blogspot.com/2018/04/blogger-code-highlighting.html & https://github.com/google/code-prettify for further info about the config

import java.util.Arrays;
import java.util.ArrayList;
import java.util.Date;
import java.util.Random;

class SortingString {
 public static void main(String args[]){
  System.out.println("Start Time: " + new Date().toString()); //I wonder how long CompileBot goes for

  String s = "typewriter";
  int i = 0;
  int iterationCount = 0;
  for(i = 0; i <= Integer.MAX_VALUE && s != "eeiprrttwy"; i++){
   s = randomSort(s);
   
   if(i == Integer.MAX_VALUE - 1){
    i = 0;
    iterationCount++;
   }
   //if(i % 100000 == 0) //Prevent TOO much console spam... he.
    //System.out.println(s); //Should probably disable this for CompileBot... hehe.
  }
  System.out.println("End Time: " + new Date().toString());
  System.out.println(s);
  System.out.println("Had " + iterationCount + " iterations over Integer.MAX_VALUE, with an ending i of " + i);
 }
 
 public static String randomSort(String x){
  ArrayList chars = convertStringToArraylist(x);
  Random rand = new Random();
  String rtn = "";
  while(rtn.length() < x.length()){
   int pos = rand.nextInt(chars.size());
   rtn += chars.get(pos);
   chars.remove(pos);
  }
  return rtn;
 }

 

2019年1月21日 星期一

git push 時發生以下錯誤的解決方式:fatal: TypeLoadException encountered. 類型 'Atlassian.Bitbucket.Authentication.Authentication' (來自組件 'Bitbucket.Authentication, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null') 中的方法 'DeleteCredentials' 沒有實作。

請到 https://github.com/Microsoft/Git-Credential-Manager-for-Windows/releases/tag/v1.16.2

下載 GCMW-1.16.2.exe 並執行安裝即可

原始討論串在 https://github.com/git-for-windows/git/issues/1711

(章魚貓表示:喵的怪我囉?)


2019年1月12日 星期六

Mirgrate projects from Heroku to Google Cloud Platform(GCP) 將專案從Heroku轉移到GCP的流程

因為某些機緣發現GCP在台灣的機房使得網站的響應速度超快,雖花了快一天try但還是值得

可以參考一下這個專案說明,大概流程如下:
  1. 首先要有個GCP帳號
  2. 再來準備好信用卡,開通計費。目前有一年300刀的放長線釣大魚送政策
  3. 建立你的專案,記得機房選east-asia-1或east-asia-2
  4. requirements.txt 必需做一些修改,因為GCP似乎不吃 -r 這個參數
  5. 打開雲端命令列環境(GC shell)。這是跟 heroku 最不一樣的地方,他允許你在不安裝任何程式的狀況下作業,乍看會有點不習慣,但這個 shell 跟 ubuntu 操作習慣很一致,在 windows 筆電上作業可說是無縫接軌,而且也與小組形態的 git 工作流程很合拍。可以看看預裝的 gcloud 工具的說明檔
  6. git clone(首次)或git pull你的原始碼。git clone 結束的話要進入以專案為名的那個子目錄
  7. 建立所需的各種資源,如 postgresql 等。各種 proxy 及連線字串的坑請小心XD
  8. "本地測試"。之所以用雙引號的原因是,你其實是可以在自己的實體機器上測試,也可以在剛才的雲端 shell 作測試,後者會附上一個連結讓你開啟,否則你也不知道他的IP在哪XD
  9. 撰寫對應的 app.xml 檔,heroku  中是叫做 Procfile 。這個設計初看沒什麼,但其實這避免了將 app.xml 放到 git 而將帳密等資料外流的危險
  10. 下達發佈指令 gcloud app deploy(這一步超久…)
主要會卡關就是在資料庫各種連線字串的對應,以及測試時必需經過 proxy 這個奇怪的動作。我在猜是想避免有人只裝個 db 然後給別的網站使用之類的。anyway 搬好家後,打開網頁的爽感真是筆墨難以形容,有時甚至比本機測試的速度還快,不誇張。試試又不花錢,花時間而已XD