天天看點

gensim訓練word2vec語料庫初探

NLP技術已經非常成熟,各行各業都需要有專門的NLP技術。網上介紹gensim的材料很多,有幾種類型:

翻譯,摘錄的非原創,采用英文維基wiki語料庫的

中文訓練,但是采用的現成語料庫,比如中文維基,搜狐新聞等通用語料。

真正動起手來,還是困難重重,下面我結合實踐來介紹下怎麼訓練專業語料庫。

專業語料庫能夠識别通用語料庫中不突出的專業詞彙。

能夠高效展現專業領域的專業資訊相關度,用于問答系統的歸一化,對話系統的專家庫等方面。

1.語料準備,語料從哪來?能做什麼用?這是基礎,不在本文講述。最近看到有人把電影字幕轉成對話語料,實在讓人大跌眼鏡。

2.語料過濾:去掉非中文字元,去掉空格,一句話一行,中文分詞,當然還可以自定義詞典。最後的list是這樣的 ['eps', 'user', 'interface', 'system']。 剩下的步驟網上到處都是,這裡不多講了。

3.開始訓練

4.及時儲存模型

5.模型加載使用

6.疊代模型,對于增量部分重複。

word2vec 的訓練和GPU無關,是CPU計算密集型應用。

經過實際的對比,采用阿裡雲2vcpu的機器和雙路16核伺服器的速度相差10倍。推薦采用實體主機。

-模型的重用

<code>model = KeyedVectors.load(MODEL_NAME)</code>

<code>model.train(sentens, total_examples=model.corpus_count, epochs=model.iter)</code>

-語料從資料庫中直接讀取,采用疊代器降低記憶體占用

-考慮重複訓練與增量訓練的可能,是以原始資料仍然儲存在資料庫中,依靠資料庫來識别增量部分。

-為了避免資料讀取後讀寫磁盤降低效率,直接通過疊代器模式把海量資料放在記憶體中。網上的例子大都是直接讀取語料檔案。

現象1:儲存的model 隻有80k, log顯示:collected 20 word types from a corpus of 371948 raw words and 10 sentences.

原因:語料輸入有問題,導緻word types 太少。

解決辦法: print 少量語料,檢查結構