上下文嵌入和词嵌入有啥区别

Posted

技术标签:

【中文标题】上下文嵌入和词嵌入有啥区别【英文标题】:What are the differences between contextual embedding and word embedding上下文嵌入和词嵌入有什么区别 【发布时间】:2020-09-28 00:11:33 【问题描述】:

我正在尝试理解深度学习模型嵌入的概念。

我了解使用 word2vec 如何解决使用 one-hot 向量的限制。

但是,最近我看到大量的博客文章说明 ELMo、BERT 等在谈论上下文嵌入。

词嵌入与上下文嵌入有何不同?

【问题讨论】:

【参考方案1】:

两种嵌入技术,传统的词嵌入(例如 word2vec、Glove)和上下文嵌入(例如 ELMo、BERT),旨在学习一个连续的(向量) 表示 文档中的每个单词。连续表示可用于下游机器学习任务。

传统的词嵌入技术学习全局词嵌入。他们首先通过忽略不同上下文中单词的含义,使用文档中的唯一单词构建一个全局词汇表。然后,对于在文档中出现得更频繁、彼此靠近的单词,学习相似的表示。问题是在这样的词表示中,词的上下文含义(从词的环境中得出的含义)被忽略了。例如,句子“我将手机放在left桌子的left一侧”中的“left”只学习了一个表示。但是,“left”在句子中有两种不同的含义,需要在嵌入空间中有两种不同的表示。

另一方面,上下文嵌入方法用于通过考虑文档中所有单词的序列来学习序列级语义。因此,这些技术学习多义词不同表示,例如“左”在上面的例子中,基于他们的上下文。

【讨论】:

感谢您的解释。但是,如何将这种嵌入与 NMT 一起使用? NMT 如何理解使用哪个嵌入? 首先你需要建立上下文嵌入模型,然后你需要将你的文本传递给模型以获得文本中单词的嵌入。详细信息可见medium.com/saarthi-ai/… 这里是一个流行的 NMT 框架:github.com/tensorflow/nmt我已经在这个 NMT 中使用了 word2vec 嵌入。如果我理解正确,对于 ELMo/BERT,同一个单词会有多个嵌入。 NMT 如何理解使用哪个嵌入? 我没用过 NMT。我认为这可以解释如何将 BERT 结合到 NMT 中:openreview.net/attachment?id=Hyl7ygStwB&name=original_pdf。【参考方案2】:

词嵌入和上下文嵌入略有不同。

虽然词嵌入和上下文嵌入都是使用无监督学习从模型中获得的,但存在一些差异。

word2vecfastText 提供的词嵌入具有词的词汇表(字典)。该词汇表(或字典)的元素是单词及其对应的单词嵌入。因此,给定一个单词,无论它出现在哪个句子中,它的嵌入总是相同的。在这里,预训练的词嵌入是static

但是,上下文嵌入(通常从基于转换器的模型中获得)。通过将整个句子传递给预训练模型,从模型中获得嵌入。请注意,这里有一个单词词汇表,但该词汇表不包含上下文嵌入。为每个单词生成的嵌入取决于给定句子中的其他单词。 (给定句子中的其他词称为context。基于转换器的模型工作于注意力机制,注意力是一种查看单词与其邻居之间关系的方法)。因此,给定一个词,它不会有静态嵌入,但嵌入是从预训练(或微调)模型动态生成的。

例如,考虑以下两个句子:

    我会向您展示一个有效的参考点,然后谈一谈。 你把点放在哪里了。

现在,来自预训练嵌入(例如 word2vec)的词嵌入,对于示例 1 中的两次出现,单词 'point' 的嵌入是相同的,对于示例 2 中的单词 'point' 也是相同的。 (所有三个事件都有相同的嵌入)。

虽然来自 BERT 或 ELMO 或任何此类基于转换器的模型的嵌入,但在示例 1 中两次出现的单词 'point' 将具有不同的嵌入。此外,示例 2 中出现的单词 'point' 将具有与示例 1 中不同的嵌入。

【讨论】:

以上是关于上下文嵌入和词嵌入有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

句子编码和语境化词嵌入有啥区别?

字向量和词向量区别

如何在 Keras 中使用附加功能和词嵌入?

令牌和词位有啥区别?

RTOS 和嵌入式 Linux 有啥区别? [关闭]

包括模块和嵌入模块有啥区别?