【问题标题】:Should I split sentences in a document for Doc2Vec?我应该在 Doc2Vec 文档中拆分句子吗?
【发布时间】:2021-06-14 08:55:11
【问题描述】:

我正在使用 Gensim 构建一个包含 1000 个文档的 Doc2Vec 模型。 每个文档由多个句子组成,其中包含多个单词。

示例)

Doc1: [[word1, word2, word3], [word4, word5, word6, word7],[word8, word9, word10]]

Doc2: [[word7, word3, word1, word2], [word1, word5, word6, word10]]

最初,为了训练 Doc2Vec,我首先拆分句子并使用“TaggedDocument”使用相同的文档标签标记每个句子。结果,我得到了 Doc2Vec 的最终训练输入如下:

TaggedDocument(words=[word1, word2, word3], tags=['Doc1'])

TaggedDocument(words=[word4, word5, word6, word7], tags=['Doc1'])

TaggedDocument(words=[word8, word9, word10], tags=['Doc1'])

TaggedDocument(words=[word7, word3, word1, word2], tags=['Doc2'])

TaggedDocument(words=[word1, word5, word6, word10], tags=['Doc2'])

但是,不拆分句子,将整个文档作为一个整体来训练模型可以吗?

TaggedDocument(words=[word1, word2, word3,word4, word5, word6, word7,word8, word9, word10], tags=['Doc1'])

TaggedDocument(words=[word4, word5, word6, word7,word1, word5, word6, word10], tags=['Doc2'])

提前谢谢你:)

【问题讨论】:

    标签: gensim word2vec doc2vec


    【解决方案1】:

    这两种方法的效果将非常相似。

    略有不同的是,在 PV-DM 模式 (dm=1) 或 PV-DBOW 中添加了 skip-gram 训练 (dm=0, dbow_words=1),如果按句子拆分,不同句子中的单词将永远不会在相同的上下文窗口。

    例如,您的 'Doc1''word3''word4' 永远不会在同一个 PV-DM 上下文窗口平均中被平均在一起,也不会被用于 PV-DBOW skip-gram predict-each-其他,如果你按句子分割。如果您只是将整个文档的单词一起运行到一个 TaggedDocument 示例中,它们会通过出现在共享上下文窗口中进行更多交互。

    其中一个或另一个更适合您的目的是您必须在自己的分析中评估的东西 - 它可能在很大程度上取决于数据的性质和所需的相似性结果。

    但是,我可以说您的 second 选项,一个TaggedDocument 中的所有单词,是更常见/传统的方法。

    (也就是说,只要文档的长度仍然不超过 10,000 个标记。如果更长,则将文档的单词拆分为多个 TaggedDocument 实例,每个实例都具有相同的 tags,对于内部10,000 个令牌的实施限制。)

    【讨论】:

    • 帮助很大!根据您的建议,我决定采用第二种选择。此外,根据我的实验,我从两个选项中得到了几乎相同的结果。但是,第二个更好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 2015-02-02
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2020-07-17
    相关资源
    最近更新 更多