我需要计算被标记的句子的每个单词的单词向量,如下所示:
['my', 'aunt', 'give', 'me', 'a', 'teddy', 'ruxpin']. 如果我使用的是经过预先训练的fastText嵌入: facebook的cc.en.300.bin.gz。我可以挺过去的。但是,当我使用GoogleNews中的word2vec时,它会返回一个InvalidKey错误。我的问题是,我们如何计算单词向量,即OOV?我在网上搜索,什么也找不到。当然,要做到这一点,就要删除谷歌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返回一个错误。
任何帮助都是非常感激的。
发布于 2019-09-16 14:05:43
太棒了!非常感谢。
def get_vectorOOV(s):
try:
return np.array(model.wv.get_vector(s))
except KeyError:
return np.zeros((300,))发布于 2019-09-16 05:12:49
如果找不到词汇表,请用相同大小的零向量初始化它们(Google word2vec应该是300个维度的向量):
try:
word_vector = model.wv.get_vector('your_word_here')
except KeyError:
word_vector = np.zeros((300,))发布于 2019-09-16 18:41:30
GoogleNews向量集是单词到向量的简单映射。它中没有为未知单词合成向量的工具(或者创建它的算法)。
(类似地,如果您将一个简单的向量集作为一个gensim加载到KeyedVectors中,那么就没有机会在结果对象上运行train()了,就像您在问题代码中显示的那样。它不是一个完全可训练的模型,只是向量的集合。)
您可以使用in关键字检查一个单词是否可用。正如其他答案所指出的,然后您可以选择使用一些插入值(如全零向量)来处理这些单词。
但通常最好完全忽略这些词--假装它们甚至不在你的文本中。(相反,使用零向量,然后将零矢量输入到系统的其他部分,就会使那些未知的词(本质上是)稀释了其他邻近的单词向量的影响,而这通常不是你想要的。)
https://stackoverflow.com/questions/57950325
复制相似问题