11

我完全知道词嵌入(skip-gram, CBOW)的含义和方法。而且我知道,Google 有一个 word2vector API,通过获取单词可以生成向量。但我的问题是这样的:我们有一个包含主语、宾语、动词的子句......每个单词以前都由 Google API 嵌入,现在“我们如何将这些向量组合在一起以创建一个等于条款?” 示例:Clause: V= "dog beats man" 在谷歌嵌入词后,我们有 V1、V2、V3 分别映射到 dog、bites、man。我们知道: V = V1+ V2 +V3 我们如何提供 V?如果您以真实向量为例进行解释,我将不胜感激。

4

3 回答 3

6

向量基本上只是一个数字列表。您可以通过将每个列表中相同位置的数字相加来添加向量。这是一个例子:

a = [1, 2, 3]
b = [4, 5, 6]
c = a + b # vector addition
c is [(1+4), (2+5), (3+6)], or [5, 7, 9]

this question所示,在python中执行此操作的简单方法如下:

map(sum, zip(a, b))

向量加法是线性代数的一部分。如果您不了解向量和矩阵的运算,那么围绕词向量的数学将很难理解,因此您可能希望了解更多关于线性代数的知识。

通常将词向量加在一起是近似句子向量的好方法,因为对于任何给定的词集,都有一个明显的顺序。但是,您的示例Dog bites manandMan bites dog显示了添加向量的弱点 - 结果不会根据词序而改变,因此这两个句子的结果将是相同的,即使它们的含义非常不同。

对于获取受词序影响的句子向量的方法,请查看doc2vec或刚刚发布的InferSent

于 2017-07-06T01:40:08.360 回答
4

两种解决方案:

  1. 使用短语的组成词的向量加法 - 这通常效果很好,因为加法是对语义组成的良好估计。

  2. 使用段落向量,它能够将任意长度的单词序列编码为单个向量。

于 2017-06-28T09:50:21.150 回答
0

因此,在本文中:https ://arxiv.org/pdf/2004.07464.pdf 他们通过连接图像嵌入和文本嵌入来组合它们。

X = TE + IE 

这里 X 是融合嵌入,TE 和 IE 分别作为文本和图像嵌入。如果您的 TE 和 IE 的尺寸分别为 2048,则您的 X 的长度为 2*2024。然后,如果可能的话,也许你可以使用它,或者如果你想减少维度,你可以使用 t-SNE/PCA 或https://arxiv.org/abs/1708.03629(在此处实现:https ://github.com/vyraun/半码

于 2021-11-17T15:04:52.033 回答