18

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

本文所述,至少有三种常用方法可以组合这两个嵌入向量:

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

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

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

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

4

4 回答 4

8

我在斯坦福讲座“自然语言处理的深度学习”(Lecture 2,2016 年 3 月)中找到了答案。它在这里可用。在第 46 分钟,Richard Socher 指出,常见的方法是平均两个词向量。

于 2018-01-18T11:51:26.497 回答
6

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

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

简而言之,L1-Normalized 平均词向量和词的总和是很好的表示。

于 2018-10-30T18:04:33.343 回答
0

我不知道任何经验性地测试组合两个向量的不同方式的工作,但是有一篇非常有影响力的论文比较:1)只使用词向量,2)将词和上下文向量相加。论文在这里:https ://www.aclweb.org/anthology/Q15-1016/ 。

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

这是论文的引述:

对于 SGNS 和 GloVe,值得尝试使用 w + c 变体 [将单词和上下文向量相加],它应用成本低(不需要重新训练)并且可以带来可观的收益(以及可观的损失) .

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

顺便说一句,这是一篇关于如何从 gensim 获取上下文向量的帖子:link

于 2020-04-10T02:42:38.073 回答
-1

我想我试图根据评论来回答。

您链接到的问题是:“WordVectors 如何连接词向量以形成句子向量”

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

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

有时在语言中,同一个词具有不同的含义,这取决于句子中词的类型或词的组合。例如,“游戏”与“公平游戏”有不同的含义。Sense2Vec 提供了为这些复合词生成词向量的建议:https ://explosion.ai/blog/sense2vec-with-spacy (当然,在这种情况下,您已经需要理解句子结构的东西,例如 SpaCy)

于 2017-10-23T14:08:49.890 回答