将句子转换为嵌入表示

converting a sentence to an embedding representation

如果我有一句话,例如:“离开这里” 我想使用 word2vec 嵌入。来代表它..我找到了三种不同的方法来做到这一点:

1- 对于每个单词,我们计算其嵌入向量的 AVG,因此每个单词都被单个值替换。

2- 与 1 相同,但使用嵌入向量值的标准差。

3- 或通过添加嵌入。矢量,因为它是。因此,如果我使用 300 长度的嵌入向量 .. 对于上面的示例,我将在最后一个(300 * 4 个单词)1200 长度的向量作为表示句子的最终向量。

哪一个最适合..?具体来说,对于句子相似度的应用..

您描述选项 (1) 的方式听起来好像每个词都变成了一个数字。那是行不通的。

经常使用的简单方法是将句子中所有单词的所有 word-vectors 平均在一起 - 因此对于 300 维 word-vectors,您仍然会得到 300 维 [=45] =] 向量。也许这就是您的选项 (1) 的意思。

(有时,在此操作之前,所有向量都归一化为 unit-length,但有时不是 - 因为 non-normalized 向量长度有时可以指示单词含义的强度。有时,word-vectors 由一些其他 frequency-based 相对重要性指标加权,例如 TF/IDF.)

我从未见过您使用过选项 (2),也不太明白您的意思或它如何工作。

您的选项 (3) 最好描述为 "concatenating the word-vectors"。它根据句子中单词的数量给出 different-sized 个向量。单词放置的细微差别,例如比较 "get out of here" 和 "of here get out",将导致非常不同的向量,通常的比较向量方法(如 cosine-similarity)不会检测为 [=37] =] 完全没有。所以它没有意义,我还没有看到它被使用过。

因此,只有您的选项 (1) 正确实施到(加权)平均值 word-vectors,才是 sentence-similarities 的良好基线。

但是,它仍然相当基础,还有许多其他方法可以使用 text-vectors 来比较句子。这里只是一些:

与word2vec本身密切相关的一种算法称为'Paragraph Vectors',通常称为Doc2Vec。它使用非常类似于 word2vec 的过程来训练全范围文本(无论是短语、句子、段落还是文档)的向量,其工作方式类似于 'floating document-ID words' 全文。有时它比仅平均 word-vectors 更有优势,并且在某些模式下可以产生彼此具有可比性的 doc-vectors 和 word-vectors。

如果您的兴趣不仅仅是成对的句子相似性,而是某种下游分类任务,那么 Facebook 对 word2vec 的 'FastText' 改进有一个分类模式,其中 word-vectors 不仅接受训练预测相邻词,但擅长预测已知文本类,当简单added/averaged在一起时。 (Text-vectors 从此类分类向量构建的相似性也可能很好,这取决于 training-classes 捕获文本之间显着对比的程度。)

仅使用 word-vectors 计算成对相似度的另一种方法是 "Word Mover's Distance"。它不是将文本的所有 word-vectors 平均为一个 text-vector,而是将每个 word-vector 视为一种 "pile of meaning"。与另一个句子相比,它计算将所有 "piles" 从一个句子移动到另一个句子的配置所需的最小路由工作(沿许多潜在 word-to-word 路径的距离)。计算起来可能很昂贵,但通常 sentence-contrasts 比朴素 word-vector 平均实现的简单 single-vector-summary 更好。