doc2vec.infer_vector 如何跨词组合?
How does doc2vec.infer_vector combine across words?
我使用带有默认设置的 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
这些不相加,所以我想知道我误会了什么。
infer_vector()
不会组合给定标记的向量——在某些模式下根本不会考虑这些标记的向量。
相反,它认为整个 Doc2Vec 模型被冻结以防止内部更改,然后假设您提供的标记是一个示例文本,带有一个以前未经训练的标签。我们称这个隐含但未命名的标记为 X。
使用类似训练的过程,它会尝试为 X 找到一个好的向量。也就是说,它从一个随机向量开始(就像它对原始训练中的所有标签所做的那样),然后查看该向量作为模型输入对文本单词的预测效果如何(通过检查模型神经网络对输入的预测 X).然后通过增量梯度下降,它使 X 的候选向量在预测文本单词方面越来越好。
经过足够多的此类推理训练后,向量在预测文本单词方面的效果(给定其余的冻结模型)可能差不多。因此,即使您将该文本作为 "input" 提供给方法,在模型内部,您提供的内容也用于选择算法的目标 "outputs" 进行优化。
注意:
- 微小的例子(比如一个或几个词)不太可能给出非常有意义的结果——它们是尖锐的边缘案例,而这些密集嵌入表示的本质价值通常来自边际平衡许多词的影响
- 它可能有助于进行比
infer_vector()
默认值 steps=5
多得多的训练-推理循环——一些人报告说,数十或数百个 steps
最适合他们,而且它使用更多 steps
短文本可能特别有价值
- 它也可能有助于使用起始
alpha
进行推理,更像在批量训练中使用的那样 (alpha=0.025
),而不是 infer_vector()
默认值 (alpha=0.1
)
我使用带有默认设置的 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
这些不相加,所以我想知道我误会了什么。
infer_vector()
不会组合给定标记的向量——在某些模式下根本不会考虑这些标记的向量。
相反,它认为整个 Doc2Vec 模型被冻结以防止内部更改,然后假设您提供的标记是一个示例文本,带有一个以前未经训练的标签。我们称这个隐含但未命名的标记为 X。
使用类似训练的过程,它会尝试为 X 找到一个好的向量。也就是说,它从一个随机向量开始(就像它对原始训练中的所有标签所做的那样),然后查看该向量作为模型输入对文本单词的预测效果如何(通过检查模型神经网络对输入的预测 X).然后通过增量梯度下降,它使 X 的候选向量在预测文本单词方面越来越好。
经过足够多的此类推理训练后,向量在预测文本单词方面的效果(给定其余的冻结模型)可能差不多。因此,即使您将该文本作为 "input" 提供给方法,在模型内部,您提供的内容也用于选择算法的目标 "outputs" 进行优化。
注意:
- 微小的例子(比如一个或几个词)不太可能给出非常有意义的结果——它们是尖锐的边缘案例,而这些密集嵌入表示的本质价值通常来自边际平衡许多词的影响
- 它可能有助于进行比
infer_vector()
默认值steps=5
多得多的训练-推理循环——一些人报告说,数十或数百个steps
最适合他们,而且它使用更多steps
短文本可能特别有价值 - 它也可能有助于使用起始
alpha
进行推理,更像在批量训练中使用的那样 (alpha=0.025
),而不是infer_vector()
默认值 (alpha=0.1
)