即使在训练期间 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。我这样做了,但我仍然遇到这个问题。

来自 gensimDoc2Vec documentationDoc2Vec 的输入应该是 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)