Word2vec 使用總結

word2vec是google 推出的做詞嵌入(word embedding)的開源工具。 簡單的說,它在給定的語料庫上訓練一個模型,然後會輸出所有出現在語料庫上的單詞的向量表示,這個向量稱爲"word embedding"。基於這個向量表示,可以計算詞與詞之間的關係,例如相似性(同義詞等),語義關聯性(中國 - 北京 = 英國 - 倫敦)等。NLP中傳統的詞表示方法是 one-hot representation, 即把每個單詞表示成dim維的稀疏向量,dim等於詞彙量的大小。這個稀疏向量只有一個維度(該單詞的index)上是1,其餘全是0。這個表示方法使得單詞之間是孤立的。 word embedding則是把單詞的表示降維到n維的稠密向量,n<<dim。

本文是對word2vec工具使用過程的整理與總結,方便大家儘快上手。本文分別對英文和中文兩種語料處理爲例。

1、word2vec 源碼

        Google Code 提供的 word2vec 可以通過 SVN 下載,

        地址爲:http://word2vec.googlecode.com/svn/trunk/

2、環境

       編譯和運行都需要在 linux 系統中進行; 我的系統是Ubuntu16.04。

3、編譯

       (1)cd 進入 word2vec 的代碼目錄;

       (2)直接輸入: make,然後回車即開始編譯,完成後目錄中多出幾個沒有後綴的文件, 即爲編譯後的程序;

4、下載訓練數據(英文語料)

       text8:下載地址:http://mattmahoney.net/dc/text8.zip

       直接解壓到當前文件夾,text8 數據文件與程序在同一目錄。

5、訓練

       訓練 wordvector 一般要指定向量的維度,可以使用默認值:200

       編輯 demo-word.sh

        原文件中的腳本如下:

         make
        if [ ! -e text8 ]; then
        wget http://mattmahoney.net/dc/text8.zip -O text8.gz
        gzip -d text8.gz -f
        fi
        time ./word2vec -train text8 -output vectors.txt -cbow 0 -size 200 -window 5 -negative 0 -hs
        1 -sample 1e-3 -threads 12 -binary 0 -iter 20


        保存後,就可以在命令行下運行了:>sh demo-word.sh

        等待訓練完成,就可以的到訓練好的詞向量 vectors.txt 。


5、參數介紹

       -train text8  表示在指定的語料庫 text8 上訓練模型

       -output vectors.txt   表示訓練得到詞向量的結果

       -cbow 0   表示使用skip-gram模型,設置 1 表示使用 CBOW 模型

       -size 200   表示訓練詞向量的維度

       -window 5   表示訓練窗口大小爲5,即考慮一個單詞的前5個單詞和後5個單詞

       -negative 0 -hs 1  表示是使用negative sample 還是使用HS 算法,在此使用的 HS 算法

       -sample 1e-3   採用的閥值

       -threads 12   線程數

       -binary 0  表示輸出爲文本格式,設置爲 1 輸出保存爲二進制形式

         -iter 20   表示迭代次數


 6、訓練中文語料

我用的是商品點評的語料,處理了一份中文wiki語料庫,已經完成格式化、繁體轉簡體和分詞的過程,下載頁面: http://pan.baidu.com/s/1jHZCvvo       文件名爲:wiki_chinese_preprocessed.simplied.txt

對於中文語料,第一步需要分詞。現成的工具很多,我使用的 jieba 分詞。感覺效果還挺不錯的。

分完詞後,把語料庫整理成Word2vec的輸入格式。這個格式很簡單,單詞之間用空格隔開就行了。 word2vec 把一個單詞的前面和後面的k個單詞作爲context訓練, 其中會自動把換行符替換成 </s> ,也就是句子分隔符。

編輯 demo-word.sh

        time ./word2vec -train wiki_chinese_preprocessed.simplied.txt -output wiki_vectors.txt -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 0 -iter 20

保存後,就可以在命令行下運行了:>sh demo-word.sh

漫長的訓練已經開始了。。。。1G的語料大概需要兩個小時能訓練完吧!!!

。。。。

。。。。

訓練完成後的到  wiki_vectors.txt  詞向量文件

 

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