Google開源word2vec,文字相似度計算工具
谷歌已經使用Deep Learning技術開發了許多新方法來解析語言,目前,谷歌開源了一款基於Deep Learning的學習工具——word2vec,這是首款面向大眾的Deep Learning學習工具。
word2vec(word to vector)顧名思義,這是一個將單詞轉換成向量形式的工具。通過轉換,可以把對文字內容的處理簡化為向量空間中的向量運算,計算出向量空間上的相似度,來表示文字語義上的相似度。
word2vec為計算向量詞提供了一種有效的連續詞袋(bag-of-words)和skip-gram架構實現,word2vec遵循Apache License 2.0開源協議。
如何轉換?
word2vec主要是將文字語料庫轉換成詞向量。它會先從訓練文字資料中構建一個詞彙,然後獲取向量表示詞,由此產生的詞向量可以作為某項功能用在許多自然語言處理和機器學習應用中。
在舉例子之前,引入餘弦距離(Cosine distance)這個概念(摘自維基百科):
通過測量兩個向量內積空間的夾角的餘弦值來度量它們之間的相似性。0度角的餘弦值是1,而其他任何角度的餘弦值都不大於1;並且其最小值是-1。從而兩個向量之間的角度的餘弦值確定兩個向量是否大致指向相同的方向。兩個向量有相同的指向時,餘弦相似度的值為1;兩個向量夾角為90°時,餘弦相似度的值為0;兩個向量指向完全相反的方向時,餘弦相似度的值為-1。在比較過程中,向量的規模大小不予考慮,僅僅考慮到向量的指向方向。餘弦相似度通常用於兩個向量的夾角小於90°之內,因此餘弦相似度的值為0到1之間。
然後可以通過distance工具根據轉換後的向量計算出餘弦距離,來表示向量(詞語)的相似度。例如,你輸入“france”,distance工具會計算並顯示與“france”距離最相近的詞,如下:
Word Cosine distance ------------------------------------------- spain 0.678515 belgium 0.665923 netherlands 0.652428 italy 0.633130 switzerland 0.622323 luxembourg 0.610033 portugal 0.577154 russia 0.571507 germany 0.563291 catalonia 0.534176
在word2vec中主要有兩種學習演算法:連續詞袋和連續skip-gram,switch-cbow允許使用者選擇學習演算法。這兩種演算法有助於預測其它句子的詞彙。
從詞轉換到句子或更長的文字
在一些特定的應用程式中,它還可以用於多個詞彙,例如,“san francisco”,這樣它就會通過預先處理資料集,讓其形成句子,找到與“san francisco”餘弦距離最近的內容:
Word Cosine distance ------------------------------------------- los_angeles 0.666175 golden_gate 0.571522 oakland 0.557521 california 0.554623 san_diego 0.534939 pasadena 0.519115 seattle 0.512098 taiko 0.507570 houston 0.499762 chicago_illinois 0.491598
如何衡量詞向量質量
可能影響到詞向量質量的幾個因素:
- 訓練資料的數量和質量
- 向量的大小
- 訓練演算法
向量的質量對任何一個應用程式都非常重要,然而,根據複雜的任務來探索不同的超引數設定可能會過於苛刻。因此,我們設計了簡單的測試集,來快速評估向量詞的質量。
詞聚類(Word clustering)
詞向量也可以從巨大的資料集中匯出詞類,通過執行詞向量頂部的K-means聚類即可實現,指令碼演示地址:./demo-classes.sh,最後輸出的是一個詞彙表文件和與之對應的類ID標識,例如:
carnivores 234 carnivorous 234 cetaceans 234 cormorant 234 coyotes 234 crocodile 234 crocodiles 234 crustaceans 234 cultivated 234 danios 234 . . . acceptance 412 argue 412 argues 412 arguing 412 argument 412 arguments 412 belief 412 believe 412 challenge 412 claim 412
效能
在多核CPU上(使用開關‘-threads N’),通過使用並行訓練可以顯著提高訓練速度,超引數選擇對效能也至關重要(包括速度和準確率),主要選擇有:
- 架構:skip-gram(慢、對罕見字有利)vs CBOW(快)
- 訓練演算法:分層softmax(對罕見字有利)vs 負取樣(對常見詞和低緯向量有利)
- 欠取樣頻繁詞:可以提高結果的準確性和速度(適用範圍1e-3到1e-5)
- 維度詞向量:通常情況下表現都很好
- 文字(window)大小:skip-gram通常在10附近,CBOW通常在5附近
去哪裡收集訓練資料
隨著訓練資料的增加,詞向量質量也顯著提升,如果以研究為目的的,可以考慮線上資料集:
快速入門
- 執行“make”編譯word2vec工具
- 執行demo指令碼:./demo-word.sh and ./demo-phrases.sh