[Word2Vec] [gensim]使用参数min_count处理词汇中的遗漏单词

关于此主题,有人提出了类似的问题,但到目前为止,我对这些答复并不十分满意。请原谅我。

我正在使用python库Word2Vec中的函数gensim

我的问题是,只要将参数min_count设置为大于1,我就不能在语料库的每个单词上运行模型。有人会说这是逻辑原因,因为我选择忽略仅出现一次的单词。但是该函数的行为很奇怪,因为它给出了一个错误,提示单词'blabla'不在词汇表中 ,而这正是我想要的(我希望这个单词成为词汇量之外)。

我可以想象这不是很清楚,然后在下面找到一个可重现的示例:

import gensim
from gensim.models import Word2Vec

# My corpus
corpus=[["paris","not","great","city"],["praha","better","than","paris"],"country"]]

# Load a pre-trained model - The orignal one based on google news 
model_google = gensim.models.KeyedVectors.load_word2vec_format(r'GoogleNews-vectors-negative300.bin',binary=True)

# Initializing our model and upgrading it with Google's 
my_model = Word2Vec(size=300,min_count=2)#with min_count=1,everything works fine
my_model.build_vocab(corpus)
total_examples = my_model.corpus_count
my_model.build_vocab([list(model_google.vocab.keys())],update=True)
my_model.intersect_word2vec_format('GoogleNews-vectors-negative300.bin',binary=True,lockf=1.0)
my_model.train(corpus,total_examples=total_examples,epochs=my_model.iter)

# Show examples
print(my_model['paris'][0:10])#works cause 'paris' is present twice
print(my_model['country'][0:10])#does not work cause 'country' appears only once

例如,您可以找到Google的模型there,但可以随意使用任何模型,也可以随意使用,这不是我的文章的重点。

如代码注释中所通知:在“巴黎”上运行模型有效,但在“国家”上无效。当然,如果我将参数min_count设置为1,一切正常。

我希望它足够清楚。

谢谢。

Scorpio_Huang 回答:[Word2Vec] [gensim]使用参数min_count处理词汇中的遗漏单词

如果您请求一个不存在的单词,应该会引发错误,因为您选择不学习稀有单词的向量,例如您的示例中的'country'。 (而且:此类带有很少示例的单词通常无法获得良好的向量,而保留它们可能会使剩余单词的向量变差,因此min_count尽可能大,甚至可能比{{1}大},通常是个好主意。)

解决方法是执行以下操作之一:

  1. 不要问不存在的单词。首先通过Python的1运算符进行检查。例如:
in
  1. 捕获错误,然后退回到缺少单词的情况下:
if 'country' in my_model:
    print(my_model['country'][0:10])
else: 
    pass  # do nothing,since `min_count=2` means there's no 'country' vector
  1. 更改为使用始终为任何单词返回内容的模型,例如try: print(my_model['country'][0:10]) except: pass # do nothing,or perhaps print an error,whatever –它将尝试使用在训练中学习到的子单词来合成未知单词的向量。 (这可能是垃圾,如果未知单词在字符和含义上与已知单词高度相似,则可能会很好,但是对于某些用途,总比没有好。)
本文链接:https://www.f2er.com/2630646.html

大家都在问