Attention in NLP

本文探讨了注意力机制在自然语言处理领域的应用和发展,包括序列到序列学习、神经机器翻译、卷积序列到序列学习及仅需注意力机制的模型。通过引入注意力机制,这些模型在处理长距离依赖和提高翻译质量方面取得了显著效果。

1.      Attention in NLP(list some important)

1.1.        Sequence to sequencelearning with neural networks 1


使用encoder-decoder模型,一个rnn以待翻译语句为输入,编码待翻译句子为中间语言,另一个rnn以上一次输出的结果为输入,解码中间语言为目标语言。

 

1.2.        Neural machine translation byjoinly learning to align and translate2

在encoder-decoder模型中加入attention机制,attention由输入的隐状态和输出的隐状态的关系得到,与输入隐状态点乘后得到输出的隐状态。

文章使用双层rnn,可以分别记录前后单词。


1.3.        Convolutional sequence tosequence learning3

只使用卷积来替代rnn,卷积的堆叠也可以使距离较远的词语产生联系,只不过需要在较高的层,操作数为n/k,n为单词距离,k为卷积核大小。

 

1.4.        Attention is all you need4

  抛弃cnn与rnn,只是用attention机制,但实际上还是有很多cnn的影子。

其中的attention采用self attention,muliti head用于并行,类似于channel。


  一个不错的对attention的定义:Q,K,V



Reference:

1.     Sutskever,I., Vinyals, O. & Le, Q. V. Sequence to sequence learning with neuralnetworks. inAdvances in neural information processing systems 3104–3112(2014).

2.     Bahdanau,D., Cho, K. & Bengio, Y. Neural machine translation by jointly learning toalign and translate.ArXiv Prepr. ArXiv14090473 (2014).

3.     Gehring,J., Auli, M., Grangier, D., Yarats, D. & Dauphin, Y. N. ConvolutionalSequence to Sequence Learning.ArXiv Prepr. ArXiv170503122 (2017).

4.     Vaswani,A. et al. Attention Is All You Need.ArXiv Prepr. ArXiv170603762(2017).

**Truncated Self-Attention(截断自注意力)**属于自然语言处理(NLP)中**高效注意力机制(Efficient Attention Mechanisms)**与**长序列建模(Long-Sequence Modeling)**的交叉领域,是自注意力(Self-Attention)的优化变体。其核心思想是通过限制注意力计算的范围(如局部窗口或分段处理),降低传统自注意力机制在长序列上的时间复杂度(从O(n²)降至O(n)或O(n log n)),从而提升模型处理长文本(如文档、基因序列、音频)的效率,同时尽量保持对全局信息的捕捉能力。 ```python # 示例:基于滑动窗口的截断自注意力实现(简化版) import torch import torch.nn as nn class TruncatedSelfAttention(nn.Module): def __init__(self, embed_dim, window_size): super().__init__() self.embed_dim = embed_dim self.window_size = window_size # 每个token仅关注左右window_size/2个token self.query_proj = nn.Linear(embed_dim, embed_dim) self.key_proj = nn.Linear(embed_dim, embed_dim) self.value_proj = nn.Linear(embed_dim, embed_dim) def forward(self, x): # x形状: (batch_size, seq_len, embed_dim) batch_size, seq_len, _ = x.size() Q = self.query_proj(x) # (batch_size, seq_len, embed_dim) K = self.key_proj(x) V = self.value_proj(x) # 初始化输出 output = torch.zeros_like(x) for i in range(seq_len): # 确定当前token的注意力窗口范围 start = max(0, i - self.window_size // 2) end = min(seq_len, i + self.window_size // 2 + 1) # 提取局部K和V K_local = K[:, start:end, :] # (batch_size, window_size, embed_dim) V_local = V[:, start:end, :] # 计算局部注意力分数 Q_i = Q[:, i : i + 1, :] # (batch_size, 1, embed_dim) scores = torch.bmm(Q_i, K_local.transpose(1, 2)) / (self.embed_dim ** 0.5) attn_weights = torch.softmax(scores, dim=-1) # 加权求和 output[:, i, :] = torch.bmm(attn_weights, V_local).squeeze(1) return output ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值