想象你在国际会议上担任同声传译员。左侧演讲者说西班牙语时,你的大脑会先完整理解这段话的语义(Encoder过程),再用地道的中文重组表达(Decoder过程)。这种"先理解后生成"的双阶段模式,正是Encoder-Decoder架构的核心思想。
在NLP领域,这种架构最早用于机器翻译任务。以T5(Text-To-Text Transfer Transformer)为代表的现代模型,将其发展为通用文本处理框架。不同于传统单模块模型,它的两个组件各司其职:
Encoder由多层Transformer堆叠而成,其工作流程犹如洋葱剥皮:
关键细节:T5的Encoder采用相对位置编码,相比绝对位置编码更能处理长文本。其计算公式为:
$$e_{ij} = \frac{q_i^Tk_j}{\sqrt{d}} + a_{ij}$$
其中$a_{ij}$表示词i与词j的相对位置偏置
Decoder在Encoder输出的语义表示基础上工作,其特殊设计包括:
以文本摘要任务为例:
T5的创新在于将所有NLP任务都转化为text-to-text形式:
code复制输入: "翻译英文到中文: Hello world"
输出: "你好世界"
这种设计带来三个优势:
T5采用以下改进提升效率:
使用HuggingFace实现新闻摘要:
python复制from transformers import T5ForConditionalGeneration, T5Tokenizer
model = T5ForConditionalGeneration.from_pretrained("t5-small")
tokenizer = T5Tokenizer.from_pretrained("t5-small")
input_text = "研究发现...(长新闻内容)..."
inputs = tokenizer("summarize: " + input_text, return_tensors="pt", max_length=512, truncation=True)
outputs = model.generate(
inputs.input_ids,
max_length=150,
num_beams=4,
early_stopping=True
)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
微调T5时需特别注意:
| 参数 | 推荐值 | 作用说明 |
|---|---|---|
| learning_rate | 3e-4 | 使用线性warmup达到该值 |
| batch_size | 16 | 根据GPU显存调整 |
| max_seq_length | 512 | 输入文本最大长度 |
| num_train_epochs | 3-5 | 过多会导致过拟合 |
现象:输出出现"很好很好很好"等重复
解决方案:
python复制outputs = model.generate(
...,
no_repeat_ngram_size=2,
repetition_penalty=1.5
)
当输入超过512token时:
2023年主流变体对比:
选型原则:
在实际部署中发现,T5-small模型在T4 GPU上推理速度可达50ms/token,而T5-large则需要200ms。对于实时性要求高的场景,建议通过知识蒸馏获得更小模型