Word2vec如何解決未登錄詞?
如果輸入的詞不在詞庫中,該怎樣生成詞向量呢?我目前在做一個自動問答的小作業,想通過詞向量結合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訓練詞向量模型
您好,我也遇到了上述問題,想問您最終是怎麼解決的呢?希望給予回答,謝謝。
推薦閱讀: