word2vec - 什么是最好的?添加、连接或平均词向量?

word2vec - what is best? add, concatenate or average word vectors?

我正在研究循环语言模型。为了学习可用于初始化我的语言模型的词嵌入,我使用了 gensim 的 word2vec 模型。 训练后,word2vec 模型为词汇表中的每个单词保留两个向量:单词嵌入(input/hidden 矩阵的行)和上下文嵌入(hidden/output 矩阵的列)。

中所述,至少有三种组合这两个嵌入向量的常用方法:

  1. 总结每个词的上下文和词向量
  2. 求和和平均
  3. 连接上下文和词向量

但是,我找不到关于最佳策略的合适论文或报告。所以我的问题是:

  1. 是否有一个通用的解决方案是求和、平均还是连接向量?
  2. 或者最好的方法是否完全取决于所讨论的任务?如果是这样,什么策略最适合词级语言模型?
  3. 为什么要组合向量?为什么不对每个词使用 "original" 词嵌入,即包含在输入和隐藏神经元之间的权重矩阵中的词嵌入。

相关(但未回答)的问题:

我想我尝试根据评论回答。

您链接的问题是:"WordVectors How to concatenate word vectors to form sentence vector"

词向量可以单独比较。但通常人们想要将句子、段落或文档放在上下文中——即单词的集合。然后问题出现了如何将它们组合成一个向量(gensim 为该用例提供 doc2vec)。

这似乎不适用于您的情况,我只会使用给定的词向量。您可以调整嵌入大小、训练数据和其他算法等参数。您甚至可以组合来自不同算法的向量来创建一种 'ensemble vector'(例如 word2vec 和 GloVe)。但效率可能不会更高。

有时在语言中,同一个词根据句子中词的类型或词的组合具有不同的含义。例如'game' 与 'fair game' 的含义不同。 Sense2Vec 提出了为这些复合词生成词向量的建议:https://explosion.ai/blog/sense2vec-with-spacy (当然,那样的话你已经需要能理解句子结构的东西了,比如SpaCy)

我在斯坦福讲座 "Deep Learning for Natural Language Processing"(第 2 课,2016 年 3 月)中找到了答案。它可用 here。在第 46 分钟,Richard Socher 表示,通常的方法是 平均 两个词向量。

您应该阅读 this 研究工作至少一次,以了解使用不同代数运算符组合词嵌入的整个想法。这是我的研究。

在本文中您还可以看到其他组合词向量的方法。

简而言之,L1-Normalized average word vectors and sum of words are good representations.

我不知道有什么工作对结合这两个向量的不同方式进行了实证测试,但是有一篇很有影响力的论文比较了:1) 只使用词向量,以及 2) 将词和上下文向量相加。论文在这里:https://www.aclweb.org/anthology/Q15-1016/.

首先,请注意指标是类比和相似性测试,而不是下游任务。

引用论文中的一句话:

for both SGNS and GloVe, it is worthwhile to experiment with the w + c variant [adding up word and context vectors], which is cheap to apply (does not require retraining) and can result in substantial gains (as well as substantial losses).

所以我猜你只需要在你的特定任务上尝试一下。

顺便说一句,这里是 post 如何从 gensim 获取上下文向量:link