调用Gensim库训练Word2Vec模型

本文为🔗365天深度学习训练营内部文章

原作者:K同学啊

一、Word2Vec是什么?

自然语言处理(NLP)是一种涉及到处理语言文本的计算机技术。在 NLP 中,最小的处理单位是词语,词语是语言文本的基本组成部分。词语组成句子,句子再组成段落、篇章、文档,因此处理 NLP 问题的第一步是要对词语进行处理。
在进行 NLP 问题处理时,一个常见的任务是判断一个词的词性,即动词还是名词等等。这可以通过机器学习来实现。具体地,我们可以构建一个映射函数 f(x)->y,其中 x 是词语,y是它们的词性。为了使用机器学习模型,需要将词语转换成数值形式。然而,在NLP 中,词语是人类的抽象总结,是符号形式的 (比如中文、英文、拉丁文等等),不是数值形式的,因此需要将它们嵌入到一个数学空间中,这个过程就是词嵌入(word embedding)。
词嵌入是将词语映射到一个向量空间中的过程,使得相似的词在向量空间中距离较近,而不相似的词距离较远。**Word2Vec则是其中的一种词嵌入方法,是一种用于生成词向量的浅层神经网络模型**,由Tomas Mikolov及其团队于2013年提出。**Word2Vec通过学习大量文本数据,将每个单词表示为一个连续的向量,这些向量可以捕捉单词之间的语义和句法关系**。Word2Vec有两种主要架构:连续词袋模型(Continuous Bag of Words,CBOW)和Skip-Gram模型。

二、CBOW模型

CBOW(Continuous Bag of Words)模型是通过上下文来预测当前值。相当于一句话中扣掉一个词,让你猜这个词是什么。 ​ 具体来说,CBOW 模型首先将输入的词语转换为词向量,然后将这些词向量相加得到一个向量表示这个向量表示就是当前上下文的表示。最后,CBOW 模型使用这个向量表示来预测目标词语的概率分布。CBOW 模型的核心思想是根据上下文预测当前词语,因此它通常适用于训练数据中目标词语出现频率较高的情况。

三、Skip-gram模型

Skip-gram 模型用当前词来预测上下文。相当于给你一个词,让你猜前面和后面可能出现什么词。 ​ 具体来说,Skip-gram 模型首先将目标词语转换为它的词向量,然后使用这个词向量来预测它周围的词语。Skip-gram 模型的核心思想是利用目标词语来预测上下文,因此它通常适用于训练数据中目标词语出现频率较低的情况。

Skip-gram 模型和 CBOW 模型的训练过程都是基于反向传播算法和随机梯度下降算法实现的。在训练过程中,两个模型都会通过不断地更新词向量来最小化损失函数,使得目标词语和它周围的词语在向量空间中距离更近。最终,训练完成后,每个词语都被嵌入到了一个低维向量空间中,这些向量可以用于各种NLP 任务,如语言模型、词性标注、文本分类等等。

四、实例解答

实例:假设我们有以下句子作为训练语料:

"The quick brown fox jumps over the lazy dog."

对于Skip-gram模型,假设我们选择窗口大小为2(即在目标单词前后各取2个单词作为上下文)。以单词"jump"为例,我们将有以下训练样本:

输入:jumps 输出:(quick,brown,over,the)

这些训练样本用于调整词向量,使得给定单词"jumps"时,上下文单词的概率最大化

而对于CBOW模型,训练样本是相反的:

输入:(quick,brown,over,the) 输出:jumps

在这种情况下,CBOW模型会根据上下文来预测目标单词"jumps"

训练完成后,每个单词都会被赋予一个词向量,这些词向量可以用于后续的NLP任务,如文本分类、聚类、相似度计算等。一个有趣的现象是,词向量之间的数学运算可以揭示单词之间的语义关系,例如:

五、调用Gensim库实现Word2vec模型

1.对原始语料进行分词

python 复制代码
import jieba
import jieba.analyse

jieba.suggest_freq('沙瑞金',True)  # 加入一些词,使得jieba分词准确率更高
jieba.suggest_freq('田国富',True)
jieba.suggest_freq('高育良',True)
jieba.suggest_freq('侯亮平',True)
jieba.suggest_freq('钟小艾',True)
jieba.suggest_freq('陈岩石',True)
jieba.suggest_freq('欧阳菁',True)
jieba.suggest_freq('易学习',True)
jieba.suggest_freq('王大路',True)
jieba.suggest_freq('蔡成功',True)
jieba.suggest_freq('孙连城',True)
jieba.suggest_freq('季昌明',True)
jieba.suggest_freq('丁义珍',True)
jieba.suggest_freq('郑西坡',True)
jieba.suggest_freq('赵东来',True)
jieba.suggest_freq('高小琴',True)
jieba.suggest_freq('赵瑞龙',True)
jieba.suggest_freq('林华华',True)
jieba.suggest_freq('陆亦可',True)
jieba.suggest_freq('刘新建',True)
jieba.suggest_freq('刘庆祝',True)
jieba.suggest_freq('赵德汉',True)

# 读取文件
with open('./in_the_name_of_people.txt',encoding='utf-8') as f:
    result_cut = []
    lines = f.readlines()
    for line in lines:
        result_cut.append(list(jieba.cut(line)))
f.close()
python 复制代码
# 添加自定义停用词
stopwords_list = [",","。","\n","\u3000"," ",":",":","!","?","?","!","...","......"]

def remove_stopwords(ls):    # 去除停用词
    return [word for word in ls if word not in stopwords_list]

result_stop = [remove_stopwords(x) for x in result_cut if remove_stopwords(x)]
print(result_stop[100:103])

from gensim.models import Word2Vec

model = Word2Vec(result_stop,    # 用于训练的语料数据
                 vector_size=100,    # 是指特征向量的维度,默认为100
                 window=5,    # 一个句子中当前单词和被预测单词的最大距离
                 min_count=1      # 可以对字典做截断,词频少于min_count次数的单词会被丢弃掉,默认是5
)

'''
模型应用
'''
# 1.计算词汇相似度
print(model.wv.similarity('沙瑞金','田国富'))
print(model.wv.similarity('沙瑞金','高育良'))
python 复制代码
# 选出最相近的10个词
for e in model.wv.most_similar(positive=['沙瑞金'],topn=10):
    print(e[0],e[1])
2)找出不匹配的词汇

使用 doesnt_match()方法,我们可以找到一组词汇中与其他词汇不匹配的词汇

python 复制代码
# 2.找出不匹配的词汇
odd_word = model.wv.doesnt_match(["沙瑞金","侯亮平","丁义珍","书"])
print(f'在这组词汇中不匹配的词汇:{odd_word}')

# 3.计算词语的词频
word_freq = model.wv.get_vecattr('沙瑞金','count')
print(f'沙瑞金:{word_freq}')
word_freq = model.wv.get_vecattr('田国富','count')
print(f'田国富:{word_freq}')
word_freq = model.wv.get_vecattr('高育良','count')
print(f'高育良:{word_freq}')
相关推荐
GIS开发特训营19 分钟前
【智慧城市】2025年中国地质大学(武汉)暑期实训优秀作品(2):智慧城市西安与一带一路
人工智能·信息可视化·智慧城市
飞哥数智坊19 分钟前
扣子实战第19讲:Coze零代码打造“新生入学百事通”,辅导员都说好
人工智能·coze
上海控安1 小时前
上海控安:GB 44495-2024《汽车整车信息安全技术要求》标准解读和测试方案
大数据·人工智能·汽车
AI人工智能+2 小时前
竣工验收备案识别技术:通过AI和OCR实现智能化文档处理,提升效率与准确性,推动建筑行业数字化转型。
人工智能·nlp·ocr·竣工验收备案识别
音视频牛哥2 小时前
机器人视频感知架构深度解析:7条技术法则,打造低延迟实时感知与交互
人工智能·计算机视觉·机器人·音视频·大牛直播sdk·机器视觉·rtmp rtsp播放器
l12345sy3 小时前
Day16_【机器学习—模型拟合问题】
人工智能·机器学习
Ai工具分享3 小时前
让模糊物体变清晰的视频AI:快速提升画质指南
人工智能·音视频
霍格沃兹测试开发学社测试人社区3 小时前
MCP零基础学习(7)|实战指南:构建论文分析智能体
人工智能·测试工具
开开心心就好4 小时前
PDF转长图工具,一键多页转图片
java·服务器·前端·数据库·人工智能·pdf·推荐算法
l12345sy4 小时前
Day16_【机器学习概述】
人工智能·机器学习