第N5周:调用Gensim库训练Word2Vec模型

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊 | 接辅导、项目定制
  • 🚀 文章来源:K同学的学习圈子

目录

本周任务:

 1.安装Gensim库

2.对原始语料分词

3.停用词

 4.训练Woed2Vec模型

5. 模型应用

1.计算词汇相似度

2.找出不匹配的词汇

3.计算词汇的词频

 6.总结:

jieba分词库的使用

2. Word2Vec模型的基本使用

3. 词向量操作

本周任务:

1.阅读NLP基础知识里Word2vec详解一文,了解并学习Word2vec相关知识

2.创建一个 .txt 文件存放自定义词汇,防止其被切分

 1.安装Gensim库

pip install gensim

2.对原始语料分词

选择《人民的名义》的小说原文作为语料,先采用iieba进行分词。这里是直接添加的自定义词汇没有选择创建自定义词汇文件。(任务2代码处) 

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('./data/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()

 输出结果:

3.停用词

在自然语言处理(NLP)中,停用词(stop words)是指在文本中频繁出现但对于传达实际意义贡献不大的词。这些词通常是冠词、介词、连词等,例如“的”、“和”、“是”、“在”等。停用词在文本中几乎无处不在,但它们并不携带太多实际的语义信息。

 拿到了分词后的文件,在一般的NLP处理中,会需要去停用词。由于word2vec的算法依赖于上下文,而上下文有可能就是停词。因此对于word2vec,我们可以不用去停词,仅仅去掉一些标点符号,做一个简单的数据清洗。

现在我们可以直接读分词后的文件到内存。这里使用了word2vec提供的LineSentence类来读文然后套用word2vec的模型。在实际应用中,可以调参提高词的embedding的效果。

#添加自定义停用词
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])

 4.训练Woed2Vec模型

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

5. 模型应用

1.计算词汇相似度

我们可以使用 similarity()方法计算两个词汇之间的余弦相似度。

#计算两个词的相似度
print(model.wv.similarity('沙瑞金','季昌明'))
print(model.wv.similarity('沙瑞金','田国富'))

0.9985029
0.99909985

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

肖钢玉 0.9993638396263123
李达康 0.9993550777435303
意外 0.9992921352386475
赵东来 0.9992125034332275
这样 0.9992020130157471 

2.找出不匹配的词汇

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

odd_word =model.wv.doesnt_match(["苹果","香蕉","橙子","书"])
print(f"在这组词汇中不匹配的词汇:{odd_word}")

在这组词汇中不匹配的词汇:书

3.计算词汇的词频

我们可以使用 get_vecattr()方法获取词汇的词频 

word_frequency = model.wv.get_vecattr("沙瑞金", "count")
print(f"沙瑞金: {word_frequency}")

沙瑞金: 353

 6.总结:

jieba分词库的使用

  • 分词功能:通过jieba.cut方法对文本进行分词。suggest_freq函数用于添加一些特定的词汇,以提高分词的准确性。
  • 自定义停用词:通过remove_stopwords函数过滤掉指定的停用词,这些词汇在文本处理中通常不携带有用的信息,如标点符号、换行符等。

2. Word2Vec模型的基本使用

  • 模型初始化Word2Vec类的初始化参数:
    • vector_size=100:设定特征向量的维度,通常为100维。
    • window=5:指定当前词和预测词之间的最大距离。
    • min_count=1:指定忽略频率小于1的词。
  • 训练模型:通过将分词后的文本数据传入Word2Vec模型中,进行训练。

3. 词向量操作

  • 计算相似度:使用model.wv.similarity计算两个词之间的相似度。
  • 获取最相似的词model.wv.most_similar可以找出与给定词最相似的词汇。
  • 找到不匹配的词model.wv.doesnt_match用于找出一组词中不属于同一类别的词汇。
  • 词频查询:使用model.wv.get_vecattr获取特定词的词频信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/728656.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

示例:WPF中使用IsAsync的方式绑定数据来优化用户体验

一、目的:开发过程中,有时需要绑定大量数据,比如弹出一个窗口,窗口中包含一个ListBox绑定了大量数据,这时会出现点击按钮后出现假死卡顿影响用户体验,这理通过用IsAsync的方式将窗口优先弹出来再加载数据 二…

AWS Lambda + Flask 应用示例

前言 AWS Lambda 本身是一个以事件驱动的 Serverless 服务, 最简单的应用就是在入口函数中对接收到的事件/请求进行处理并返回响应. 对于像 Flask 这样的 Web 框架, 并不能直接在 Lambda 上提供服务, 不过我们可以借助 AWS Lambda Web Adapter 实现一个基于 Flask 框架的 Web …

ThinkPHP:查询数据库数据之后,更改查询数据的字段名称

一、原始查询数据 含有字段item_no,lot_num,position $data[brushed] db::table(wip_station_transaction) ->where([wip_entity_name>$wip_entity_name,line_code>$line_code,]) ->field([item_no, lot_num, position]) ->select(); …

python 霍夫曼解码

Huffman Tree 进行解码 示例图 c语言:c语言 霍夫曼编码 | 贪婪算法(Huffman Coding | Greedy Algo)_霍夫曼的贪婪c语言-CSDN博客 c:c 霍夫曼编码 | 贪婪算法(Huffman Coding | Greedy Algo)_霍夫曼的贪…

适用于所有 Android 手机的 8 大 Android 解锁工具

有时您无法解锁手机,因为您忘记了密码或设备停止响应解锁图案。不要惊慌。我们在这里为您列出了最好的 Android 解锁工具。只需选择一个您喜欢的。 为了保护重要数据,许多手机用户倾向于使用图案锁、密码、指纹甚至面部识别来锁定设备。但有时&#xff…

docker 配置与使用

目录 安装docker 作者遇到的问题1:安装docker 错误说明 解决方法: 作者遇到问题2:GPG密钥问题 问题说明 解决方法: 方法一:使用备用的GPG密钥服务器 方法二:使用国内镜像源 方法3:手动下…

关于IntelliJ IDEA 2024.1版本更新的问题

希望文章能给到你启发和灵感~ 感谢支持和关注~ 阅读指南 序幕一、基础环境说明1.1 硬件环境1.2 软件环境 二、起因三、解决四、总结 序幕 近期,IntelliJ IDEA 推出了全新2024版本,相信很多编程的爱好者或者刚接触编程的小伙伴都会…

论文阅读--Cross-view Transformers for real-time Map-view Semantic Segmentation

一种新的2D维度的bev特征提取方案,其通过引入相机先验信息(相机内参和外参)构建了一个多视图交叉注意力机制,能够将多视图特征映射为BEV特征。 cross view attention:BEV位置编码由根据相机标定结果(内参和…

工业制造领涉及的8大常见管理系统,如mes、scada、aps、wms等

在工业生产和制造领域有一些常见的管理系统,很多小伙伴分不清,这次大美B端工场带领大家了解清楚。 MES(Manufacturing Execution System,制造执行系统): MES是一种用于监控、控制和优化生产过程的软件系统…

商超仓库管理系统

摘要 随着全球经济和互联网技术的快速发展,依靠互联网技术的各种管理系统逐渐应用到社会的方方面面。各行业的有识之士都逐渐开始意识到过去传统的人工管理模式已经逐渐成为企业发展的绊脚石,不再适应现代企业的发展需要。企业想要得到更好的发展&#…

异地如何共享视频文件?

人们对于信息流动的需求越来越高。尤其在分布式团队合作、远程办公的背景下,异地共享视频文件成为了一项重要的技术需求。本文将介绍一款名为【天联】的组网产品,它能够实现不同地区间快速组建局域网,解决不同设备间的信息远程通信问题。 2.…

【C++题解】1741 - 求出1~n中满足条件的数的个数和总和?

问题:1741 - 求出1~n中满足条件的数的个数和总和? 类型:简单循环 题目描述: 请求出 1∼n 之间所有满足 2 的倍数但不是 3 的倍数的数,有多少个,总和是多少? 输入: 读入一个整数 …

【SpringMVC】第1-7章

第1章 初始SpringMVC 1.1 学习本套教程前的知识储备 JavaSEHTMLCSSJavaScriptVueAJAX axiosThymeleafServletMavenSpring 1.2 什么是MVC MVC架构模式相关课程,在老杜的JavaWeb课程中已经详细的讲解了,如果没有学过的,可以看这个视频&…

PostgreSQL的学习心得和知识总结(一百四十六)|深入理解PostgreSQL数据库之客户端侧auto savepoint的使用和实现

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

计算机网络:应用层 - 文件传输协议 FTP 电子邮件

计算机网络:应用层 - 文件传输协议 FTP & 电子邮件 文件传输协议 FTP电子邮件 文件传输协议 FTP 文件传送协议 FTP(File Transfer Protocol),曾是互联网祝频讲解上使用得最广泛的文件传送协议。 其特点是:若要存取一个文件,…

前端基础操作1——利用nvm任意切换(管理)node版本

在实际前端项目开发过程中,同时开发多个项目或者切换新项目时,因为node版本问题造成项目无法运行的问题比比皆是,这时候通过nvm管理切换不同版本的node,就能很快进入开发模式,避免因为环境问题浪费大量精力&#xff0c…

hive on spark 的架构和常见问题 - hive on spark 使用的是 yarn client 模式还是 yarn cluster 模式?

hive on spark 的架构和常见问题 - hive on spark 使用的是 yarn client 模式还是 yarn cluster 模式? 1. 回顾下 spark 的架构图和部署模式 来自官方的经典的 spark 架构图如下: 上述架构图,从进程的角度来讲,有四个角色/组件&…

[C++][数据结构][B-树][上]详细讲解

目录 0.常见的搜索结构1.B树概念2.B-树的插入分析1.流程分析2.插入过程总结 0.常见的搜索结构 种类数据格式时间复杂度顺序查找无要求 O ( N ) O(N) O(N)二分查找有序 O ( l o g 2 N ) O(log_2 N) O(log2​N)二叉搜索树无要求 O ( N ) O(N) O(N)二叉平衡树无要求 O ( l o g 2 …

20212416 2023-2024-2 《移动平台开发与实践》综合实践

移动平台开放综合实践 1.实验内容2.实验过程2.1 确定基础功能2.2 设计UI界面2.3 编写程序运行代码2.4 在基本功能的基础上丰富功能 3. 代码分析3.1设置按钮的点击事件监听器3.2 比分更新模块3.3 比分存储模块 4. 运行结果5.实践中遇到的问题及解决6.学习感悟与思考参考资料 1.实…

k8s中 docker和containerd 镜像相互导入导出

containerd镜像导出并导入docker 1 查看containerd 本地镜像列表 crictl images 2 containerd 导出本地镜像到当前目录下(注意: 导出导入需要指定镜像平台类型 --platform) ctr -n k8s.io images export nacos-server-24-06-30-13-02-…