具有监督数据预定义标签的 Doc2Vec gensim

Doc2Vec gensim with supervised data predefined labels

我正在尝试使用 gensim 的 doc2vec 创建一个模型,该模型将在一组文档和一组标签上进行训练。标签是手动创建的,需要放入程序中进行训练。到目前为止,我有 2 个列表:一个句子列表,以及与该句子对应的标签列表。我需要专门使用 doc2vec。这是我到目前为止尝试过的方法。

from gensim import utils
from gensim.models import Doc2Vec

tweets = ["A tweet", "Another tweet", "A third tweet", ... , "A thousandth-something tweet"]
labels_list = [1, 1, 3, ... , 16]

tagged_data = [tweets, labels_list]
model = Doc2Vec(size=20, alpha=0.025, min_alpha=0.00025, min_count=1, dm=1)
model.build_vocab(tagged_data)
for epoch in range(max_epochs):
    model.train(tagged_data, total_examples=model.corpus_count, 
epochs=model.iter)
    model.alpha -= 0.0002
    model.min_alpha = model.alpha

我在 model.build_vocab(tagged_data) 行上收到错误,其中有一个 AttributeError: 'list' object has no attribute 'words'。我在谷歌上搜索了一下,它说要把它放入一个带标签的句子对象中,但我不确定如果我有预定义的标签,这是否会起作用。那么有谁知道如何将预定义标签放入 doc2vec 中?提前致谢。

Doc2Vec 的语料库应该是一个 可迭代的 对象,类似于 gensim 中包含的 TaggedDocument 示例 class:与words 字符串标记列表和 tags 标签列表。 (标签是通过从每个文本进行训练学习的文档向量的关键,并且通常是唯一的文档 ID,但也可以是重复多个文档的已知标签,或者 ID 和标签。)

您的 tagged_data 包含一个非标记化字符串列表和一个标签列表,与预期格式完全不同。

您应该查看并完成 gensim docs/notebooks 目录中关于 Doc2Vec 的一些示例 Jupyter 笔记本,例如 doc2vec-lee.ipynbdoc2vec-IMDB.ipynb。这些也可以在线查看,例如:

https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-lee.ipynb

此外,您可能不需要或不想多次调用 train() - 很容易出错。 (如果您从在线示例中复制了该方法,则该示例可能已过时。)调用一次,在 epochs 参数中使用您首选的训练次数。