python - 如何提取用于 Doc2Vec 的单词

标签 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 模型吗?

最佳答案

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

另外,在最新版本的 gensim 中,您的代码实际上会对您的 taggeddocs 进行 1,005 次训练,其中许多都具有无意义/破坏性的负 alpha 值。

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

  • 然后再进行 200 次循环。每次调用 train() 都会执行默认的 5 遍。通过将 alpha 从 0.025 递减 0.002 199 次,最后一个循环将使用有效的 alpha 0.025-(200*0.002)=-0.375 - 一个负值,本质上是告诉我们模型在每个训练示例的改进方向上进行较大的修正。

只需使用iter参数来选择所需的传递次数。让类自行管理 alpha 更改。如果在实例化模型时提供语料库,则无需执行进一步的步骤。但如果您在实例化时不提供语料库,则需要执行一次 model.build_vocab(tagged_docs) 一次,然后执行 model.train(tagged_docs) 一次。

关于python - 如何提取用于 Doc2Vec 的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40296765/

相关文章:

python - 如何在 Keras 中从 HDF5 文件加载模型?

python - Mayavi 如何显示轴网格

python - 来自 NLTK、Gensim、Scikit Learn 的 API 调用

python - 我如何判断 Gensim Word2Vec 是否使用 C 编译器?

python - 如何在序列化大量 GeoDjango 几何字段时进行性能优化?

python - 值错误: invalid literal for int() with base 16: 'Interstitial'

python - 使用 countvectorizer() 和 tfidfvectorizer() 向量化列表列表

nlp - OpenAI API 和 GPT-3,不清楚如何访问或设置学习/开发?

machine-learning - 使用 NLP 询问结构化数据有意义吗?

python - gensim Word2vec 迁移学习(来自非 gensim 模型)