我应该在 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 个令牌实施限制的常见解决方法。)
我正在使用 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 个令牌实施限制的常见解决方法。)