[英]What are the differences between contextual embedding and word embedding
我试图理解深度学习模型嵌入的概念。
我了解使用word2vec
如何解决使用 one-hot 向量的局限性。
然而,最近我看到大量的博客文章说明 ELMo、BERT 等在谈论上下文嵌入。
词嵌入与上下文嵌入有何不同?
词嵌入和上下文嵌入略有不同。
虽然词嵌入和上下文嵌入都是使用无监督学习从模型中获得的,但存在一些差异。
word2vec
或fastText
提供的词嵌入具有词的词汇表(字典)。 该词汇表(或字典)的元素是单词及其对应的单词嵌入。 因此,给定一个单词,无论它出现在哪个句子中,它的嵌入总是相同的。 在这里,预训练的词嵌入是static
。
然而,上下文嵌入(通常从基于转换器的模型中获得)。 通过将整个句子传递给预训练的 model,可以从 model 获得嵌入。 请注意,这里有一个单词词汇表,但该词汇表不包含上下文嵌入。 为每个单词生成的嵌入取决于给定句子中的其他单词。 (给定句子中的其他词被称为context
。基于转换器的模型基于注意力机制,注意力是一种查看单词与其邻居之间关系的方法)。 因此,给定一个词,它不会有 static 嵌入,但嵌入是从预训练(或微调)的 model 动态生成的。
例如,考虑以下两个句子:
现在,来自预训练嵌入(如 word2vec)的词嵌入,对于示例 1 中的两次出现,单词'point'
的嵌入是相同的,对于示例 2 中的单词'point'
也是相同的。(所有三个事件具有相同的嵌入)。
虽然来自 BERT 或 ELMO 或任何此类基于转换器的模型的嵌入,但示例 1 中单词'point'
的两次出现将具有不同的嵌入。 此外,示例 2 中出现的单词'point'
将具有与示例 1 中不同的嵌入。
传统的词嵌入(例如 word2vec、Glove)和上下文嵌入(例如 ELMo、BERT)这两种嵌入技术都旨在学习文档中每个单词的连续(向量)表示。 连续表示可用于下游机器学习任务。
传统的词嵌入技术学习全局词嵌入。 他们首先通过忽略不同上下文中单词的含义,使用文档中的唯一单词构建一个全局词汇表。 然后,对于在文档中出现得更频繁、彼此靠近的单词,学习相似的表示。 问题在于,在这样的词表示中,词的上下文含义(从词的环境中得出的含义)被忽略了。 例如,在“我把手机放在桌子的左边”这句话中,“左”只学习了一种表示。 但是,“left”在句子中有两种不同的含义,需要在嵌入空间中有两种不同的表示。
另一方面,上下文嵌入方法用于通过考虑文档中所有单词的序列来学习序列级语义。 因此,这样的技术基于它们的上下文来学习多义词的不同表示,例如上面示例中的“left”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.