处理 GoogleNews-vectors-negative300.bin 中的 OOV 词
Handling OOV words in GoogleNews-vectors-negative300.bin
我需要为句子中的每个词计算词向量,如下所示:
['my', 'aunt', 'give', 'me', 'a', 'teddy', 'ruxpin'].
如果我使用预训练的 [fastText][1] 嵌入:cc.en.300.bin.gz by facebook。我可以通过 OOV。但是,当我使用来自 GoogleNews-vectors-negative300.bin 的 Google 的 word2vec 时,它 returns 一个 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 returns报错了。
任何帮助将不胜感激。
如果找不到vocab,用同样大小的零向量初始化它们(Googleword2vec应该是300维的向量):
try:
word_vector = model.wv.get_vector('your_word_here')
except KeyError:
word_vector = np.zeros((300,))
太棒了!非常感谢。
def get_vectorOOV(s):
try:
return np.array(model.wv.get_vector(s))
except KeyError:
return np.zeros((300,))
GoogleNews
向量集是单词到向量的简单映射。它(或创建它的算法)没有用于为未知单词合成向量的工具。
(类似地,如果您将普通矢量集作为 KeyedVectors
加载到 gensim
中,则没有机会在结果对象上 运行 train()
,因为你在你的问题代码中显示。它不是一个完整的可训练模型,只是向量的集合。)
您可以使用 in
关键字检查某个词是否可用。正如其他答案所指出的那样,您可以选择对此类单词使用一些插入值(例如全零向量)。
但最好完全忽略这些词 - 假装它们甚至不在您的文本中。 (改为使用零向量,然后将该零向量输入系统的其他部分,可以使这些未知词本质上 稀释 附近其他词向量的影响——这通常这不是你想要的。)
我需要为句子中的每个词计算词向量,如下所示:
['my', 'aunt', 'give', 'me', 'a', 'teddy', 'ruxpin'].
如果我使用预训练的 [fastText][1] 嵌入:cc.en.300.bin.gz by facebook。我可以通过 OOV。但是,当我使用来自 GoogleNews-vectors-negative300.bin 的 Google 的 word2vec 时,它 returns 一个 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 returns报错了。
任何帮助将不胜感激。
如果找不到vocab,用同样大小的零向量初始化它们(Googleword2vec应该是300维的向量):
try:
word_vector = model.wv.get_vector('your_word_here')
except KeyError:
word_vector = np.zeros((300,))
太棒了!非常感谢。
def get_vectorOOV(s):
try:
return np.array(model.wv.get_vector(s))
except KeyError:
return np.zeros((300,))
GoogleNews
向量集是单词到向量的简单映射。它(或创建它的算法)没有用于为未知单词合成向量的工具。
(类似地,如果您将普通矢量集作为 KeyedVectors
加载到 gensim
中,则没有机会在结果对象上 运行 train()
,因为你在你的问题代码中显示。它不是一个完整的可训练模型,只是向量的集合。)
您可以使用 in
关键字检查某个词是否可用。正如其他答案所指出的那样,您可以选择对此类单词使用一些插入值(例如全零向量)。
但最好完全忽略这些词 - 假装它们甚至不在您的文本中。 (改为使用零向量,然后将该零向量输入系统的其他部分,可以使这些未知词本质上 稀释 附近其他词向量的影响——这通常这不是你想要的。)