即使在训练期间 min_count 设置为 1,Doc2Vec 模型中的 KeyError
KeyError in Doc2Vec model even when min_count set to 1 during training
我正在使用 doc2vec 和大约 100 万个标题的语料库。为了训练语料库,我使用以下代码:
model = gensim.models.Doc2Vec(min_count=1, window=10, size=300, workers=4)
model.build_vocab(corpus)
for epoch in range(10):
model.train(corpus)
一切似乎都能正常训练,我可以使用 titles.most_similar 推断出一个向量。
但是,当我尝试使用向量时遇到了问题。似乎最终模型中缺少一些文件!即:
model.docvecs['SENT_157000']
KeyError: 'SENT_157000'
我查看了 gensim 论坛和 Whosebug,我能找到的唯一建议是确保 min_count = 1。我这样做了,但我仍然遇到这个问题。
来自 gensim
的 Doc2Vec
documentation,Doc2Vec
的输入应该是 LabeledSentence
个对象的迭代器。
您的corpus
变量需要按如下方式构造:
class LabeledLineSentence(object):
def __init__(self, filename):
self.filename = filename
def __iter__(self):
for uid, line in enumerate(open(self.filename)):
yield LabeledSentence(words=line.split(), labels=['SENT_%s' % uid])
corpus = LabeledLineSentence(filename)
接着是
model.train(corpus)
我正在使用 doc2vec 和大约 100 万个标题的语料库。为了训练语料库,我使用以下代码:
model = gensim.models.Doc2Vec(min_count=1, window=10, size=300, workers=4)
model.build_vocab(corpus)
for epoch in range(10):
model.train(corpus)
一切似乎都能正常训练,我可以使用 titles.most_similar 推断出一个向量。
但是,当我尝试使用向量时遇到了问题。似乎最终模型中缺少一些文件!即:
model.docvecs['SENT_157000']
KeyError: 'SENT_157000'
我查看了 gensim 论坛和 Whosebug,我能找到的唯一建议是确保 min_count = 1。我这样做了,但我仍然遇到这个问题。
来自 gensim
的 Doc2Vec
documentation,Doc2Vec
的输入应该是 LabeledSentence
个对象的迭代器。
您的corpus
变量需要按如下方式构造:
class LabeledLineSentence(object):
def __init__(self, filename):
self.filename = filename
def __iter__(self):
for uid, line in enumerate(open(self.filename)):
yield LabeledSentence(words=line.split(), labels=['SENT_%s' % uid])
corpus = LabeledLineSentence(filename)
接着是
model.train(corpus)