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

Sim*_*one 0 nlp gensim doc2vec

我想标记一个文档列表 by Gensim TaggedDocument(),然后将这些文档作为Doc2Vec().

我已阅读有关TaggedDocument 此处的文档,但我不明白参数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)
Run Code Online (Sandbox Code Playgroud)

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

goj*_*omo 6

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)]
Run Code Online (Sandbox Code Playgroud)

此外,train()如果您在创建texts时提供了,Doc2Vec则不需要调用。(通过在初始化时提供语料库,Doc2Vec将自动进行初始词汇发现扫描,然后是您指定的训练次数。)

您应该查看工作示例以获取灵感,例如doc2vec-lee.ipynb包含在gensim. 如果你能找到它,它将是你的安装目录,但你也可以在gensim源代码存储库中查看(静态的,不可运行的)版本:

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