1. 程式人生 > >Google開源word2vec,文字相似度計算工具

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附近

去哪裡收集訓練資料

隨著訓練資料的增加,詞向量質量也顯著提升,如果以研究為目的的,可以考慮線上資料集:

快速入門

  1. 執行“make”編譯word2vec工具
  2. 執行demo指令碼:./demo-word.sh and ./demo-phrases.sh