word2vec 如何找到句子相似度?
How does word2vec work to find sentence similarity?
我正在使用 word2vec/doc2vec 查找两个文档的文本相似性。
我研究了 word2vec 有两种方法:
- CBOW:根据上下文预测单词
- Skipgram:根据单词预测上下文
但我仍然无法理解这两种方法在计算文本相似度方面的工作原理。
还有哪个是当前任务的更好方法。
词向量只是对单个词建模。
但是,您随后可以使用这些每个单词的向量来为更大的文本创建向量,或者为更大的文本之间的相似性计算。
将文本转换为单个固定宽度向量的一种简单方法是对所有文本单词的单词向量进行平均。 (这也可以是加权平均值,基于对单个单词重要性的一些想法。)这种文本向量通常可以很好地用作快速简单的基线。对于两个文本,所有词向量的两个平均值的余弦相似度就是两个文本的相似度。
像 Doc2Vec
(又名 "Paragraph Vector")这样的算法是另一种获取文本向量的方法。它不严格组合词向量,而是使用类似于创建词向量的过程来创建每个文本向量。
如果只使用词向量,文本到文本相似性的另一种选择是 "Word Mover's Distance"(大规模杀伤性武器)。 WMD 度量不是将所有词向量平均在一起,而是为文本创建单个向量,而是将文本中的所有词视为 "piles of meaning" 在其各种词向量坐标处。文本之间的距离是 "move" 一个文本的词向量的质量相对于另一个文本的词向量的质量需要多少努力。它很昂贵(因为每个这样的成对计算都是许多可能的词到词转换中的优化问题)但保留了比仅仅将文本折叠成单个摘要向量更多的区别。
我正在使用 word2vec/doc2vec 查找两个文档的文本相似性。 我研究了 word2vec 有两种方法:
- CBOW:根据上下文预测单词
- Skipgram:根据单词预测上下文
但我仍然无法理解这两种方法在计算文本相似度方面的工作原理。 还有哪个是当前任务的更好方法。
词向量只是对单个词建模。
但是,您随后可以使用这些每个单词的向量来为更大的文本创建向量,或者为更大的文本之间的相似性计算。
将文本转换为单个固定宽度向量的一种简单方法是对所有文本单词的单词向量进行平均。 (这也可以是加权平均值,基于对单个单词重要性的一些想法。)这种文本向量通常可以很好地用作快速简单的基线。对于两个文本,所有词向量的两个平均值的余弦相似度就是两个文本的相似度。
像 Doc2Vec
(又名 "Paragraph Vector")这样的算法是另一种获取文本向量的方法。它不严格组合词向量,而是使用类似于创建词向量的过程来创建每个文本向量。
如果只使用词向量,文本到文本相似性的另一种选择是 "Word Mover's Distance"(大规模杀伤性武器)。 WMD 度量不是将所有词向量平均在一起,而是为文本创建单个向量,而是将文本中的所有词视为 "piles of meaning" 在其各种词向量坐标处。文本之间的距离是 "move" 一个文本的词向量的质量相对于另一个文本的词向量的质量需要多少努力。它很昂贵(因为每个这样的成对计算都是许多可能的词到词转换中的优化问题)但保留了比仅仅将文本折叠成单个摘要向量更多的区别。