gensim訓(xùn)練word2vec語料庫初探

NLP技術(shù)已經(jīng)非常成熟,各行各業(yè)都需要有專門的NLP技術(shù)。網(wǎng)上介紹gensim的材料很多,有幾種類型:

  • 翻譯,摘錄的非原創(chuàng),采用英文維基wiki語料庫的
  • 中文訓(xùn)練,但是采用的現(xiàn)成語料庫,比如中文維基,搜狐新聞等通用語料。
    真正動起手來,還是困難重重,下面我結(jié)合實(shí)踐來介紹下怎么訓(xùn)練專業(yè)語料庫。

為什么需要專業(yè)語料庫?

專業(yè)語料庫能夠識別通用語料庫中不突出的專業(yè)詞匯。
能夠高效體現(xiàn)專業(yè)領(lǐng)域的專業(yè)信息相關(guān)度,用于問答系統(tǒng)的歸一化,對話系統(tǒng)的專家?guī)斓确矫妗?/p>

技術(shù)路線選擇

word2vec的實(shí)現(xiàn)各個語言版本都有,語料庫的訓(xùn)練應(yīng)考慮模型通用性,便于其他語言調(diào)用。Word2Vec 究竟選擇Tensorflow還是 gensim這篇文章中介紹了我的觀點(diǎn)。

流程整體介紹

1.語料準(zhǔn)備,語料從哪來?能做什么用?這是基礎(chǔ),不在本文講述。最近看到有人把電影字幕轉(zhuǎn)成對話語料,實(shí)在讓人大跌眼鏡。
2.語料過濾:去掉非中文字符,去掉空格,一句話一行,中文分詞,當(dāng)然還可以自定義詞典。最后的list是這樣的 ['eps', 'user', 'interface', 'system']。 剩下的步驟網(wǎng)上到處都是,這里不多講了。
3.開始訓(xùn)練
4.及時保存模型
5.模型加載使用
6.迭代模型,對于增量部分重復(fù)。

硬件平臺

word2vec 的訓(xùn)練和GPU無關(guān),是CPU計算密集型應(yīng)用。
經(jīng)過實(shí)際的對比,采用阿里云2vcpu的機(jī)器和雙路16核服務(wù)器的速度相差10倍。推薦采用物理主機(jī)。

關(guān)鍵代碼

-模型的重用
'model = KeyedVectors.load(MODEL_NAME)
'model.train(sentens, total_examples=model.corpus_count, epochs=model.iter)
-語料從數(shù)據(jù)庫中直接讀取,采用迭代器降低內(nèi)存占用
'''
class sentences:
def iter(self):
texts_set = set()
docs=getDBCorupus()
i=0
if docs is None:
exit
for doc in docs:
sentence=filterCorupus(doc)
i+=1
yield sentence

word2vec = Word2Vec(sentences(), size=256, window=5, min_count=5, sg=1, hs=1, iter=10, workers=25)
'''

速度優(yōu)化

-考慮重復(fù)訓(xùn)練與增量訓(xùn)練的可能,所以原始數(shù)據(jù)仍然保存在數(shù)據(jù)庫中,依靠數(shù)據(jù)庫來識別增量部分。
-為了避免數(shù)據(jù)讀取后讀寫磁盤降低效率,直接通過迭代器模式把海量數(shù)據(jù)放在內(nèi)存中。網(wǎng)上的例子大都是直接讀取語料文件。

踩過的坑

bug1現(xiàn)象:保存的model 只有80k, log顯示:collected 20 word types from a corpus of 371948 raw words and 10 sentences.
原因:語料輸入有問題,導(dǎo)致word types 太少。
解決辦法: print 少量語料,檢查結(jié)構(gòu)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容