假设我们有一个长度为7的源序列和一个长度为5的目标序列。在每个解码器层的交叉注意子层中,目标序列中的每个标记都参与输入序列中的每个标记。
在T5模型中,我们使用https://github.com/huggingface/transformers/blob/master/src/transformers/modeling_t5.py#L289中的query-len和key-len来计算相对距离以计算偏差。
我的问题是,如果两个标记分别属于源序列和目标序列,则如何计算它们之间的距离。相对距离矩阵(5 x 7)如下:
tensor([[ 0, 1, 2, 3, 4, 5, 6],
[-1, 0, 1, 2, 3, 4, 5],
[-2, -1, 0, 1, 2, 3, 4],
[-3, -2, -1, 0, 1, 2, 3],
[-4, -3, -2, -1, 0, 1, 2]])
一旦我们将距离放入交叉注意的水桶中,它将看起来像:
tensor([[0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0],
[2, 1, 0, 0, 0, 0, 0],
[3, 2, 1, 0, 0, 0, 0],
[4, 3, 2, 1, 0, 0, 0]])
鉴于交叉注意力是解码器的一部分,bidirectional
标志设置为False。因此,这意味着在步骤i
进行解码时,解码器将处理位置i, i+1, i+2, ...
上的所有源令牌,这些令牌与位置0
上的目标令牌有距离i
。这是正确的吗?