当dbow_words设置为1或0时,doc2vec模型之间有什么不同?

时间:2017-05-16 21:15:43

标签: gensim doc2vec

我读了这个page,但我不明白基于以下代码构建的模型之间有什么不同。 我知道当dbow_words为0时,doc-vectors的训练更快。

第一个模型

user_ids = users.values_list('id', flat=True)
matches = [match for match in matches if match[0].id in user_ids]

第二个模型

model = doc2vec.Doc2Vec(documents1, size = 100, window = 300, min_count = 10, workers=4)

1 个答案:

答案 0 :(得分:9)

dbow_words参数仅在训练DBOW模型时有效 -  也就是说,使用非默认的dm=0参数。

因此,在两个代码行之间,这两行代码都保持默认dm=1值不变,没有区别。

如果您改为切换到DBOW训练dm=0,然后使用默认dbow_words=0设置,则该模型是纯PV-DBOW,如原始'段落矢量'纸。训练Doc向量以预测文本示例单词,但训练 no 单词向量。 (在模型中仍然会有一些随机初始化的单词向量,但在训练期间它们不会被使用或改进。)这种模式很快并且仍能很好地工作。

如果您添加dbow_words=1设置,则会以交错的方式将skip-gram字矢量训练添加到训练中。 (对于每个文本示例,整个文本中的doc-vectors,然后是每个滑动上下文窗口上的字向量,都将被训练。)因为这会添加更多训练示例,作为window参数的函数,将会明显变慢。 (例如,对于window=5,添加单词训练会使训练速度减慢约5倍。)

这有利于将DBOW doc-vectors和word-vectors放入"相同的空间" - 也许通过他们与文字的接近使文件向量更容易解释。

这种混合训练可以作为一种语料库扩展 - 将每个上下文窗口转换为迷你文档 - 这有助于提高生成的doc-vector嵌入的表现力。 (虽然,特别是对于足够大和多样化的文档集,可能值得与纯DBOW进行比较并传递更多。)