基於word2vec使用wiki中文語料庫實現詞向量訓練模型--2019最新

目錄

一、數據獲取

二、將xml格式數據轉爲txt

三、繁體轉爲簡體

方法1---自己使用opencc庫手動了1個轉換程序,pip install opencc進行安裝

方法2---網上有一個exe應用程序進行轉換,詳情見:https://bintray.com/package/files/byvoid/opencc/OpenCC  

四、分詞

五、Word2Vec模型訓練

六、Word2Vec模型檢測


一、數據獲取

使用的語料庫是wiki百科的中文語料庫

下載地址:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2  

上述地址下載較慢,我分享一個我已經下載好的文件(截止2019年7月11日)

下載地址:https://pan.baidu.com/s/1SAXNFcr4hQSZvcMi914_kQ , 提取碼:kt20

二、將xml格式數據轉爲txt

使用了gensim庫中的維基百科處理類WikiCorpus,該類中的get_texts方法原文件中的文章轉化爲一個數組,其中每一個元素對應着原文件中的一篇文章。然後通過for循環便可以將其中的每一篇文章讀出,然後進行保存。

1_process.py

 當時的轉換過程,大概需要了30分鐘吧!

三、繁體轉爲簡體

由於維基內有些內容是繁體內容,需要進行繁體--簡體轉換。

方法1---自己使用opencc庫手動了1個轉換程序,pip install opencc進行安裝

opencc庫的繁簡轉換​​​​​

但是運行到130000+文章左右時出現了錯誤:(其實程序是對的,由於txt文件存在格式問題,後面詳解!)

UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 6598-6599: invalid continuation byte

但是我的所有文本操作都是“encoding="utf8"還是出現上述問題。

方法2---網上有一個exe應用程序進行轉換,詳情見:https://bintray.com/package/files/byvoid/opencc/OpenCC  

進入解壓後的opencc的目錄(opencc-1.0.1-win32),雙擊opencc.exe文件。在當前目錄打開dos窗口(Shift+鼠標右鍵->在此處打開命令窗口),輸入如下命令行:

opencc -i wiki.zh.txt -o wiki.zh.simp.txt -c t2s.json

(wiki.zh.txt簡繁混合文本,wiki.zh.simp.txt轉換後的純簡體文本,t2s爲繁體轉簡體,s2t爲簡體轉繁體)

記事本無法打開這麼大的txt文件,所以用notepad++打開,或者寫幾行代碼打開:

 

四、分詞

對於中文來說,分詞是必須要經過的一步處理,下面就需要進行分詞操作。在這裏使用了大名鼎鼎的jieba庫。調用其中的cut方法即可。順便使用停用詞進行了去除停用詞!拿到了分詞後的文件,在一般的NLP處理中,會需要去停用詞。由於word2vec的算法依賴於上下文,而上下文有可能就是停詞。因此對於word2vec,我們可以不用去停詞。所以需要依據自己的需求,確定是否進行停用詞!

2_jieba_participle.py

但是運行到130000+文章左右時出現了錯誤:

UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 6598-6599: invalid continuation byte

但是我的所有文本操作都是“encoding="utf8"還是出現上述問題!!!好啦,現在就揭曉出錯的原因是什麼?

由於程序在寫入txt文件的時候,存在類似於火星文的符號存在,所以這些符號會導致以'utf-8' 讀取文件出現錯誤!

解決方法:

試了網上n種方法,都不可以,所以勞動人民最偉大!用notepad++打開“wiki.zh.txt”(wiki的txt文件),全選進行復制(或許會有點卡,做好準備!),新建一個txt文本(名字隨意!),另存爲的時候注意按照下圖的方式進行存儲!然後就是上面手動的繁簡轉換程序就可以正常運行了(也可以使用exe應用程序進行!),然後jieba分詞就可以完美運行,但是有點心理準備,這個結巴分詞的過程非常的緩慢!

分詞的結果如下(貌似我的停用詞好像不是很好!後續繼續改進吧!)

分詞結果

 

五、Word2Vec模型訓練

分好詞的文檔即可進行word2vec詞向量模型的訓練了,文檔較大,訓練了應該有1個小時左右!

3_train_word2vec_model.py

代碼運行完成後得到如下四個文件,其中wiki.zh.text.model是建好的模型,wiki.zh.text.vector是詞向量。

訓練結果

六、Word2Vec模型檢測

模型訓練好後,來測試模型的結果。

4_model_match.py

 

上述使用了gensim庫,gensim是一個python的自然語言處理庫,能夠將文檔根據TF-IDF, LDA, LSI 等模型轉化成向量模式,以便進行進一步的處理。此外,gensim還實現了word2vec功能,能夠將單詞轉化爲詞向量。

相關度計算

 

計算出給定詞彙中最不匹配的一個

 

計算詞語之間相似度​​​​​​

 

 

推薦介紹gensim的博客:

https://blog.csdn.net/u014595019/article/details/52218249#commentBox

https://blog.csdn.net/l7h9ja4/article/details/80220939#commentBox

這是對於word2vec方法以及模型訓練和檢驗的第一篇文章,其中關於文本2向量的有關知識進行了回顧,上面介紹gensim庫的博客也對相關背景知識在其博客內詳細說明了。

以上學習過程和代碼,感謝兩位博主:

liuwenqiang1202:https://github.com/liuwenqiang1202

AimeeLee77:https://github.com/AimeeLee77

代碼及相關資料:

鏈接:https://pan.baidu.com/s/1JEvadkEflY1FrltWImw3BA  , 提取碼:u541 

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