12 从零学NLP系列教程:词向量之Word2Vec
系列进度
自然语言处理入门 · 第 12 / 30 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
Word2Vec 把词放到连续向量空间里,让相似上下文的词更接近。它强调分布式语义,而不是人工写规则。
我会用相似词和类比样例检查向量质量。只看训练 loss,不足以说明向量有用。
在上一篇中,我们讨论了词向量的另一种表示方法——TF-IDF。这种方法侧重于词在文档中的重要性。然而,TF-IDF并未考虑词与词之间的语义关系,限制了其在许多自然语言处理任务中的应用。因此,今天我们将深入了解一种更为先进的词向量生成技术——Word2Vec。
什么是Word2Vec
Word2Vec是一种高效的算法,用于生成词向量(word embeddings),由Google的研究团队在2013年推出。与TF-IDF不同,Word2Vec通过“上下文”来捕捉词语的语义关系。这意味着模型会考虑一个词在句子中出现时周围的所有词,从而生成一个能够代表该词的稠密向量。
学习 Word2Vec 时,先看上下文窗口、Skip-gram、CBOW、负采样和向量相似度。
Word2Vec的基本原理
Word2Vec主要有两种模型:
-
连续词袋模型(CBOW):该模型的输入是一组上下文词,目标是预测中心词。也就是说,给定上下文词,CBOW希望找出这个上下文下最有可能的中心词。
例如,给定上下文“the cat on the”,CBOW希望预测中心词“mat”。
跳字模型(Skip-gram):与CBOW相反,Skip-gram的输入是中心词,而输出是一组上下文词。它的目标是在给定一个词的情况下,预测周围的词。
例如,给定中心词“cat”,Skip-gram希望预测上下文词“the”、“on”和“mat”。
总结来说,Word2Vec模型通过这一系列的输入输出关系,训练出一个能够把每个词转换为一组数字的模型,这就是词向量。
Word2Vec的实现
接下来,我们将使用Python中的gensim库来实现Word2Vec。首先,需要安装gensim库:
读《从零学NLP系列教程:词向量之Word2Vec》时,先确定要解决的场景,再把关键概念和练习动作串起来。这样读到细节时,不容易只记住零散名词。
pip install gensim
处理文本数据
在使用Word2Vec之前,我们需要先准备我们的文本数据。下面是一个简单的例子,我们将使用一些句子来训练模型:
import gensim
from gensim.models import Word2Vec
# 示例句子数据
sentences = [
['the', 'cat', 'sat', 'on', 'the', 'mat'],
['dogs', 'are', 'better', 'than', 'cats'],
['the', 'dog', 'is', 'man\'s', 'best', 'friend'],
['cats', 'are', 'great', 'companions'],
]
# 训练Word2Vec模型
model = Word2Vec(sentences, vector_size=10, window=2, min_count=1, workers=4)
# 获取词向量
vector = model.wv['cat']
print(f"词'cat'的词向量:{vector}")
在这个例子中,我们定义了一个简单的句子集合,然后使用这组句子来训练一个Word2Vec模型。这里的一些参数说明:
vector_size:指定生成的词向量的维度。window:上下文窗口的大小,表示考虑的上下文词数量。min_count:要考虑的最小词频;频率低于这个值的词将被忽略。workers:使用的线程数,可以提高训练速度。
词向量的应用
Word2Vec模型训练完成后,我们可以用它生成词向量,并计算词与词之间的相似度。以下是一些常用的操作:
- 获取词向量:
vector = model.wv['dog']
print(f"词'dog'的词向量:{vector}")
- 相似词查询:
similar_words = model.wv.most_similar('cat', topn=3)
print(f"与'cat'最相似的词:{similar_words}")
- 词向量的数学运算:
由于词向量是稠密向量,故可以进行一些有趣的线性代数运算,比如:
- 通过“国王 - 男人 + 女人 = 女王”来展示性别关系。
result = model.wv.most_similar(positive=['woman', 'king'], negative=['man'], topn=1)
print(f"结果:{result}")
读到这里,可以把《从零学NLP系列教程:词向量之Word2Vec》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。
读完《从零学NLP系列教程:词向量之Word2Vec》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。
小结
通过今天的学习,我们了解到Word2Vec是如何生成词向量的,并通过gensim库实践了相关操作。与TF-IDF相比,Word2Vec提供了一种更能反映词语间的语义关系的方式,使得在后续的自然语言处理任务中能够更好地利用这些词向量。
在下一篇中,我们将讨论另一种流行的词向量生成方法——GloVe。GloVe通过全局词共现矩阵构建词向量,进一步提升了词向量的质量,希望大家继续关注!
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
从零学NLP系列教程:词向量之Word2Vec适合谁读?
这是 自然语言处理入门 系列第 12 / 30 篇,适合正在学习自然语言处理入门,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇自然语言处理入门教程要多久?
按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读