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

【NLP入门系列六】Word2Vec模型简介,与以《人民的名义》小说原文实践

在这里插入图片描述

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

博主简介:努力学习的22级本科生一枚 🌟​;探索AI算法,C++,go语言的世界;在迷茫中寻找光芒​🌸
博客主页:羊小猪~~-CSDN博客
内容简介这一篇是介绍词嵌入模型—Word2Vec模型,并以一段《人民的名义》小说原文实践
🌸箴言🌸:去寻找理想的“天空“”之城
上一篇内容:【NLP入门系列五】中文文本分类案例-CSDN博客

文章目录

  • Word2vec简介
    • CBOW模型
    • Skip-gram模型
    • 对比
    • 缺点
  • Word2Vec实践
    • 1、数据准备与处理
    • 2、训练Word2Vec模型
    • 3、模型应用
      • 计算词汇相识度
      • 找出不匹配的词汇
      • 计算词汇词频
  • 参考资料

Word2vec简介

在处理NLP问题中,第一步就是对词语进行处理,比如:判断一个词的词性,这个时候我们可以构建一个映射函数f(x) -> y,其中x是词语,y是词性,但是对于计算机来说,他只认识二进制,所以,为了使用计算机相关算法模型去处理,就需要将词语转化为数值形式。

NLP中,词语是人类的抽象总结,是符号形式的(比如中文、英文等等),不是数值形式的,因此需要将它们嵌入到一个数学空间中,这个过程就是词嵌入(word embedding)。

📖👀 word embedding和embedding的区别

🌇 Embedding:指的是将离散变量(如词汇、用户ID、物品ID等)映射到连续的向量空间的过程。

🌆 word embedding: 是一种具体的embedding技术,主要用于生成单词的固定向量表示。

词嵌入的目的是将词语映射到一个向量空间中的过程,使得相似的词在向量空间中距离较近,而不相似的词距离较远。Word2Vec 则是其中的一种词嵌入方法,是一种用于生成词向量的浅层神经网络模型。

Word2Vec通过学习大量文本数据,将每个单词表示为一个连续的向量,这些向量可以捕捉单词之间的语义和句法关系。

总的来说,Embedding只是将离散词嵌入到一个连续的词空间里,而word embedding不光嵌入到一个连续空间,还做到了相似的词在向量空间中距离较近,而不相似的词距离较远

Word2Vec有两种主要架构:连续词袋型(CBOW)和Skip-Gram模型。

CBOW模型

📘 简要介绍CBOW模型通过上下文来预测当前值,相当于一句话中扣掉一个词,让你根据上下文猜这个词是啥,有点像英语的完形填空。

原理简介CBOW 模型首先将输入的词语转换为词向量,然后将这些词向量相加得到一个向量表示,这个向量表示就是当前上下文的表示。最后,CBOW 模型使用这个向量表示来预测目标词语的概率分布。

📄适合:训练目标词语出现频率较高的词语(词频高,说明预测这个词的概率高)

在这里插入图片描述

Skip-gram模型

📖 简介:Skip-gram 模型用当前词来预测上下文。换句话说,就是给一个词,让你猜前面和后面可能出现什么词。

👀 原理简介:Skip-gram 模型首先将目标词语转换为它的词向量,然后使用这个词向量来预测它周围的词语。

📄 适用:训练数据中目标词语出现频率较低的情况(词频低,即使某个词在整个语料库中出现次数不多,但每次出现时,它都会提供关于其上下文的重要信息,这个很像人一样,注意力总是比较喜欢“独特”的东西)

在这里插入图片描述

对比

总的来说,这张图很直观的展示了区别。

在这里插入图片描述

缺点

  • 没有考虑同义词
  • 串口长度有限
  • 没有考虑全局的文本信息
  • ……………………

Word2Vec实践

0️⃣ 数据简介:以人民的名义小说一段原文为题材。

1、数据准备与处理

import gensim 
import jieba
import jieba.analyse
from gensim.models import Word2Vec'''  
由于人名是固定的,故为了避免人名分词,需要去固定一些词语
固定方法:https://blog.csdn.net/m0_43432638/article/details/103773016
这里选择加载文档方式,文档内容:
沙瑞金
田国富
高育良
侯亮平
钟小艾
陈岩石
欧阳菁
易学习
王大路
蔡成功
孙连城
季昌明
丁义珍
郑西坡
赵东来
高小琴
赵瑞龙
林华华
刘新建
刘庆祝
赵德汉
陈海
'''
# 加载自定义词典
jieba.load_userdict("name.txt")result_cut = []# 加载数据
with open("in_the_name_of_people.txt") as f:lines = f.readlines()  # 读取所有行for line in lines:result_cut.append(list(jieba.cut(line)))f.close()
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\WY118C~1\AppData\Local\Temp\jieba.cache
Loading model cost 1.250 seconds.
Prefix dict has been built successfully.
# 停用词去除,一般nlp任务都会做
stopwords_list = [",","。","\n","\u3000"," ",":","!","?","…"]  # 自定义def remove_stopwords(ls):res = []for word in ls: if word not in stopwords_list:res.append(word)return res # 处理后数据
data = []
for x in result_cut:   # 一行一行处理后数据data.append(remove_stopwords(x))
# 查看一部分数据
data[119]
['开会','开会','开','你','个头','呀','侯亮平','骂骂咧咧','心','却','稍安','老同学','陈海','为','人','老实','办事','踏实','而且','干','了','几年','反贪局','局长','经验','还','算','丰富']

2、训练Word2Vec模型

  • vector_size: 词向量的维度,默认是100。
  • window: 上下文窗口大小,默认是5。
  • min_count: 忽略所有单词频率低于这个值的单词,默认是5。
  • sg: 决定使用 skip-gram (sg=1) 还是 CBOW (sg=0),默认是0
model = Word2Vec(data, vector_size=100, window=5, min_count=1, sg=1)

3、模型应用

计算词汇相识度

# api:similarity
print(model.wv.similarity("沙瑞金", "李达康"))
0.9310903
# 找出和沙瑞金最相关的5个词
for e in model.wv.most_similar(positive=["沙瑞金"], topn=5):print(e[0], e[1])   
田国富 0.9316699504852295
李达康 0.9310902953147888
易学习 0.9205609560012817
省委 0.9166615605354309
沙 0.914297342300415

找出不匹配的词汇

# doesnt_model,可以找出一组词汇中与其他词汇不匹配的词汇
odd_word = model.wv.doesnt_match(["苹果", "香蕉", "书"])
print(odd_word)

计算词汇词频

# get_vecattr
word_frequency = model.wv.get_vecattr("沙瑞金", "count")
print(word_frequency)
353

参考资料

  • 【词向量 | word2vec | 理论讲解+代码 | 文本分析【python-gensim】】https://www.bilibili.com/video/BV1vS4y1N7mo?vd_source=1fd424333dd77a7d3e2e741f7d6fd4ee
http://www.dtcms.com/a/271862.html

相关文章:

  • IPv4和IPv6双栈配置
  • 【K8S】Kubernetes 使用 Ingress-Nginx 基于 Cookie 实现会话保持的负载均衡
  • HCIA第一次实验报告:静态路由综合实验
  • day11-微服务面试篇
  • C++11 std::is_sorted 和 std::is_sorted_until 原理解析
  • CentOs 7 MySql8.0.23之前的版本主从复制
  • 无缝矩阵与普通矩阵的对比分析
  • 中老年人的陪伴,猫咪与机器人玩具有什么区别?
  • Java 与 MySQL 性能优化:MySQL连接池参数优化与性能提升
  • MySQL(127)如何解决主从同步失败问题?
  • adb 简介与常用命令
  • 分布式ID 与自增区别
  • 虚拟储能与分布式光伏协同优化:新型电力系统的灵活性解决方案
  • 异步I/O库:libuv、libev、libevent与libeio
  • 从0到1:Python与DeepSeek的深度融合指南
  • jupyter 和 kernel 之间的关系
  • .net服务器Kestrel 与反向代理
  • 【TCP/IP】11. IP 组播
  • 【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(六)
  • 【博主亲测可用】PS2025最新版:Adobe Photoshop 2025 v26.8.1 激活版(附安装教程)
  • Apache Dubbo实战:JavaSDK使用
  • 前端面试十一之TS
  • 服务器重装后如何“复活”旧硬盘上的 Anaconda 环境?—— 一次完整的排错与恢复记录
  • 计算机学科专业基础综合(408)四门核心课程的知识点总结
  • 微信小程序101~110
  • 以太网基础⑤UDP 协议原理与 FPGA 实现
  • 2025年7月9日学习笔记——模式识别与机器学习——fisher线性回归、感知器、最小二乘法、最小误差判别算法、罗杰斯特回归算法——线性分类器
  • 【TCP/IP】1. 概述
  • AI赋能生活:深度解析与技术洞察
  • LiteHub之文件下载与视频播放