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 少量語料,檢查結構