URL
- paper: https://arxiv.org/pdf/1910.10683
- code: https://github.com/huggingface/transformers/tree/main/src/transformers/models/t5
TL;DR
T5
名字的由来是:Text-to-Text Transfer Transformer
(文本到文本转换的 Transformer)T5
使用了《Attention is all you need》
中提出的标准Transformer
网络,没有任何改变
Algorithm
example
T5
是一个encoder-decoder
架构的模型,可以用来做文本翻译,本例子使用Hello, world!
英语翻译法语为例
0. prompt
prompt
的作用是在输入之前加上对任务的描述- 比如
english_to_franch("Hello, world!") API
会被prompt
为"translate English to French: Hello, world!"
纯文本输入到模型
1. encoder input tokenize
T5
使用的分词算法是unigram
,词表可以在 https://huggingface.co/google-t5/t5-base/blob/main/tokenizer.json 这里找到"translate English to French: Hello, world!"
会被tokenize
为:[13959, 1566, 12, 2379, 10, 8774, 6, 296, 55, 1]
2. encoder input token embedding
- 和
GPT
系列没有区别,需要把encoder input token id
查表变成token embedding
3. encoder input position encoding
- 与
GPT
系列使用可学习的position embedding
不同,T5
使用的是position encoding
- 且使用的是相对位置编码,而不是绝对位置编码
- 与
GPT
系列只在模型casual decoder
第一层输入加入position embedding
不同,T5
的position encoding
是在encoder
以及decoder
的每一层都是使用了
4. encoder
- 与
GPT
系列直接使用token embedding
+position embedding
直接得到hidden state
来输入decoder
不同,T5
有encoder
结构 T5
的encoder
结构采用标准transformer encoder
结构,每个token
可以看到所有token
(双向注意力机制)encoder
一共12
层,每一层包括如下顺序结构为:self attention block
layer norm
self attention
dropout
FFN
layer norm
MLP
dropout
encoder
最终输出一个shape = (batch, input_token_len, encoder_dim)
的encoder hidden state
5. decoder input token embedding and position encoding
- 与
GPT
系列不同之处在于T5
在decoder
阶段需要decoder input
- 通常情况下
decoder input
是<BOS>
或<S>
等特殊标记,token
长度仅仅为1
,用于表示序列开始 decoder input token embedding
和position encoding
过程和encoder input token embedding
和position encoding
并无区别token embedding
+position encoding
得到decoder hidden state
,其shape = (batch, 1, decoder_dim)
6. decoder
decoder
一共12
层,每一层包括如下顺序结构为:self attention block
layer norm
self attention
dropout
cross attention block
layer norm
self attention
dropout
FFN
layer norm
MLP
dropout
- 其中
self attention
的输入是decoder hidden state
(注意不是encoder hidden state
),在self attention
中,和GPT
类似,采用 单向注意力 decoder hidden state
和encoder hidden state
输入到cross attention
中,Cross attention
和Self attention
实际上只有一个区别:self attention
的query / key / value
都由同一个hidden state
得到,因此称为self
cross attention
的key / value
由同一个hidden state
得到,query
由另一个hidden state
得到,因此称为cross
- 在
encoder-decoder
架构的transformer
中,decoder
中的cross attention
的key / value
通常由encoder output hidden state
得到,query
通常由decoder hidden state
得到 Cross attention
中每个decoder hidden state
可以查询到所有的encoder hidden state
- 重复跑完
12
层,最终输出shape = (batch, 1, decoder_dim)
的decoder output hidden state
7. decoder output hidden state to token
- 需要将
docoder output hidden state
用一层MLP
转化到vocabulary
空间,找到最可能的一个token
- 此
token
对应的单词即为模型最终输出的第一个词。 - 如果这个词是词表中的结束符,则停止输出。如果不是,则用此词替代前一个词,重复上述的 5. decoder input token embedding and position encoding 和 6. decoder 和 7. decoder output hidden state to token 过程,直到达到最长输出长度限制或出现停止符。
总结
标准 transformer
的行为
encoder
输入所有文本,双向注意力,得到encoder hidden state
decoder
输入初始化为<BOS>
,长度为1
decoder
每一层包含:self attention
,单向注意力cross attention
,双向注意力,decoder hidden state
做query
,encoder hidden states
做key and value
FFN