NLP实战:调用Gensim库训练Word2Vec模型

news2024/11/28 0:58:33

目录

 一、准备工作

1. 安装Gensim库

2. 对原始语料分词

二、训练Word2Vec模型

三、模型应用

1.计算词汇相似度

​编辑

2. 找出不匹配的词汇

3. 计算词汇的词频

四、总结


🍨 本文为[🔗365天深度学习训练营]内部限免文章(版权归 *K同学啊* 所有)
🍖 作者:[K同学啊]

📌 本周任务:
●阅读NLP基础知识里Word2vec详解一文,了解并学习Word2vec相关知识
●学习本文内容,在下一篇文章中,将使用Word2vec辅助完成文本分类任务

数据集是一本电子书,txt格式

一、准备工作

1. 安装Gensim库

调出控制台pip安装即可

pip install gensim

2. 对原始语料分词

选择《人民的名义》的小说原文作为语料,先采用jieba进行分词

import jieba
import jieba.analyse
import chardet
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)

result_cut = []
with open('./in_the_name_of_people.txt', 'rb') as f:
    raw_data = f.read()
    encoding = chardet.detect(raw_data)['encoding']
    lines = raw_data.decode(encoding).splitlines()
    for line in lines:
        result_cut.append(list(jieba.cut(line)))

# 在这里处理分词结果result_cut

# 不需要再调用 f.close(),因为使用了 with 语句会自动关闭文件

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

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

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

print(result_stop[100:103])

[['赵德汉', '慌', '了', '忙', '把门', '卡往', '外', '掏', '这', '这', '什么', '呀', '这', '是'], ['你', '帝京', '苑', '豪宅', '的', '门', '卡', '啊', '请', '继续', '配合', '我们', '执行公务', '吧'], ['赵德汉', '的', '幽默感', '瞬间', '消失', '一下子', '软软', '瘫坐', '到', '地上']] 

二、训练Word2Vec模型

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.9994414
0.9994026

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

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

四、总结

本文主要介绍了如何使用Word2Vec进行自然语言处理任务。下面是对文章内容的总结:

  1. 首先需要安装Gensim库,它是用于训练Word2Vec模型的Python库。

  2. 文章选择《人民的名义》作为语料,使用jieba进行分词。还加入了一些自定义词,以提高jieba的分词准确率。

  3. 分词后的结果可以进行数据清洗,去除一些标点符号等简单的处理。

  4. 使用Gensim库中的Word2Vec类训练Word2Vec模型。需要传入分词后的语料数据,设置特征向量的维度、窗口大小和词频阈值等参数。

  5. 训练完成后,可以进行模型应用。例如,可以使用similarity()方法计算两个词汇之间的余弦相似度,或者使用most_similar()方法找出与指定词汇最相似的词汇。

  6. 还可以使用doesnt_match()方法找出一组词汇中与其他词汇不匹配的词汇,或者使用get_vecattr()方法获取词汇的词频。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第7章:SpringMVC的HttpMessageConverter

1. HttpMessageConverter简介 ①HttpMessageConverter,报文信息转换器,将请求报文转换为java对象,或将java对象转换为响应报文 ②HttpMessageConverter提供了两个注解和两个类型 RequestBody,ResponseBody,RequestEntity,ResponseEntity …

深入详解CFS任务放置代码

一、前言 本文出现的内核代码来自Linux5.10.61,为了减少篇幅,我们对引用的代码进行了删减(例如去掉了NUMA的代码,毕竟手机平台上我们暂时不关注这个特性),如果有兴趣,读者可以配合完整的源代码…

Spring Boot JAVA 统一返回的信息

现在的项目是前后端开发的居多,那么,后端的开发只需要返回相关的接口就行了。那么,我们怎么定义接口返回的数据,怎么使用 Spring Boot 来统一处理返回的信息呢? 开发环境如下: IntelliJ IDEA 2021.2.2 (U…

linuxOPS基础_linux权限管理

权限概述 什么是权限 ​ 在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利。 在Linux 中分别有读、写、执行权限 \权限针对文件权限针对目录读r(read)表示可以查看文件内容;cat、less…表示可以(ls)查看目录中存在的文…

无人机+ AI 图像分析:里斯本大学高效检测林业害虫

内容一览:早期发现虫害对于因地制宜采取防控措施至关重要。尽管遥感技术可用于快速扫描大面积区域,但面对低强度信号或难以检测的物体,其效果并不尽如人意。因此,里斯本大学研究人员将无人机与 AI 图像分析相结合,在此…

如何对自动化测试工具选型?这4个因素必须要拿捏好

测试开发工程师再做自动化时避免不了针对每个工具进行选型。今天就来看下工具选型的方法。 一:工具选型方法 在作为一名自动化测试开发工程师时,选择合适的 Web 自动化工具非常关键。以下是一些评估和选择工具的依据和方法: 1.支持的语言和…

接口测试介绍以及用例编写

6.1 接口 6.1.1 接口概述 定义: 接口就是API(Application Programming Interface,应用程序接口),是一个软件或服务对外提供的接口,别人只要调用这接口,而内部如何实现,不需要关心。…

608教室使用方法

一、教室平面图 608教室的布局如下,重要的设备已经在图中标出。总开关、一体机和机柜。   二、使用方法 2.1 房间机器上电 进门后首先走到“总开关位置”,将电匝闭合。 原来的开关如图所示,有3组开关,1号组开关用于控制插座、…

突破办公瓶颈,推荐5款电脑办公软件

1.AnyTXT AnyTXT是一款搜文件内容的第三方全文搜索工具,速度极快,基本秒出结果。而且右边可以直接预览文件,筛选,复制,翻译等功能丰富,完美替代自带的搜索。 2.Groupy 这是用于快速切换窗口的小型精致工…

微信支付_Native支付流程

介绍 商户后台系统先调用微信支付的Native下单接口,微信后台系统返回链接参数code_url,商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。微信支付-开发者文档 注意: code_url有效期为2小时&#xff0…

spring实例化bean整体流程

AbstractApplicationContext类的invokeBeanFactoryPostProcessors方法把所有bean变成了beanDefinition,然后在finishBeanFactoryInitialization方法中完成实例化。 实例化过程只分析单例 1.DefaultListableBeanFactory#preInstantiateSingletons方法 这个方法的功…

养元发起“爱心送考车”全国行动,慈善榜样如何炼成?

入夏不久,六个核桃的经销商们,开始忙起来了。 正值一年一度的高考季,随着越来越多的学子感受到人生重要时刻的期待、激动与紧张,这种氛围也开始牵动社会的心。高考前夕,六个核桃联合全国经销商发起“爱心送考车”公益…

【JavaEE】HTTPS加密原理

HTTPS加密原理✿✿ヽ(▽)ノ✿ 文章目录 JavaEE & HTTPS加密原理1. 为什么要加密2. HTTPS加密原理2.1 初始想法2.2 引入非对称加密2.3 中间人攻击2.4 引入证书 JavaEE & HTTPS加密原理 1. 为什么要加密 例子:(运营商劫持) 你可能经常…

亚马逊云科技基于智能搜索,为企业打造知识库

知识库需求在各行各业中普遍存在,例如制造业中历史故障知识库、游戏社区平台的内容知识库、电商的商品推荐知识库和医疗健康领域的挂号推荐知识库系统等。亚马逊云科技为保证推荐系统的时效性和准确性,需要大量的数据/算法/软件工程师的人力投入和包括硬…

Threejs 快速入门

最小环境 首先,在正式学习Threejs前,有几个概念需要说明的。Threejs在底层其实还是调用html5中的canvas api来实现绘图的。但和我们一般绘制2D图像不同,Threejs在底层使用的是canvas的webgl context来实现3D绘图。webgl context本身更多是直…

如何向gitee开源项目提交代码

文章目录 前言登录账号fork项目fork完成拉去代码check out出分支开发提交代码到自己的远程仓库创建pull requestcreate pull request 前言 如何向开 源 项 目 提交自己的代码呢?相信很多小伙伴都会看到比较不错的开源项目,然后想在此基础上实现自己的代…

读财报丨Q1保费环比增长33.4%,慧择增长源泉来自于何处?

一季度我国经济表现开局良好,保险行业增长态势明朗。从财报来看,中国人寿、中国平安、中国人保、新华保险、中国太保等大型上市险企Q1净利润纷纷超预期,随着巨头业绩转暖,保险中介行业也迎来了发展好时机。 近日,国内…

Xshell安装教程-Xshell 7激活教程-Xshell换机转移许可证详解

Xshell 7是一款功能强大的终端模拟器,支持SSh2,SSh3,SFTP,TELNET,RLOGIN和SERIAL。通过提供业界先进的性能,Xshell包含了其他SSH客户端无法发现的功能和优势。 本篇文章主要为大家介绍Xshell 7的安装、激活…

自动化回归测试工具—— AREX 上手实践

AREX 是一款开源的自动化测试工具平台,基于 Java Agent 技术与比对技术,通过流量录制回放能力实现快速有效的回归测试。同时提供了接口测试、接口比对测试等丰富的自动化测试功能,无需编程能力也可快速上手。 AREX 可以通过 Docker-Compose …

当开发同事辞职,接手到垃圾代码怎么办?

目录 一、前言 二、开发中的另一种选择 三、低代码概念 四、低代码在开发中的优势 01、开发效率提高 02、开发成本减少 03、维护性更高 五、有低代码后就不要开发了? 一、前言 事实上,垃圾项目是日积月累而成的,所谓冰冻三尺非一日之寒&#xf…