SpanBERT 简介
SpanBERT 是在 BERT 基础上提出的预训练语言模型,专门针对 文本片段(span)表示与预测 进行优化。它由 Joshi 等人在 2019 年的论文《SpanBERT: Improving Pre‑training by Representing and Predicting Spans》中首次提出,并在随后开源代码仓库中提供实现。
1. 设计动机
- BERT 的局限:BERT 在预训练阶段采用的是 随机单词掩码(MLM),以及 下一句预测(NSP)。这种方式对 跨词片段(span) 的整体语义捕捉不足,而很多下游任务(如阅读理解、指代消解、关系抽取)本质上都是 span 选择 问题。
- 目标:让模型在预训练时就学习 连续片段的整体语义 与 片段边界的表示,从而在需要定位或预测文本片段的任务上表现更好。
2. 关键技术创新
创新点 | 具体实现 | 作用 |
---|---|---|
Span Masking | 预训练时随机挑选 连续的词序列(长度服从几何分布)进行掩码,而不是单个 token。掩码比例约为 15%。 | 让模型在一次前向传播中看到完整的片段上下文,学习跨词的依赖关系。 |
Span Boundary Objective (SBO) | 仅使用 片段左右边界的 token 表示(即第一个和最后一个 token)去 预测被掩码片段的全部内容,不依赖内部 token 表示。 | 强化边界 token 对整个片段的表达能力,使模型在定位 span 时更精准。 |
去除 NSP 任务 | 只使用单句进行预训练,不再使用下一句预测。 | 简化训练流程,避免 NSP 对 span 表示的干扰。 |
这些改动在多项实验中均带来了显著提升:在 SQuAD 1.1/2.0、CoNLL‑2012 指代消解、TACRED 关系抽取等任务上均超过原始 BERT。
3. 模型结构
- 架构:保持 BERT 的 Transformer 编码器(12 层、768 维 base;24 层、1024 维 large),参数量分别约 110 M(base)和 340 M(large)。
- 预训练数据:使用与 BERT 相同的 BooksCorpus 与 English Wikipedia,另外加入了大量未标注的网页文本,以提升对多样化 span 的学习能力。
4. 主要实验结果(部分)
任务 | 数据集 | BERT (Base) | SpanBERT (Base) | 提升 |
---|---|---|---|---|
阅读理解 | SQuAD 1.1 (F1) | 81.5 | 92.4 | |
阅读理解 | SQuAD 2.0 (F1) | 78.5 | 83.6 | |
指代消解 | OntoNotes (F1) | 73.9 | 77.4 | |
关系抽取 | TACRED (F1) | 66.5 | 70.8 |
这些结果表明,SpanBERT 在 span 选择 类任务上相较于 BERT 有 5%~10% 的显著提升。
5. 使用方式
- 代码与模型:官方 GitHub 仓库提供了 pre‑trained checkpoints(base、large)以及 Fine‑tuning 示例,兼容 HuggingFace Transformers 接口,直接替换 BERT 即可使用。
- 下游任务:常见的 问答系统、指代消解、关系抽取、文本摘要 等都可以直接在 SpanBERT 上进行微调,获得更好的片段定位效果。
- 资源:除了模型本身,论文、实现细节以及实验脚本均已公开,便于研究者复现与二次开发。
6. 适用场景与优势
- 阅读理解 / 问答:需要从长文本中抽取答案片段。
- 指代消解:需要判断代词指向的具体文本跨度。
- 关系抽取:实体之间的关系往往对应于句子中的连续片段。
- 文本摘要:抽取式摘要本质上是选取关键 span。
相较于原始 BERT,SpanBERT 更擅长捕捉跨词语义、提升片段边界的表示能力,因此在上述任务上往往能取得更高的准确率与鲁棒性。
7. 小结
SpanBERT 通过 Span Masking 与 Span Boundary Objective 两大创新,对 BERT 的预训练目标进行针对性改进,使模型在需要 整体片段理解 的自然语言处理任务中表现更佳。它保持了 BERT 的 Transformer 架构,易于迁移与部署,已在多个公开基准上验证了其优势,成为 BERT 系列模型 中重要的变体之一。
声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!