构建自己的 Word2Vec 模型

发布于:2025-03-03 ⋅ 阅读:(16) ⋅ 点赞:(0)

1. Word Embedding 基础

相信熟悉机器学习或 NLP 的同学都清楚,特征提取是模型训练过程中的一个重要步骤,它涉及将原始文本转换成可以被机器学习模型理解和处理的数值形式。之所以要这样做,是因为计算机无法理解原始的自然语言文本,必须要先进行格式转换,而 Word Embedding(词嵌入)就是一种非常主流的特征提取方式。我们可以从数学计算和语义特征两个角度,来理解 Word Embedding。

数学计算

向量空间是有维度的,以我们熟悉的二维、三维空间为例:二维向量平面坐标系下的一条直线(x,y),而三维向量就是立体坐标系下的一个平面(x,y,z),以此类推,可以扩展到多维向量。

语义特征

向量的每一个维度,可以对应实体的一个特征值。仍然以二维向量空间为例:假设我们要对“城市”这个实体进行特征提取,那么在二维向量空间内,可以设定人口和 GDP 总量这两个维度,进行归一化处理后,这两个维度的值都在 [0,1] 范围内,值越大,则代表人口越多或 GDP 总量越高。如下图所示:
在这里插入图片描述
经过 Word Embedding 处理后,自然语言的文本就被映射成了多维空间中的向量,便于机器学习模型去处理和训练。

而且,更加重要的是,这些向量在一定程度上捕获到了语义信息,即向量间的距离可以表示语义上的相似性。在向量空间中,沈阳(0.5,0.4)与哈尔滨(0.4,0.5)的距离更近,而与北京(0.8,0.9)的距离更远,反映了在人口规模、经济发展等方面,沈阳与哈尔滨更相近,而与北京的差距较大。

另外,需要补充说明的是,理论上向量的维度越高,所能提取的特征就越多,对语义的捕获也就越精准,但是相应地存储与计算的成本也就越高。

2. Word2Vec 模型介绍

Word2Vec 是一个被广泛使用的 Word Embedding 模型,它的核心目标是将单词转换成向量形式,以便于计算机理解与计算。此外,它通过大量文本语料的训练,能够捕捉到词语间的上下文关系,进而生成词的高维表示,即词向量。

Word2Vec 有两种主要模型架构:Skip-Gram 跳字模型和 Continuous Bag of Words (CBOW) 连续词袋模型。Skip-Gram 的目标是根据目标词预测其上下文单词;与之相反,CBOW 模型的目标是根据上下文前后的单词来预测目标词。

连续词袋(CBOW)

在这里插入图片描述

(图片来源:维基百科
CBOW 是一种通过上下文预测目标词的神经网络架构。在 Word2Vec 中,CBOW 尝试从一个词的“上下文”来预测这个词本身。上下文由目标词周围的一个或多个词组成,这个数目由窗口大小决定。窗口是指上下文词语的范围。例如,将窗口设置为5,那么模型将使用目标词前后各5个词。

跳字模型(Skip-Gram)

在这里插入图片描述
(图片来源:维基百科

Skip-Gram 是一种通过一个给定的目标词来预测其上下文词的神经网络架构。与 CBOW 模型相反,Skip-Gram 每次接收一个词作为输入,并预测它周围的词,这使其在处理较大数据集和捕获罕见词或短语时表现更出色。

3. 构建自己的 Word2Vec 模型

理解了前面的基础概念和模型架构,下面我们从零开始,一步一步构建一个自己的 Word2Vec 模型。
构建一个模型大致需要经过如下的步骤:

  1. 数据收集与预处理
  2. 模型训练
  3. 使用模型进行推理

我们从收集数据与预处理开始。

数据收集与预处理

网上有很多开源的文本语料,可以用作我们学习的数据。这里我选择了新浪微博的公开语料库,可以在这里下载

需要注意的是,这个原始语料库中包含一些特殊字符,在进行 XML 解析过程中可能会报错。我这里提供了一份处理后的语料库,可以直接