spaCy与Transformer模型的结合:微调BERT、XLNet和GPT-2
像BERT、GPT-2和XLNet这样的巨型Transformer模型几乎在每一项NLP任务排行榜上都刷新了准确率记录。现在可以通过新开发的spacy-transformers
接口库,在spaCy中使用这些模型。
Transformer与迁移学习
自然语言处理(NLP)系统面临"知识获取瓶颈"问题。深度神经网络通过构建可跨任务迁移的密集表示提供了解决方案。研究表明,只要网络足够大,就能从未标注文本中有效获取语言知识。
Transformer架构采用较少硬编码假设的网络结构,在大模型和充足数据条件下能获得更精细的语言理解能力。相比传统技术,Transformer模型能更好地利用GPU/TPU硬件。
在生产中使用Transformer模型
虽然Transformer模型不断刷新准确率记录,但直接应用于实际问题仍具挑战性。这些模型通常运行成本高、延迟大,难以直接用于实时处理场景。常见应用模式包括:
- 监督小型生产模型
- 质量控制
- 生产模型监控
spacy-transformers介绍
该库提供了与Hugging Face transformers
包的对接接口,使Transformer模型能作为spaCy管道组件使用。安装方式与常规spaCy模型包一致:
|
|
模型包包含:
- 配置文件
- Transformer模型权重
- 词片(token)映射表
管道包含两个关键组件:
trf_wordpiecer
:执行模型的词片预处理trf_tok2vec
:运行Transformer并保存结果到doc.tensor
特征访问与对齐
关键特征包括:
doc._.trf_outputs.last_hidden_state
:原始Transformer输出(每词片一行)doc.tensor
:对齐后的spaCy词级别表示
库实现了spaCy语言学词化与模型词片化方案的对齐,采用加权求和方式确保信息无损。
性能注意事项
Transformer架构在CPU上效率不高,推荐使用GPU。当前版本存在以下限制:
- PyTorch和Cupy使用不同内存缓存,可能导致OOM错误
- 暂不支持多GPU
迁移学习实践
spacy-transformers
提供定制管道组件简化迁移学习。以文本分类为例:
|
|
词片与语言词的对齐
Transformer模型通常使用"词片"算法预处理文本,这种切分与语言学"词"概念差异较大。spacy-transformers
通过加权对齐方案确保信息无损传递,权重与对齐词片被共享的spaCy词数量成正比。
批处理与句子分割
由于Transformer具有序列长度的立方复杂度,长文本需要分句处理。库内部实现:
- 自动句子级预测
- 特征重建为文档级标注
- 基于长度的子批处理优化
超过最大长度的句子会被截断,受影响词将获得零向量。
环境考量
训练大型Transformer需要大量计算资源。研究表明,预训练BERT基础模型的碳排放相当于跨大西洋航班。因此应尽可能重用预训练权重而非重新训练。
spacy-transformers
和Hugging Face的transformers
库通过提供一致的接口,帮助用户更有效地重用预训练模型。