如果我有一句话,例如:“离开这里” 我想使用word2vec嵌入。代表它..我发现了三种不同的方法:
1-对于每个单词,我们计算其嵌入向量的AVG,因此每个单词都被单个值替换。
2-与1相同,但使用嵌入矢量值的标准偏差。
3-或添加嵌入。矢量原样。因此,如果我使用300长度嵌入向量...对于上面的例子,我将在最后一个(300 * 4个单词)1200长度的向量作为表示句子的最终向量。
其中哪一个最合适..?具体来说,对于句子相似性应用..
答案 0 :(得分:0)
您描述选项(1)的方式使得听起来每个单词都成为单个数字。那不行。
经常使用的简单方法是将句子中单词的所有单词向量一起平均 - 所以使用300维单词向量,你仍然可以得到300维句子平均向量。也许这就是你的选择(1)。
(有时,在此操作之前,所有向量都被标准化为单位长度,但有时不是 - 因为非标准化向量长度有时可以指示单词意义的强度。有时,单词向量由其他频率加权基于其相对重要性的指标,如TF / IDF。)
我从未见过您使用的选项(2)并且不太明白您的意思或它可能如何运作。
您的选项(3)将更好地描述为“连接单词向量”。它根据句子中的单词数给出不同大小的向量。单词放置的轻微差异,例如比较“离开这里”和“离开这里”,会导致非常不同的向量,比较向量的常用方法(如余弦相似性)不会检测为“接近”一点都不所以它没有意义,我没有看到它被使用。
因此,只有正确实施(加权)平均单词向量的选项(1)才是句子相似性的良好基线。
但是,它仍然相当基础,还有许多其他方法可以使用文本向量来比较句子。这里只是几个:
与word2vec本身密切相关的一种算法称为“段落向量”,通常称为Doc2Vec
。它使用一个非常像word2vec的过程来训练整个文本范围的向量(无论它们是短语,句子,段落还是文档),它们在全文中有点像“浮动文档ID词”。它有时提供优于仅平均字向量的好处,并且在某些模式中可以产生彼此可比较的doc向量和字向量。
如果您的兴趣不仅仅是成对句子的相似性,而是某种下游分类任务,那么Facebook的'FastText'对word2vec的改进有一种分类模式,其中单词矢量不仅仅用于预测相邻单词,而且擅长预测已知的文本类,只需简单地添加/平均。 (根据这些分类向量构建的文本向量也可能具有相似性,这取决于训练类如何很好地捕获文本之间的显着对比。)
使用单词向量来计算成对相似性的另一种方法是“Word Mover的距离”。它不是将文本的所有单词向量一起平均化为单个文本向量,而是将每个单词向量视为一种“意义堆”。与另一个句子相比,它计算最小路由工作(沿着许多潜在的单词到单词路径的距离)将所有“桩”从一个句子移动到另一个句子的配置中。计算起来可能很昂贵,但通常比天真的单词矢量平均所实现的简单单向量概要更能代表句子对比。