我使用train(..)训练了一个doc2vec模型,默认设置。这有用,但现在我想知道infer_vector如何在输入单词中组合,它只是单个单词向量的平均值吗?
model.random.seed(0)
model.infer_vector(['cat', 'hat'])
model.random.seed(0)
model.infer_vector(['cat'])
model.infer_vector(['hat']) #doesn't average up to the ['cat', 'hat'] vector
model.random.seed(0)
model.infer_vector(['hat'])
model.infer_vector(['cat']) #doesn't average up to the ['cat', 'hat'] vector
那些没有加起来,所以我想知道我误解了什么。
答案 0 :(得分:2)
infer_vector()
没有组合给定令牌的向量 - 在某些模式下根本不考虑那些令牌的向量。
相反,它将整个Doc2Vec模型视为针对内部更改冻结,然后假定您提供的标记是示例文本,具有先前未经过训练的标记。我们称之为隐含但未命名的标签 X 。
使用类似训练的过程,它会尝试为 X 找到一个好的向量。也就是说,它以随机向量开始(就像它对原始训练中的所有标签所做的那样),然后看到作为模型输入的向量如何预测文本的单词(通过检查模型神经网络对输入的预测 X )。然后通过增量梯度下降,它使 X 的候选矢量更好,更好地预测文本的单词。
经过足够的这种推理训练后,矢量将与预测文本的单词一样好(给定其余的冻结模型)。因此,即使您将该文本作为方法的“输入”提供,但在模型内部,您提供的内容用于选择算法的目标“输出”以进行优化。
请注意:
infer_vector()
默认steps=5
更多的训练推理周期 - 有些人报告了数十或数百steps
最适合他们,并且可能是使用更多steps
短文alpha
进行推理更有助于批量训练(alpha=0.025
),而不是infer_vector()
默认(alpha=0.1
)< / LI>