Word2Vec 和上下文嵌入之间的区别

问题描述 投票:0回答:3

我试图理解词嵌入和上下文嵌入之间的区别。

以下是我的理解,如有错误请补充。

词嵌入算法有一个单词的全局词汇表(字典)。当我们执行 word2vec 时,输入语料库(唯一单词)与全局字典映射,它将返回嵌入。

上下文嵌入用于通过考虑文档中所有单词的序列来学习序列级语义。

但我不明白我们在词嵌入中考虑上下文的位置。

machine-learning deep-learning nlp data-science
3个回答
1
投票

您对上下文嵌入的理解是正确的。上下文嵌入是通过考虑句子或文档中单词的上下文来生成的。这是通过使用 BERT、ELMO 或 GPT 等模型来完成的,这些模型经过大量文本数据的训练,可以生成根据上下文捕获单词含义的嵌入。

关于词嵌入,训练期间没有明确考虑上下文。词嵌入是通过查看大型文本语料库中单词的共现情况来生成的。词嵌入背后的想法是,在相似上下文中出现的词将具有相似的嵌入。例如,“狗”和“猫”一词可能具有相似的嵌入,因为它们经常出现在相似的上下文中,例如“我有一只宠物”或“动物很可爱。”

然而,值得注意的是,一些生成词嵌入的算法,例如带有负采样的skip-gram(SGNS),可以被视为隐式考虑上下文。在 SGNS 中,目标是预测给定目标单词的上下文单词,因此算法本质上是尝试学习善于捕获单词上下文的嵌入。


0
投票
  • 主要区别在于,假设您使用的是 word2vec 嵌入,那么当未知单词出现时,模型会感到困惑,因为它不知道/理解上下文。
  • 第二件事是,如果您使用像单词编码这样的上下文嵌入,那么当新单词出现时,模型将尝试在其词汇表中找到它的嵌入。如果嵌入不存在,那么它会将单词分解为子词,然后尝试找到这些子词的嵌入。它会一直持续到角色级别。并且单词几乎总是有角色的嵌入。 (当然,为了获得这些字符级嵌入,应该对单词进行足够的数据训练)。 例如text =“我的名字是哈沙德。” word2vec 和 wordpiece 编码中很有可能存在单词“My”、“name”、“is”的嵌入。但是“Harshad”这个词呢? word2vec 根本无法处理这个单词,并将其命名为“未知”单词(在某种程度上)。但在字片编码中,单词将像这样划分:“Har##”、“##shad” 现在模型将查找这两个单词的嵌入。如果它没有找到它们,那么它会像这样向前迈出一步:“Ha##”,“##r”。现在很可能有“r”的编码,但可能没有“Ha”的编码,那么它将继续寻找嵌入,直到找到字符级别的东西。 但我们举一个极端的例子,假设没有嵌入“Harshad”,那又怎样呢?在这种情况下,模型会将其标记为“UNK”。它会告诉模型,这个词不存在于它的词汇表中。

0
投票

今天,当谈论上下文嵌入时,它通常用于描述根据给定上下文动态变化的嵌入(例如“单词”出现的句子),并且不会作为预训练过程生成一次并用作不依赖于当前上下文的字典,就像 w2v 中一样。

虽然 w2v 和上下文嵌入通常都是基于“单词”出现的“上下文”生成的,但 w2v 仅训练一次,同时使用“单词”出现的所有上下文作为预训练过程。另一方面,上下文嵌入是根据给定的“单词”及其出现的上下文动态生成的。 清楚显示差异的一个例子是“鼠标”一词。这个词可以用来描述一种动物,或者用来在计算机屏幕上移动光标的机械工具。在 w2v 中,“鼠标”的嵌入将是静态的,并且将保存有关“动物鼠标”和“计算机鼠标”的信息。在上下文嵌入中,您需要提供该单词出现的当前上下文,因此在谈论动物的句子中的“鼠标”和谈论计算机的句子中的“鼠标”将会有不同的嵌入。

请注意,上下文嵌入是在大型语言模型的上下文中讨论的,它可以根据上下文动态动态输出文本嵌入。

© www.soinside.com 2019 - 2024. All rights reserved.