在该教程中,BERT模型预测的开始位置和结束位置,均是针对输入的“问题-文本”拼接序列中的文本部分(即回答来源文本) 而言,目标是定位该文本中能够回答问题的片段的起始与终止边界。以下是具体拆解说明:
1. 输入结构:“问题-文本”的拼接规则
SQuAD任务的核心是“给定问题和一段包含答案的文本,从文本中提取答案片段”,因此模型输入需先将“问题”和“文本”按固定格式拼接,具体规则在教程的construct_input_ref_pair函数中定义:
- 拼接顺序:[CLS] + 问题 tokens + [SEP] + 文本 tokens + [SEP]
- [CLS]:BERT的特殊起始token,用于整体序列表示;
- [SEP]:特殊分隔token,第一个[SEP]分隔“问题”和“文本”,第二个[SEP]标记整个序列的结束;
- 示例(教程中的输入):
- 问题:What is important to us?
- 文本:It is important to us to include, empower and support humans of all kinds.
- 拼接后完整序列(含token索引):
[CLS](0) what(1) is(2) important(3) to(4) us(5) ?(6) [SEP](7) # 问题部分(0-7)
it(8) is(9) important(10) to(11) us(12) to(13) include(14) ,(15) em(16) ##power(17) and(18) support(19) humans(20) of(21) all(22) kinds(23) .(24) [SEP](25) # 文本部分(8-25)
2. 预测目标:定位“文本部分”中的答案片段
模型预测的“开始位置”和“结束位置”,是答案片段在上述完整拼接序列中的token索引,但这些索引必然落在“文本部分”(即第一个[SEP]之后、第二个[SEP]之前的区域,教程示例中为索引8-24),原因如下:
- SQuAD任务的定义决定:答案只能从“文本”中提取,而非“问题”;
- 教程中的验证:
- 真实答案(ground truth):to include, empower and support humans of all kinds,对应文本部分的token索引13(to)-23(kinds);
- 模型预测结果:to include , em ##power and support humans of all kinds,对应索引13-23,与真实答案的位置完全匹配(见教程中print('Predicted Answer: ...')的输出);
- 归因分析佐证:教程中“结束位置预测”的归因结果显示,kinds(索引23,文本部分的关键token)的归因分数最高,进一步说明预测目标是“文本部分的答案边界”。
3. 关键辅助机制:token_type_ids区分“问题”与“文本”
为避免模型混淆“问题”和“文本”,教程通过construct_input_ref_token_type_pair函数生成token_type_ids(序列类型标识),明确划分两部分:
- token_type_ids=0:对应“问题部分”(从[CLS]到第一个[SEP],示例中索引0-7);
- token_type_ids=1:对应“文本部分”(从第一个[SEP]到第二个[SEP],示例中索引8-25);
- 模型在训练时会学习到“答案仅来自token_type_ids=1的区域”,因此预测的开始/结束位置会自动约束在该区域内。
总结
模型预测的“开始位置”和“结束位置”,是SQuAD任务中“答案片段”在“问题-文本拼接序列”中的token索引,且这些索引必然属于“文本部分”(即第一个[SEP]之后、第二个[SEP]之前的区域)——本质是定位“文本中能够回答问题的片段的起始和终止token”。