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

目录

 一、准备工作

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()方法获取词汇的词频。

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

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

相关文章

Flask-RESTful的使用

Flask-RESTful的使用 Flask-RESTful基本使用安装定义资源Resources创建API实例添加资源到API运行Flask应用 请求处理请求解析参数校验 响应处理数据序列化定制返回格式 其他功能蓝图装饰器集合路由命名规范路由名称 Flask-RESTful Flask-RESTful是一个用于构建RESTful API的扩展…

C++类和对象 -- 知识点补充

补充 const成员函数static成员友元内部类匿名对象拷贝对象时的一些编译器优化 const成员函数 将const修饰的成员函数称为const成员函数,const修饰类成员函数,实际是修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的成员进行修改。…

使用MockJS进行前端开发中的数据模拟

在前端开发中,有时我们需要在没有后端接口的情况下进行前端页面的开发和测试。这时,我们可以使用MockJS来模拟数据,以便进行开发和调试。MockJS是一个用于生成随机数据和拦截Ajax请求的JavaScript库,它能够帮助我们快速搭建起一个…

Linux---用户切换命令(su命令、sudo命令、exit命令)

1. su命令 root用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的。 普通用户的权限,一般在其HOME目录内是不受限的。 一旦出了HOME目录,大多数地方,普通用户仅有只读和执行权限,无修改权限。 su 是…

【操作系统】01.操作系统概论

操作系统的发展历史 未配置操作系统 手工操作阶段 用户独占全机,人机速度矛盾导致系统资源利用率低 脱机输入输出方式 为了缓解主机cpu和IO设备之间速度不匹配的矛盾,出现了脱机IO技术 在外围机的控制下,通过输入设备,将数据输…

耗时1周整理了网络安全学习路线,非常详细!

前言 这一期就出一个怎么学习网络安全的学习路线和方法,觉得有用的话三连收藏下 首先咱们聊聊,学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间,光语言都有几门,有些人会倒在学习linux系统及命令的路上…

数论专题(3)逆元

目录 初步认识 逆元 定义 应用 费马小定理 好久没有更新我们的数论专题板块了,今天,我们就来探究一下新知——逆元。 初步认识 在数据非常大的情景下,我们通常会对数据先进行取模运算,来计算在一定的范围内进行处理。而运算…

Java 进阶 -- 集合(一)

本节描述Java集合框架。在这里,您将了解什么是集合,以及它们如何使您的工作更轻松,程序更好。您将了解组成Java Collections Framework的核心元素——接口、实现、聚合操作和算法。 介绍告诉您集合是什么,以及它们如何使您的工作…

day4,day5 -java集合框架

List、Set、Map等常用集合类的特点和用法。 常用集合类(List、Set、Map 等)是 Java 中提供的数据结构,用于存储和操作一组数据。以下是它们的特点和用法: List(列表): 特点:有序集合&#xff0…

《深入理解计算机系统(CSAPP)》第8章 异常控制流 - 学习笔记

写在前面的话:此系列文章为笔者学习CSAPP时的个人笔记,分享出来与大家学习交流,目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记,在复习回看时发现部分内容存在一些小问题,因时间紧张来不及再次整理…

Android 12系统源码_WindowInsets (一)WindowInsets相关类和功能介绍

一、什么是WindowInsets? WindowInsets源码解释为Window Content的一系列插值集合,可以理解为可以将其理解为不同的窗口装饰区域类型,比如一个Activity相对于手机屏幕需要空出的地方以腾给StatusBar、Ime、NavigationBar等系统窗口,具体表现为该区域需要的上下左右的宽高。…

如何强制删除文件夹?这样操作就能搞定!

案例:我想删掉一些没有用的文件夹,释放一些电脑内存,但是我发现,有些文件夹并不能直接被删除。怎样才能删除这些文件夹?有没有小伙伴有解决的办法。 在使用电脑过程中,我们可能会遇到一些无法正常删除文件夹…

操作系统-进程和线程-进程和线程

目录 一、进程的概念、组成、特征 二、进程的状态与转换、组织 2.1进程状态 2.2进程转换关系 2.3进程的组织 链接方式 索引方式 三、进程控制 3.1进程的创建 3.2进程的终止 3.3进程的阻塞和唤醒 3.4进程的切换 ​编辑 四、进程通信 4.1共享存储 4.2消息传递 直接通信…

[中间件漏洞]nginx漏洞复现

目录 文件解析漏洞 原理分析 复现过程 防御方法 目录遍历漏洞 原理分析 复现过程 防御方法 空字节代码执行漏洞 复现过程 防御方法 整数溢出漏洞(CVE-2017-7529) 复现过程 防御方法 文件名逻辑漏洞(CVE-2013-4547) 复现过程 防…

南京市某高校计算机科学与技术专业性能测试与Loadrunner—考试试卷分析

XXX科技学院试卷 20 /20 学年 第 学期 课程所属部门: 课程名称: 课程编号: 考试方式:(A、B、开、闭)卷 使用班级: …

Android 12.0仿ios的hotseat效果修改hotseat样式

1.概述 最近在12.0产品项目需求的需要,系统原生Launcher的布局样式很一般,所以需要重新设计ui对布局样式做调整,产品在看到 ios的hotseat效果觉得特别美观,所以要仿ios一样不需要横屏铺满的效果 居中显示就行了,所以就要看hotseat的具体布局显示了 效果图如下: 2.仿io…

Python数据攻略-Pandas常用数据操作

大家好,我是Mr数据杨。今天我将带领各位走进Python的奇妙世界,就像步入三国演义那样热闹且复杂的战争年代。这里,数据就像那些智勇双全的武将和策士,我们要学习如何访问和修改它们,就如同诸葛亮那样掌控战局。 先来理…

springboot+vue医院网上预约挂号系统4n9w0

在线挂号平台已经成为它运营过程中至关重要的因素。医院挂号管理系统,是在计算机与通信设备十分完备的基础上,为医院管理人员、医生、用户提供的系统化的管理平台。 本系统需要实现基础的医院介绍、线上挂号、在线咨询、医生请假等几个主要功能。 管理员…

佛朗斯冲击港交所IPO:叉车租赁的未来是数字化?

佛朗斯“三战”IPO。 图源:佛朗斯 近日,广州佛朗斯股份有限公司(下文简称为“佛朗斯”)正式向港交所递交招股书,拟于港交所主板挂牌上市。 值得注意的是,这并不是佛朗斯首次冲击IPO。2019年6月和2020年7月…

Pytorch CIFAR10图像分类 ShuffleNet篇

Pytorch CIFAR10图像分类 ShuffleNet篇 文章目录 Pytorch CIFAR10图像分类 ShuffleNet篇4. 定义网络(ShuffleNet)Channel Shuffle网络单元 Shuffle UnitShuffleNet 网络结构summary查看网络测试和定义网络 5. 定义损失函数和优化器6. 训练及可视化&#…