利用Python實現wiki中文語料的word2vec模型構建

本實例主要介紹的是選取wiki中文語料,并使用python完成Word2vec模型構建的實踐過程,不包含原理部分,旨在一步一步的了解自然語言處理的基本方法和步驟。文章主要包含了開發環境準備、數據的獲取、數據的預處理、模型構建和模型測試四大內容,對應的是實現模型構建的五個步驟。

一、 開發環境準備

1.1 python環境

python官網下載計算機對應的python版本,本人使用的是Python2.7.13的版本。

1.2 gensim模塊

(1)下載模塊

Word2vec需要使用第三方gensim模塊, gensim模塊依賴numpy和scipy兩個包,因此需要依次下載對應版本的numpy、scipy、gensim。下載地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/

(2)安裝模塊

下載完成后,在python安裝目錄下的Scripts目錄中執行cmd命令進行安裝。

    pip install numpy*.whl
    pip install scipy*.whl
    pip install gensim.whl
(3)驗證模塊是否安裝成功

輸入python命令進入python命令行,分別輸入*import numpy; import scipy; import gensim; *沒有報錯,即安裝成功!

二、Wiki數據獲取

2.1 Wiki中文數據的下載

到wiki官網下載中文語料,下載完成后會得到命名為zhwiki-latest-pages-articles.xml.bz2的文件,大小約為1.3G,里面是一個XML文件。
下載地址如下:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2

2.2 將XML的Wiki數據轉換為text格式

(1)python實現

編寫python程序將XML文件轉換為text格式,使用到了gensim.corpora中的WikiCorpus函數來處理維基百科的數據。python代碼實現如下所示,文件命名為1_process.py。


1_process.py--wiki文件轉換代碼
(2)運行程序文件

在代碼文件夾下運行如下cmd命令行,即可得到轉換后生成的文件wiki.zh.txt。

    D:\PyRoot\iDemo\wiki_zh>python 1_process.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.txt
(3)得到運行結果
   2017-04-18 09:24:28,901: INFO: running 1_process.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.txt
   2017-04-18 09:25:31,154: INFO: Saved 10000 articles.
   2017-04-18 09:26:21,582: INFO: Saved 20000 articles.
   2017-04-18 09:27:05,642: INFO: Saved 30000 articles.
   2017-04-18 09:27:48,917: INFO: Saved 40000 articles.
   2017-04-18 09:28:35,546: INFO: Saved 50000 articles.
   2017-04-18 09:29:21,102: INFO: Saved 60000 articles.
   2017-04-18 09:30:04,540: INFO: Saved 70000 articles.
   2017-04-18 09:30:48,022: INFO: Saved 80000 articles.
   2017-04-18 09:31:30,665: INFO: Saved 90000 articles.
   2017-04-18 09:32:17,599: INFO: Saved 100000 articles.
   2017-04-18 09:33:13,811: INFO: Saved 110000 articles.
   2017-04-18 09:34:06,316: INFO: Saved 120000 articles.
   2017-04-18 09:35:01,007: INFO: Saved 130000 articles.
   2017-04-18 09:35:52,628: INFO: Saved 140000 articles.
   2017-04-18 09:36:47,148: INFO: Saved 150000 articles.
   2017-04-18 09:37:41,137: INFO: Saved 160000 articles.
   2017-04-18 09:38:33,684: INFO: Saved 170000 articles.
   2017-04-18 09:39:37,957: INFO: Saved 180000 articles.
   2017-04-18 09:43:36,299: INFO: Saved 190000 articles.
   2017-04-18 09:45:21,509: INFO: Saved 200000 articles.
   2017-04-18 09:46:40,865: INFO: Saved 210000 articles.
   2017-04-18 09:47:55,453: INFO: Saved 220000 articles.
   2017-04-18 09:49:07,835: INFO: Saved 230000 articles.
   2017-04-18 09:50:27,562: INFO: Saved 240000 articles.
   2017-04-18 09:51:38,755: INFO: Saved 250000 articles.
   2017-04-18 09:52:50,240: INFO: Saved 260000 articles.
   2017-04-18 09:53:57,526: INFO: Saved 270000 articles.
   2017-04-18 09:55:01,720: INFO: Saved 280000 articles.
   2017-04-18 09:55:22,565: INFO: finished iterating over Wikipedia corpus of 28285 5 documents with 63427579 positions (total 2908316 articles, 75814559 positions before pruning articles shorter than 50 words)
   2017-04-18 09:55:22,568: INFO: Finished Saved 282855 articles.

由結果可知,31分鐘運行完成282855篇文章,得到一個931M的txt文件。

三、Wiki數據預處理

3.1 中文繁體替換成簡體

Wiki中文語料中包含了很多繁體字,需要轉成簡體字再進行處理,這里使用到了OpenCC工具進行轉換。

(1)安裝OpenCC

到以下鏈接地址下載對應版本的OpenCC,本人下載的版本是opencc-1.0.1-win32。
https://bintray.com/package/files/byvoid/opencc/OpenCC
另外,資料顯示還有python版本的,使用pip install opencc-python進行安裝,未實踐不做贅述。

(2)使用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.simp.txt,即轉成了簡體的中文。

(3)結果查看

解壓后的txt有900多M,用notepad++無法打開,所以采用python自帶的IO進行讀取。Python代碼如下:

   import codecs,sys
   f = codecs.open(‘wiki.zh.simp.txt‘,‘r‘,encoding="utf8")
   line = f.readline()
   print(line)

繁體中文示例截圖如下所示:

wiki原始數據

轉換后的簡體中文截圖如下所示:

Wiki轉換后簡體數據

3.2 結巴分詞

本例中采用結巴分詞對字體簡化后的wiki中文語料數據集進行分詞,在執行代碼前需要安裝jieba模塊。由于此語料已經去除了標點符號,因此在分詞程序中無需進行清洗操作,可直接分詞。若是自己采集的數據還需進行標點符號去除和去除停用詞的操作。
Python實現代碼如下:


2_jieba_participle.py--結巴分詞代碼

代碼執行完成后得到一個1.12G大小的文檔wiki.zh.simp.seg.txt。分詞結果截圖如下所示:

Wiki結巴分詞

四、Word2Vec模型訓練

(1)word2vec模型實現

分好詞的文檔即可進行word2vec詞向量模型的訓練了。文檔較大,本人在4GWin7的電腦中報內存的錯誤,更換成8G內容的Mac后即可訓練完成,且速度很快。具體Python代碼實現如下所示,文件命名為3_train_word2vec_model.py。

3_train_word2vec_model.py--模型訓練代碼
(2)運行結果查看
   2017-05-03 21:54:14,887: INFO: training on 822697865 raw words (765330910 effective words) took 1655.2s, 462390 effective words/s
   2017-05-03 21:54:14,888: INFO: saving Word2Vec object under /Users/sy/Desktop/pyRoot/wiki_zh_vec/wiki.zh.text.model, separately None
   2017-05-03 21:54:14,888: INFO: not storing attribute syn0norm
   2017-05-03 21:54:14,889: INFO: storing np array 'syn0' to /Users/sy/Desktop/pyRoot/wiki_zh_vec/wiki.zh.text.model.wv.syn0.npy
   2017-05-03 21:54:16,505: INFO: storing np array 'syn1neg' to /Users/sy/Desktop/pyRoot/wiki_zh_vec/wiki.zh.text.model.syn1neg.npy
   2017-05-03 21:54:18,123: INFO: not storing attribute cum_table
   2017-05-03 21:54:26,542: INFO: saved /Users/sy/Desktop/pyRoot/wiki_zh_vec/wiki.zh.text.model
   2017-05-03 21:54:26,543: INFO: storing 733434x400 projection weights into /Users/sy/Desktop/pyRoot/wiki_zh_vec/wiki.zh.text.vector

摘取了最后幾行代碼運行信息,代碼運行完成后得到如下四個文件,其中wiki.zh.text.model是建好的模型,wiki.zh.text.vector是詞向量。

生成模型

五、模型測試

模型訓練好后,來測試模型的結果。Python代碼如下,文件名為4_model_match.py。

4_model_match.py--模型測試代碼

運行文件得到結果,即可查看給定詞的相關詞。

模型匹配結果

至此,使用python對中文wiki語料的詞向量建模就全部結束了,wiki.zh.text.vector中是每個詞對應的詞向量,可以在此基礎上作文本特征的提取以及分類。所有代碼都已上傳至本人GitHub中,歡迎指教!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容