郭震 AI公众号:郭震AI

12 从零学NLP系列教程:词向量之Word2Vec

发布日期:

最近更新:

分类: NLP小白

预计阅读: 4 分钟

阅读次数: 0

预计阅读4 分钟
结构重点6 个
图文要点6 张
正文规模1.6k 字
Word2Vec流程图查看大图
Word2Vec流程图

Word2Vec 把词放到连续向量空间里,让相似上下文的词更接近。它强调分布式语义,而不是人工写规则。

Word2Vec实操核对图查看大图
Word2Vec实操核对图

我会用相似词和类比样例检查向量质量。只看训练 loss,不足以说明向量有用。

在上一篇中,我们讨论了词向量的另一种表示方法——TF-IDF。这种方法侧重于词在文档中的重要性。然而,TF-IDF并未考虑词与词之间的语义关系,限制了其在许多自然语言处理任务中的应用。因此,今天我们将深入了解一种更为先进的词向量生成技术——Word2Vec。

什么是Word2Vec

Word2Vec是一种高效的算法,用于生成词向量(word embeddings),由Google的研究团队在2013年推出。与TF-IDF不同,Word2Vec通过“上下文”来捕捉词语的语义关系。这意味着模型会考虑一个词在句子中出现时周围的所有词,从而生成一个能够代表该词的稠密向量。

Word2Vec判断卡查看大图
Word2Vec判断卡

学习 Word2Vec 时,先看上下文窗口、Skip-gram、CBOW、负采样和向量相似度。

Word2Vec的基本原理

Word2Vec主要有两种模型:

  1. 连续词袋模型(CBOW):该模型的输入是一组上下文词,目标是预测中心词。也就是说,给定上下文词,CBOW希望找出这个上下文下最有可能的中心词。

    例如,给定上下文“the cat on the”,CBOW希望预测中心词“mat”。

  2. 跳字模型(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应用复盘卡

读到这里,可以把《从零学NLP系列教程:词向量之Word2Vec》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。

从零学NLP系列教程:词向量之Word2Vec应用检查卡查看大图
从零学NLP系列教程:词向量之Word2Vec应用检查卡

读完《从零学NLP系列教程:词向量之Word2Vec》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。

小结

通过今天的学习,我们了解到Word2Vec是如何生成词向量的,并通过gensim库实践了相关操作。与TF-IDF相比,Word2Vec提供了一种更能反映词语间的语义关系的方式,使得在后续的自然语言处理任务中能够更好地利用这些词向量。

在下一篇中,我们将讨论另一种流行的词向量生成方法——GloVe。GloVe通过全局词共现矩阵构建词向量,进一步提升了词向量的质量,希望大家继续关注!

相关教程

相关入口

AI 教程总索引

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

相关内容

相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...