我应该在 Doc2Vec 文档中拆分句子吗?

Should I split sentences in a document for Doc2Vec?

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

示例)

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

文档 2:[[word7、word3、word1、word2]、[word1、word5、word6、word10]]

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

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

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

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

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

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

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

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

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

提前谢谢你:)

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

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

例如,您的 'Doc1''word3''word4' 永远不会在相同的 PV-DM 上下文中一起平均 - window- 平均,也不会如果按句子拆分,则用于 PV-DBOW skip-gram 相互预测。如果您只是 运行 将整个文档的单词组合成一个 TaggedDocument 示例,它们会通过出现在共享上下文中进行更多交互-windows.

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

但是,我可以说你的第二个选项,将所有单词合而为一TaggedDocument,是更common/traditional的方法。

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