由于最近在研究旅游評論的極性情感分析,想利用深度學(xué)習(xí)的方式來訓(xùn)練一個情感分類模型,苦于沒有高質(zhì)量的語料庫,訓(xùn)練的模型準確率不高。于是決定自己基于維基百科語料訓(xùn)練一個wordvec2 模型,為下一步的研究工作做準備。
1、語料的下載
下載地址,下載大小大概有1.5G,里面的內(nèi)容以為xml格式保存。
2、數(shù)據(jù)的處理
1、去除原始的數(shù)據(jù)是包含了各種xml標簽,使用網(wǎng)上開源處理程序提取文本數(shù)據(jù)Wikipedia Extractor
#下載程序
git clone https://github.com/attardi/wikiextractor.git wikiextractor
#cd 到程序目錄
cd wikiextractor
#安裝程序
python setup.py install
#提取文章
python WikiExtractor.py -b 100M -o extracted /Users/yj/Desktop/學(xué)習(xí)/情感分析/wikiCorpus/wiki/zhwiki-latest-pages-articles.xml.bz2
說明 -b 后面參數(shù)為提取文件的大小,我這里設(shè)置為100M,不要設(shè)置太大不然后面的語料處理時間太長,-o extracted 后面為下載好的語料所在路徑,注意替換。
我的電腦跑了一個多小時。

跑完后就能看到處理好的語料

2、將繁體轉(zhuǎn)為簡體
使用開源工具
opencc將繁體抓我簡體,安裝命令
brew install opencc
使用opencc進行轉(zhuǎn)換,轉(zhuǎn)換命令如下
opencc -i wiki_00 -o zh_wiki_00 -c t2s.json
-i后面的參數(shù)為原始語料路徑,-o后面的參數(shù)為輸出路徑
通過轉(zhuǎn)換后格式如下
<doc id="5323477" url="https://zh.wikipedia.org/wiki?curid=5323477" title="海洋學(xué)">
海洋學(xué) 海洋學(xué)()是研究海洋的自然現(xiàn)象、性質(zhì)及其變化規(guī)律,以及開發(fā)****
</doc>
我們需要提取<doc>和</doc>之間的內(nèi)容
3、去除一些特殊符號,如(和)、{、}、《,》等
line = line.replace('(','')
line = line.replace(')','')
line = line.replace('{','')
line = line.replace('}','')
line = line.replace('[','')
line = line.replace(']','')
line = line.replace('《','')
line = line.replace('》','')
line = line.replace('「','')
line = line.replace('」','')
line = line.replace('『','')
line = line.replace('』','')
line = line.replace('“','')
line = line.replace('”','')
line = line.replace('(','')
line = line.replace(')','')
3、使用jieba中文切詞工具進行切詞
經(jīng)過處理后的數(shù)據(jù)如下面的格式
海洋學(xué) 海洋學(xué)()是研究海洋的自然現(xiàn)象、性質(zhì)及其變化規(guī)律,****
第一個詞為維基百科的詞條,后面的詞為該詞條的解釋。為了提高對詞條切詞的準確性,我們對整個詞條一空格為分隔符,提取詞條如上面的海洋學(xué),使用jiaba動態(tài)添加詞典的方法jieba.add_word(海洋學(xué)),然后對后面的解釋進行切詞,切詞后寫入文件。格式如下:
文學(xué) , 在 最 廣泛 的 意義 上 , 是 任何 單一 的 書面 作品***
每個詞語已空格為進行連接,對998616條維基百科進行切詞,并寫入文件并作為后面訓(xùn)練word2vec的語料。
4、訓(xùn)練word2vec模型
使用gensim訓(xùn)練剛剛我們處理好的語料,并保存。
from gensim.models.word2vec import Word2Vec,LineSentence
import multiprocessing
print('開始訓(xùn)練')
model = Word2Vec(LineSentence('./wikiCorpus_02.txt'),size=300,workers=multiprocessing.cpu_count())
print('結(jié)束')
model.init_sims(replace=True)
model.save('./wiki_corpus_02_predict.model')
5、測試訓(xùn)練好的模型
尋找和寶馬最相近的十個詞語
model = Word2Vec.load('./wiki_corpus_02_predict.model')
# 第一個詞的向量表示
# print(model.wv.syn0[0])
# 詞的矩陣
# print(model.wv.index2word[0])
# 1.
print(model.most_similar('寶馬'))
得到結(jié)果如下:
[('歐寶', 0.7233036756515503), ('捷豹', 0.7231091260910034), ('BMW', 0.7167201638221741), ('雪鐵龍', 0.7163304090499878), ('標致', 0.711229681968689), ('沃爾沃', 0.7081398367881775), ('奧迪', 0.7074229717254639), ('保時捷', 0.697162926197052), ('超級跑車', 0.6864667534828186), ('大眾汽車', 0.6775105595588684)]