我用火车(..)训练了一个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这些都不符合,所以我想知道我有什么误会。
发布于 2017-05-24 17:16:06
infer_vector()不为给定的令牌组合向量,而且在某些模式下根本不考虑这些令牌的向量。
相反,它认为整个Doc2Vec模型是针对内部更改而冻结的,然后假设您提供的令牌是一个示例文本,带有以前未经过训练的标记。让我们把这称为暗含但未命名的标签X。
使用类似训练的过程,它试图为X找到一个很好的向量,也就是说,它从一个随机向量开始(就像对原始训练中的所有标记一样),然后查看该向量作为模型输入对文本单词的预测能力(通过检查模型神经网络对输入X的预测)。然后,通过渐变梯度下降,使X的候选向量更好地预测文本的单词。
经过足够的推理训练后,向量将尽可能好地预测文本的单词(给定冻结模型的其余部分)。因此,即使您提供该文本作为方法的“输入”,在模型中,您提供的是用于选择优化算法的目标“输出”。
请注意:
infer_vector()默认steps=5更多的训练--推理周期--有些人报告说,有几十个或数百个steps最适合他们,而且对于短文本使用更多的steps可能特别有价值。alpha进行推理,更像批量训练(alpha=0.025)中使用的推理,而不是infer_vector()默认值(alpha=0.1)。https://stackoverflow.com/questions/44163836
复制相似问题