如果輸入的詞不在詞庫中,該怎樣生成詞向量呢?我目前在做一個自動問答的小作業,想通過詞向量結合tfidf生成句向量,進而比較輸入問題和問答庫中問題的相似度,最終輸出最貼切的答案。所以就需要計算輸入的問題的句向量,也就是要計算詞向量,但是輸入的問題有些詞不在詞庫中,就會報錯not in dictionary.請問該如何解決呢?


謝邀,

不考慮增加語料和詞庫的話,詞不在詞庫中需要自己定義向量。

try:
embedding = word2vec_dict[word]
except Exception:
embedding = np.random.uniform(low_bound, high_bound, embed_size)


你可以嘗試使用fastText。

官方版本:fastText

gensim版本:gensim: topic modelling for humans

fastText使用和word2vec幾乎一樣的演算法,但由於fastText考慮了每個詞的n-gram,如果未登錄詞的n-gram在訓練數據中出現了,那這個未登錄詞依然可以獲得詞向量。

例如"word"這個詞可以由"&"的向量表示合成出來。

不知道你使用的是什麼語言,如果是中文,那n-gram的覆蓋率比英文會差一點。不過fastText默認會給完全無法檢索到的未登錄詞輸出一個統一的默認詞向量。


這個主要還是語料過少的問題,也有可能是分詞的問題。


加入一個unknow詞庫,所有未出現的詞都設置為unknow。


用fasttext訓練詞向量模型


您好,我也遇到了上述問題,想問您最終是怎麼解決的呢?希望給予回答,謝謝。


推薦閱讀:
相關文章