NLP---seq2seq与注意力机制

1. seq2seq

参考:https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/

  • 模型结构
    seq2seq是一个“编码解码器”结构,编码器处理输入序列中的每个元素,将捕获的信息编译成上下文内容向量 (context vector)。在处理整个输入序列之后,编码器将context vector发送到解码器,解码器逐项开始产生输出序列。如下图所示:
seq2seq_1

encoder和decoder会借助于循环神经网络(RNN)这类神经网络进行计算。举一个机器翻译的例子如下所示:

seq2seq_2

但是,考虑到提升效果,不会寄希望于把所有的内容都放到一个上下文向量中,而是会采用注意力机制来进行处理。

2. 注意力机制 (Attention)

参考:https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/
https://zhuanlan.zhihu.com/p/40920384

  • 注意力机制是一个很神奇地可以学习源语言和目标语言之间词和词对齐关系的方式。
  • 对Attention一种直观的感受见下图:
attention

3. Feed-Forward Attention机制

参考:

  1. 提出注意力的论文:
    (1) Neural Machine Translation by Jointly Learning to Align and Translate(最先提出)
    (2) Feed-Forward Networks with Attention Can Solve Some Long-Term Memory Problems(以下主要参考这篇论文,简称为feed forward attention)
  2. https://zhuanlan.zhihu.com/p/37601161
    https://zhuanlan.zhihu.com/p/53036028
  • 网络结构图:feed forward attention机制的网络结构图如下所示,
  • 原理:feed forward attention机制可以形式化为,
    e t = a ( h t ) , α t = e x p ( e t ) ∑ k = 1 T e x p ( e k ) , c = ∑ t = 1 T α t h t e_t=a(h_t),\quad \alpha_t=\frac{exp(e_t)}{\sum_{k=1}^{T}exp(e_k)},\quad c=\sum_{t=1}^T\alpha_th_t et=a(ht),αt=k=1Texp(ek)exp(et),c=t=1Tαtht
    其中 a ( h t ) a(h_t) a(ht) 是一个训练函数,可以看作是一个前馈网络。
  • 应用于文本分类:将向量 c c c输入到一个全连接层并进行softmax。

4. HAN层叠注意力机制

参考
(1) 论文:Hierarchical Attention Networks for Document Classification
(2) 以上论文笔记

  • HAN:Hierarchical Attention Networks,层叠注意力。
  • 所谓层次:文档具有层次结构特性,文档由句子组成,句子由单词组成。那么可以考虑使用单词的词向量表示句子,在此基础上再用句子的向量构建文档的信息表示。
  • 所谓注意力:句子中不同的单词对句子的重要性不同,同样一篇文档中不同的句子对文档的贡献程度也不一样。而单词和句子的重要程度不是固定的,是由上下文环境所决定的,因此需要引入注意力机制来学习这种重要程度。
  • 层次与注意力珠联璧合:先在单词层次构建注意力机制,使其能够表达不同单词的重要程度,再在句子层次构建注意力机制,使其能够表达不同句子的重要程度。

4.1 网络结构

  • 网络结构:层次注意力的网络结构如下图所示,

网络由5层组成,从下到上为是词向量编码层BiGRU、单词级别的Attention层、句子编码层BiGRU、句子级别的Attention层和全连接层。

  • 注意力部件:层次注意力中计算不同单词和句子注意力的方法是feed-forward attention方法。

4.2 学习原理

4.2.1 Word Encoder

  • 首先,令第 i i i个句子 s i s_i si中第 t t t个单词的one-hot编码为 w i t w_{it} wit,对其进行embedding得到该单词的词向量: x i t = W e w i t , t ∈ [ 1 , T ] x_{it}=W_ew_{it},\quad t\in [1,T] xit=Wewit,t[1,T]
  • 使用双向GRU分别计算单词 w i t w_{it} wit的forward hidden state h → i t \overrightarrow{h}_{it} h it 与backward hidden state h ← i t \overleftarrow{h}_{it} h it
    h → i t = G R U → ( x i t ) , t ∈ [ 1 , T ] \overrightarrow{h}_{it}=\overrightarrow{GRU}(x_{it}),\quad t\in[1,T] h it=GRU (xit),t[1,T] h ← i t = G R U ← ( x i t ) , t ∈ [ T , 1 ] \overleftarrow{h}_{it}=\overleftarrow{GRU}(x_{it}),\quad t\in[T,1] h it=GRU (xit),t[T,1] h i t = [ h → i t , h ← i t ] , t ∈ [ 1 , T ] h_{it}=[\overrightarrow{h}_{it},\overleftarrow{h}_{it}],\quad t\in[1,T] hit=[h it,h it],t[1,T]
    h i t h_{it} hit表示以单词 w i t w_{it} wit为中心的句子相关信息。

4.2.2 Word Attention

u i t = t a n h ( W w h i t + b w ) , t ∈ [ 1 , T ] u_{it}=tanh(W_wh_{it}+b_w),\quad t\in[1,T] uit=tanh(Wwhit+bw),t[1,T] α i t = e x p ( u i t T u w ) ∑ t e x p ( u i t T u w ) , t ∈ [ 1 , T ] \alpha_{it}=\frac{exp(u_{it}^Tu_w)}{\sum_{t}exp(u_it^Tu_w)},\quad t\in[1,T] αit=texp(uitTuw)exp(uitTuw),t[1,T] s e n t e n c e   v e c t o r : s i = ∑ t α i t h i t sentence\ vector:\quad s_i=\sum_t \alpha_{it}h_{it} sentence vector:si=tαithit
u w u_w uw: word level context vector,在训练过程中与其他参数一起学习,初始值是随机初始化的。

4.2.3 Sentence Encoder

同样将句子向量 s i s_i si输入到双向GRU中:
h → i = G R U → ( s i ) , i ∈ [ 1 , L ] \overrightarrow{h}_{i}=\overrightarrow{GRU}(s_{i}),\quad i\in[1,L] h i=GRU (si),i[1,L] h ← i = G R U ← ( s i ) , i ∈ [ L , 1 ] \overleftarrow{h}_{i}=\overleftarrow{GRU}(s_{i}),\quad i\in[L,1] h i=GRU (si),i[L,1] h i = [ h → i , h ← i ] , i ∈ [ 1 , L ] h_i=[\overrightarrow{h}_{i},\overleftarrow{h}_{i}],\quad i\in[1,L] hi=[h i,h i],i[1,L]

4.2.4 Sentence Attention

u i = t a n h ( W s h i + b s ) , i ∈ [ 1 , L ] u_{i}=tanh(W_sh_{i}+b_s),\quad i\in[1,L] ui=tanh(Wshi+bs),i[1,L] α i = e x p ( u i T u s ) ∑ i e x p ( u i T u s ) , i ∈ [ 1 , L ] \alpha_{i}=\frac{exp(u_{i}^Tu_s)}{\sum_{i}exp(u_i^Tu_s)},\quad i\in[1,L] αi=iexp(uiTus)exp(uiTus),i[1,L] d o c u m e n t   v e c t o r : v = ∑ i α i h i document\ vector:\quad v=\sum_i \alpha_{i}h_{i} document vector:v=iαihi
u s u_s us:sentence level context vector。

4.2.5 Document Classification (全连接层)

p = s o f t m a x ( W c v + b c ) p=softmax(W_cv+b_c) p=softmax(Wcv+bc)

4.3 总结

  • 优点:(1) 相对于论文中所比较的几种方法(见下图),分类性能有所提升。
    (2) 可以识别不同单词和句子的重要程度。
  • 2
    点赞
  • 5
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

ortyi

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值