如何通过Gensim TaggedDocument()正确标记文档列表

时间:2018-04-03 16:50:22

标签: nlp gensim doc2vec

我想按Gensim TaggedDocument()标记文档列表,然后按照Doc2Vec()的输入传递这些文档。

我已阅读有关TaggedDocument here的文档,但我没有'我已经理解了参数wordstags究竟是什么。

我试过了:

texts = [[word for word in document.lower().split()]
          for document in X.values]

texts = [[token for token in text]
          for text in texts]

model = gensim.models.Doc2Vec(texts, vector_size=200)
model.train(texts, total_examples=len(texts), epochs=10)

但我收到错误'list' object has no attribute 'words'

1 个答案:

答案 0 :(得分:4)

Doc2Vec期望一个可迭代的文本集合,每个文本都是(形状像)示例TaggedDocument类,具有wordstags属性。

words可以是您的标记化文本(作为列表),但tags应该是应通过Doc2Vec算法接收学习向量的文档标记列表。通常,这些是唯一的ID,每个文档一个。 (您可以使用普通的int索引,如果它可以作为在其他地方引用您的文档的方式,或字符串ID。)请注意,tags必须是标记列表,即使您是每个文件只提供一个。

您只是提供单词列表的列表,从而生成错误。

尝试使用单行来初始化texts

texts = [TaggedDocument(
             words=[word for word in document.lower().split()],
             tags=[i]
         ) for i, document in enumerate(X.values)]

此外,如果您在train()创建时提供texts,则无需致电Doc2Vec。 (通过在初始化时提供语料库,Doc2Vec将自动执行初始词汇发现扫描,然后执行指定数量的训练通行证。)

您应该查看有关灵感的工作示例,例如doc2vec-lee.ipynb附带的gensim可运行的Jupyter笔记本。它将是您的安装目录,如果您可以找到它,但您也可以在gensim源代码存储库中查看(静态,不可运行)版本:

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