【问题标题】:Doc2Vec input formatDoc2Vec 输入格式
【发布时间】:2018-06-23 02:49:34
【问题描述】:

在 ubuntu 上运行 gensim Doc2Vec

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

AttributeError: 'list' 对象没有属性 '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)

我已经尝试过 this SO question 以及许多具有相同结果的变体

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

如果语料库是一个 .txt 文件,我可以使用

    documents=TaggedLineDocument(documents)

但这通常是不可能的

【问题讨论】:

    标签: gensim doc2vec


    【解决方案1】:

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

    包含一个具有正确“形状”的类 TaggedDocument,并在大多数 Gensim 文档/教程示例中使用 - 但鉴于 Python 的“鸭子类型”,任何具有 wordstags 属性的对象会做。

    但一个简单的列表不会。

    如果我理解正确,brown.tagged_sents() 将返回 (word, part-of-speech-tag) 元组的列表,这甚至不是那种可以用作 @ 的词标记列表987654329@,并且不提供Doc2Vec 需要的任何完整文档标签作为受过训练的文档向量的键。

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

    【讨论】:

    • 感谢@gojomo;如果文档不在 .txt 文件中,用户如何将文档从另一种格式转换为 TaggedDocument。指向当前文档的链接会很有帮助。
    • 这取决于数据的来源。 github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/…> 的教程笔记本在单元格 3 中显示了一个函数,该函数在从文件中读取时构造了 TaggedDocument 实例。您可以获取您自己的 wordstags 的任何内容,并类似地创建一个 TaggedDocuments 列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2018-09-24
    • 2022-01-12
    相关资源
    最近更新 更多