NLP 词嵌入向量即word embedding原理详解
NLP 词嵌入向量即word embedding原理详解
在自然语言处理(NLP)领域,词嵌入(word embedding)是一个核心概念。它将单词映射到连续的向量空间中,使得计算机能够理解和处理人类语言。本文将深入探讨词嵌入的原理,特别是Word2Vec中的CBOW模型。
1. 前言
在NLP相关技术中,词向量、word embedding等术语经常出现。Word2Vec是一种能够将单词表示为低维向量的技术,不仅可以方便计算机计算,还可以捕捉单词之间的语义关系。那么,词向量是如何产生的?为什么它可以表示单词之间的语义关系?让我们从Word2Vec的背景和原理开始探讨。
2. 目标
Word2Vec是由Tomas Mikolov等人在2013年提出的论文《Efficient Estimation of Word Representations in Vector Space》中提出的,并由Google在开源工具包中实现。它基于分布式假设,即相似上下文中出现的单词有相似的含义,通过学习上下文信息来生成单词的向量表示,称为word embedding。
考虑一个句子 "you are a good man",如何用计算机语言表示这句话?早期常用的方法是建立一个包含所有单词的词典,并对词典中的每个单词进行编号。例如:
- you: [1, 0, 0, 0, 0]
- are: [0, 1, 0, 0, 0]
- a: [0, 0, 1, 0, 0]
- good: [0, 0, 0, 1, 0]
- man: [0, 0, 0, 0, 1]
这就是one-hot编码。然而,one-hot编码存在以下问题:
- 如果词汇表很大(几万甚至更多),向量长度会变得非常大,计算消耗过高。
- 添加或删除单词会导致所有单词的表示发生变化。
- 无法实现“国王-男人+女人=女王”这样的语义运算。
因此,我们需要一种新的表示方法:
- 所有单词的表示维度固定(例如300维)
- 能够表示语义信息,相似的词语有相近的向量
3. CBOW
CBOW(Continuous Bag of Words)模型的目标是根据上下文中的周围单词预测中心词。CBOW模型的基本思想是通过上下文中的多个单词来预测当前单词。给定一个长度为2c的上下文窗口,CBOW模型通过最大化给定上下文单词的条件下中心词的条件概率来训练模型。
例如,对于句子 "you are a good man",如果窗口大小为2,当"a"作为预测单词时,上下文窗口为["you", "are", "a", "good"]。假设词典包含10个单词,那么输入可以表示为:
- you: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- are: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
- good: [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
输入聚合表示为:[1, 1, 0, 1, 0, 0, 0, 0, 0, 0]
目标表示为:a: [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
训练过程如下:
- 将每个单词表示为一个one-hot向量,维度等于词汇表大小。
- 通过一个隐藏层得到中心词的预测概率分布。
- 使用softmax函数归一化预测概率。
- 使用交叉熵损失函数计算差异,并通过反向传播更新参数。
模型结构如下:
4. 训练结果
(1)训练的主要目的是得到输入层到隐藏层的权重矩阵U,类似于一个“查找表”。例如:
U = \begin{bmatrix} 0.01 & 0.23 &0.2&...&0.05\ 0.02&0.13&0.05&...&0.01\ &&...\ 0.01&0.03&0.22&...&0.04\ \end{bmatrix}
对于单词"are"的one-hot表示[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],其对应的embedding向量就是U矩阵的第2行。
(2)为什么这种方式可以捕捉到单词之间的语义关系?
分布假设:Word2Vec基于分布假设,即相似的单词在语料库中通常会在相似的上下文中出现。这意味着具有相似语义的单词在文本数据中通常会有类似的分布模式。
向量空间中的相对位置关系:Word2Vec将单词映射到一个连续的向量空间中,其中每个维度都表示了一个语义特征。在这个向量空间中,具有相似语义的单词通常会在向量空间中更加接近。
5. 如何使用
训练好的Word2Vec模型可以应用于各种NLP任务:
词向量相似度计算:通过计算词向量之间的余弦相似度或内积等度量,可以找到语义上相似的单词。
词语替换:通过找到与目标单词在向量空间中相似的单词,可以进行词语替换。
文本分类:可以将单词的向量表示作为输入特征,用于训练文本分类模型。
语言模型:可以使用单词的向量表示构建语言模型,预测下一个单词或下一个句子。
文本生成:将训练好的Word2Vec模型用于文本生成任务中,可以帮助模型生成更加自然和连贯的文本。
6. 延伸
在LLM(大语言模型)中,tokenizer的作用实际上也是在训练中建立embedding向量。此外,在Transformer模型中,encoding/decoding输入向量的Input Embeddings也是在训练中建立embedding向量。这些思想与Word2Vec是一致的。
7. 参考
- 《LLM 为什么需要 tokenizer?》
- 《Efficient Estimation of Word Representations in Vector Space》
- 《NLP深入学习:大模型背后的Transformer模型究竟是什么?(一)》
- 《NLP深入学习:大模型背后的Transformer模型究竟是什么?(二)》