Doc2Vec模型中的KeyError,即使在训练期间min_count设置为1也是如此

时间:2016-03-25 16:25:18

标签: python gensim word2vec

我使用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论坛和stackoverflow,我能找到的唯一建议就是确保min_count = 1.我这样做但我仍然遇到这个问题。

1 个答案:

答案 0 :(得分:0)

gensim' Doc2Vec 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)