Windows下使用Word2vec繼續詞向量訓練

轉載自:http://blog.csdn.net/heyongluoyao8/article/details/43488765

word2vec是Google在2013年提出的一款開源工具,其是一個Deep Learning(深度學習)模型(實際上該模型層次較淺,嚴格上還不能算是深層模型,如果word2vec上層再套一層與具體應用相關的輸出層,如Softmax,便更像是一個深層模型),它將詞表徵成實數值向量,採用CBOW(Continuous Bag-Of-Words Model,連續詞袋模型)和Skip-Gram(Continuous Skip-GramModel)兩種模型。具體原理,網上有很多。
本文是在windows下使用word2vec求詞向量(Linux環境下,網上有很多,就不再累贅)
1. 因爲word2vec需要linux環境,所有首先在windows下安裝linux環境模擬器,推薦cygwin(下載地址:
http://www.cygwin.com/install.html)在安裝時注意:因爲默認安裝下沒有安裝make命令工具(後面要用到),所以在安裝時,選擇package時,需要選擇Devel與Utils模塊,如下圖所示:

wKioL1g1hyySr4V8AAEoEbJY0qA316.png-wh_50

2. 下載word2vec,下載地址爲:http://word2vec.googlecode.com/svn/trunk/
將下載的所有文件放入word2vec文件夾下。
補充:
word2vec的原版代碼是google code上的,也有改寫的其他兩個版本:
(1)
C++11版本:(jdeng/word2vec) 下載地址: https://github.com/jdeng/word2vec
該代碼可以在windows下編譯運行,但需要編譯器支持c++11; 已使用VS2013編譯通過並運行:運行vs2013命令提示符,cd進入代碼目錄,輸入cl main.cc,然後編譯即可;訓練命令直接是main,
測試命令是“main test”。 運行和測試同樣需要text8、questions-words.txt文件。 該版本輸出的model文件爲文本格式。
(2)
Java版本:下載地址:https://github.com/NLPchina/Word2VEC_java
經測試,OK。 也可以使用該java代碼加載上述c++11版本的model,但需要自行添加load的代碼。
3. 下載訓練數據
下面提供一些網上能下載到的中文的好語料,供研究人員學習使用。
(1).中科院自動化所的中英文新聞語料庫 http://www.datatang.com/data/13484
中文新聞分類語料庫從鳳凰、新浪、網易、騰訊等版面蒐集。英語新聞分類語料庫爲Reuters-21578的ModApte版本。
(2).搜狗的中文新聞語料庫 http://www.sogou.com/labs/dl/c.html
包括搜狐的大量新聞語料與對應的分類信息。有不同大小的版本可以下載。
(3).李榮陸老師的中文語料庫 http://www.datatang.com/data/11968
壓縮後有240M大小
(4).譚鬆波老師的中文文本分類語料 http://www.datatang.com/data/11970
不僅包含大的分類,例如經濟、運動等等,每個大類下面還包含具體的小類,例如運動包含籃球、足球等等。能夠作爲層次分類的語料庫,非常實用。這個網址免積分(譚鬆波老師的主頁):http://www.searchforum.org.cn/tansongbo/corpus1.
PHP
(5).網易分類文本數據 http://www.datatang.com/data/11965
包含運動、汽車等六大類的4000條文本數據。
(6).中文文本分類語料 http://www.datatang.com/data/11963
包含Arts、Literature等類別的語料文本。
(7).更全的搜狗文本分類語料 http://www.sogou.com/labs/dl/c.html
搜狗實驗室發佈的文本分類語料,有不同大小的數據版本供免費下載
(8).2002年中文網頁分類訓練集 http://www.datatang.com/data/15021
2002年秋天北京大學網絡與分佈式實驗室天網小組通過動員不同專業的幾十個學生,人工選取形成了一個全新的基於層次模型的大規模中文網頁樣本集。它包括11678個訓練網頁實例和3630個測試網頁實例,分佈在11個大類別中。
4. 將預料庫進行分詞並去掉停用詞,可以使用的分詞工具有:
StandardAnalyzer(中英文)、ChineseAnalyzer(中文)、CJKAnalyzer(中英文)、IKAnalyzer(中英文,兼容韓文,日文)、paoding(中文)、MMAnalyzer(中英文)、MMSeg4j(中英文)、imdict(中英文)、NLTK(中英文)、Jieba(中英文),這幾種分詞工具的區別,可以參加:http://blog.csdn
.NET/wauwa/article/details/7865526。本文使用Jieba分詞工具。
5. 分詞之後,所有的詞以空格鍵或tab或,隔開寫入一個文件中,如all_words中,並將該文件拷貝到word2vec目錄中。
6. 啓動cygwin,使用cd命令進入word2vec文件夾下,輸入make命令,報如下錯誤
gcc word2vec.c -o word2vec -lm -pthread -O3 -march=native -Wall -funroll-loops -Wno-unused-result
gcc: 錯誤:unrecognized command line option ‘-pthread’
makefile:8: recipe for target 'word2vec' failed
make: *** [word2vec] Error 1

wKioL1g1h5mQk_irAAAueUGyJg4061.png-wh_50

說明cygwin中的gcc不支持pthread多線程命令,解決方法是將word2vec目錄下的makefile文件:
CFLAGS = -lm -pthread -O3 -march=native -Wall -funroll-loops -Wno-unused-result
這一行註釋掉。

wKioL1g1h5qje56wAAB8vQZFGwM068.png-wh_50

7. 將你自己的數據(可以打包成壓縮文件),放入word2vec目錄下,修改demo-word.sh文件,該文件默認情況下使用自帶的text8數據進行訓練,如果訓練數據不存在,則會進行下載,因爲需要使用自己的數據進行訓練,所以可以將
if [ ! -e text8.zip ]; then
wget http://mattmahoney
.Net/dc/text8.zip -O text8.gz
gzip -d text8.gz -f
fi
進行註釋,並將
time ./word2vec -train text8 -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 0 -iter 15
./distance vectors.bin

wKioL1g1h-qC0i0MAACd08Nt2eQ374.png-wh_50

中的text8更改成自己的訓練數據名稱all_words,如果你的數據有後綴,記得帶後綴。
參數解釋:
-train 訓練數據
-output 結果輸入文件,即每個詞的向量
-cbow 是否使用cbow模型,0表示使用skip-gram模型,1表示使用cbow模型,默認情況下是skip-gram模型,cbow模型快一些,skip-gram模型效果好一些
-size 表示輸出的詞向量維數
-window 爲訓練的窗口大小,8表示每個詞考慮前8個詞與後8個詞(實際代碼中還有一個隨機選窗口的過程,窗口大小<=5)
-negative 表示是否使用NEG方,0表示不使用,其它的值目前還不是很清楚
-hs 是否使用HS方法,0表示不使用,1表示使用
-sample 表示 採樣的閾值,如果一個詞在訓練樣本中出現的頻率越大,那麼就越會被採樣
-binary 表示輸出的結果文件是否採用二進制存儲,0表示不使用(即普通的文本存儲,可以打開查看),1表示使用,即vectors.bin的存儲類型
-------------------------------------
除了上面所講的參數,還有:
-alpha 表示 學習速率
-min-count 表示設置最低頻率,默認爲5,如果一個詞語在文檔中出現的次數小於該閾值,那麼該詞就會被捨棄
-classes 表示詞聚類簇的個數,從相關源碼中可以得出該聚類是採用k-means
8. 運行命令sh demo-word.sh,等待訓練完成,如下圖:

wKiom1g1h-rBPuQqAAA0Scv75dM705.png-wh_50

9. 模型訓練完成之後,得到了vectors.bin這個詞向量文件,文件的存儲類型由binary參數覺得,如果爲0,便可以直接用編輯器打開,進行查看,向量維度由size參數決定。於是我們可以使用這個向量文件進一步進行自然語言處理了。比如求相似詞,關鍵詞聚類與分類等。其中word2vec中提供了distance求詞的cosine相似度,並排序。也可以在訓練時,設置-classes參數來指定聚類的簇個數,使用kmeans進行聚類。還可以繼續別的操作,可以參見http://blog.csdn.net/zhaoxinfan/article/details/11640573

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章