Doc2Vec 输入格式

Doc2Vec input format

运行 gensim Doc2Vec 在 ubuntu

Doc2Vec 拒绝我的输入并出现错误

AttributeError: 'list' object has no attribute 'words'

    import gensim from gensim.models  
    import doc2vec as dtv
    from nltk.corpus import brown
    documents = brown.tagged_sents()
    d2vmodel = > dtv.Doc2Vec(documents, size=100, window=1, min_count=1, workers=1)

我已经试过了 和许多具有相同结果的变体

文档=[brown.tagged_sents()} 添加哈希函数

如果语料库是 .txt 文件,我可以利用

    documents=TaggedLineDocument(documents)

但这通常是不可能的

Gensim 的 Doc2Vec 要求每个文档都采用对象形式,其中 words 属性 是字符串标记列表,tags 属性 那是一个标签列表。这些标签通常是字符串,但是拥有大型数据集的专家用户可以使用从 0 开始的纯整数来节省一点内存。

A class TaggedDocument 包含在右侧 'shape' 中,并在大多数 Gensim documentation/tutorial 示例中使用 - 但给定 Python的 'duck typing',任何具有 wordstags 属性的对象都可以。

但普通列表不会。

如果我理解正确,brown.tagged_sents() 将 return 列表(单词,词性标签)元组,这甚至不是单词列表的那种-tokens 可以用作 words,并且不提供 Doc2Vec 需要的任何完整文档标签作为接受训练的文档向量的键。

另外:您不太可能想要使用 min_count=1。丢弃频率非常低的词通常会使保留的 Word2Vec/Doc2Vec 向量更好。