【大模型】Bert应对超长文本
一、常见的长文本处理策略
-
截断 (Truncation)
- 最简单粗暴:只保留最前面(或最后面)的 512 token,超出部分舍弃。
- 优点:实现极其简单;缺点:极易丢失关键信息,影响性能。
-
滑动窗口 (Sliding Window)
- 将全文切分为多个长度 ≤ 512 的重叠或不重叠的 chunks,每个 chunk 前后加入
[CLS]…[SEP]
; - 分别对每个 chunk 做推理,得到每段的 logits 或表示,再通过 平均/最大池化 或者更复杂的 加权聚合 得到全文级输出。
- 将全文切分为多个长度 ≤ 512 的重叠或不重叠的 chunks,每个 chunk 前后加入
-
层次化编码 (Hierarchical Encoding)
- 先把文档拆成若干小段,用 BERT(或 RoBERTa)提取每段的
[CLS]
向量; - 再把这些段级向量送入第二层 Transformer(或 BiLSTM、CNN)编码,全局聚合后再接分类/回归头。
- 先把文档拆成若干小段,用 BERT(或 RoBERTa)提取每段的
-
稀疏/局部+全局注意力 (Sparse & Global Attention)
- 直接改动 Transformer 架构,引入滑动窗口注意力、稀疏全局 token 等机制,使得全序列 L L L的计算复杂度从 O ( L 2 ) O(L^2) O(L2)降到 O ( L ) O(L) O(L)或 O ( L log L ) O(L\log L) O(LlogL)。
- 代表模型:Longformer(局部+全局注意力)和 BigBird(稀疏+全局+随机注意力)
二、BELT:”BERT For Longer Texts“ 方法
BELT 是对 滑动窗口 策略的一个标准化封装,实现了 Devlin 在 BERT 原作者讨论区提出的“多 chunk + 聚合”思路,核心特点如下:
-
无须改动模型架构
- 直接复用任意 Hugging Face 上的预训练 BERT/RoBERTa;
- 不像 Longformer/BigBird 那样需要从零预训练新的稀疏注意力模型。
-
自动切分与聚合
- 文本先被 tokenizer 分成 L L L个 token,再按用户配置的
chunk_size
、stride
和minimal_chunk_size
切分成若干小 chunk; - 每个 chunk 前后自动加上
[CLS]
、[SEP]
,并 pad 到 512; - 将所有 chunk 组成形状 (num_chunks, 512)的大批次,送入 BERT,一次性并行推理。
- 文本先被 tokenizer 分成 L L L个 token,再按用户配置的
-
多种聚合策略
- 对每个 chunk 输出的 logits 或者
[CLS]
向量,可使用 平均 (mean)、最大 (max)、加权 等多种方式聚合,得到对全文的最终预测概率或表示。
- 对每个 chunk 输出的 logits 或者
-
支持微调 (Fine-tuning)
- 在训练阶段,BELT 同样对所有 chunks 进行反向传播,保证模型能针对长文本场景优化。
- 用户只需调用
.fit()
、.predict_scores()
等高层 API,即可完成长文本分类或回归。
BELT 与其他方法的比较
特性 | BELT | Longformer / BigBird | 层次化编码 (ToBERT 等) |
---|---|---|---|
架构改动 | 无(原生 BERT) | 需预训练或下载专用模型 | 需额外设计第二层编码器 |
预训练成本 | 零 | 高 | 中等 |
实现复杂度 | 低 | 较高 | 较高 |
资源可用性 | 任意 Hugging Face BERT 系列模型 | 资源较少 | 自行实现 |
聚合灵活度 | 多种 pool 策略 | 模型内置全局 token | 自行设计 |
三、Longformer:专为长文本设计的稀疏自注意力
Longformer(Beltagy et al., 2020)在经典 Transformer 自注意力的 O ( L 2 ) O(L^2) O(L2)计算和内存瓶颈上做了关键优化,引入“滑动窗口 + 全局 token”机制,使其能高效处理数千甚至上万 token 的序列。
Longformer-base
/Longformer-large
:默认最大长度为 4096 tokens- 通过微调权重、调整位置编码等,可以扩展到 8192、16384 甚至 32768 tokens
1. 核心思想
- 局部滑动窗口注意力(Sliding Window Attention)
- 每个 token 只与固定宽度 www 的邻近 token 计算注意力(例如前后各 256 token),复杂度降为 O ( L × w ) O(L × w) O(L × w)。
- 全局注意力(Global Attention)
- 针对少数关键 token(如
[CLS]
、问题中的特殊标记),允许它们与整个序列所有 token 互相计算注意力,保证长距离依赖也能被捕捉。
- 针对少数关键 token(如
- 稀疏模式可组合
- 既可以只用滑动窗口,也可以混合随机稀疏、池化注意力等其他模式,但最经典的是“window + global”双轨设计。
2. 优势
- 线性扩展:计算和内存开销 O ( L × w ) O(L × w) O(L × w),远低于 BERT 的 O ( L 2 ) O(L^2) O(L2)。
- 长依赖捕捉:通过全局 token,不丢失对关键位置(如问题开头、文档大纲)的全局信息。
- 应用广泛:在长文档分类、法律文件理解、医学报告分析、长对话建模等场景表现优异。
四、与 BERT 在长文本处理上的优化对比
特性 | 原生 BERT + 滑动窗口 / BELT | Longformer |
---|---|---|
架构改动 | 无,直接复用标准 BERT | 需重新预训练带稀疏注意力模式的 Transformer |
注意力计算复杂度 | O ( L 2 ) O(L^2) O(L2),实际用时取决于 chunk 数 × 512² | O ( L × w + G × L ) O(L × w + G × L) O(L × w+G × L)( w w w为窗口大小, G G G为全局 token 数) |
长距离依赖建模 | 依赖滑动窗口重叠 + 聚合策略,依然是局部视野 | 本身支持全局注意力,关键 token 可跨全序列交互 |
输入长度限制 | 受限于 512 token/chunk,需要手动切分与聚合 | 支持数千至上万 token,单次前向即可处理长上下文 |
预训练成本 | 零(直接用已有 BERT 检索模型) | 高(需从头或大规模语料上重新训练) |
实现与部署复杂度 | 低:只需一层切分与池化逻辑 | 较高:需在框架中集成稀疏注意力算子 |
下游速度与资源 | 多 chunk 推理,整体耗时与 chunk 数线性增长 | 单次推理但注意力模式复杂,耗时线性增长 |