Seq2Seq,Attention,Transformer 学习笔记

Seq2Seq

基础的 seq2seq = Encoder + Decoder + 语义编码c
语义编码c,是一个固定维度的向量,相当于被压缩的信息。
Encoder 和 Decoder 可以是 CNN RNN Transformer 三种结构,可以相同,也可以不同。
在这里插入图片描述
在这里插入图片描述

teacher forcing

训练时可以加入 teacher forcing,即在解码时使用正确答案作为输入,让模型收敛更快。如下图。
在这里插入图片描述

Attention

输入序列过长时,前面输入的信息会被稀释,导致Decoder准确度降低,类似于同声传译,你说10分钟,让人家去翻译,他很难记住前面说的内容。因此提出Attention 机制,Encoder不是把所有信息都编码到一个向量中,而是Encoder编码出来的向量根据Decoder要解码的内容动态变化。
在这里插入图片描述
内部具体操作是,Decoder 当前隐藏层状态 st-1 ,计算它与每一个输入位置hj的关联性,etj = α(st-1,hj),这里α表示相关性(相似度)计算,比如内积,它是一个向量,对它进行softmax,得到概率分布,其中 k = ( 1,2,…,T),T为当前时刻。
α t j = e e t j ∑ k = 1 T e e t k α_{tj} = \frac{e^{e_{tj}}} { \sum_{k=1}^T e^{e_{tk}}} αtj=k=1Teetkeetj
αtj 也可以理解为attention 的score。然后再利用 αtj 加权得到向量c,即
c t = ∑ j = 1 T a t j h j c_t = \sum_{j=1}^T a_{tj} h_{j} ct=j=1Tatjhj
所以下一时刻的隐藏层状态为 st = f(st-1,yt-1,ct)

我的理解就是,解码前面的时候,那向量c里面,肯定是先输入给编码器的部分权重占比大,也就是说,我的注意力放在了前面部分,同理,注意力逐步向后移动,每步骤c的维度相同,但是权重在变化。

通过Attention机制,让模型可以集中在所有对于当前目标单词重要的输入信息上,预测效果大大提升。

模型推理

模型使用阶段的方法。

贪心法 & Beam Search

比如机器翻译场景下,在模型预测时,输出结果条件概率最大的,一般是我们认为比较好的。在生成下一个词的概率分布后,贪心法:每次都去选择概率最大的词作为下一个的输出,但这个结果是局部最优。这种方法只有唯一解,但全局最优结果不可能每步只保留一个,为了保留更多的解的可能性,我们有了beam search 方法。
Beam Search:最优结果要保留多个,一般用B表示,代表集束宽的意思,B=3,B=10,如果B=1,就是贪心法了。实践证明,Beam search 可以比贪心法得到更好的结果。
beam search 可以看作是贪心法的加强版本。

机器翻译的评价

BLEU Bilingual Evaluation Understudy

BLEU:机器翻译的句子中的所有短语,在标准译文中出现的比例,即为BLEU分数。翻译的句子一共n个词,有m个出现在参考译文中,则得分为 m/n 。
使用n-gram划分单词,一般n = 1,2,3,4,称为1元,2元…
1元 准确率用以衡量单词翻译准确性,多元 准确率用以衡量句子流畅性。
B L E U = B P ∗ e ∑ n = 1 N W n ∗ l o g P n BLEU = BP * e^{\sum_{n=1}^N W_n*logP_n} BLEU=BPen=1NWnlogPn
其中Wn为权重,一般为平均加权,即Wn=1/N
BP为长度惩罚因子,Brevity Penalty,过短惩罚
B P = { 1 if c>r e 1 − r c if c≤r BP=\begin{cases} 1 &\text{if c>r} \\ e^{1-\frac rc} &\text{if c≤r} \end{cases} BP={1e1crif c>rif c≤r
其中 c 为机器翻译句子长度,r 为参考译文长度。

举个栗子:

译文Candidate:Going to play basketball the afternoon ?
参考答案Reference:Going to play basketball in the afternoon ?
译文gram长度:6  参考答案gram长度:7
针对1-gram,机器的1-gram全部命中,所以
P1 = 6/6 = 1,同理计算得到
P2 = 4/5 = 0.8,P3 = 2/4 = 0.5,P4 = 1/3 = 0.3333
∑logPn和为-2.0149 ;再乘以Wn,也就是除以4,等于0.6043
BP = e^(1-7/6) 约等于 0.846
BLEU = 0.867 * e^((P1 + P2 + P3 + P4)/4) = 0.846*0.6043 = 0.5115

python 中实现:

from nltk.translate.bleu_score import sentence_bleu, corpus_bleu
reference = [['Going', 'to', 'play', 'basketball', 'in', 'the', 'afternoon']]
candidate = ['Going', 'to', 'play', 'basketball', 'the', 'afternoon']
score = sentence_bleu(reference, candidate, weights=(0.25, 0.25, 0.25, 0.25))
print(score)

Transformer

待更新…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值