【发布时间】:2020-03-17 17:05:46
【问题描述】:
有人就这个话题提出了一些类似的问题,但我对到目前为止的回复并不满意;请先原谅我。
我正在使用python库gensim中的函数Word2Vec。
我的问题是,只要我将参数min_count 设置为大于一,我就无法在我的语料库的每个单词上运行我的模型。有人会说这是合乎逻辑的,因为我选择忽略只出现一次的单词。但是这个函数的行为很奇怪,因为它给出了一个错误,说单词'blabla'不在词汇表中,而这正是我想要的(我想要这个词词汇表之外)。
我可以想象这不是很清楚,然后在下面找到一个可重现的示例:
import gensim
from gensim.models import Word2Vec
# My corpus
corpus=[["paris","not","great","city"],
["praha","better","great","than","paris"],
["praha","not","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,但您可以随意使用任何模型或干脆不用,这不是我帖子的重点。
如代码注释中所述:在“paris”上运行模型有效,但在“country”上无效。当然,如果我将参数min_count 设置为1,一切正常。
我希望它足够清楚。
谢谢。
【问题讨论】:
-
尚不清楚您的示例代码遇到了什么错误。 (您之前显示的错误片段,关于一个词
'blabla',与您以后的代码不匹配。)您能否在问题中准确显示您遇到的错误以及完整的错误堆栈? -
而且,目前还不清楚您希望发生什么。如果您选择了一个参数来丢弃某些单词,那么在模型中访问这些单词的任何尝试(例如
my_model['country'])应该引发错误。这是正确的行为。您不应该尝试在模型中查找已知不存在(甚至可能不存在)的单词并期望没有错误。 (您可以事先检查它们是否存在,或者选择捕捉潜在错误并适应缺席。) -
另请注意:
.intersect_word2vec_format()方法有些实验性,并且从不扩展词汇表。而且我认为您的.build_vocab(…, update=True)在min_count=2时没有任何明显的效果,因为list(model_google.vocab.keys())中的每个新词都出现一次(失败min_count)。更一般地说,像这样添加一堆外部单词,然后只训练你的一小部分,不太可能有用:训练将单词移动到仅与共同训练的单词相比有意义的地方,与导入的单词进行比较 -但未经训练的话可能是荒谬的。 -
@gojomo 非常感谢您的回复。我将尝试逐个回答您的 cmets。 1 - 只需将 'blabla' 替换为 'country' 即可获得错误的核心(要让完整内容运行我分享的可重现示例,我的帖子已经太长,哈哈)。 2-最终目标是将单词转换为向量,所以如果我在包含我的单词的整个 pandas 列上运行模型,那么它会失败,因为有些单词只出现一次,从这个意义上说它是不正确的。 3-我不确定是否理解,它看起来超出了主题,但我想理解
标签: python nlp gensim word2vec word-embedding