我读了这个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)
答案 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进行比较并传递更多。)