【深度学习】嘿马深度学习系统性知识教程第10篇:循环神经网络,4.2 词嵌入与NLP【附代码文档】

🏆🏆🏆教程全知识点简介:1.1 深度学习介绍 深度学习与神经网络 1.2 神经网络基础 1.3 浅层神经网络 2.1 多分类与 TensorFlow 5、得出每次训练的准确率(通过真实值和预测值进行位置比较,每个样本都比较) 2.2 梯度下降算法改进 2.3.4 其它正则化方法 2.4 BN 与神经网络调优 3.1 图像数据与边缘检测 3.2 卷积神经网络(CNN)原理 3.3 经典分类网络结构 4.1 循环神经网络 4.1.4 GRU(门控循环单元) 4.1.5 LSTM(长短记忆网络) 4.2 词嵌入与 NLP 学习目标 4.2.2 词嵌入 4.2.3 Word2Vec案例 4.3 seq2seq 与 Attention机制 4.3.2 注意力机制 4.3.3 机器翻译案例 4.3.4 集束搜索(Beam Search) 4.3.5 BLEU-机器翻译的自动评估方法 4.7.3.6 完整代码 5.1 生成对抗网络(GAN) 5.2 自动编码器

📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/454418 中查看
📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/460738 中查看
📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/458345 中查看
✨ 本教程项目亮点
🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考
🎯🎯🎯全教程总章节
🚀🚀🚀本篇主要内容
循环神经网络
了解序列模型相关概念
掌握循环神经网络原理
应用RNN原理手写一个RNN的前向和反向传播过程
了解词嵌入的优势
掌握词嵌入的训练gensim库的使用
掌握编解码网络的原理
掌握Attention机制
4.2 词嵌入与NLP
学习目标
-
目标
-
了解词嵌入的优势
-
掌握词嵌入的训练gensim库的使用
-
应用
-
无
在RNN中词使用one_hot表示的问题
-
假设有10000个词
-
每个词的向量长度都为10000,整体大小太大
-
没能表示出词与词之间的关系
-
例如Apple与Orange会更近一些,Man与Woman会近一些,取任意两个向量计算内积都为0
4.2.2 词嵌入
定义:指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。
注:这个维数通常不定,不同实现算法指定维度都不一样,通常在30~500之间。
如下图所示:
4.2.2.1 特点
-
能够体现出词与词之间的关系
-
比如说 用Man - Woman,或者Apple - Orange,都能得到一个向量
-
能够得到相似词,例如Man - Woman = King - ?
[Quart 文档]
- ? = Queen
4.2.2.3 算法类别
Bengio等人在一系列论文中使用了神经概率语言模型使机器“习得词语的分布式表示。
2013年,谷歌托马斯·米科洛维(Tomas Mikolov)领导的团队发明了一套工具word2vec来进行词嵌入。
- skip-gram
算法学习实现:[
[BeautifulSoup 文档]
- CBow
下载gensim库
pip install gensim
4.2.3 Word2Vec案例
4.2.3.1 训练语料
由于语料比较大,就提供了一个下载地址:[
- 搜狗新闻中文语料(2.7G)
- 做中文分词处理之后的结果
4.2.3.2 步骤
-
1、训练模型
-
2、测试模型结果
[LightGBM 文档]
4.2.3.3 代码
- 训练模型API
[Kivy 文档]
- from gensim import Word2Vec
-
Word2Vec(LineSentence(inp), size=400, window=5, min_count=5)
- LineSentence(inp):把word2vec训练模型的磁盘存储文件
- 转换成所需要的格式,如:[[“sentence1”],[”sentence1”]]
- size:是每个词的向量维度
- window:是词向量训练时的上下文扫描窗口大小,窗口为5就是考虑前5个词和后5个词
- min-count:设置最低频率,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃
-
方法:
- inp:分词后的文本
- save(outp1):保存模型
训练的代码如下
if len(sys.argv) < 3:
sys.exit(1)
# inp表示语料库(分词),outp:模型
inp, outp = sys.argv[1:3]
model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, workers=multiprocessing.cpu_count())
model.save(outp)
import sys
import multiprocessing
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
if __name__ == '__main__':
if len(sys.argv) < 3:
sys.exit(1)
# inp表示语料库(分词),outp:模型
inp, outp = sys.argv[1:3]
model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, workers=multiprocessing.cpu_count())
model.save(outp)
运行命令
python trainword2vec.py ./corpus_seg.txt ./model/*
指定好分词的文件以及,保存模型的文件
-
加载模型测试代码
-
model = gensim.models.Word2Vec.load("*.model")
- model.most_similar('警察')
- model.similarity('男人','女人')
- most_similar(positive=['女人', '丈夫'], negative=['男人'], topn=1)
[os 文档]
improt gensim
gensim.models.Word2Vec.load("./model/corpus.model")
model.most_similar("警察")
Out:
[('警员', 0.6961891651153564),
('保安人员', 0.6414757370948792),
('警官', 0.6149201989173889),
('消防员', 0.6082159876823425),
('宪兵', 0.6013336181640625),
('保安', 0.5982533693313599),
('武警战士', 0.5962344408035278),
('公安人员', 0.5880240201950073),
('民警', 0.5878666639328003),
('刑警', 0.5800305604934692)]
model.similarity('男人','女人')
Out: 0.8909852730435042
model.most_similar(positive=['女人', '丈夫'], negative=['男人'], topn=1)
Out: [('妻子', 0.7788498997688293)]
[invoke 文档]
4.2.4 总结
- 掌握gensim库的词向量训练和使用
循环神经网络
了解序列模型相关概念
掌握循环神经网络原理
应用RNN原理手写一个RNN的前向和反向传播过程
了解词嵌入的优势
掌握词嵌入的训练gensim库的使用
掌握编解码网络的原理
掌握Attention机制
4.3 seq2seq与Attention机制
[Jupyter 文档]
学习目标
-
目标
-
掌握seq2seq模型特点
- 掌握集束搜索方式
- 掌握BLEU评估方法
-
掌握Attention机制
-
应用
-
应用Keras实现seq2seq对日期格式的翻译
4.3.1 seq2seq
seq2seq模型是在2014年,是由Google Brain团队和Yoshua Bengio 两个团队各自独立的提出来。
4.3.1.1 定义
seq2seq是一个Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列, Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。
注:Cell可以用 RNN ,GRU,LSTM 等结构。
- 相当于将RNN模型当中的s0s^{0}s0
4.3.1.2 条件语言模型理解
-
1、编解码器作用
-
编码器的作用是把一个不定长的输入序列x1,…,xtx_{1},\ldots,x_{t}x1,…,xtCCC
- 解码器输出yty^{t}yty1,yt−1y^{1}, y^{t-1}y1,yt−1CCC
argmaxP(y1,…,yT′∣x1,…,xT)argmax {P}(y_1, \ldots, y_{T'} \mid x_1, \ldots, x_T)argmaxP(y1,…,yT′∣x1,…,xT)
- 2、根据最大似然估计,最大化输出序列的概率
P(y1,…,yT′∣x1,…,xT)=∏t′=1T′P(yt′∣y1,…,yt′−1,x1,…,xT)=∏t′=1T′P(yt′∣y1,…,yt′−1,C){P}(y_1, \ldots, y_{T'} \mid x_1, \ldots, x_T) = \prod_{t'=1}^{T'} {P}(y_{t'} \mid y_1, \ldots, y_{t'-1}, x_1, \ldots, x_T) = \prod_{t'=1}^{T'} {P}(y_{t'} \mid y_1, \ldots, y_{t'-1}, {C})P(y1,…,yT′∣x1,…,xT)=∏t′=1T′P(yt′∣y1,…,yt′−1,x1,…,xT)=∏t′=1T′P(yt′∣y1,…,yt′−1,C)
由于这个公式需要求出:P(y1∣C)∗P(y2∣y1,C)∗P(y3∣y2,y2,y1,C)...P(y^{1}|C) * P(y^{2}|y^{1},C)*P(y^{3}|y^{2},y^{2},y^{1},C)...P(y1∣C)∗P(y2∣y1,C)∗P(y3∣y2,y2,y1,C)...
logP(y1,…,yT′∣x1,…,xT)=∑t′=1T′logP(yt′∣y1,…,yt′−1,C)\log{P}(y_1, \ldots, y_{T'} \mid x_1, \ldots, x_T) = \sum_{t'=1}^{T'} \log{P}(y_{t'} \mid y_1, \ldots, y_{t'-1}, {C})logP(y1,…,yT′∣x1,…,xT)=∑t′=1T′logP(yt′∣y1,…,yt′−1,C)
所以这样就变成了P(y1∣C)+P(y2∣y1,C)+P(y3∣y2,y2,y1,C)...P(y^{1}|C)+ P(y^{2}|y^{1},C)+P(y^{3}|y^{2},y^{2},y^{1},C)...P(y1∣C)+P(y2∣y1,C)+P(y3∣y2,y2,y1,C)...这样也可以看成输出结果通过softmax就变成了概率最大,而损失最小的问题,输出序列损失最小化。
4.3.1.3 应用场景
- 神经机器翻译(NMT)
- 聊天机器人
接下来 来看注意力机制,那么普通的seq2seq会面临什么样的问题?
4.3.2 注意力机制
[Statsmodels 文档]
4.3.2.1 长句子问题
