2016年12月31日 星期六

Stanford parser初探(2)

2010年在 Stanford parser初探 一文中,使用的是文字的介面,但是在 http://nlp.stanford.edu/software/lex-parser.html 上釋出的最新版 3.7 中,已經可以使用 GUI 來進行分析:

不幸的是分析結果與 Stanford Chinese Segmenter 在斷字上並不吻合,不然結果應該會更正確一些…(雖然 Stanford Chinese Segmenter 也是有不準的時候)

自行斷詞後的分析看起來滿像一回事的:
不過像"告訴"這種授與動詞,分析結果仍然不令人滿意。即使是斷詞正確度極高的 sinica
目前的局勢看來,tree bank / tree structure 仍然是高度未統一的狀態,這在機器翻譯或人工智慧的應用上,是很不利的。

程式化的調用,可以參考以下網頁
stanford parser使用
[TextMining][StanfordNLP]Stanford parser 使用方式

2017/08 更新:

今年六月釋出的新版,品質上有極大的進步,感覺上 SyntaxNet 短期內還難成對手




附上原文:

第一年住院医师,做阑尾切除手术时,找不到阑尾在何处,你若是他的主治医师,请你告诉他下列何种方法最容易找到阑尾?

Stanford Chinese Segmenter初探(三)

2010年在 Stanford Chinese Segmenter初探 一文中,繁體中文還不能正常處理,但在官網 http://nlp.stanford.edu/software/segmenter.shtml 上的最新版 3.5 已經可以處理繁體中文。

測試句為
第一年住院醫師,做闌尾切除手術時,找不到闌尾在何處,你若是他的主治醫師,請你告訴他下列何種方法最容易找到闌尾
第一年住院医师,做阑尾切除手术时,找不到阑尾在何处,你若是他的主治医师,请你告诉他下列何种方法最容易找到阑尾
pku的處理結果如下
第一 年 住院 醫師 , 做 闌尾 切除 手 術時 , 找 不 到 闌尾 在 何處 , 你 若是 他 的 主治 醫師 ,請 你 告訴 他 下列 何種 方法 最 容易 找到 闌尾
第一 住院 医师 阑尾 切除 手术 阑尾 何处 若是 主治 医师 告诉 下列 何种 方法 容易 找到 阑尾
ctb的處理結果如下
第一 年 住院 醫師 , 做闌 尾 切除 手術時 , 找不到 闌尾 在 何處 , 你 若是 他 的 主治 醫師 , 請 你 告訴 他 下列 何 種 方法 最 容易 找到 闌尾
第一 住院 医师 阑尾 切除 手术 找不到 阑尾 何处 若是 主治 医师 告诉 下列 方法 容易 找到 阑尾 
看來對於繁體中文,pku和ctb的處理結果各有高下,不是百分百正確,"手術時"等處斷得不對。請看中研院 http://ckipsvr.iis.sinica.edu.tw/
 第一(Neu) 年(Nf) 住院(VA) 醫師(Na) ,(COMMACATEGORY)
----------------------------------------------------------------------------------------------------------------------------------
 做(VC) 闌尾(Na) 切除(VC) 手術(Na) 時(Ng) ,(COMMACATEGORY)
----------------------------------------------------------------------------------------------------------------------------------
 找(VC) 不(D) 到(P) 闌尾(Na) 在(P) 何處(Nc) ,(COMMACATEGORY)
----------------------------------------------------------------------------------------------------------------------------------
 你(Nh) 若是(Cbb) 他(Nh) 的(DE) 主治(VB) 醫師(Na) ,(COMMACATEGORY)
----------------------------------------------------------------------------------------------------------------------------------
 請(VF) 你(Nh) 告訴(VE) 他(Nh) 下列(A) 何(Nes) 種(Nf) 方法(Na) 最(Dfa) 容易(VH) 找到(VC) 闌尾(Na)
----------------------------------------------------------------------------------------------------------------------------------
上述括號中的詞性代號說明請見 http://linganchor.sinica.edu.tw/data/file/la00033.ppt

我想還是要先研究一下英文斷字的結果,再來回頭看中文斷字的問題。

原始碼的編譯/執行(以 windows 平台為例)

以下假設工作目錄為 C:\stanford-segmenter-2015-12-09\

原始碼

下載的壓縮檔解開後包含 stanford-segmenter-3.6.0-sources.jar ,把它解開到 src 子目錄下

編譯程式

要裝個 JDK ,我抓了 jdk-8u121-windows-x64.exe 下來裝
還要裝個 ant ,我抓了 apache-ant-1.10.0-bin.zip 下來裝

建立環境

windows 10的 cmd.exe 中下達指令(記得改成實機安裝的目錄):
set ANT_HOME=c:\ant
set JAVA_HOME=c:\jdk1.7.0_51
set PATH=%PATH%;%ANT_HOME%\bin

編譯

執行 ant 會把 src 子目錄中的所有檔案編譯為 class 放到 classes 子目錄中

執行

java -mx1024m -cp C:\stanford-segmenter-2015-12-09\classes;C:\stanford-segmenter-2015-12-09\slf4j-api.jar;C:\stanford-segmenter-2015-12-09\slf4j-simple.jar edu.stanford.nlp.ie.crf.CRFClassifier -sighanCorporaDict C:\stanford-segmenter-2015-12-09\data -readStdin -inputEncoding UTF-8 -outputEncoding UTF-8 -sighanPostProcessing true -keepAllWhitespaces false -loadClassifier C:\stanford-segmenter-2015-12-09\data\pku.gz -serDictionary C:\stanford-segmenter-2015-12-09\data\dict-chris6.ser.gz

serDictionary 參數若需要多個字典檔,必需以','逗號分隔,而不是java程式常用的';'分號;字典檔一辭一行,以ser.gz結尾的檔案需要壓縮,一般而言我們還是用純文字檔就好。

2016年12月30日 星期五

每日一諺



每一個複雜問題的背後,都有一個清楚、簡單,卻錯誤的答案——H.L.Mencken
"For every complex problem , there is an answer that is clear , simple and wrong."

參 https://en.wikiquote.org/wiki/H._L._Mencken

原文應為:

Explanations exist; they have existed for all time; there is always a well-known solution to every human problem — neat, plausible, and wrong

補上所謂"捷思"的定義,為上面這個諺語下個註腳

一知半解(Congnitive Heuristics)
  人類以理性動物自許,認為靠著與生俱來的智慧,可以認識周遭人、事、物,不但 「知其然」,也「知其所以然」。社會心理學中的歸因理論(attribution theory)就認為在日常生活中,每個人都自以為是科學家,對別人的行為或表現的原因好奇、觀察、分析、比較且驟下斷語。   
  近年來認知心理學研究顯示,人能即時處理的認識訊息有限,為避免過分操心或增加處理的效率,常用簡略的認識作用或「信手捻來的法則」(rules of thumb),處理有關人、事、物的訊息。這是一種「認識吝薔鬼模式」(cognitive miser model),常犯「偷懶」式認識作用,就是一知半解。
   社會心理學家探討的一知半解有:
(1)類型代表(representativeness):即判斷對方的類型時,根據與典型的相似度下判斷。如在校園看到穿運動服且皮膚黝黑的男老師,通常猜他是體育老師或生活輔導組長。這種判斷雖也不無道理,卻可能忽略了其他情況,犯了忽略「基本數據誤差」(base-rate fallacy)。
(2)手頭記憶(availability):憑臨時記憶或粗略思考所及,判斷事件發生的可能性。如偶然飛機失事,便誤認飛機是最危險的交通工具,忘了機車事故頻率更高。因而造成「誤信效應」(false consensus effect)。
(3)引導作用(priming):即刻收到的訊息,影響相關的回憶,即據以判斷。如剛看過恐怖電影的人,走進黑漆漆的巷弄會害怕。
   其他的一知半解如定錨作用(anchoring),指受先前事件的誤導;框架作用(framing),指受主題鋪陳方式影響;模擬作用(simulation),指受想像可能狀況的影響,這些都使人不假深思,妄下判斷,造成一知半解的情形。]
wiki上的 認知偏誤 列出100多種類型,讓我為人類的認知的正確性捏把冷汗啊…

例如某報導說,大考中心研究指出,學測入學的學生在校表現較好。這就是一種因果謬誤,我相信就像當初批評明星高中的論點一樣,我們只要讓指考比學測先實測、分發,就會得到相反的結論。

2016年12月27日 星期二

AI及自然語言處理在精神醫學上的進展

最近一篇網路文章 "在評估心理健康問題時,AI 真的要打敗人類醫生了" 介紹了一些AI及自然語言處理在精神醫學上的進展,的確令人期待。自殺的預防本身難度很高,下這篇評論有所著墨:
Large, Matthew, Christopher Ryan, and Olav Nielssen. "The validity and utility of risk assessment for inpatient suicide." Australasian Psychiatry 19.6 (2011): 507-512.
語言,尤其是所用來思考的形式,很可能與意識的形成有關。或許就像影集 Westworld 中通過Turing test的人工智慧,很快就要問世了。

2016年12月21日 星期三

在 win10 上,平行於現有 emacs 環境,安裝 spacemacs (3)--從0.105.22版更新到0.200.5

如果從2016年9月後就沒更新的話,按照官網說明要自動更新時會出現"your emacs directory is not clean"的錯誤訊息=>是假的,你眼睛業障重啊

此時請服用使用者版本的手動更新,參
https://github.com/syl20bnr/spacemacs#manual-update-on-master-branch


  1. 進入安裝目錄,通常是某個 .emacs.d 的地方
  2. git fetch
  3. git reset --hard v0.200.5

2016年12月15日 星期四

github electron套件從0.36.x更新到1.4.x的問題

大約在2016年中時,electron中原本命名為 electron-prebuilt 的諸多事物正名為 electron

所造成的問題,害我斷斷續續搞了快一整天 hahaha ,而且錯誤訊息是假的,你眼睛業障重啊沒什麼說明力

(參考討論串 https://github.com/electron/electron-quick-start/issues/30 ),解決步驟:
  1. 專案中的 package.json 中凡是有 electron-prebuilt 字樣,都要改成 electron,版本就用最新的 "^1.4.12"吧
  2. 刪掉專案目錄 node_modules ,然後 npm update 讓它全部重抓
  3. 如果是 windows 系統的話, electron.exe 現在位置變成是在 node_modules\electron\dist 下面,凡是任何環境變數、批次檔有指到electron-prebuilt 字樣的地方,都要改成 electron
20171011 更新:
全局安裝請參 https://github.com/electron/electron/issues/10604

指令為:

sudo npm install -g electron --unsafe-perm=true --allow-root

2016年12月7日 星期三

利用Google Calendar api 存取 Google 行事曆--使用nodejs

參考 [Javascript] 利用Google Calendar api 存取 Google 行事曆 以及官方說明網頁

nodejs 不同在"建立用戶端 ID"這一步,及一些衍生出來的平台問題;如果使用windows建議修改第9行如下:

var TOKEN_DIR = (/*process.env.HOME ||*/ process.env.HOMEPATH ||

這樣修改的原因是:

  1. process.env.HOME 會隨執行程式的位置而變化,你不一定會用預設的 shell(當然這有可能是你想要的效果,如果是這樣的話要知道會發生什麼事…)
  2. process.env.HOMEPATH 具有平台可攜性

2016年12月2日 星期五

以 atom 開發 node.js 的設定

atom的定位原本是個文字編輯器,要拿它來開發node.js專案至少要做到兩件事
  1. 語法提示 / autocomplete
  2. 自動呼叫 node 執行程式檔

參考 配置 Node.js 开发环境——使用Atom 是使用了 atom-ternjs 及 script 兩個 package 來解決這兩個問題。 atom-ternjs 是為了去 parse 程式碼以給出建議,script則提供立即執行並觀看結果的快速鍵。由於版本演進飛快,此網頁中提到 plugin的設定已經可以用UI來解決:



詳細的說明文件可以參考 http://ternjs.net/doc/manual.html#plugins

2016年12月1日 星期四

graphviz在atom上的編輯、檢視

javascript 就要統一地球的預言還言猶在耳,就發現…這一天好像也不遠了XD

安裝 graphviz-preview-plus 套件即可預覽、產生圖檔,它還自己挾帶 vis.js !!安裝 graphviz 都免了
(語法高亮則是安裝了 language-dot 套件)

(塊逃啦 eclipser ,atom才是王道啊…)