7

我阅读了此页面,但我不明白基于以下代码构建的模型之间有什么不同。我知道当 dbow_words 为 0 时,文档向量的训练会更​​快。

第一个模型

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

第二个模型

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

1 回答 1

12

dbow_words参数仅在训练 DBOW 模型时有效——即使用非默认dm=0参数。

因此,在您的两个示例代码行之间,它们都保持默认dm=1值不变,没有区别。

如果您改为切换到 DBOW 训练,dm=0则使用默认dbow_words=0设置,模型是纯 PV-DBOW,如原始“段落向量”论文中所述。训练文档向量以预测文本示例词,但没有训练词向量。(模型中仍然会有一些随机初始化的词向量,但在训练过程中没有使用或改进它们。)这种模式速度很快,而且效果很好。

如果您添加dbow_words=1设置,那么skip-gram 词向量训练将以交错的方式添加到训练中。(对于每个文本示例,将训练整个文本上的文档向量,然后是每个滑动上下文窗口上的词向量。)由于这增加了更多的训练示例,作为window参数的函数,它会显着变慢。(例如,使用window=5,添加单词训练将使训练速度慢 5 倍。)

这样做的好处是将 DBOW 文档向量和词向量放在“相同的空间”中——也许通过它们与词的接近程度使文档向量更易于解释。

这种混合训练可以作为一种语料库扩展——将每个上下文窗口变成一个迷你文档——这有助于提高生成的文档向量嵌入的表达能力。(尽管如此,特别是对于足够大和多样化的文档集,它可能值得与具有更多通道的纯 DBOW 进行比较。)

于 2017-05-17T01:07:38.640 回答