word2vec 入門(二)使用教程篇


word2vec

要解決問題: 在神經網絡中學習將word映射成連續(高維)向量,這樣通過訓練,就可以把對文本內容的處理簡化為K維向量空間中向量運算,而向量空間上的相似度可以用來表示文本語義上的相似度。

一般來說, word2vec輸出的詞向量可以被用來做很多 NLP 相關的工作,比如聚類、找同義詞、詞性分析等等。另外還有其向量的加法組合算法。官網上的例子是 :

vector('Paris') - vector('France') +
vector('Italy') ≈vector('Rome'), vector('king') - vector('man') + vector('woman') ≈
vector('queen')

但其實word2vec也只是少量的例子完美符合這種加減法操作,並不是所有的 case 都滿足。

快速入門

1、從http://word2vec.googlecode.com/svn/trunk/ 下載所有相關代碼:
一種方式是使用svn Checkout,可加代理進行check。
另一種就是export to github,然后再github上下載,我選擇第二種方式下載。

2、運行make編譯word2vec工具:(如果其中makefile文件后有.txt后綴,將其去掉)在當前目錄下執行make進行編譯,生成可執行文件(編譯過程中報出很出Warning,暫且不管);

3、運行示例腳本:./demo-word.sh 看一下./demo-word.sh的內容,大致執行了3步操作

  • 從http://mattmahoney.net/dc/text8.zip 下載了一個文件text8 ( 一個解壓后不到100M的txt文件,可自己下載並解壓放到同級目錄下);
  • 使用文件text8進行訓練,訓練過程比較長;
  • 執行word2vec生成詞向量到 vectors.bin文件中,(速度比較快,幾分鍾的事情)

在demo-word.sh中有如下命令

運行結果如圖:

time ./word2vec -train text8 -output vectors.bin -cbow 1 -size 200 -window 8 -negative 0 -hs 1 -sample 1e-4 -threads 20 -binary 1 -iter 15

以上命令

-train text8 表示的是輸入文件是text8

-output vectors.bin 輸出文件是vectors.bin

-cbow 1 表示使用cbow模型,默認為Skip-Gram模型

-size 200 每個單詞的向量維度是200

-window 8 訓練的窗口大小為5就是考慮一個詞前八個和后八個詞語(實際代碼中還有一個隨機選窗口的過程,窗口大小小於等於8)

-negative 0 -hs 1不使用NEG方法,使用HS方法。-

sampe指的是采樣的閾值,如果一個詞語在訓練樣本中出現的頻率越大,那么就越會被采樣。

-binary為1指的是結果二進制存儲,為0是普通存儲(普通存儲的時候是可以打開看到詞語和對應的向量的)

-iter 15 迭代次數

demo-word.sh中最后一行命令是./distance vectors.bin

該命令是計算距離的命令,可計算與每個詞最接近的詞了:

word2vec還有幾個參數對我們比較有用比如-alpha設置學習速率,默認的為0.025. –min-count設置最低頻率,默認是5,如果一個詞語在文檔中出現的次數小於5,那么就會丟棄。-classes設置聚類個數,看了一下源碼用的是k-means聚類的方法。要注意-threads 20 線程數也會對結果產生影響。

  • 架構:skip-gram(慢、對罕見字有利)vs CBOW(快)
  • 訓練算法:分層softmax(對罕見字有利)vs 負采樣(對常見詞和低緯向量有利)
  • 欠采樣頻繁詞:可以提高結果的准確性和速度(適用范圍1e-3到1e-5)
  • 文本(window)大小:skip-gram通常在10附近,CBOW通常在5附近

4、運行命令 ./demo-phrases.sh:查看該腳本內容,主要執行以下步驟:

最后一行命令./distance vectors-phrase.bin,一個計算word相似度的demo中去,結果如下:

結果好壞跟訓練詞庫有關。

番外:
如果需要中文語料庫,推薦使用維基的或者搜狗(http://www.sogou.com/labs/dl/ca.html),中文分詞可使用結巴分詞,我覺得很好用。然后進行訓練,因為英文不用分詞,所以上述過程不涉及分詞。

本文主要偏應用,講解一個例子,便於對word2vec有一個初步了解,后續再更原理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM