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

标签 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'

最佳答案

Doc2Vec 需要一个可迭代的文本集合,每个文本(形状像)示例 TaggedDocument 类,同时包含 words标记 属性。

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)]

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

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

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

关于nlp - 如何通过 Gensim TaggedDocument() 正确标记文档列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49635325/

相关文章:

android - Android 机器学习库

python - Gensim word2vecmost_similar通过#前缀过滤

python - 特征提取自然语言处理

java - 斯坦福解析器 - java.io.IOException : Unable to resolve as either class path, 文件名或 URL

nlp - 单词预测: neural net versus n-gram approach

python - NLTK 关系提取 - relextract.extract_rels 中的自定义语料库

word2vec - gensim:当我加载Google预训练的word2vec模型时, 'Doc2Vec'对象没有属性 'intersect_word2vec_format'

python - LDA基因模拟。如何使用每个文档的正确主题编号更新 Postgres 数据库?

python - Doc2vec 和 word2vec 负采样

python - alpha 和 min_alpha 的 doc2vec 默认值