Natural Language Processing自然语言处理(NLP)
机器学*/深度学*的相关笔记
前言:
欢迎来到此处,这里是我边学*边整理的有关机械学*/深度学*的相关笔记。先前我对这方面的知识不是很了解,笔记整理必然有不妥之处,请见谅并斧正。
目录:
深度自然语言处理
1.Word Vectors(词向量)
2.Neural Classifiers(神经分类器)
3.神经网络和反向传播
4.Dependency Parsing
5.语言模型(LM)和循环神经网络(RNNs)
6.LSTM
7.机器翻译、Seq2Seq和注意力机制(attention)
8.NLP中的问答系统
9.NLP中的卷积神经网络
10.NLP子词模型
11.基于上下文的表征与NLP预训练模型
NLP与深度学*的未来
深度自然语言处理(NLP)
人类的语言有什么特别之处?人类语言是一个专门用来表达意义的系统,语言文字是上层抽象表征,NLP与计算机视觉或任何其他机器学*任务都有很大的不同
语言是混乱的,自然处理的目的是更好地理解语言中的意思及其影响。
*年来在深度学*中比较有效的方式是基于上下文的词汇表征。它的核心想法是:一个单词的意思是由经常出现在它附*的单词给出的。
\(●当一个单词 \omega 出现在文本中时,它的上下文是出现在其附*的一组单词(在一个固定大小的窗口中)\)
\(●基于海量数据,使用 \omega 的许多上下文来构建 \omega 的表示\)
NLP模型算法就是研究如何让计算机读懂人类语言,即将人的自然语言转换为计算机可以阅读的指令。
1.Word Vectors(词向量)
![](https://pic.imgdb.cn/item/650ce421c458853aef14331a.png)
Word Vectors是利用向量来表示单词, 并可以从中筛选相似度高的不同单词以及其他衍生的比较和选择方法。
使用词向量编码单词, N 维空间足够我们编码语言的所有语义,每一维度都会编码一些我们使用语言传递的信息。
处理词向量之前,必要的公式应该得到演示,如下:
$$P( O | C )=\frac{exp(u_o^\tau v_c)}{\sum_{w\in Vocab}exp(u_w^\tau v_c)}$$
注:上述为在word2vec中,条件概率分布公式,是通过取向量点积并应用来给出的softmax最大功能。
Word2Vec是一个迭代模型,该模型能够根据文本进行迭代学*,并最终能够对给定上下文的单词的概率对词向量进行编码呈现,而不是计算和存储一些大型数据集(可能是数十亿个句子)的全局信息.
2.Neural Classifiers(神经分类器)
对于分类问题,我们有训练数据集:它由一些样本组成
$${x_i,y_i}^N_{i=1}$$
●\(x_i\)输入,例如单词(索引或是向量),句子,文档等等(维度为 \(d\))
●\(y_i\)是我们尝试预测的标签(\(C\) 个类别中的一个),例如:
⊙类别:感情,命名实体,购买/售出的决定。
⊙其他单词。
⊙多词序列。
训练数据 \(\{x_i,y_i\}^N_{i=1}\)
●softmax分类器:
在softmax分类器中最常用到交叉熵损失,也是负对数概率形态。
对于每个训练样本(x,y),我们的目标是最大化正确类\(y\)的概率,或者我们可以最小化该类的负对数概率
$$ -logp(y|x)=-log(\frac{exp(f_y)}{\sum^C_{c=1}exp(f_c)}) $$
使用对数概率将我们的目标函数转换为求和形态,这更容易在推导和应用中使用。
注:交叉熵的损失理解
●交叉熵的概念来源于信息论,衡量两个分布之间的差异
●令真实概率分布为\(p\),我们计算的模型概率分布为\(q\)
●交叉熵为
$$ H(p,q)=-\sum_{c=1}^Cp(c)logq(c) $$
●假设标准答案的概率分布是,在正确类上为1,在其他类别上为0:
$$ p=[0,\cdots,0,1,0,\cdots,0] $$
●因为 \(p\) 是独热向量,所以唯一剩下的项是真实的负对数概率
●神经网络分类器
单独使用线性分类器\(softmax(≈logisti回归)\)并不强大
![](https://pic.imgdb.cn/item/650ce5cbc458853aef148f1d.png)
3.神经网络和反向传播
●实体命名识别(NER)
跟踪文档中提到的特定实体
对于问题回答,答案通常是命名实体
许多需要的信息实际上是命名实体之间的关联
同样的技术可以扩展到其他 slot-filling 槽填充分类
通常后面是命名实体链接/规范化到知识库
●句子中的命名实体识别
我们通过在上下文中对单词进行分类,然后将实体提取为单词子序列来预测实体。
●NER难点
很难计算出实体的边界
很难知道某物是否是一个实体
很难知道未知/新奇实体的类别
实体类是模糊的,依赖于上下文
权重矩阵的梯度导数:
$$ s=u^Th $$ $$ h=f(z) $$ $$ z=Wx+b $$
计算$\frac{\delta s}{\delta W} $
使用链式法则
$$ \frac{\delta s}{\delta W}=\frac{\delta s}{\delta h} \frac{\delta h}{\delta z} \frac{\delta z}{\delta W} $$
反向传播的梯度求导:
![image-2.png](https://pic.imgdb.cn/item/650ce5cbc458853aef148f29.png)
![image-3.png](https://pic.imgdb.cn/item/650ce5cbc458853aef148f36.png)
Question:应该使用可用的“预训练”词向量吗?
answer:
几乎总是「应该用」
他们接受了大量的数据训练,所以他们会知道训练数据中没有的单词,也会知道更多关于训练数据中的单词
拥有上亿的数据语料吗?那可以随机初始化开始训练
计算图与反向传播:
我们把神经网络方程表示成一个图
![](https://pic.imgdb.cn/item/650ce5cbc458853aef148f4e.png)
4.Dependency Parsing
成分与依赖:
句子是使用逐步嵌套的单元构建的
短语结构将单词组织成嵌套的成分
![image-6.png](https://pic.imgdb.cn/item/650ce6a8c458853aef14ad73.png)
起步单元: 单词被赋予一个类别
单词组合成不同类型的词语
短语可以递归地组合成更大地短语
单词的排列可以组成许多意义的句子
但是同时,单个句子所表达的含义也会有所不同
面对复杂结构的句子,我们需要考虑指数级的可能结构,这个序列被称为卡特兰数
$$ C_n=\frac{(2n)!}{(n+1)!n!} $$
依赖语法与树库:
Dependency Structure有两种表现形式
⊙直接在句子上标出依存关系箭头及语法关系
⊙将其做成树状机构(Dependency Tree Graph)
![image-7.png](https://pic.imgdb.cn/item/650ce6a8c458853aef14ad81.png)
箭头通常标记(type)为语法关系的名称(主题、介词对象、apposition等)
箭头连接头部(head)(调速器,上级,regent)和一个依赖(修饰词,下级,下属)
A->的事情
通常,依赖关系形成一棵树(单头,无环,连接图)
5.语言模型(LM)和循环神经网络(RNNs)
语言模型:
![image-8.png](https://pic.imgdb.cn/item/650ce6a8c458853aef14ad8d.png)
语言建模的任务是预测下一个单词是什么
更正式的说法是:给定一个单词序列$ x{(1)},x,\dots,x^{(t)} \(,计算下一个单词\) x^{(t+1)} \(的概率分布:
**\)$ P(x{(t+1)}|x,\dots,x^{(1)}) $$**
其中,\(x^{(t+1)}\) 可以是词表中的任意单词 $ V={w_1,\dots,w_{|V|} } $
这样做的系统被称为 Language Model 语言模型
![image-9.png](https://pic.imgdb.cn/item/650ce6a9c458853aef14ada4.png)
![image-10.png](https://pic.imgdb.cn/item/650ce6a9c458853aef14adb5.png)
RNNs:
![image-11.png](https://pic.imgdb.cn/item/650ce733c458853aef14f388.png)
核心想法: 重复使用相同的权重矩阵 \(W\)
●RNN优点:
可以处理任意长度的输入
模型大小不会随着输入的增加而增加
在每个时间步上应用相同的权重,因此在处理输入时具有对称性
●RNN缺点:
循环串行计算速度慢
在实践中,很难从许多步骤前返回信息
训练模型:
获取一个较大的文本语料库,该语料库是一个单词序列
输入RNN-LN;计算 每个步骤\(t\) 的输出分布
即预测到目前为止给定的每个单词的概率分布
步骤\(t\)上的损失函数为预测概率分布 $ \hat{y}^{(t)} \(** 与真实下一个单词 **\) y{(t)}(x的独热向量) \(** 之间的**交叉熵**
**\)$ J{(t)}(\theta)=CE(y,\hat{y}^{(t)})=-\sum_{w\in V}y^{(t)}w log \hat{y}^{(t)}w = -log \hat{y}^{(t)}{x{t+1}} $$
将其平均,得到整个训练集的总体损失
$$ J(\theta)=\frac{1}{T} \sum_{t=1}^{T} J^{(t)}(\theta) = \frac{1}{T} \sum_{t=1}^{T} -log \hat{y}^{(t)}{x{t+1}} $$
6.LSTM
长短时记忆(LSTM):
![image-13.png](https://pic.imgdb.cn/item/650ce734c458853aef14f3bf.png)
Hochreiter和Schmidhuber在1997年提出了一种RNN,用于解决梯度消失问题。
在第 \(t\) 步,有一个隐藏状态 \(h^{(t)}\) 和一个单元状态 \(c^{(t)}\)
都是长度为n的向量
单元储存长期信息
LSTM可以从单元中擦除、写入和读取信息
信息被 擦除/写入/读取 的选择由三个对应的门控制
门也是长度为 \(n\) 的向量
在每个时间步长上,门的每个元素可以打开(1)、关闭(0)或介于两者之间
门是动态的: 它们的值是基于当前上下文计算的
7.机器翻译、Seq2Seq和注意力机制(attention)
这里我们重点关注神经网路机器翻译
神经机器翻译(NMT)是利用单个神经网络进行机器翻译的一种方法
神经网络架构称为 sequence-to-sequence (又名seq2seq),它包含两个RNNs
sequence-to-sequence 模型是条件语言模型的一个例子
注意力机制:
Sequence-to-sequence:瓶颈问题
注意力为瓶颈问题提供了一个解决方案
核心理念: 在解码器的每一步,使用与编码器的直接连接来专注于源序列的特点部分
首先我们将通过图表展示,然后我们将用方程
注意力最后的性能:
注意力显著提高了NMT性能
这是非常有用的,让解码器专注于某些部分的源语句
注意力解决瓶颈问题
注意力允许解码器直接查看源语句;绕过瓶颈
注意力帮助消失梯度问题
提供了通往遥远状态的捷径
注意力提供了一些可解释性
通过检查注意力的分布,我们可以看到解码器在关注什么
我们可以免费得到(软)对齐
网络只是自主学*了对齐
注意力是一种普遍的深度学*技巧
8.NLP中的问答系统
我们今天要讨论的不是基于结构化储存的问答。
而是在一段或一份文件中找到答案
这个问题通常被称为阅读理解
这就是我们今天要关注的
![image-19.png](https://pic.imgdb.cn/item/650ce796c458853aef153519.png)
![image-20.png](https://pic.imgdb.cn/item/650ce796c458853aef153533.png)
复杂的系统,但他们在事实问题上做得相当好
非常复杂的多模块多组件的系统:
首先对问题进行解析,使用手写的语义规范化规则,将其转化为更好的语义形式
在通过问题类型分类器,找出问题在寻找的语义类型
信息检索系统找到可能包含答案的段落,排序后进行选择
NER识别候选实体再进行判断
这样的QA系统在特定领域很有效:Factoid Question Answering 针对实体的问答
BiDAF:
![image-21.png](https://pic.imgdb.cn/item/650ce7e5c458853aef15438f.png)
![image-22.png](https://pic.imgdb.cn/item/650ce7e6c458853aef15439a.png)
多年来,BiDAF architecture有许多变体和改进,但其核心思想是 the Attention Flow layer
思路: attention 应该双向流动——从上下文到问题,从问题到上下文
9.NLP中的卷积神经网络
从RNN到CNN:
循环神经网络不能捕获没有前缀上下文的短语
经常在最终向量中捕获的信息太多来自于最后的一些词汇内容
例如: \(softmax\) 通常只在最后一步计算
那么,什么是卷积?
●一维离散卷积一般为: $ (f*g)[n]= \sum\limits_{m=-M}^{M} f[n-m]g[m] $
●卷积通常地用于从图像中提取特征
模型位置不变的识别
●二维示例:
黄色和红色数字显示过滤器 (=内核) 权重
绿色显示输入
粉色显示输出
![image-24.png](https://pic.imgdb.cn/item/650ce7e6c458853aef1543be.png)
![image-25.png](https://pic.imgdb.cn/item/650ce7e6c458853aef1543dd.png)
对比RNN与CNN:
10.NLP子词模型
![image-27.png](https://pic.imgdb.cn/item/650ce80bc458853aef1548e8.png)
11.基于上下文的表征与NLP预训练模型
预训练的词向量:
POS和NER两种表征体系
11个词窗,100个隐层神经元,在12w词上训练7周
简单且常见的解决方案:
训练时: 词汇表$ { word occurring,say, ≥5\ times } \ \cup {
●问题:
没有办法区分不同 UNK words,无论是身份还是意义
transformer:
![image-31.png](https://pic.imgdb.cn/item/650ce828c458853aef154d86.png)
![image-32.png](https://pic.imgdb.cn/item/650ce828c458853aef154d99.png)
BERT
BERT 使用 mask 的方式进行整个上下文的预测,使用了双向的上下文信息
尚未完结--------
NLP与深度学*的未来
为何*年来深度学*的如此成功?
扩展能力(模型和数据大小) 是深度学**些年来成功的很大一部分原因
同时,过去受到计算资源和数据资源的规模限制,深度学*一直处于尚未成熟发展的地位
无标签和无监督学*的不断发展和进步
注:神经网络在NLP深度学*中的广泛发展已经成为了这以领域不可或缺的一部分
计算机视觉可视化的推动与多任务处理方式的改进
低资源支撑的场景:
不需要很多计算能力的模型(这对移动设备尤为重要)
低资源语言
低数据环境(ML中的元学*越来受欢迎)
NLP正逐渐对社会产生巨大影响力
Used by Han
2023