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

时间:2017-10-23 12:44:41

标签: python word2vec gensim word-embedding language-model

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

this post所述,至少有三种常用方法可以将这两种嵌入向量组合在一起:

  1. 总结每个单词的上下文和单词向量
  2. 求和&平均
  3. 连接上下文和单词向量
  4. 但是,我找不到关于最佳策略的适当论文或报告。所以我的问题是:

    1. 对于向量的求和,平均或连接,是否有一个共同的解决方案?
    2. 或者最好的方法完全取决于相关任务?如果是这样,什么策略最适合单词级语言模型?
    3. 为什么要组合载体?为什么不为每个单词使用“原始”单词嵌入,即输入和隐藏神经元之间的权重矩阵中包含的单词嵌入。
    4. 相关(但未答复)的问题:

4 个答案:

答案 0 :(得分:3)

我在斯坦福大学的讲座“自然语言处理的深度学习”(第2讲,2016年3月)中找到了答案。它可用here。在第46分钟,理查德·索彻表示,通常的方法是平均两个单词向量。

答案 1 :(得分:0)

您应该至少阅读一次this研究工作,才能获得使用不同的代数运算符组合词嵌入的整体思路。是我的研究。

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

简而言之,L1-归一化平均单词向量和单词总和就是很好的表示。

答案 2 :(得分:0)

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

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

这是这篇论文的引文:

对于SGNS和GloVe而言,值得尝试w + c变体[将单词和上下文向量相加],对于 申请(不需要再培训),可能会导致 带来巨大的收益(以及巨大的损失)。

所以我想您只需要在特定任务上尝试一下即可。

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

答案 3 :(得分:-1)

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

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

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

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

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