如何将单词嵌入向量组合到一个向量中?

时间:2017-06-27 17:12:36

标签: nlp information-retrieval word2vec google-api-python-client word-embedding

我完全了解单词嵌入(skip-gram,CBOW)的含义和方法。我知道,谷歌有一个word2vector API,通过获取单词可以生成向量。 但我的问题是:我们有一个条款,包括主题,对象,动词......每个单词以前都是由Google API嵌入的,现在"我们如何将这些向量组合在一起创建一个向量,等于条款?" 例: 条款:V ="狗咬人" 经过谷歌的嵌入,我们有V1,V2,V3,每个都映射到狗,咬人,男人。我们知道: V = V1 + V2 + V3 我们怎样才能提供V? 如果你通过一个真实载体的例子来解释它,我将不胜感激。

2 个答案:

答案 0 :(得分:5)

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

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 manMan bites dog的示例显示添加向量的弱点 - 结果不会根据单词顺序发生变化,因此这两个句子的结果将是相同的,即使它们的意义非常不同。

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

答案 1 :(得分:3)

两种解决方案:

  1. 使用短语构成词的向量添加 - 这通常很有效,因为加法是对语义构成的一个很好的估计。

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