簡體   English   中英

在GoogleNews-vectors-negative300.bin中處理OOV單詞

[英]Handling OOV words in GoogleNews-vectors-negative300.bin

我需要為標記的句子的每個單詞計算單詞向量,如下所示:

['my', 'aunt', 'give', 'me', 'a', 'teddy', 'ruxpin']. 

如果我使用的是經過預訓練的[fastText] [1]嵌入:facebook的cc.en.300.bin.gz。 我可以通過OOV得到。 但是,當我從GoogleNews-vectors-negative300.bin使用Google的word2vec時,它將返回InvalidKey錯誤。 我的問題是如何計算OOV的單詞向量呢? 我在網上搜索,找不到任何東西。 當然,執行此操作的方法是刪除所有Google的word2vec中未列出的單詞。 但是,我注意到16134中只有5550個詞完全嵌入了單詞中。

我也做了

model = gensim.models.KeyedVectors.load_word2vec_format('/content/drive/My Drive/Colab Notebooks/GoogleNews-vectors-negative300.bin', binary=True) 
model.train(sentences_with_OOV_words)

但是,tensorflow 2返回錯誤。

任何幫助將不勝感激。

如果未找到vocab,請使用相同大小的零矢量初始化它們(Google word2vec應該是300個尺寸的矢量):

try:
    word_vector = model.wv.get_vector('your_word_here')

except KeyError:
    word_vector = np.zeros((300,))

GoogleNews向量集是單詞到向量的簡單映射。 其中沒有工具(或創建它的算法)可以為未知單詞合成矢量。

(類似地,如果您將一個簡單的向量集作為KeyedVectors加載到gensim中,就沒有機會在結果對象上運行train() ,如您的問題代碼所示。它不是一個完全可訓練的模型,而只是一個向量集合)

您可以使用in關鍵字檢查單詞是否可用。 正如其他答案所指出的那樣,您可以選擇對此類單詞使用一些插入值(例如全零向量)。

但是通常最好完全忽略這些單詞-假設它們甚至不在您的文本中。 (相反,使用零向量,然后將該零向量輸入系統的其他部分,可以使這些未知詞從本質上減輕附近其他詞向量的影響,而這通常不是您想要的。)

太棒了! 非常感謝你。

def get_vectorOOV(s):
  try:
    return np.array(model.wv.get_vector(s))
  except KeyError:
    return np.zeros((300,))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM