文章目录
- 三、神经网络基础
- 四、语言模型和词向量
- 五、注意力机制
- 六、NLP基础任务
-
- 七、预训练语言模型
-
- 八、应用
-
三、神经网络基础
常用激活函数有哪些类型?有什么作用?
Sigmoid、ReLU、Tanh等
作用:增强网络的表达能力,加入非线性因素
激活函数
- 目的:为了增强网络的表达能力,需要引入连续的非线性激活函数
- 性质:
- 连续并可导(运行少数点上不可导)的非线性函数。【可导的激活函数可以直接利用数值优化的方法来学习网络参数】
- 激活函数及其导数要尽可能的简单。【有利于提高网络计算效率】
- 激活函数的导函数的值域要在一个合适的区间内。【不能太大也不能太小,否则会影响训练的效率和稳定性】
常用的激活函数
- S i g m o i d / l o g i s t i c Sigmoid/logistic Sigmoid/logistic σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+e−x1
- f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x)=f(x)(1-f(x)) f′(x)=f(x)(1−f(x))
- t a n h ( x ) = e x − e − x e x + e − x tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} tanh(x)=ex+e−xex−e−x
- f ′ ( x ) = 1 − f ( x ) 2 f'(x)=1-f(x)^{2} f′(x)=1−f(x)2
- R e L U ( x ) = { x x ≥ 0 0 x < 0 = m a x ( 0 , x ) ReLU(x)=\left\{\begin{matrix} x & x\geq 0 \\ 0 & x< 0 \\ \end{matrix}\right.=max(0,x) ReLU(x)={x0x≥0x<0=max(0,x)
- L e a k y R e L U ( x ) = { x x > 0 γ x x ≤ 0 = m a x ( 0 , x ) + γ m i n ( 0 , x ) LeakyReLU(x)=\left\{\begin{matrix} x & x> 0 \\ \gamma x & x\leq 0 \\ \end{matrix}\right.=max(0,x)+\gamma min(0,x) LeakyReLU(x)={xγxx>0x≤0=max(0,x)+γmin(0,x)
- E L U ( x ) = { x x > 0 γ ( e x − 1 ) x ≤ 0 = m a x ( 0 , x ) + m i n ( 0 , γ ( e x − 1 ) ) ELU(x)=\left\{\begin{matrix} x & x> 0 \\ \gamma (e^{x}-1) & x\leq 0 \\ \end{matrix}\right.=max(0,x)+ min(0,\gamma (e^{x}-1)) ELU(x)={xγ(ex−1)x>0x≤0=max(0,x)+min(0,γ(ex−1))
- s o f t p l u s ( x ) = l o g ( 1 + e x ) softplus(x)=log(1+e^{x}) softplus(x)=log(1+ex)
- f ′ ( x ) = 1 1 + e − x f'(x)=\frac{1}{1+e^{-x}} f′(x)=1+e−x1
不饱和激活函数的优势:
- 计算上更加高效
- 生物学合理性
- 单侧抑制、宽兴奋边界
- 在一定程度上缓解梯度消失问题
神经网络常用的参数学习方法。(梯度下降、随机梯度下降、mini-batch梯度下降,各自特点)
迭代调参法。
参数学习方法
- 方法1:列方程
- 方法2:迭代调参
- 步骤:
- 1、定义目标函数(损失函数),一般将问题转化为求极值问题
- 2、优化目标函数
- 梯度下降/批量梯度下降(Batch Gradient Descent,BGD):遍历全部数据算损失函数,再算各个参数的梯度,再更新梯度
- 随机梯度下降(Stochastic Gradient Descent,SGD):每次随机选择一个样本,计算损失和梯度,进行更新参数
- 小批量梯度下降(Mini-batch Gradient Descent):克服两者的缺点,将数据分为若干批,按批次更新参数,减少随机性
CNN(结构,包括哪些部分,卷积、池化操作,激活函数,每部分作用)
输入:X
输出:Y
参数:各卷积层中各过滤器值和偏置;卷积层到池化层权重和偏置;全连接输出网络连接权重和偏置
函数关系:X → \rightarrow → Y,若干(卷积层+采样层)+全连接层
卷积层:大大减少参数的个数
池化层:通过采样缩小网络规模
全连接层:将最后池化层的单元“平化”
局部连接、权重共享、空间或时间上的次采样
网络训练时卷积层和池化层作为一个整体
RNN(结构,参数学习方法BPTT(原理)
改进方法,LSTM,GRU,BiLSTM,存在哪些问题才进行的改进)
问题:
⇒ \Rightarrow ⇒RNN
问题:距当前节点越远的节点对当前节点处理影响越小,无法建模长时间的依赖
⇒ \Rightarrow ⇒LSTM、GRU等
BP算法:
将输出误差以某种形式反传给各层所有的单元,各层按本层误差修正各单元连接权值
参数训练方法:BPTT
长期依赖问题:距当前节点越远的节点对当前节点处理影响越小,无法建模长时间的依赖
解决方法:LSTM、GRU等
LSTM:门控机制,遗忘门、输入门、输出门
GRU:LSTM简化,输入门和遗忘门合并为更新门(更新门决定隐状态保留放弃部分)
BiLSTM:两个隐层分别可以表示一个词的上文信息和下文信息
梯度消失:在误差反向传播时,每一层都要乘以激活函数的导数,若该导数值小于1,将导致误差愈来愈小,甚至消失。(如果导数很大将导致梯度爆炸)
解决办法:选择合适的激活函数(Relu),用复杂的门结构代替激活函数,残差结构。
梯度消失问题
原因:
误差反向传播时每层都要乘激活函数的导数,当激活函数导数值小于1时,误差经过每一层传递都会不断衰减,当网络很深时甚至消失。
解决方案:
- 选择合适的激活函数
- 用更复杂的门结构代替激活函数
- 残差结构
过拟合解决方案
- 选择合适的正则方法
- Dropout
- 损失函数加入适当的正则项
四、语言模型和词向量
统计语言模型建模方法
输入:句子S
输出:句子概率 p ( S ) p(S) p(S)
参数: p ( w i ∣ w 1 , . . . , w i − 1 ) p(w_{i}|w_{1},...,w_{i-1}) p(wi∣w1,...,wi−1)
函数关系: p ( S ) = ∏ i = 1 n p ( w i ∣ w 1 , . . . , w i − 1 ) p(S)=\prod_{i=1}^{n}p(w_{i}|w_{1},...,w_{i-1}) p(S)=∏i=1np(wi∣w1,...,wi−1)
|
DNN语言模型(NNLM) |
RNN语言模型(RNNLM) |
模型结构2-gram |
输入层:X,词 w i − 1 w_{i-1} wi−1 隐藏层: h = t a n h ( X H + b 1 ) h=tanh(XH+b^{1}) h=tanh(XH+b1) 输出层: p ( w i ∣ w i − 1 ) = s o f t m a x ( b 2 + U ( t a n h ( X H + b 1 ) ) ) p(w_{i}|w_{i-1})=softmax(b^{2}+U(tanh(XH+b^{1}))) p(wi∣wi−1)=softmax(b2+U(tanh(XH+b1))) 参数: θ = { H , U , b 1 , b 2 } \theta=\left\{H,U,b^{1},b^{2}\right\} θ={H,U,b1,b2} |
输入层:X,词 w i − 1 w_{i-1} wi−1 隐藏层: h ( t ) = t a n h ( X H + M h ( t − 1 ) + b 1 ) h(t)=tanh(XH+Mh(t-1)+b^{1}) h(t)=tanh(XH+Mh(t−1)+b1) 输出层: p ( w i ∣ w i − 1 ) = s o f t m a x ( b 2 + U h ( t ) ) p(w_{i}|w_{i-1})=softmax(b^{2}+Uh(t)) p(wi∣wi−1)=softmax(b2+Uh(t)) 参数: θ = { H , U , M , b 1 , b 2 } \theta=\left\{H,U,M,b^{1},b^{2}\right\} θ={H,U,M,b1,b2} |
参数训练 |
(BP)随机梯度下降法优化训练目标 |
(BPTT)随机梯度下降法优化训练目标 |
模型预测 |
每求一个参数用一遍神经网络 |
一次 |
RNN优点 |
|
RNNLM模型可以保留每个词的全部历史信息,不需简化为n-gram;引入词向量作为输入后不需要数据平滑 |
词向量:一些词表示方法导致模型耗空间大且稀疏,需要构造低维稠密的词向量作为词的分布式表示
词向量特点:
-
语义相似的词,其词向量空间距离更相近(分布假说)
-
优点:降维,消除词汇鸿沟,其语言模型自带平滑功能
-
应用:同义词检测、单词类比,语义相似度度量
-
相似关系词对的词向量之差也相似
发展过程:
神经语言模型 → \rightarrow →浅层词向量 → \rightarrow →深层词向量 → \rightarrow →预训练语言模型
五种典型的词向量:
NNLM模型词向量、RNNLM模型词向量:训练语言模型同时也训练了词向量
|
C&W模型词向量 |
CBOW模型词向量 |
Skip-gram模型词向量 |
思想 |
求目标词与其上下文的联合打分 |
|
|
结构 |
输入:目标词及其上下文 隐藏层:上下文和目标词的联合表示 输出层:对输入序列打分(正样本打高分,负样本打低分) |
输入层:X:词 w i w_{i} wi的上下文词向量平均值 输出层: p ( w i ∣ C ) p(w_{i}|C) p(wi∣C) |
输入层:X:词 w i w_{i} wi的词向量 输出层: p ( w j ∣ w i ) p(w_{j}|w_{i}) p(wj∣wi) |
参数训练 |
采用pairwise的方式对文本片段进行优化,即可得词向量 |
梯度下降法 |
梯度下降法 |
五、注意力机制
注意力机制:加权求和机制/模块
- 功能:对应集合K,求相对Q各个元素的权重,然后按权重相加形成Q想要的结果
发展历史:
传统注意力 → \rightarrow →在传统注意力机制基础上扩充了注意力编码机制
模块结构:
-
输入、输出、参数、运算关系
-
步骤:
-
计算 f ( Q , K i ) f(Q,K_{i}) f(Q,Ki)
-
注意力打分函数:
S = f ( Q , K ) = { Q T K i 点积模型 Q T K i d 缩放点模型 W a [ Q , K i ] 连接模型 Q T W a K i 双线性模型 V T t a n h ( W a Q + U a K i ) 加性模型 S=f(Q,K)=\left\{\begin{matrix} Q^{T}K_{i} & 点积模型 \\ \frac{Q^{T}K_{i}}{\sqrt{d}}&缩放点模型 \\ W_{a}\left [ Q,K_{i} \right ] &连接模型 \\ Q^{T}W_{a}K_{i} &双线性模型 \\ V^{T}tanh(W_{a}Q+U_{a}K_{i})&加性模型 \\ \end{matrix}\right. S=f(Q,K)=⎩ ⎨ ⎧QTKid QTKiWa[Q,Ki]QTWaKiVTtanh(WaQ+UaKi)点积模型缩放点模型连接模型双线性模型加性模型
-
s o f t m a x ( f ( Q , K i ) ) softmax(f(Q,K_{i})) softmax(f(Q,Ki))(计算对于Q,各个 K i K_{i} Ki的权重)
-
计算输出(各 K i K_{i} Ki乘以自己的权重,然后求和)
-
普通模式:
A t t − V = a 1 × K 1 + a 2 × K 2 + a 3 × K 3 + a 4 × K 4 + a 5 × K 5 Att-V=a1\times K1+a2\times K2+a3\times K3+a4\times K4+a5\times K5 Att−V=a1×K1+a2×K2+a3×K3+a4×K4+a5×K5
-
键值对模型:
A t t − V = a 1 × V 1 + a 2 × V 2 + a 3 × V 3 + a 4 × V 4 + a 5 × V 5 Att-V=a1\times V1+a2\times V2+a3\times V3+a4\times V4+a5\times V5 Att−V=a1×V1+a2×V2+a3×V3+a4×V4+a5×V5
注意力机制应用场景:网络中有”求和“的地方都可以用,如 图卷积,机器翻译等
优点:
- 根据不同场景动态选择不同的关注对象
- 不考虑词之间的距离直接计算依赖关系,提升任务性能
作用:等权处理 → \rightarrow →加权处理 → \rightarrow →提升任务效果
软注意力Soft Attention(Soft AM):
在求注意力分配概率分布的时候,对于输入句子X中任意一个单词都给出个概率,是个概率分布
硬注意力Hard Attention(Hard AM):
直接从输入句子里面找到某个特定的单词,然后把目标句子单词和这个单词对齐,而其他输入句子中的单词硬性地认为对齐概率为0
全局注意力Global Attention:
Decode端Attention计算时要考虑Encoder端序列中所有的词
Global Attention Model是Soft Attention Model
局部注意力Local Attention:
Local Attention Model本质上是Soft AM和Hard AM的一个混合或折衷。
一般首先预估一个对齐位置Pt,然后在Pt左右大小为D的窗口范围来取类似于Soft AM的概率分布
NLP应用场景:
机器翻译、图片标题生成、
注意力机制优势:
- 让任务处理系统找到与当前任务相关显著的输入信息,并按重要性进行处理,从而提高输出的质量
- 不需要监督信号,可推理多种不同模态数据之间的难以解释、隐蔽性强、复杂映射关系,对于先验认知少的问题,极为有效
- 解决长距离依赖问题,提升任务性能
存在问题:对RNN有注意力偏置问题(RNN越往后权重越大)
解决方案:Coverage机制可以缓解注意力偏置问题
注意力编码机制:
通过建立序列各元素之间的关联关系形成一种序列表示(按元素之间关系对序列进行编码);或通过不同序列元素之间的关联关系形成不同序列间的融合表示
单一向量编码:将输入序列按规则编码成单一向量表示。如句表示/篇章表示,某词的上下文表示等
不同序列间编码:将2个序列编码成二者的融合表示序列,如,匹配任务和阅读理解任务常用的融合层表示
同一序列自编码:利用多头自注意力编码对一个句子编码可以起到类似句法分析器的作用,如transformer的编码端
多头注意力机制(Multi-Head Attention)
多头就是做多次同样的事情(参数不共享),然后把结果拼接
六、NLP基础任务
文本分类指标:
预测(右) 实际(下) |
正类 |
负类 |
正类 |
TP |
FN |
负类 |
TN |
FP |
- 分类准确率: A c c = T P + T N T P + T N + F P + F N Acc=\frac{TP+TN}{TP+TN+FP+FN} Acc=TP+TN+FP+FNTP+TN
- 精确率(Precision): P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
- 召回率(Recall): R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP
- 精确率和召回率的调和均值(F-Score):
- F β = ( 1 + β 2 ) P R β 2 P + R = ( 1 + β 2 ) T P ( 1 + β 2 ) T P + β 2 F P + F N F_{\beta}=\frac{(1+\beta ^{2})PR}{\beta ^{2}P+R}=\frac{(1+\beta ^{2})TP}{(1+\beta ^{2})TP+\beta ^{2}FP+FN} Fβ=β2P+R(1+β2)PR=(1+β2)TP+β2FP+FN(1+β2)TP
- F 1 = 2 T P 2 T P + F P + F N F1=\frac{2TP}{2TP+FP+FN} F1=2TP+FP+FN2TP
多分类评价指标:
序列标注
马尔可夫模型:
p ( S 0 , S 1 , . . . , S T ) = ∏ t = 1 T p ( S t ∣ S t − 1 ) p ( S 0 ) p(S_{0},S_{1},...,S_{T})=\prod_{t=1}^{T}p(S_{t}|S_{t-1})p(S_{0}) p(S0,S1,...,ST)=∏t=1Tp(St∣St−1)p(S0)
模型输入:状态序列
模型输出:状态序列的概率值
模型参数: p ( q t ∣ q t − 1 ) p(q_{t}|q_{t-1}) p(qt∣qt−1)
模型组成:三元组 M = ( S , π , A ) M=(S,\pi,A) M=(S,π,A)
- S:模型中状态的有限集合
- A:与时间无关的状态转移概率矩阵
- 其中,状态转移概率 a i j a_{ij} aij
- P ( q t = S j ∣ q t − 1 = S i ) = a i j , 1 ≤ i , j ≤ N P(q_{t}=S_{j}|q_{t-1}=S_{i})=a_{ij},1\leq i,j \leq N P(qt=Sj∣qt−1=Si)=aij,1≤i,j≤N
- 满足 a i j ≥ 0 ,且 ∑ j = 1 N a i , j = 1 a_{ij}\geq 0,且\sum_{j=1}^{N}a_{i,j}=1 aij≥0,且∑j=1Nai,j=1
- π \pi π:初始状态向量
- p:初始状态空间的概率分布
模型作用:定量描述随机事件的变化过程
隐马尔可夫模型(Hidden Markov Model,HMM)
组成:五元组 λ = ( S , O , π , A , B ) \lambda=(S,O,\pi,A,B) λ=(S,O,π,A,B)或简写成 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)
- S:模型中状态的有限集合
- O:每个状态可能的观察值
- A:与时间无关的状态转移概率矩阵
- B:给定状态下,观察值概率分布
- π \pi π:初始状态空间的概率分布
特点:
- HMM状态是不确定或不可见的,只有通过观测序列的随机过程才能表现出来
- 观察到的事件与状态并不是一一对应,而是通过一组概率分布相关联
- HMM是一个双重随机过程,两个组成部分:
- 马尔科夫链:描述状态的转移,用转移概率描述
- 一般随机函数:描述状态与观察序列间的关系,用观察值概率描述
HMM三个假设:
对于一个随机事件,有一观察值序列: O = O 1 , O 2 , . . . , O T O=O_{1},O_{2},...,O_{T} O=O1,O2,...,OT
该事件隐含着一个状态序列: Q = q 1 , q 2 , . . . , q T Q=q_{1},q_{2},...,q_{T} Q=q1,q2,...,qT
假设1:马尔可夫性假设(状态构成一阶马尔科夫链)
P ( q i ∣ q i − 1 . . . q 1 ) = P ( q i ∣ q i − 1 ) P(q_{i}|q_{i-1}...q_{1})=P(q_{i}|q_{i-1}) P(qi∣qi−1...q1)=P(qi∣qi−1)
假设2:不动性假设(状态与具体时间无关)
P ( q i + 1 ∣ q i ) = P ( q j + 1 ∣ q j ) P(q_{i+1}|q_{i})=P(q_{j+1}|q_j) P(qi+1∣qi)=P(qj+1∣qj),对任意i,j成立
假设3:输出独立性假设(输出仅与当前状态有关)
p ( O 1 , . . . , O T ∣ q 1 , . . . , q T ) = ∏ p ( O t ∣ q t ) p(O_{1},...,O_{T}|q_{1},...,q_{T})=\prod p(O_{t}|q_{t}) p(O1,...,OT∣q1,...,qT)=∏p(Ot∣qt)
模型结构:
- 输入:观察序列
- 输出:1、观察序列的概率值;2、隐状态序列
- 参数: P ( q t ∣ q t − 1 ) 【 A 矩阵】 , P ( O t ∣ q t ) 【 B 矩阵】 P(q_{t}|q_{t-1})【A矩阵】,P({O_{t}|q_{t}})【B矩阵】 P(qt∣qt−1)【A矩阵】,P(Ot∣qt)【B矩阵】
- 函数关系:
- 观察序列的概率值(HMM评估问题)
- 隐状态序列(HMM解码问题)
评估问题
- 对于给定观察序列 O = O 1 , O 2 , . . . , O T O=O_{1},O_{2},...,O_{T} O=O1,O2,...,OT,以及模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),求观察序列的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
观察概率的定义:
- 对于给定的一个状态序列 Q = q 1 , q 2 , . . . , q T Q=q_{1},q_{2},...,q_{T} Q=q1,q2,...,qT
- P ( O , Q ∣ λ ) = P ( Q ∣ λ ) P ( O ∣ Q , λ ) = π q 1 a q 1 q 2 a q 2 q 3 . . . a q T − 1 q T b q 1 ( O 1 ) b q 2 ( O 2 ) . . . b q T ( O T ) P(O,Q|\lambda)=P(Q|\lambda)P(O|Q,\lambda)=\pi_{q1}a_{q1q2}a_{q2q3}...a_{qT-1qT}b_{q1}(O1)b_{q2}(O2)...b_{qT}(OT) P(O,Q∣λ)=P(Q∣λ)P(O∣Q,λ)=πq1aq1q2aq2q3...aqT−1qTbq1(O1)bq2(O2)...bqT(OT)
- 对于全部状态序列:
- 观察序列概率 P ( O ∣ λ ) = ∑ Q P ( O , Q ∣ λ ) = ∑ Q P ( Q ∣ λ ) P ( O ∣ Q , λ ) P(O|\lambda)=\sum_{Q}P(O,Q|\lambda)=\sum_{Q}P(Q|\lambda)P(O|Q,\lambda) P(O∣λ)=∑QP(O,Q∣λ)=∑QP(Q∣λ)P(O∣Q,λ)
如何计算 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
- 穷举法:找到每一种可能的隐藏状态的序列。计算效率低
- 前向算法:使用递归来降低复杂度
- 后向算法
解码问题
- 对于给定观察序列 O = O 1 , O 2 , . . . , O T O=O_{1},O_{2},...,O_{T} O=O1,O2,...,OT,以及模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),如何选择一个对应的状态序列 S = S 1 , S 2 , . . . , S T S=S_{1},S_{2},...,S_{T} S=S1,S2,...,ST,使得S能够最为合理的解释观察序列O
求状态序列S:
- 穷举法:找到每一个可能产生观察序列的状态序列。效率非常低
- Viterbi算法:利用动态规划使用递归来降低计算复杂度
参数学习:
- 模型参数: P ( S t ∣ S t − 1 ) = P ( S t − 1 S t ) P ( S t − 1 ) , P ( O t ∣ S t ) = P ( O t S t ) P ( S t ) P(S_{t}|S_{t-1})=\frac{P(S_{t-1}S_{t})}{P(S_{t-1})},P(O_{t}|S_{t})=\frac{P(O_{t}S_{t})}{P(S_{t})} P(St∣St−1)=P(St−1)P(St−1St),P(Ot∣St)=P(St)P(OtSt)
- 训练思路:通过观察序列O作为训练数据,用最大似然估计,使得观察序列O的概率 P ( O ∣ μ ) P(O|\mu) P(O∣μ)最大
HMM在统计自然语言处理中的应用:
神经网络序列标注模型:
-
模型架构:
- 输入层:低维稠密向量(神经网络模型,各种词向量模型)
- 表示层:由输入向量生成各特征表示(神经网络模型,如RNN,BI-LSTM)
- 标签解码:由特征表示生成预测标签(标签预测模型,如贪心,CRF)
-
双向RNN+softmax模型:
- o n e h o t v e c t o r → l o o k − u p l a y e r ⇒ f o r w a r d L S T M → b a c k w a r d L S T M → L S T M ′ s o u t p u t ⇒ O u t p u t l a y e r one\ hot\ vector\rightarrow look-up\ layer\Rightarrow forward\ LSTM\rightarrow backward\ LSTM\rightarrow LSTM's\ output\Rightarrow Output\ layer one hot vector→look−up layer⇒forward LSTM→backward LSTM→LSTM′s output⇒Output layer
- 输入层: X i : 字 w i X_{i}:字w_{i} Xi:字wi的字向量序列
- 正向隐藏层、反向隐藏层
- 输出层:标签系列
- 参数:W1,U1,W2,U2,Wc
- 损失函数:交叉熵损失
- 训练数据:有标注训练集(张/B-PER 三/I-PER 在/O 北/B-LOC 京/I-LOC 旅/O 游/O)
- 用BPTT算法训练参数
- 存在问题:输出之间独立,可能出现BB情况
- 改进思路:建立输出之间的关系
- 方法:设一组参数A学习标签间的转移概率
- 加一个CRF层,解决了由于输出之间独立引起的不合理结果的问题
-
双向RNN+CRF模型:
- o n e h o t v e c t o r → l o o k − u p l a y e r ⇒ f o r w a r d L S T M → b a c k w a r d L S T M → L S T M ′ s o u t p u t ⇒ C R F l a y e r one\ hot\ vector\rightarrow look-up\ layer\Rightarrow forward\ LSTM\rightarrow backward\ LSTM\rightarrow LSTM's\ output\Rightarrow CRF\ layer one hot vector→look−up layer⇒forward LSTM→backward LSTM→LSTM′s output⇒CRF layer
- 输出之间相关联
- CRF效果好于只用LSTM或Bi-LSTM
- Bi-LSTM+CRF的方法在多项任务上表现好
序列生成
序列生成基本概念:
生成方式:
(条件)自回归序列生成:根据输入的内容X和Y历史序列信息来预测序列中的下一个值的生成 P ( y i ∣ y 1 . . . , y i − 1 , x ) P(y_{i}|y_{1}...,y_{i-1},x) P(yi∣y1...,yi−1,x)
自编码生成:利用让输出值等于输入值的神经网络反向传播算法将输入压缩成潜在空间表征,然后将这种表征重构为输出。常用于数据的降维和去噪
深度学习中建模序列生成问题的方法:构建一个联合的神经网络,以端到端的方式将一个序列化数据映射成另一个序列化数据。简称Sequence-to-Sequence(Seq2Seq)模型,主流的Seq2Seq模型通常基于Encoder-Decoder框架实现
Seq2Seq模型按输出产生方式分为三类:
- 生成式模型Decoder:根据编码端形成的输入表示和先前时刻产生输出tokens,生成当前输出token(编码端和解码端有各自词表,二者可相同或不同。解码端需处理集外词oov,一般用UNK代替)
- 选择式模型Decoder:根据编码端形成的输入表示和先前时刻产生成的输出tokens,从输入端选择一个token作为输出token(解码端和编码端词表相同)
- 选择-生成式模型Decoder:根据编码端形成的输入表示和先前时刻产生成的输出tokens,生成或从输入端选择当前输出token(编码端和解码端有各自词表,二者可相同或不同)
生成式-序列生成模型:
-
基本RNN架构生成模型
- 输入:序列x1 x2 x3 … xT
- 输出:序列y1 y2 y3 … yT’
- 参数:Encoder网络参数+Decoder参数
- 函数关系: P ( y i ∣ y 1 . . . y i − 1 , x ) = g ( y i − 1 , s i ) P(y_{i}|y_{1}...y_{i-1},x)=g(y_{i-1},s_{i}) P(yi∣y1...yi−1,x)=g(yi−1,si), s i = f ( s i − 1 , y i − 1 ) s_{i}=f(s_{i-1},y_{i-1}) si=f(si−1,yi−1)
- 损失函数:交叉熵损失
- 训练算法:BPTT
- 模型训练 Teacher Forcing → \rightarrow → 曝光偏差问题(Exposure Bias)
- 存在问题:对不同的输出中间语义表示相同
-
RNN+Attention架构生成模型
- P ( y i ∣ y 1 . . . y i − 1 , x ) = g ( y i − 1 , s i , C i ) P(y_{i}|y_{1}...y_{i-1},x)=g(y_{i-1},s_{i},C_{i}) P(yi∣y1...yi−1,x)=g(yi−1,si,Ci), s i = f ( s i − 1 , y i − 1 , C i ) s_{i}=f(s_{i-1},y_{i-1},C_{i}) si=f(si−1,yi−1,Ci)
-
Transformer架构生成模型
- 特点:
- 全部采用Attention机制
- 克服了RNN无法并行计算的缺点,可以高度并行,训练速度快
- 具有捕捉long distance dependency的能力,有较高的建模能力
- 训练:并行
- 预测:编码端并行,解码端串行
- 编码端:6层attention堆叠,包含两个子层(Multi-head attention和Feed Forward Network)
- 解码端:6层attention堆叠,包含三个子层(Multi-head attention,cross-attention和Feed Forward Network)
- 交叉注意力部分:解码端的每一层与编码端的最后输出层做cross-attention
- 并行训练需要用sequence mask
- 位置编码:模型结构没有使用任何递归结构或卷积结构,为了让模型能利用输入序列的顺序信息,必须引入某种能表达输入序列每个部分的绝对或相对位置的信息才行。
选择式-序列生成模型:
- 编码-解码架构存在的问题:
- 在预测输出端词表的大小是固定的,输出token是输出词表中概率最大的
- 这样无法解决输出词表需按输入情况动态变化的问题
- 改进思路:输出直接从输入中选
- 指针网络
- 输入:X序列( x 1 , x 2 , x 3 , x 4 x_{1},x_{2},x_{3},x_{4} x1,x2,x3,x4)
- 输出:从输入序列中选出的序列( x 1 , x 4 , x 2 , x 1 , < E o s > x_{1},x_{4},x_{2},x_{1}, x1,x4,x2,x1,<Eos>)
- 函数关系:
- 参数:RNN参数+Attention参数
- 特点:Y从X的标识词典中产生
- 输出生成过程:将softmax(ei)概率最大元素输出,同时将其作为输出端下个输入产生下个Si+1,计算ei+1,j,重复执行本步骤,直到softmax(ei)最大值对应“结束”符号
- 应用:指针网络在nlp领域有广泛的用途,如文本摘要,阅读理解等从输入序列选输出序列的一系列复制类型的任务,也适用于解决oov类任务
选择-生成式-序列生成模型
- 生成式网和拷贝网问题:
- 指针网络:无法处理需要产生输入词表以外词的情况
- 生成式网:高度依赖词的表征,遇到oov会出现表达不准确
- 改进思路:将指针网和生成式网结合,构建可生成也可将输入序列中的词拷贝到输出中选择的选择-生成式网络
- 指针生成式网络
- Sequence-to-sequence attentional model
- pointer-generator network
- Coverage mechanism
- coverage机制通过在解码的过程中,保持对attention信号持续关注(利用),可以缓解 过翻译和欠翻译问题
建立coverage 向量,在解码的过程中,保持对attention信号持续关注和利用, 以此来解决attention信号之间的独立问题
生成模型的评估指标
- 正确率P:测试结果中正确切分的个数占系统所有输出结果的比例
P = n N × 100 % P=\frac{n}{N}\times 100 \% P=Nn×100%
- 召回率R:测试结果中正确结果的个数占标准答案总数的比例
R = n M × 100 % R=\frac{n}{M}\times 100 \% R=Mn×100%
序列生成模型存在的问题:
- 曝光偏差问题
- 模型生成的分布与真实的数据分布并不严格一致,一旦预测前缀的过程中存在错误,会导致错误传播,,使得后续生成的序列也会偏离真实分布
- 解决方案:Scheduled Sampling
- 在训练过程中,混合使用真实数据和模型生成数据
- 训练-评价目标不一致的问题
- 一般采用BLEU,ROUGE等,训练时使用最大似然估计,导致训练目标和评价方法不一致
- 解决方法:可采用强化学习的策略进行模型训练
七、预训练语言模型
语言模型发展过程
神经语言模型 → \rightarrow → 浅层词向量 → \rightarrow → 深层词向量 → \rightarrow → 预训练语言模型
预训练语言模型:
- 是采用迁移学习的方法(归纳迁移学习)通过自监督学习从大规模数据中获得与具体任务无关的预训练模型,然后用训练好的预训练模型提高下游任务的性能的一种数据增强法
- 利用几乎无限的文本,改善低资源任务
- 预训练模型+微调机制具备很好的可扩展性,在支持一个新任务时,只需要利用该任务的标注数据进行微调即可
- 预训练+提示范式可以通过利用合适prompt实现不对预训练语言模型改动太多,尽量在原始LM上解决任务的问题
预训练-精调范式基本思想:
- 用大规模的无标注语料训练源任务并将其所学知识迁移到目标任务,帮助其学习
- 引入各种辅助任务loss,将其添加到预训练模型中,然后继续pre-trauning,以便让其适配下游任务,之后,通过引入额外的参数,用特定任务的目标函数对模型进行微调,使其适配下游任务。研究重点转向了目标工程,设计在预训练和微调阶段使用的训练目标
训练过程:
- 第一个阶段pre-training阶段:利用大型语料库完成预训练模型非监督学习
- 第二阶段Fine-tuninh,针对特定任务在相应数据集中进行监督学习,通过fine-tuning技术来适配具体任务
预训练语言模型分类:
- 自回归语言模型:根据上文内容预测下一个可能的单词,就是常说的自左向右的语言模型任务,或者反过来根据下文预测前面的单词
- 自编码语言模型:通过在输入X中随机Mask掉一部分单词,然后预训练过程的主要任务之一是根据上下文单词来预测这些被Mask掉的单词
- 广义自回归语言模型:通过采用特殊的生成顺序根据上下文内容预测下个可能的单词
TagLM:将任务得到的 h k L M h_{k}^{LM} hkLM加入目标任务隐藏层
ELMo:将训练得到的向量加入下游任务,用任务标注数据微调任务模型参数
ELMo:在问答,文本蕴含,语义角色标注,共指消解,命名实体抽取,情感分析六类任务中使用ELMo可超越当时SOTA结果
GPT:采用transformer的decoder部分,12层
pre-training(通用领域语言模型预训练-无监督)
Fine-tuning(目标任务微调-有监督):只调任务参数;任务参数和预训练模型参数一起调,这样可以让预训练模型更加适配任务
分类任务、匹配任务、答案选择
BERT:transformer的encoder,基础版12层,高级版24层
\1. 文本向量:该向量的取值在模型训练过程中自动学习,用于刻画文本的全局语义信息,并与单字/词的语义信息相融合
\2. 位置向量:由于出现在文本不同位置的字/词所携带的语义信息存在差异(比如:“我爱你”和“你爱我”),因此,BERT模型对不同位置的字/词分别附加一个不同的向量以作区分
输入:
-
一个句子或一个句对(句子指任意长度的连续文本片段,而不是语言学上所指的句子)
-
每个输入序列以[CLS]开头,句子对之间加一个[SEP]
-
[CLS]位置的输出表达整个句子的信息,用作分类
pre-training(通用领域语言模型预训练-无监督)
-
通用领域语言结构知识学习MLM
-
句子顺序关系学习:预训练学习两个句子顺序的二分类模型
Fine-tuning(目标任务微调-有监督)
根据下游任务不同,有四种链接方式
分类任务,匹配任务利用[CLS]位置的embedding
序列标注任务利用每个token的输出embedding,
序列生成任务(选择式生成)第二句token输出embedding
1、只调任务参数2、任务参数和预训练模型参数一起调
RoBERTa:
数据集更大,动态掩码,更大的batch size,用了子词的方法BPE
BERT和GPT都是单独堆叠transformer的encoder和decoder,单纯的使用其中某一部分,就会造成两个鸿沟:
BERT:具备双向语言理解能力,却不具备做生成任务的能力
GPT:拥有自回归特性,却不能更好的从双向理解语言
BART:采用标准的transformer结构
pre-training:训练方法:输入加噪声干扰的原文,输出恢复后的原文序列
Fine-tuning:Sequence Classification、Token Classification Tasks、Sequence Generation、Machine Translation
T5:
给整个NLP预训练模型领域提供了一个通用框架,把所有NLP任务都转化成一种形式
自然语言处理的四个范式
P1.非神经网络时代的完全监督学习–特征工程
(Fully Supervised Learning, Non-Neural Network)
P2.基于神经网络的完全监督学习–架构工程
(Fully Supervised Learning, Neural Network)
- 特点:人工设计各种网络结构
- 数据特点:需要大量标注数据(有监督)
P3.预训练,精调范式–目标工程(Pre-train, Fine-tune)
- 特点:引入各种辅助任务loss,将其添加到预训练模型中,然后继续pre-training,以便让其适配下游任务,之后,通过引入额外的参数,用特定任务的目标函数对模型进行微调,使其更适配下游任务。研究重点转向了目标工程,设计在预训练和微调阶段使用的训练目标
- 数据特点:需要领域数据进行任务微调
P4. 预训练,提示,预测范式–prompt挖掘工程 (Pre-train, Prompt, Predict)
-
特点:不通过目标工程使预训练的语言模型(LM)适应下游任务,而是将下游任务建模的方式重新定义(Reformulate),通过利用合适prompt实现不对预训练语言模型改动太多,尽量在原始 LM上解决任务的问题
-
prompt learning激活了类似于小样本学习等场景
-
核心思想:改变任务形式,利用预训练模型完成任务(用于小样本学习或半监督学习,某些场景下甚至做到无监督学习)
-
数据特点: 少量(无)的任务数据
-
prompt挖掘工程:
-
prompt主要研究问题:
- (1)输入端:怎么样选取合适的prompt,适配不同任务,同时把模型潜能激发出来(怎么把prompt结合输入的句子构成模型的输入)
-(2)输出端:模型的输出(Answer)可能与标签不同,拿到answer后如何往标准化的Y(标签空间)映射
-(3)prompting训练策略:怎样利用prompt机制精调模型(第四范式的微调)
八、应用
信息抽取
命名实体识别:
限定域命名实体识别:限定实体类别和目标文本
开放域实体抽取:不限定实体类别和目标文本
限定域命名实体识别:
- 基于规则或字典的方法:规则模板
- 统计学习方法:特征工程+算法
- 基于神经网络方法
- 用序列标注方法解决
- 优势:神经网络可自动提取特征
- 模型:CNN+RNN,RNN+CRF,BERT等
- Bi-LSTM+CNN
- Bi-LSTM+CRF
- BERT模型
开放域实体识别:
-
问题:
- 初始信息少
- 模板描述能力有限
- 数据源质量层次不齐
- 缺乏公认的评测
实体消歧:
-
歧义
-
同指
-
任务:实体消歧和共指消解
-
难点
- 实体消歧目标不明确
- 指称项的歧义性
- 指称项的多样性
-
方法(对应单语言实体消歧):
关系抽取:
- 按实体关系抽取流程:
- 按实体间关系是否明确定义:
- 限定域关系抽取
- 算法:手写规则、监督学习算法
- 方法:
- 规则方法
- 基于统计的抽象方法
- 基于神经网络的抽取方法
- 单一关系抽取(流水线):命名实体识别和关系抽取
- 联合抽取:参数共享、标注策略
- 非限定域关系抽取
- 半监督学习算法、无监督算法
- 利用知识库:Bootstrapping、Distant Supervision(远程监督)
- 开放域抽取
- 按实体关系抽取实现算法分为:
- 手写规则
- 监督学习算法
- 半监督学习算法
- Boostrapping
- Distant Supervision
- 无监督算法
远程监督:
-
假设:对一个已有的知识图谱中的一个三元组(由一对实体和一个关系构成),假设外部文档库中任何包含这对实体的句子,在一定程度上都反映了这种关系
-
基于上述假设,远程监督算法可以基于一个标注好的小型知识图谱,给外部文档库中的句子标注关系标签,相当于作了样本的自动标注,因此是一种半监督的算法
-
在训练阶段:一些句子都表达这种关系,于是从这几个句子中提取文本特征,拼接成一个向量,作为这种关系的一个特征向量,用于训练分类器
-
分类器的特征:
-
改进:
-
假设:如果知识库中存在某个实体对的某种关系,那么至少有一个提到此对实体的数据表达此种关系
-
多示例学习
- 是一种监督学习模式,虽然信息不充足,无法为每个数据样本打标签,但可以对具有某种特征的数据样本集合打标签,这样的样本集合称为袋(bag),即在多示例学习中,每个bag有标签,而每个bag中含有多个数据样本,每个样本即为一个示例
-
多示例学习为什么有效?
- 关系类别难以通过可能存在噪声的单独某个示例学习到,但是可以通过多个示例相互作用学习到
-
抽取方法上:采用基于sentence bag的多示例学习方法,在一定程度上缓解了远程监督的样本噪声问题
-
-
事件抽取
事件的定义:
- 事件是发生在某个特定的时间点或时间段、某个特定的地域范围内,由一个或者多个角色参与的一个或者多个动作组成的事情或者状态的改变
事件的基本元素:
事件抽取的定义:
- 主要研究如何从描述事件信息的文本中抽取出用户感兴趣的事件信息并以结构化的形式呈现出来(从无结构化数据中抽取结构化事件信息)
事件抽取相关概念:
- 事件描述
- 事件触发词
- 事件元素/论元角色:是指事件中的参与者,是组成事件的核心部分,它与触发词构成了事件的整个框架
- 元素角色:事件元素与事件之间的语义关系,也就是事件元素在相应的事件中扮演什么角色
- 事件类别:事件元素和触发词决定了事件的类别
事件抽取任务步骤:
-
事件检测
-
触发词识别
-
触发词类型分类
-
-
-
元素抽取
- 元素识别
- 元素角色分类
事件触发词直接引发事件的产生,是决定事件类别的重要特征
问答系统
专家系统:
- 特点:问题限定领域;数据基于结构化领域知识数据。
- 结构化数据
- 查询
- 局限性:限定领域
检索式问答系统:
- 特点:问题领域开放,基于非结构化Web数据;检索内容为简短的词或词组
- 处理框架:
- 问题分析:问题分类和关键词提取
- 文档与段落检索
- 答案抽取
- 基于大规模文档集的问答系统:信息检索技术和信息抽取技术的结合
- 流水线方式
- Document Retriever 和Document Reader
- Document Retriever:
- 计算文档的TF-IDF加权的unigram/bigram向量表示
- 基于问题和文档的向量表示的相似度,对文档排序,选择top k文档
- Document Reader:
- 将答案抽取转化为抽取式阅读理解问题
- 输入:一个文档段落,一个自然语言处理描述的问题
- 输出:段落中抽取的答案片段
- 端到端方式
- Retriever-Reader的联合学习
- Retriever和Reader都是可学习的神经网络模型(BERT)
- 如何在大规模文档中有效检索相关片段?
- 如果Top K片段里没有答案怎么办?
- 将文档中出现的句子作为伪问题,句子的上下文作为伪相关片段,预训练的retriever网络,然后用训练数据微调
- 学习搜索隐式的语义相关片段
- 不忽视问题-片段相同词匹配的检索效果
- 预训练的伪问题和微调的问题不一致怎么办?
- 预训练可以提供具有隐式语义关联能力的初始化模型
- 微调时,只需要对问题Bert进行微调,文档Bert不需要再微调
- 基于预训练的Retriever-Free方法
社区问答系统:
-
根据用户所提问题,找到社区中与之相应的答案
-
特点:
- 包含丰富的元数据,包括用户类型、问题类型、问题发布时间等
- 问题和答案的文本一般较长,包含大量噪声
- 答案质量差距很大
-
三部分:
知识库问答系统:
- 根据给定问题,在知识图谱中检索/推理相关实体作为答案
- 回答的答案是知识库中的实体
- 技术挑战:
- 语言多样性
- 相同问题有多种语言表达方式
- 需要把问题映射到知识图谱的实体上
- 知识图谱搜索规模大
- 大量复合性问题
- 解决方法:
- 语义解析
- 信息抽取
- 向量建模
- 表示学习法
- 问题主题抽取-》知识子图抽取-》知识子图表示-》问题-知识相关性计算
- 优点:不需要定义大量模板,端到端学习
- 缺点:回答复杂问题差,缺乏可解释性
- 最新研究方向:融合文本和知识图谱的问答
阅读理解
MRC任务分类:
- 完形填空
- 提供:文本C,且一个词或实体a被移除
- 任务:使用正确的词或实体进行填空
- 数据集
- 答案类型:客观
- 评价指标:Accuracy准确率,衡量正确预测出答案占测试集合的比例
- 多项选择
- 提供:文本C,问题Q,候选答案列表A={a1,a2,…,an}
- 任务:从A中选择正确的答案ai
- 数据集
- 答案类型:客观
- 评价指标:准确率
- 片段抽取
- 提供:文本C,问题Q,C={t1,t2,…,tn}
- 任务:从C中抽取联系的子序列{ti,ti+1,…,ti+k}作为正确答案
- 数据集
- 答案类型:半客观
- 评价指标:
- Exact Match精确匹配:衡量预测答案是否与标准答案完全一致
- F1值:衡量预测答案与标准答案的相似度
- 自由回答(文本生成形式)
- 提供:文本C,问题Q
- 任务:根据文本内容和问题生成答案a,a可以是C的子序列,也可以不是C的子序列
- 数据集
- 答案类型:主观
- 评价指标
阅读理解实现方法:
- 传统的特征工程方法
- 优点:解释性强,每一部分的结果都能直观的展现出来
- 缺点:需要大量人工构建的特征,特征本身具有局限性
- 深层语义图匹配方法
- 优点:引入深层次的语义结构,能够捕捉深层面的语义信息;语义建模方式解释性好,每一部分的语义都能很直观地表示出来
- 缺点:语义结构的定义与问题相关;语义结构的定义十分依赖于人工特征的干预;属于领域相关的方法,应用范围有很大的局限性
- 深度神经网络方法
神经网络机器阅读理解模型基本框架
-
嵌入编码
- 将模型的输入(自然语言形式的文章和问题)编码成固定维度的向量
-
特征提取
- 接收由嵌入编码层得到的文章和问题的词向量表示,对其进行处理,抽取更多上下文信息
-
文章-问题交互
- 利用文章和问题之间的交互信息来推测出文章中哪些部分对于回答问题更为重要(常用单向或双向的注意力机制来实现) 两者之间的交互过程有时可能会执行多次–模拟人类的推理过程
- 输入:文档和问题token序列的上下文表示
- 输出:文档和问题token序列的注意力感知更新后的序列表示
- 一维匹配模型
- 二维匹配模型
- 将问题由整体表达语义的一维结构转换成为按照问题中每个单词及其上下文的语义的二维结构
- 明确引入了更多细节信息
- 整体模型效果要优于一维匹配结构
- 多维交互(推理)
- 推理策略往往是通过多轮迭代,不断更新注意力模型的注意焦点来更新问题和文档的表示
- 推理过程对于有一定难度的问题来说具有很明显的帮助作用,对于简单问题则作用不明显
- 记忆网络是最早提出的推理过程的模型,对后续其他模型有重要的影响
- 交互匹配概念框架
-
- 词级交互
词级信息、词级匹配特征
- 问题上下文与文档词级交互
- 文档、问题上下文级别交互
利用问题去关注文档
- 文档自注意交互(与问题融合前)
- 全自注意交互
- 高层级交互
问题向量与文档抽象表示
-
答案预测
- 基于前述三个模块累积得到的信息进行最终的答案预测
- 输入:经过交互操作后的融合表示(通常是更新后的文档表示)
- 输出:预测的答案分布,不同的任务类型有不同答案结果形式