当前位置: 首页 > 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.xdnf.cn/news/1099945.html

相关文章:

  • 如何利用个人电脑搭建数据库服务器实现远程协作
  • RabbitMQ用法的6种核心模式全面解析
  • 零基础入门物联网-远程门禁开关:云平台创建
  • 自动驾驶控制系统
  • 李宏毅(深度学习)--(2)
  • 【TCP/IP】10. 引导协议与动态主机配置协议
  • 查看uniapp 项目中没有用到依赖
  • mx6ull-裸机学习实验15——RTC 实时时钟实验
  • 【养老机器人】核心技术
  • 栈题解——有效的括号【LeetCode】两种方法
  • LangChain框架 Prompts、Agents 应用
  • Git 学习笔记
  • OpenAI正准备推出一款搭载人工智能功能的网络浏览器,试图直接挑战Alphabet旗下
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (二) RISC-V架构深度解剖(上)
  • 链表算法之【合并两个有序链表】
  • 【算法笔记 day three】滑动窗口(其他类型)
  • STM32第十九天 ESP8266-01S和电脑实现串口通信(2)
  • leetcode 3440. 重新安排会议得到最多空余时间 II 中等
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DoubleVerticalSlider(双垂直滑块)
  • idea如何打开extract surround
  • (C++)任务管理系统(文件存储)(正式版)(迭代器)(list列表基础教程)(STL基础知识)
  • 自动化脚本配置网络IP、主机名、网段
  • Python正则表达式实战指南
  • k8s:安装 Helm 私有仓库ChartMuseum、helm-push插件并上传、安装Zookeeper
  • 快速分页wpf
  • 解锁localtime:使用技巧与避坑指南
  • 深度学习中的常见损失函数详解及PyTorch实现
  • 初学者对编译和链接的学习笔记(含预编译详解)
  • c++-内部类
  • 网络安全初级