Embeddings 技术详解与 Word2Vec 模型训练指南
本文深入解析了嵌入(Embeddings)在机器学习中的核心作用,详细阐述了 Word2Vec 模型的两种架构(CBOW 与 Skip-gram),并逐步演示了从数据准备、词向量初始化到损失函数优化的完整训练流程。内容涵盖向量相似度计算方法及实际代码实现,旨在帮助开发者理解文本向量化原理及其在自然语言处理中的应用。文章补充了负采样优化技术及 Python 实战案例,全面覆盖了从理论到实践的关键知识点。

本文深入解析了嵌入(Embeddings)在机器学习中的核心作用,详细阐述了 Word2Vec 模型的两种架构(CBOW 与 Skip-gram),并逐步演示了从数据准备、词向量初始化到损失函数优化的完整训练流程。内容涵盖向量相似度计算方法及实际代码实现,旨在帮助开发者理解文本向量化原理及其在自然语言处理中的应用。文章补充了负采样优化技术及 Python 实战案例,全面覆盖了从理论到实践的关键知识点。

在机器学习与自然语言处理(NLP)领域,嵌入(Embeddings) 是一种将高维、稀疏的数据转化为低维、稠密向量的核心技术。其核心目的是将离散的、高维的特征(如单词、ID、类别)映射到连续的、低维的向量空间中,以便于算法更好地处理和理解数据。
传统的文本表示方法(如 One-Hot Encoding)存在维度灾难和语义缺失的问题。例如,"猫"和"狗"在 One-Hot 向量中是正交的,无法体现它们的相似性。而 Embedding 通过分布式假设,使得语义相似的词汇在向量空间中的距离更近,从而捕捉到词汇之间的深层语义关系。
本文将以经典的嵌入模型 Word2Vec 为例,详细介绍其训练过程、Embedding 生成机制以及向量相似度计算,帮助读者理解一段文本是如何转化为 n 维向量的。
Word2Vec 是由 Google 团队在 2013 年提出的一种用于生成词嵌入的算法。它基于分布式假设,即假设上下文相似的单词在语义上也是相似的。Word2Vec 不依赖于复杂的神经网络结构,而是通过浅层网络高效地学习词向量。
Word2Vec 主要有两种训练模型架构:
原理: CBOW 通过给定一个词的上下文单词(Context Words),来预测中心词(Target Word)。
原理: Skip-gram 的思想与 CBOW 相反,它通过给定一个中心词,来预测其周围的上下文词。
训练好的 Word2Vec 模型包含一张词表(Vocabulary),其中存储了所有训练数据中单词对应的词向量。当使用 Word2Vec 将句子转化为向量时,常见的策略是将句子中所有单词的词向量进行聚合。
假设目前有一个已经训练好的 Word2Vec 模型,模型的输入为'我喜欢苹果'。分词后的向量表如下(假设词向量维度为 3,实际应用中通常为 100~300 维):
| 单词 | 词向量 |
|---|---|
| 我 | [0.2, 0.3, 0.5] |
| 喜欢 | [0.4, 0.1, 0.8] |
| 苹果 | [0.6, 0.7, 0.9] |
接下来我们使用词向量平均的方法,将这个句子转化为向量。设我的词向量为 $\alpha_1$,喜欢的词向量为 $\alpha_2$,苹果的词向量为 $\alpha_3$。
计算公式为: $$ \text{Sentence Vector} = \frac{\alpha_1 + \alpha_2 + \alpha_3}{3} $$
计算结果:
最终,'我喜欢苹果'这个句子被转化为了一个向量 $[0.4, 0.367, 0.733]$。这个向量可以用于表示句子的语义特征,并输入到下游任务中。
在检索系统、推荐系统等场景中,计算向量之间的相似性至关重要。常用的方法包括余弦相似度(Cosine Similarity)以及欧几里得距离(Euclidean Distance)。
余弦相似度衡量了两个向量之间的夹角余弦值,取值范围在 -1 到 1 之间。
公式: $$ \text{Similarity}(A, B) = \cos(\theta) = \frac{A \cdot B}{||A|| ||B||} $$
欧几里得距离是计算两个向量在多维空间中的直线距离。
公式: $$ D(A, B) = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2} $$
假设我想要得到在向量数据库中与我的问题最接近的文本。首先需要对问题进行向量化。
该值接近于 1,说明向量 $\beta_1$ 和 $\beta_2$ 在方向上非常相似,具有高度的语义相关性。
词表中的词向量并非凭空产生,而是通过大量文本数据迭代训练得到的。以下是完整的训练流程。
对于一段文本,从第一个词开始以固定的窗口大小(Window Size)对文本进行切分。例如窗口大小为 2,对于序列 "I love deep learning",会生成以下训练样本(Center -> Context):
每个词在训练过程中会拥有两个概率表示:作为中心词出现的概率,以及作为上下文时出现的概率。对应地,我们用两个词向量表示词表中的每个词:一个表示该词作为中心词时的向量(Input Vector),另一个表示该词作为上下文时的向量(Output Vector)。
在计算预测概率分布时使用了 Softmax 函数。这个函数将模型的输出转化为概率分布,以便用于计算损失并进行优化。
模型会根据输入的中心词或上下文词的词向量,计算每个词汇成为目标的概率。然后使用 Softmax 函数对这些概率进行归一化处理,确保它们形成一个合理的概率分布。
对于 Skip-gram 模型,假设词向量为:
在 Skip-gram 模型中,我们要计算给定上下文词 "apple" 的情况下,每个词汇成为中心词的概率分布。首先计算内积,然后使用 Softmax 函数计算概率: $$ P(w_j | w_i) = \frac{e^{u_j^T v_i}}{\sum_{k=1}^{V} e^{u_k^T v_i}} $$ 其中 $v_i$ 是中心词向量,$u_j$ 是上下文词向量,$V$ 是词汇表大小。
使用模型的输出概率分布和实际上下文或中心词汇,计算损失,通常使用交叉熵损失函数(Cross Entropy Loss)。
损失函数公式: $$ L = -\sum_{j=1}^{V} y_j \log(p_j) $$ 其中 $y_j$ 是实际目标概率分布中词汇 $w_j$ 的概率(如果是目标则为 1,否则为 0),$p_j$ 是模型预测的概率分布中词汇 $w_j$ 的概率。
使用损失函数的梯度来更新模型的参数,通常采用梯度下降(Gradient Descent)或其变体(如 SGD、Adam)等优化算法。目标是通过反向传播算法调整模型的参数,使得损失函数最小化。
标准的 Softmax 计算量巨大,因为需要遍历整个词汇表。为了加速训练,Word2Vec 引入了负采样技术。
重复上述步骤多次(Epochs),迭代训练模型。随着训练的进行,词向量会逐渐调整以更好地捕捉词汇之间的语义关系。当损失函数收敛或达到预设的迭代次数后,训练结束。
下面提供一个使用 Python 的 gensim 库训练 Word2Vec 模型的完整示例。
from gensim.models import Word2Vec
from gensim.test.utils import common_texts
# 1. 准备数据:简单的句子列表
sentences = [
["机器", "学习", "是", "AI", "的", "核心"],
["深度", "学习", "属于", "机器", "学习"],
["自然", "语言", "处理", "应用", "广泛"]
]
# 2. 训练模型
# vector_size: 词向量维度
# window: 上下文窗口大小
# min_count: 忽略低于此频率的词
# workers: 并行线程数
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
# 3. 保存模型
model.save("word2vec_model.bin")
# 4. 测试词向量
print(model.wv["机器"])
# 5. 查找相似词
similar_words = model.wv.most_similar("学习", topn=5)
print(similar_words)
Word2Vec 利用深度学习模型,通过预测上下文词汇来生成词向量,从而捕捉单词之间的语义关系。这种向量表示使得文本信息能够在计算机中进行数学计算和分析,为自然语言处理任务提供了基础。
虽然 Word2Vec 是里程碑式的成果,但随着技术发展,Transformer 架构(如 BERT)和预训练大模型逐渐取代了静态词向量,实现了上下文相关的动态 Embedding。然而,理解 Word2Vec 的原理仍是掌握现代 NLP 技术的基石。
通过本文的学习,您应该能够理解 Embeddings 的核心概念,掌握 Word2Vec 的训练逻辑,并具备初步的代码实践能力。在实际项目中,建议结合具体业务场景选择合适的模型架构与超参数配置。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online