【问题标题】:How to properly tag a list of documenta by Gensim TaggedDocument()如何通过 Gensim TaggedDocument() 正确标记文档列表
【发布时间】:2018-04-03 16:50:21
【问题描述】:

我想用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'

【问题讨论】:

    标签: nlp gensim doc2vec


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-20
      • 2017-05-02
      • 2015-01-10
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多