以下是已更新文章:
1. LLM大模型架构专栏|| 从NLP基础谈起
2.LLM大模型架构专栏|| 自然语言处理(NLP)之建模
3. LLM大模型架构之词嵌入(Part1)
4. LLM大模型架构之词嵌入(Part2)
5. LLM大模型架构之词嵌入(Part3)
欢迎关注公众号【柏企阅文

在自然语言处理(NLP)的领域中,Word2Vec 是一种极为关键的技术,它能够将单词转化为向量表示,进而让计算机更好地理解文本。接下来,我们将深入探讨 Word2Vec 的训练过程。

4.1 Word2Vec 如何生成词向量

Word2Vec 运用了一种在机器学习中常见的技巧。它本质上是一个仅有单个隐藏层的简单神经网络。在训练过程中,如同其他神经网络一样,其目标是调整权重以降低损失函数的值。但特别的是,我们不会将其用于原本训练的任务。相反,在训练完成后,我们会取其隐藏层的权重作为词向量,而舍弃掉模型的其他部分。

这种技巧在无监督特征学习中也有应用。例如,在自编码器中,训练时会在隐藏层压缩输入向量,并在输出层将其还原为原始向量。训练结束后,通常会舍弃输出层,仅使用隐藏层,因为隐藏层已经学习到了良好的特征。这就像是一种在没有标注训练数据的情况下学习优质图像特征的方法。

4.2 架构

Word2Vec 的架构与自编码器有相似之处。首先,我们不能直接将单词字符串输入神经网络,而是要将其转换为 one - hot 向量。one - hot 向量的长度与词汇表长度相同,除了代表目标单词的索引位置为 1 外,其余元素均为 0 。

其隐藏层是一个标准的全连接(Dense)层,这个隐藏层的权重就是我们所需要的词向量。输出层则会输出词汇表中目标单词的概率。

从输入输出来看,网络的输入是表示输入单词的 one - hot 向量,标签也是表示目标单词的 one - hot 向量,但网络的输出是目标单词的概率分布,并非像标签那样一定是 one - hot 向量。


在计算过程中,当我们将一个 1×10,000 的 one - hot 向量与一个 10,000×300 的矩阵相乘时,实际上就会选择出对应于‘1’位置的矩阵行,这一行就是输入单词的“词向量”。所以说,隐藏层的权重矩阵的每一行就是我们想要的词向量,隐藏层就像是一个查找表。最终的目标就是学习这个隐藏层的权重矩阵,完成训练后舍弃输出层。输出层使用的是 softmax 激活函数。

4.3 语义和句法关系

那么 Word2Vec 是如何解决我们在文章开头提出的问题的呢?从技术上讲,如果不同的单词在上下文中相似,那么当这些单词作为输入传递给 Word2Vec 时,它应该产生相似的输出。为了实现相似的输出,这些单词在隐藏层中计算得到的词向量必须相似。因此,Word2Vec 会学习为相似上下文中的单词生成相似的词向量。

Word2Vec 能够捕捉单词之间多种不同程度的相似性,通过向量算术可以重现语义和句法模式。例如,像“Man is to Woman as Brother is to Sister”这样的模式,可以通过对这些单词的向量表示进行代数运算来生成。在模型中,“Brother” - “Man” + “Woman”的向量表示结果会最接近“Sister”的向量表示。这种关系不仅可以在语义关系(如 Country - Capital)中生成,也可以在句法关系(如 present tense - past tense)中生成。

4.4 训练算法

Word2vec 模型可以使用分层 softmax 和/或负采样进行训练,通常情况下仅使用负采样。

传统上,预测模型使用最大似然原则进行训练,通过对所有词汇表单词的 softmax 函数来最大化给定前一个单词时下一个单词的概率。

然而,对于大型词汇表,这种训练过程的计算成本非常高,因为在每个训练步骤都需要计算和归一化所有词汇表单词。所以许多模型都提供了不同的方法来降低计算量,Word2Vec 也不例外。尽管它的网络只有两层,比较浅,但非常宽,因此它的每个训练过程都提供了独特的降低计算量的方法。

4.4.1 分层 softmax

分层 softmax 方法使用哈夫曼树来近似模型试图最大化的条件对数似然,从而减少计算量。它对于不常见的单词效果更好。但随着训练轮数的增加,分层 softmax 的作用会逐渐减弱。

4.4.2 负采样

负采样通过仅对目标单词和 N 个负实例进行采样,而不是对整个词汇表进行采样,来降低计算量。从技术上讲,负采样会忽略 one - hot 标签词向量中的大部分‘0’,只传播和更新目标单词和随机采样的几个负类的权重。

具体来说,负采样会与目标单词一起采样负实例(单词),并最小化采样负实例的对数似然,同时最大化目标单词的对数似然。

那么负样本是如何选择的呢?负样本是使用一元分布进行选择的。基本上,选择一个单词作为负样本的概率与其频率相关,频率越高的单词越有可能被选为负样本。具体而言,每个单词被赋予一个权重,等于其频率(单词计数)的 3/4 次方。选择一个单词的概率就是其权重除以所有单词权重之和。

4.5 实用方法

不同的模型参数和不同的语料库大小会极大地影响 Word2vec 模型的质量。

有多种方法可以提高准确性,包括选择模型架构(CBOW 或 Skip - Gram)、增加训练数据集、增加向量维度以及增加算法考虑的单词上下文窗口大小。但每一种改进都伴随着计算复杂度的增加,从而导致模型生成时间变长。

在使用大型语料库和高维向量的模型中,Skip - gram 模型通常能获得最高的整体准确性,在语义关系上的准确性也最高,在大多数情况下句法准确性也最高。不过,CBOW 的计算成本较低,并且能产生相似的准确性结果。

随着使用的单词数量和维度的增加,准确性会总体提高。将训练数据量翻倍所带来的计算复杂度增加,与将向量维度翻倍相当。

4.5.1 子采样

一些频繁出现的单词往往提供的信息较少。对于频率高于某个阈值(例如‘a’、‘an’和‘that’)的单词,可以进行子采样,以提高训练速度和性能。此外,常见的单词对或短语也可以视为单个“单词”来提高训练速度。

4.5.2 维度

词向量的质量通常会随着维度的增加而提高。但在达到某个阈值后,边际收益会逐渐减少。一般来说,向量的维度通常设置在 100 到 1000 之间。

4.5.3 上下文窗口

上下文窗口的大小决定了给定单词前后有多少单词会被包含为其上下文单词。根据作者的建议,Skip - gram 的推荐值为 10,CBOW 的推荐值为 5。

以下是一个上下文窗口大小为 2 的 Skip - gram 示例:

希望通过以上对 Word2Vec 训练的详细介绍,能帮助大家更好地理解这一重要的自然语言处理技术。在后续的内容中,我们还将探讨其他相关的主题,敬请期待!

希望这篇文章能帮助大家更深入地理解词嵌入技术,欢迎关注公众号 柏企阅文 如果您有任何问题或建议,欢迎在评论区留言交流!