调用Gensim库训练Word2Vec模型

article/2025/7/16 17:07:07

本文为🔗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}')

 


http://www.hkcw.cn/article/mFiYqdDmfb.shtml

相关文章

【Java】你真的了解JVM吗?

类加载机制 JVM(Java虚拟机)中的类加载机制是指将Java类的字节码加载到内存中,并为其创建Class对象的过程。类加载机制的核心在于“类加载器”,它是负责加载类的组件。Java中的类加载机制主要包括以下几个步骤: 加载&…

JVM学习-内存结构(二)

一、堆 1.定义 2.堆内存溢出问题 1.演示 -Xmx设置堆大小 3.堆内存的诊断 3.1介绍 1,2都是命令行工具(可直接在ideal运行时,在底下打开终端,输入命令) 1可以拿到Java进程的进程ID,2 jmap只能查询某一个时…

JVM相关内容

jvm的跨平台,字节码的作用 jvm的跨平台 不同操作系统系统运行的JVM不一样,但度能够处理对应的字节码文件 字节码的作用 利用编译节省了运行的时候的效率 JVM整体结构 类加载子系统:用于加载不同的class(字节码)文…

Sqlite3数据库表内数据批量读取操作---sqlite3_stmt机制

0、引言 在前面两篇文章已经对数据环境搭建、数据批量写入库中进行了较为详细的讲解。因此,基于前两篇文章内容的基础上,本文主要从数据库中批量数据读取操作进行梳理讲解。 嵌入式数据库SQLite 3配置使用详细笔记教程_sqlite3-CSDN博客 SQLite 3 优化批…

官方指定Jmeter配置JVM堆内存方式

软件测试资料领取:[内部资源] 想拿年薪40W的软件测试人员,这份资料必须领取~ 软件测试面试刷题工具领取:软件测试面试刷题【800道面试题答案免费刷】 1.概述 在使用Jmeter做性能测试过程中,可能会应为默认设置的堆内存值较小出…

线上JVM OOM问题,如何排查和解决?

今天咱们来聊聊让无数 Java 开发者头疼的 JVM OOM(Out Of Memory,内存溢出)问题。在面试中,OOM 问题也是面试官的“心头好”,因为它能直接考察你对 JVM 的理解,以及你在实际问题面前的排查和解决能力。 一…

JVM常见线上问题:CPU 100%、内存泄露问题排查

一、CPU 100% 问题排查 1.1、找到 cpu 占有率最高的 java 进程号 使用命令: top -c 显示运行中的进程列表信息, shift + p 使列表按 cpu 使用率排序显示。 PID = 2227 的进程,cpu 使用率最高 1.2、根据进程号找到 cpu 占有率最高的线程号 使用命令: top -Hp {pid} ,同…

JVM 一文详解

目录 JVM 简介 JVM 中的内存区域划分 1. 堆(一个进程只有一份 ------ 线程共享) 2. 栈(一个进程可以有 N 份 ------ 线程私有) Java 虚拟机栈: 本机方法栈: 3. 程序计数器(一个线程可以…

【JVM】关于JVM的内部原理你到底了解多少(八股文面经知识点)

前言 🌟🌟本期讲解关于HTTPS的重要的加密原理~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废话不…

深入理解 JVM 的栈帧结构

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…

JVM 机制

目录 一、什么是 JVM: 二、JVM 的运行流程: 三、JVM 内存区域划分: 1、( 1 ) 程序计数器: 1、( 2 ) 元数据区: 1、( 3 ) 栈: 1、( 4 ) 堆: 四、类加载: 1、什么时候会触…

【JVM】类加载机制

文章目录 类加载机制类加载过程1. 加载2. 验证3. 准备4. 解析偏移量符号引用和直接引用 5. 初始化 类加载机制 类加载指的是,Java 进程运行的时候,需要把 .class 文件从硬盘读取到内存,并进行一些列的校验解析的过程(程序要想执行…

【JVM】从零开始深度解析JVM

本篇博客给大家带来的是JVM的知识点, 重点在类加载和垃圾回收机制上. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 …

一篇文章带你解决笔试面试中的jvm问题

JVM内存区域划分 JVM启动的时候,会申请到一整个很大的内存区域.JVM是一个应用程序,要从操作系统里申请内存.JVM就根据需要,把空间分为几个部分,每个部分各自有不同的功能.具体划分如下: 分为:栈,堆,程序计数器,元数据区 Heap(堆):…

通义灵码2.5——基于编程智能体开发Wiki多功能搜索引擎

引言 在智能化浪潮重塑软件开发范式的今天,我借助开发一个基于编程智能体开发Wiki 多功能搜索引擎,深度体验了通义灵码2.5这一阿里云旗舰级AI编码助手,构建智能协作新范式。 该平台通过三大技术突破赋能开发全流程:基于编程智能…

基于SpringBoot的商家销售管理网站的设计与实现

湖南软件职业技术大学 本科毕业设计(论文) 设计(论文)题目 基于SpringBoot的商家销售管理网站的设计与实现 学生姓名 学生学号 所在学院 专业班级 校内指导教师 企业指导教师 毕业设计(论文)真实性承诺及声明 学生对毕业设计(论文)真实性承诺 本人郑重声明:所提交的毕…

各种噪声电流激励下电源PDN网络对系统时钟性能的影响

点击上面“蓝字”关注我们 电源分配是支持所有类型硅产品运行的基础设施的重要组成部分,但在设计过程中常被忽视。电源质量可能限制电路性能,并决定其工作可靠性。要真正解决电源分配问题,必须考虑包括芯片、封装和PCB在内的整个系统。 芯片…

【大模型】情绪对话模型项目研发

一、使用框架: Qwen大模型后端Open-webui前端实现使用LLamaFactory的STF微调数据集,vllm后端部署, 二、框架安装 下载千问大模型 安装魔塔社区库文件 pip install modelscope Download.py 内容 from modelscope import snapshot_downlo…

关于位图Bitmaps的介绍

目录 1、基本概念 1.1、介绍 1.2、关键字 1.3、结构原理 2、常用命令 2.1、SETBIT 2.2、GETBIT 2.3、BITCOUNT 2.4、BITOP 2.5、BITPOS 3、应用场景 4、使用示例 前言 Redis的Bitmaps是一种基于字符串的数据结构,用于处理位级别的操作。 Bitmaps在Redis…

【软件设计】通过软件设计提高 Flash 的擦写次数

目录 0. 个人简介 && 授权须知1. Flash 和 EEROM 基本情况2. 场景要求3. 软件设计思路4. 代码展示4.1 flash.h4.2 flash.c 0. 个人简介 && 授权须知 📋 个人简介 💖 作者简介:大家好,我是喜欢记录零碎知识点的菜鸟…