Relative Position Representations

Self-Attention with Relative Position Representations

摘要

在原始transformer,位置信息通过加一个position的embedding实现,(因为position开始也是一个one-hot)

本文提出将 自注意力 考虑 token之间的距离位置信息

相对位置表示 比 绝对位置表示 在机器翻译任务上提升(BERT为啥不用相对位置?感觉因为机器翻译这个任务更关注token之间的相对位置)

并且发现:结合 绝对位置表示 和 相对位置表示,没有进一步提升

做法

一句话看成graph,把token看成节点,token之间的边用向量表示,

首先要理解position_embedding就是position的embedding,即比如one-hot的position是[1,2,3,4,5,6,…]则position_embedding就是对[1,2,3,4,5,6,…]进行embedding

代码:

https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/layers/common_attention.py 的dot_product_attention_relative方法

dot_product_attention_relative方法 里面的 _generate_relative_positions_embeddings 方法可知:

相对位置表示,先构造 [length_q, length_k] 的one-hot矩阵,再将 [length_q, length_k]

进行embedding_lookup成[length_q, length_k, hidden_size] 即Relative-position-embedding

之后在 _relative_attention_inner 方法将 Relative-position-embedding 计算入原始注意力里:

由 length == length_k == length_q

Relative-position-embedding = [length, length, hidden_size]

和input_x[length, batch, hidden_size] 进行matmul得到一个tensor [batch,length,length],

这个tensor加到原始那个attention matrix

Relative-position-embedding = [length, length, hidden_size] 和 input_x [length, batch, hidden_size] 进行matmul,这个还是不太理解

©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页