1. 程式人生 > >利用中文資料跑Google開源專案word2vec

利用中文資料跑Google開源專案word2vec

一直聽說word2vec在處理詞與詞的相似度的問題上效果十分好,最近自己也上手跑了跑Google開源的程式碼( https://code.google.com/p/word2vec/ )。

1、語料

首先準備資料:採用網上部落格上推薦的全網新聞資料(SogouCA),大小為2.1G。 

從ftp上下載資料包SogouCA.tar.gz:

1 wget ftp://ftp.labs.sogou.com/Data/SogouCA/SogouCA.tar.gz --ftp-user=hebin_hit@foxmail.com --ftp-password=4FqLSYdNcrDXvNDi -r

解壓資料包:

1 gzip -d SogouCA.tar.gz
2 tar -xvf SogouCA.tar

再將生成的txt檔案歸併到SogouCA.txt中,取出其中包含content的行並轉碼,得到語料corpus.txt,大小為2.7G。

1 cat *.txt > SogouCA.txt
2 cat SogouCA.txt | iconv -f gbk -t utf-8 -c | grep "<content>" > corpus.txt

2、分詞

用 ANSJ對corpus.txt進行分詞,得到分詞結果resultbig.txt,大小為3.1G。

在分詞工具seg_tool目錄下先編譯再執行得到分詞結果resultbig.txt,內含426221個詞,次數總計572308385個。

 分詞結果:

3、用word2vec工具訓練詞向量

1 nohup ./word2vec -train resultbig.txt -output vectors.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1 &

vectors.bin是word2vec處理resultbig.txt後生成的詞的向量檔案,在實驗室的伺服器上訓練了1個半小時。

4、分析

4.1 計算相似的詞:

1 ./distance vectors.bin

 ./distance可以看成計算詞與詞之間的距離,把詞看成向量空間上的一個點,distance看成向量空間上點與點的距離。

下面是一些例子:  

4.2 潛在的語言學規律

在對demo-analogy.sh修改後得到下面幾個例子:

法國的首都是巴黎,英國的首都是倫敦, vector("法國") - vector("巴黎) + vector("英國") --> vector("倫敦")"

4.3 聚類

將經過分詞後的語料resultbig.txt中的詞聚類並按照類別排序:

1 nohup ./word2vec -train resultbig.txt -output classes.txt -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -classes 500  &
2 sort classes.txt -k 2 -n > classes_sorted_sogouca.txt

例如:

4.4 短語分析

先利用經過分詞的語料resultbig.txt中得出包含詞和短語的檔案sogouca_phrase.txt,再訓練該檔案中詞與短語的向量表示。

1 ./word2phrase -train resultbig.txt -output sogouca_phrase.txt -threshold 500 -debug 2
2 ./word2vec -train sogouca_phrase.txt -output vectors_sogouca_phrase.bin -cbow 0 -size 300 -window 10 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1

下面是幾個計算相似度的例子:

5、參考連結 :

1. word2vec:Tool for computing continuous distributed representations of words, https://code.google.com/p/word2vec/

6、後續準備仔細閱讀的文獻:

[4] Collobert R, Weston J, Bottou L, et al. Natural language processing (almost) from scratch[J] . The Journal of Machine Learning Research, 2011, 12: 2493-2537.