什么是词嵌入和字符嵌入?为什么单词用巨大的向量表示?

数据挖掘 nlp 词嵌入 嵌入
2022-02-12 10:55:58

在 NLP 词嵌入中,将词表示为数字,但在阅读了许多博客后,我发现该词被表示为向量?那么究竟什么是词嵌入以及为什么用向量表示词并且向量大小很大。该向量代表什么值?

词嵌入和字符嵌入有什么区别?请用简单的例子简单地解释一下。

3个回答

NLP 中的大多数问题都需要系统理解文本的语义,而不仅仅是特定单词的排列。

语义理解使系统能够说“我很高兴”和“高兴”具有相同的含义。

为了将这个特性整合到系统中,我们以向量的形式呈现特定语言的单词。通常称为嵌入,它们有助于建立单词和短语之间的相似性。

例如,表示单词“happy”的向量将位于表示单词“joy”、“pleasure”、“sad”等的向量附近。这些向量是高维的,但使用 PCA 或其他降维技术它们是降低到可以可视化的 3 个维度。

这就是我们以向量的形式对单词进行编码的原因。在分析语义相似度时,我们经常使用余弦相似度来确定与给定向量最接近的向量。

直觉上,包含所有可能的英语单词的向量的 3D 空间可以被认为是我们的知识库我们倾向于将相似的词放在一起。例如,如果我们谈论快餐,我们的大脑会捕捉知识库的区域来检索与快餐相关的单词,如“汉堡”、“鸡肉”等。

单词和字符有几种类型的向量表示,我在这里假设主要兴趣是当今深度学习中常用的密集表示。

首先,一些背景

词或字符向量化的目的是将句子或文档转换为可用于机器学习的特征集。在传统的 NLP 中,使用了几种方法进行向量化,例如计数向量化和 TF-IDF 向量化。这些方法本质上会根据文档中单词的出现来生成矩阵。例如,一组文档的计数向量化将返回一个具有大小的矩阵n_documents X n_words(文档行,wrods 列)。每列将是一个单词的向量表示。考虑到语言中有大量的单词并且只有少数单词会频繁出现,这些向量化矩阵将是巨大的,但大多包含零,即稀疏表示这种方法存在一些问题:

  1. 极高维度的数据在大多数机器学习方法(即维度诅咒)中效果不佳。
  2. 这些稀疏表示效率低下(尤其是内存效率低下)。经常需要通过一些方法进行压缩,例如 PCA 和数据缩减,例如去除停用词。
  3. 这些向量化方法依赖于训练样本,不能很好地泛化。

由于这些问题,研究人员有动力去寻找更好的表示。

词的密集表示

关于密集表示的两个开创性工作是Word2VecGloVe这些方法产生了词的密集、固定长度的向量表示,而不是依赖于训练样本的数量,从而解决了问题 1 和 2(从上面)。为了解决问题 3,这些模型在非常非常大的语料库上进行了训练(参见 GloVe 的第 4.2 节)[2]。

这些方法的结果(这是一个令人惊讶的结果)是密集向量似乎包含一定量的语义信息,即在某种意义上,词义被嵌入到这些向量中。考虑 Word2Vec 论文中的以下引用:

“有点令人惊讶的是,这些问题可以通过对单词的向量表示执行简单的代数运算来回答。要找到一个与 small 相似的单词,就像最大与 big 相似一样,我们可以简单地计算向量 X = vector( ”biggest”)−vector(”big”) + vector(”small”)...当词向量训练好后,使用这种方法可以找到正确的答案(词最小)。” [1]

要回答第一个问题(这些表示是什么以及为什么使用向量):

这些密集的词向量在语义方面有效地表示(在某种意义上)词。

好的,那么向量长度从何而来?对于 Word2Vec 和 GloVe,通常使用/推荐 300 的大小。这来自 GloVe 论文。来自 GloVe 论文的下图 [2] 显示了 GloVe 向量在语义和句法任务中的性能。性能在向量大小为 300 时基本趋于平缓。

手套性能

这些密集表示具有很好的特性,并且与传统方法相比具有一些显着的优势,但它们仍然需要一个大的嵌入矩阵。GloVe 论文提到,在数十亿个单词中,只有 400,000 个最常用的单词被使用。所以规模仍然是一个问题。此外,当仅选择一小部分词来嵌入大量词时,可能会“超出词汇表”(OOV)。这些词都被映射到一个单一的OOV向量。此外,还有其他问题,例如拼写错误。这激发了字符和子词的嵌入。

字符嵌入

随着 NLP 中的深度学习爆炸式增长,需要的词汇量越来越大。字符和子词嵌入试图限制嵌入矩阵的大小,例如在 BERT 中。然而,这些类型的嵌入并不编码与词嵌入编码相同的深层语义。

字符嵌入的构建方式与词嵌入的构建方式相似。但是,向量不是在单词级别嵌入,而是表示语言中的每个字符。例如,代替“king”的向量,每个字母都有一个单独的向量:“k”、“i”、“n”和“g”。如前所述,这些类型的嵌入不编码词嵌入所包含的相同类型的信息。相反,字符级嵌入可以被认为是编码的词汇信息,并且可以用于增强或丰富词级嵌入(请参阅使用子词信息丰富词向量)。虽然已经对字符嵌入的使用进行了一些研究(参见 [3]),但字符级嵌入的含义通常很浅。

正如 [3] 中提到的,字符级嵌入比单词级嵌入具有一些优势,例如

  • 能够处理新的俚语和拼写错误
  • 所需的嵌入矩阵比字级嵌入所需的要小得多。

参考

[1] 向量空间中词表示的有效估计

[2] GloVe:词表示的全局向量

[3] 用于文本分类的字符级卷积网络

首先是这样想的。对单词进行编码以便将其放入神经网络模型的最天真的方法是一种热编码。如果是这种情况,您会注意到您的编码向量大小将随着您的词汇量大小线性增长,并且最重要的是它是稀疏的(没有适当的处理它是低效的)。

其次,您的编码没有任何“意义”,您基本上是在要求网络进行繁重的工作,以找出可能有效但不理想的含义。

那么我们如何帮助我们的网络呢?人类对语言如何工作有先验知识,我们试图以嵌入的形式灌输它们。基于此,我们通过提供更简单的“连接点”任务来帮助我们的神经网络。我们想要的其他一些功能是我们可以测量语义相似度。我相信 Shubam 提到了这一点。

最后,我们解决了 2 个问题。首先,在某种意义上,我们正在做降维。其次,我们能够以更有意义的方式在我们的词汇表中投射单词。

您可以对角色应用类似的想法,但可能意义不大。