【问题标题】:word2vec - what is best? add, concatenate or average word vectors?word2vec - 什么是最好的?添加、连接或平均词向量?
【发布时间】:2020-04-10 10:42:38
【问题描述】:

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

正如this post 中所述,至少有三种常用方法可以组合这两个嵌入向量:

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

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

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

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

【问题讨论】:

  • 您可能想要添加您正在尝试做的事情,例如构建一个句子或段落级别的向量。 (例如 Gensim 为此提供了 doc2vec)
  • 我想用 gensim 生成的词嵌入初始化我的循环语言模型。所以我的目标是为我的词汇表中的每个单词学习嵌入。在训练 word2vec 模型后,我可以使用原始嵌入或进一步修改它们(如帖子中所述)。我想知道哪种策略产生“最佳”词嵌入
  • 在您链接的第一篇文章中,问题是关于创建句子向量。即将单词向量组合成一个表示句子(或段落)的向量。这就是关于如何组合向量的问题似乎最相关的地方。这是你想做的吗?
  • 不确定我是否理解您的问题。我正在构建一个语言模型,该模型以连续单词为输入,并经过训练以预测句子中的下一个单词。每个输入词都映射到一个嵌入。我使用 gensim 来学习这些词嵌入。我的目标是获得最好的词嵌入。
  • 好的,那么听起来您并没有尝试这样做。据我所知,您提到的向量组合用于从多个向量中创建一个向量。不是为了改进词向量本身。但也许其他人知道得更好。为了获得更好的向量,您显然可以查看训练数据、嵌入的大小或 GloVe 等替代方法。还包括句子中单词的类型可能会改善向量(参见 Sense2Vec)。

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


【解决方案1】:

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

【讨论】:

  • 他确实说“平均或连接”。在这种情况下,“连接”是“平均”的同义词吗?还是他的意思是可以选择两个向量的“均值”或“总和”?
【解决方案2】:

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

在这篇论文中你还可以看到其他组合词向量的方法。

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

【讨论】:

  • 首先请说明您是主要作者(即利益冲突)。其次,总结相关部分而不是仅仅在此处链接到您的论文会很有用。
  • 其实他感兴趣的工作是研究论文。我已经解释过了。没有理由不赞成这个答案。与帖子有关。
  • 好论文,但问题是关于将 word2vec 中的两个向量组合为 one 特定单词,但不组合给定 sentence 的词向量。跨度>
【解决方案3】:

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

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

这是论文的引述:

对于 SGNS 和 GloVe,值得尝试使用 w + c 变体 [加起来单词和上下文向量],这很便宜 申请(不需要再培训)并可能导致 可观的收益(以及可观的损失)。

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

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

【讨论】:

    【解决方案4】:

    我以为我试图根据 cmets 来回答。

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

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

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

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

    【讨论】:

    • 我想你误解了我的问题。 word2vec 模型为每个词保存两个词向量 - 每个权重矩阵中的一个。我的问题与为什么以及如何将这两个向量组合成单个单词有关。我知道创建词向量的其他技术和/或如何调整 word2vec 模型。但我的问题与 word2vec 及其输出矩阵特别相关。
    • 我很可能有,我以后可以删除这个答案。您之前提到过预测下一个单词,但我可能错过了与您的模型相关的任何内容,该模型包含两个单词的向量。我概述了组合向量以创建句子向量的原因。但是您的用例似乎有所不同。可能值得进一步扩展您的问题以更详细地解释您的用例?
    • 我的模型没有为每个单词保留两个向量。 word2vec 模型是!
    猜你喜欢
    • 2018-01-20
    • 2019-02-23
    • 2015-07-20
    • 1970-01-01
    • 2020-07-22
    • 2015-01-17
    • 2015-12-21
    • 1970-01-01
    • 2016-07-01
    相关资源
    最近更新 更多