我试图使用gensim的doc2vec来创建一个模型,该模型将根据一组文档和一组标签进行训练。标签是手动创建的,需要放入程序中进行培训。到目前为止,我有两个列表:一个句子列表,以及一个对应于该句子的标签列表。我需要特别使用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'
。我在google上搜索了这个,它说要把它放到一个带标签的句子对象中,但是如果我有预定义的标签,我不确定这是否行得通。那么有人知道如何将预定义的标签放入doc2vec吗?提前谢谢。在
Doc2Vec
的语料库应该是一个对象的iterable,这些对象类似于gensim:中包含的TaggedDocument
示例类,具有一个words
字符串标记列表和一个tags
列表。(标记是通过训练从每个文本中学习的文档向量的关键,通常是唯一的文档ID,但也可以是重复多个文档的已知标签,或者同时是ID和标签。)您的
tagged_data
有一个非标记化字符串列表和一个标签列表,与预期的格式完全不同。在您应该看看gensim}。也可以在线查看,例如:
docs/notebooks
目录中关于docs/notebooks
的一些示例Jupyter笔记本,例如doc2vec-lee.ipynb
或{https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-lee.ipynb
另外,您可能不需要或不想多次调用
train()
这很容易出错。(如果你从一个在线例子中复制了这种方法,那么这个例子可能已经过时了。)调用它一次,在epochs
参数中输入你喜欢的训练次数。在相关问题 更多 >
编程相关推荐