如何提取用于Doc2Vec的单词

时间:2016-10-28 01:49:44

标签: python nlp gensim doc2vec

我正在使用推文准备Doc2Vec模型。每条推文的单词数组都被视为一个单独的文档,标记为“SENT_1”,SENT_2“等。

taggeddocs = []
for index,i in enumerate(cleaned_tweets):
    if len(i) > 2: # Non empty tweets
        sentence = TaggedDocument(words=gensim.utils.to_unicode(i).split(), tags=[u'SENT_{:d}'.format(index)])
        taggeddocs.append(sentence)

# build the model
model = gensim.models.Doc2Vec(taggeddocs, dm=0, alpha=0.025, size=20, min_alpha=0.025, min_count=0)

for epoch in range(200):
    if epoch % 20 == 0:
        print('Now training epoch %s' % epoch)
    model.train(taggeddocs)
    model.alpha -= 0.002  # decrease the learning rate
    model.min_alpha = model.alpha  # fix the learning rate, no decay

我希望找到类似于给定推文的推文,说“SENT_2”。怎么样?

我得到类似推文的标签:

sims = model.docvecs.most_similar('SENT_2')
for label, score in sims:
    print(label)

打印为:

SENT_4372
SENT_1143
SENT_4024
SENT_4759
SENT_3497
SENT_5749
SENT_3189
SENT_1581
SENT_5127
SENT_3798

但鉴于标签,我如何获得原始推文词/句子?例如。什么是推文,比如“SENT_3497”。我可以向Doc2Vec模型查询吗?

1 个答案:

答案 0 :(得分:1)

Gensim的Word2Vec / Doc2Vec模型不存储语料库数据 - 他们只在多次通过中检查它以训练模型。如果需要检索原始文本,则应填充自己的按键查找数据结构,例如Python dict(如果所有示例都适合内存)。

另外,在最新版本的gensim中,您的代码实际上会对您的taggeddocs进行1,005次培训,其中包括许多具有非敏感/破坏性负alpha值的培训。

  • 通过将其传递给构造函数,您可以使用参数和默认值告诉模型自我训练,其中包括默认的iter=5次传递次数。

  • 然后再做200个循环。每次调用train()都会执行默认的5次传递。通过将alpha从0.025减去0.002 199次,最后一个循环将使用0.025-(200 * 0.002)= - 0.375的有效alpha - 一个负值,基本上告诉模型做大在每个训练例子的改进的相反方向上进行校正。

只需使用iter参数选择所需的通过次数即可。让班级自己管理alpha更改。如果在实例化模型时提供语料库,则不需要进一步的步骤。但是,如果您未在实例化时提供语料库,则需要执行model.build_vocab(tagged_docs)一次,然后model.train(tagged_docs)一次。