Effective Approaches to Attention-based Neural Machine Translation

本文介绍了Luong等人2015年的研究,他们在Bahdanau的注意力模型基础上提出全局和局部两种注意力机制。全局方法在每个时间步计算与源序列的所有隐藏状态的相似度,而局部方法仅关注源序列的一部分。实验结果显示,局部方法在多个翻译任务中表现最佳,特别是在使用general评分函数时。此外,作者还引入了input feeding来利用已翻译信息,并通过AER评估对齐质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

Minh-Thang Luong等在2015年arXiv上的论文,原文地址:地址
这是继Bahdanau提出attention用于NLP的后续工作,作者提出了两种新的,相对于前面工作简单但有效的网络,一种称为global方法,实现上与Bahdanau使用的方式很相似,在每一次生成目标词时,都需要所有对源语句隐藏状态计算相似度,但相对来说更为直接简单;另一种称为local方法,不同的是在计算时只需要对源语句某个子集计算相似度,之后基于这个子集生成context vector。
此外,作者对比了不同的对齐函数在模型上所取得的效果,使用文中提出的模型,作者在英文翻译到德文的多项任务中取得了SOTA的结果。

模型

Neural Machine Translation

在这里插入图片描述
一般的神经网络翻译模型,都是直接对条件概率 p ( y ∣ x ) p(y|x) p(yx)建模,其中x为源语句,y为目标语句。具体到上述图中,蓝色部分的encoder,将目标语句编译成语义表示s,而红色部分的decoder接收源语句表示s,逐个字翻译目标语句,表达式如下:
在这里插入图片描述
在上述端到端的模型中,一般在神经单元后续加上一个softmax函数,生成一个字典大小的概率分布向量,决定当前生成的字,
在这里插入图片描述
如上所示,在整个计算过程中,源语句语义表示s都是不变的,如果通过一些方式使得s可以动态的变化,就是attention模型了。

Attention-based Models

Attention模型实际上讲的就是如何计算动态的源语句语义表示,这里称为c,对应的t时间步的语义表示则称为 c t c_t ct
对于global或者local方法来说,不同的只是通过当前时间t隐层输出 h t h_t ht与源语句隐层输出 h s h_s hs计算出context c t c_t ct的方式,其后续步骤都是一致的,如下:

### 关于序列到序列学习的研究 序列到序列学习(Sequence-to-Sequence Learning)是一种基于神经网络的方法,用于将输入序列映射到输出序列。这种技术广泛应用于机器翻译、语音识别等领域。Sutskever等人首次提出了使用循环神经网络(RNNs)实现端到端的序列到序列建模[^4]。 ```python import torch.nn as nn class Seq2Seq(nn.Module): def __init__(self, encoder, decoder): super(Seq2Seq, self).__init__() self.encoder = encoder self.decoder = decoder def forward(self, src, trg): # Encoder processes input sequences. hidden_state = self.encoder(src) # Decoder generates output based on encoded information. outputs = self.decoder(trg, hidden_state) return outputs ``` ### 注意力机制在语音识别中的应用 注意力模型通过允许模型聚焦于输入的不同部分来提高性能,在语音识别领域尤为重要。Bahdanau等人引入了一种软对齐方法,该方法能够动态调整源句和目标句之间的对应关系[^5]。这种方法显著提高了自动语音识别系统的准确性。 对于特征提取而言,由于语音信号具有波动性,即使人们努力说出相同的两个句子,其信号也总是存在差异,这使得计算机科学家难以进行有效的特征提取[^1]。 ### 基于注意力的神经机器翻译的有效方法 Vaswani等人提出的Transformer架构完全摒弃了传统的RNN结构,转而采用自注意力机制(Self-Attention Mechanism),极大地提升了训练效率并降低了计算复杂度[^6]。这一突破性的进展表明,“注意力就是一切”,即仅依靠注意力机制即可完成高质量的语言翻译任务。 ```python def scaled_dot_product_attention(q, k, v, mask=None): matmul_qk = torch.matmul(q, k.transpose(-2, -1)) dk = q.size()[-1] scores = matmul_qk / math.sqrt(dk) if mask is not None: scores += (mask * -1e9) attention_weights = nn.Softmax(dim=-1)(scores) output = torch.matmul(attention_weights, v) return output, attention_weights ``` ### 结论 综上所述,无论是从理论层面还是实际应用场景来看,序列到序列学习配合注意力机制都展现出了强大的潜力与价值。未来随着硬件条件的进步和技术的发展,这些算法有望进一步优化并在更大规模的数据集上取得更好的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值