当前位置: 首页 > news >正文

调用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.对原始语料进行分词

 

import jieba
import jieba.analysejieba.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()

 

# 添加自定义停用词
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 Word2Vecmodel = Word2Vec(result_stop,    # 用于训练的语料数据vector_size=100,    # 是指特征向量的维度,默认为100window=5,    # 一个句子中当前单词和被预测单词的最大距离min_count=1      # 可以对字典做截断,词频少于min_count次数的单词会被丢弃掉,默认是5
)'''
模型应用
'''
# 1.计算词汇相似度
print(model.wv.similarity('沙瑞金','田国富'))
print(model.wv.similarity('沙瑞金','高育良'))

# 选出最相近的10个词
for e in model.wv.most_similar(positive=['沙瑞金'],topn=10):print(e[0],e[1])

 

2)找出不匹配的词汇

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

 

# 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}')

 

相关文章:

  • Predixy的docker化
  • Linux的调试器--gbd/cgbd
  • 数据清理的例子
  • 【计算机网络】传输层TCP协议——协议段格式、三次握手四次挥手、超时重传、滑动窗口、流量控制、
  • 【Golang进阶】第八章:并发编程基础——从Goroutine调度到Channel通信实战
  • CentOS 7 环境下部署 LAMP
  • Go语言通道如何实现通信
  • 计算机网络 HTTP篇常见面试题总结
  • Vert.x学习笔记-EventLoop工作原理
  • 使用ssh-audit扫描ssh过期加密算法配置
  • day14 leetcode-hot100-27(链表6)
  • Telerik生态整合:Kendo UI for Angular组件在WinForms应用中的深度嵌入(一)
  • Edmonds-Karp详解-基于BFS的最短增广路径
  • 【仿生机器人】仿生机器人认知-情感系统架构设计报告
  • 抽奖系统抽奖活动管理流程
  • 基于 KubeKey 3.1.9,快速部署 K8s 1.33.0 高可用集群
  • quasar electron mode如何打包无边框桌面应用程序
  • 代码随想录算法训练营 Day60 图论Ⅹ Bellmen_ford 系列算法
  • 由反汇编代码确定结构体的完整声明
  • 精通 Kubernetes:从故障排除到化繁为简
  • 珠海网站建设搭建/seo要点
  • 如何做一个公司的网站/怎么建网站教程
  • 滁州做网站电话号码/百度培训
  • 怎么样用html做asp网站/微信推广软件哪个好
  • 电子商务网站开发实务/站长工具seo词语排名
  • 浙江省建设投资集团有限公司网站/网站友情链接购买