跳到主要内容

一台对话问答机的解剖 — 四个部件

这一章讲三件事: CMRC 模型的部件图;每个部件上各家试过哪些路数、各死于什么;综述读出的三条规律。 读完你就有了全套词汇——第 06–08 章的三个自研模型,都是往这台机器的某个部件里插新设计。

1. 全景图:一条流水线,四个部件

一台对话式问答机(CMRC 模型)的完整流水线是这样的1:

对话历史 H(此前所有问答对)


① 历史选择模块 从 H 里挑出相关的 H′(丢掉无关轮)


② 编码器(+历史建模) 把 H′、文章 C、当前问题 Q 变成向量;
│ 「历史建模」=决定用输入格式上的什么花招
│ 把历史塞进这串向量里

③ 推理模块 在向量上做上下文融合,推出「答案在哪」


④ 输出预测器 给出答案 A(一段原文/自由文本/动作标记)

图说:①② 是 ConvQA 比单轮 MRC 多出来的部分,③④ 与单轮机共享。
第 06 章的新设计插在①,第 07 章贯穿①②,第 08 章重构①并在前面再加一级检索。

原书把这套部件图归功于 Qu 等人 2019 年的工作:在一次一问的 MRC 的「编码—推理—解码」之上,新增历史选择历史建模两个模块,从此任务有了 CMRC 这个名字2。正式定义再念一遍:给定文章、一串历史问答对、当前问题,预测当前答案;答案可以是文中一段原文(span),也可以是带证据的自由文本3

下面逐个部件拆。

2. 部件一:历史怎么选

这一节的问题:512 个位置很贵(第 03 章),历史该挑哪些进去?

先把动机钉死:相关轮次有用,无关轮次是噪声,会拉低模型表现——所以「谨慎挑选」很关键4。三大路数:

路数一:固定选 K 轮。 不管三七二十一,取最近 K 轮拼进去。SDNet、BiDAF++、ORConvQA 等一批模型都这么干5。简单,但对话题转移无能为力——上一章的 Malayali 对话里,该带的可能是隔了好几轮的 Q1。

路数二:选「紧挨着」的几轮。 有实验发现紧邻两轮就很有用(BERT 2-ctx);另一个模型 BERT-HAE 说要五到六轮才够。但两个模型都观察到同一件事:轮数继续加,性能急剧下滑6——512 墙加上噪声,两头夹击。

路数三:动态选择。 原书引 Yatskar 的观察:话题回归、话题转移这些对话现象,和「选紧邻的轮次」根本对不上7——回归要的是老早之前的轮,转移面前紧邻轮恰是噪声。于是出现了两个方向:

  • 按贡献打分(HAM):给每轮按「对答当前题的贡献」赋权,在词级或句级上做注意力,再与当前轮的表示合并——这是软选择的雏形:不丢轮,只是让重要的轮占比大8;
  • 当决策问题做(Env-ConvQA):把「挑历史」当成一个逐步决策过程,模型从最近的轮开始一轮轮回溯,逐个判断「这轮相关吗」,不相关就丢——用强化学习(答对了给分,拿分数教策略)的奖励信号训练这个回溯策略9

硬选择(丢掉无关轮次)与软选择(加权)这对概念请记住:第 07 章的自研模型就是把两者组合起来。

3. 部件二:选出的历史怎么塞进输入

这一节的问题:选好了轮次,用什么格式写进输入串?

原书把「历史建模」单列为一个模块讲,同时明说:它实际发生在编码器里,单独列出只是为了讲得清楚10。三种花招:

花招一:直接拼。 最常见——把选出的问答对拼在当前问题前面。细分还有「拼完整问答对」和「只拼问题、另编码轮次编号」两种;BiDAF++ 的作者报告过,把轮次编号放进输入实测更好11。朴素,但吃 512 预算。

花招二:在文章里做标记(HAE)。 给文章的每个词额外加一个标记位:这个词是不是上一轮答案的一部分。好处是给模型一个指针——「上轮答案就在这附近,当前问题多半和它有关」12。后继版 POS-HAE 再进一步,把「那轮答案离当前问题隔几轮」的位置信息也编进去13

花招三:不塞原文,塞中间结果。 让模型把对话的「流动」压缩成一串隐表示(向量状态),后续轮次处理时读这份状态而不是原始文本——这一类叫流式方法,下一节还会遇到14

4. 部件三:推理的四代

这一节按技术代际过一遍推理模块。模型名不必背,要记的是每代解决了什么。

先交代推理模块本身在干什么:把编码后的向量融合若干层,产出「历史感知」的表示——单步推理过一层就出答案,多步推理融合多层15。按技术代际分四代:

4.1 第一、二代:手拼网络与预训练一体

第一代:手拼注意力网络(2016–2018)。 CoQA 数据集的官方基线(跑分时的起点评测对象)DrQA+PGNet 是典型:DrQA(双向 LSTM)先在文章里圈出答案证据,PGNet(指针生成网络)把证据转写成最终答案——可以照抄原文,也可以改写16

BiDAF++ 在双向注意力流上叠自注意力和上下文化嵌入;SDNet 用两个双向 RNN(循环神经网络——一种逐词往前处理的结构)交替做自注意力和交互注意力17。共同点:零件一个个手拼,工程重、难迁移。

第二代:预训练模型一体(2019 起)。 BERT 把编码和推理合并成一个「拿来就微调」的整体,隐藏了上下文与问题之间的复杂交互18。但撞上 512 墙,于是三种绕法——恰好对应上一节的花招:①HAE 标记省字数;②每轮单独过一遍 BERT 再用 BiGRU(一种轻量循环网络)聚合轮间关系;③接一个强化学习回溯器先把无关轮筛掉19

答案的产出方式在此定型:把最终向量与「起始向量」两两相乘再求和——这套乘加有个名字,叫点积**——全文每个位置都算一遍**20

再给每个词换算一个 0 到 1 的分(这一手叫 softmax),分最高的当开头,同样再选个结尾,开头+结尾就是答案 span20

4.2 第三、四代:流式方法与开放检索

第三代:流式方法(2019–2020)。 FlowQA 把历史问答对的中间表示沿着处理层「流」下去,让每个位置的推理都能看见之前轮次的推理结果21。FlowDelta 改进它:不流「表示」本身,流相邻两层表示之差(信息增益)——差值恰好凸显「这一步新学到什么」,准确度反而更高22。GraphFlow 再换骨架:把文章、问题、历史建成一张动态图,用图神经网络(GNN)在图上传递信息23

第四代:开放检索(2020 起)。 前三代都假设文章在手边。ORConvQA 是这一代的开山:三个模块——检索器(双 ALBERT 编码器分别编码问题和段落,从大 collection 里抽 top-K 段)、一道重排(把检回的段落按好坏重新排队)、阅读器(抽答案)24

WS-ORConvQA 接着解决「检索回来的段里没有标准答案原文」的问题:训一个弱监督(没有人工标签时,自动造个近似标签来训的套路)部件,在检索段里找与标准答案重叠最大的片段当替身答案,给阅读器提供训练信号;最终答案按「检索分+阅读分」合计挑出25

本书第 05 章会看到的 DPR 技术也在这代登场:把问题和段落各自编码成很长的数串(这类表示法叫稠密——数串每一位都有值,不留空档)再做检索。

这类做法统称稠密检索(dense retrieval);对话场景的词面不匹配正是它的强项26

5. 部件四:怎么给答案

这一节讲输出端的三种答案形态和一处容易被忽略的设计。

三种形态:抽 span(算每个词是开头/结尾的概率——0 到 1 的分,分高者当选)、自由生成(适合因果型问题)、dialog act 预测(第 05 章细讲——QuAC 的老师用「继续问/换问题」这类动作标记引导学生)27

一处精巧的设计值得单独看:QuAC 数据集给每段文章末尾追加一个特殊标记 UNANSWERED,模型学不会找到答案时,可以预测这个标记——等于给模型一个体面的出口:「文中没有答案」28

6. 走查:一个问题穿过四个部件

主走查。 拿第 02 章斯塔滕岛对话的 Q5「Where is it?」,套一台「BERT-HAE 风格」的机器走全程:

输入原料
文章 C:「Staten Island is one of the five boroughs …
In the southwest of the city, Staten Island is the southernmost …」
历史:Q1「How many burroughs are there?」A「Five」
Q2「In what city?」A「New York City」 Q3「And state?」A「New York」
当前问题 Q:「Where is it?」

① 历史选择(选 K=2)
取最近两轮:Q2A2、Q3A3;Q1A1 被丢掉
——本例侥幸选对;若问题是话题回归型,这一步就选错了(第 07 章的主题)

② 历史建模+编码(HAE 花招)
文章里「New York City」「New York」两个词块被打上 HAE 标记
——因为它们是历史答案的一部分
拼接:[CLS] Where is it ? [SEP] + 文章(HAE 已标)
过 BERT:每个词获得上下文化向量(第 03 章的走查)
「it」的向量此时已吸收了 HAE 标记的线索:「历史答案谈的是纽约市」

③ 推理
上下文融合若干层后,模型在文章词上计算:
「In」是开头?0.04 「southwest」是开头?0.71 「the」?0.09 …
「southwest」是结尾?0.55 「city」?0.21 … (数字为演示编)

④ 输出
开头最高分「southwest」+ 结尾最高分「southwest」
若只抽单词太短,模型权衡后输出 span:「In the southwest of the city」
——正是标准答案

图说:四个部件各干一件事:①管省钱省噪,②管把历史变成标记和向量,
③管在向量上定位,④管把定位变成答案。

7. 判断:综述读出的三个规律

判断(我们的,不是书里的): 把 2.4 节上百个模型摊开,能读出三条规律,它们恰好是后三章的伏笔。规律一:历史选择从静态走向动态——固定 K 轮到加权到回溯,方向是「按当前问题定制历史」;规律二:架构从手拼走向预训练一体——零件越来越少,设计重心从「怎么连模块」移到「怎么喂输入」;规律三:「文章永远给定」这个假设正在松动——第四代已经把检索拉进流水线,ConvQA 正在变成开放域问题。 如果错,会错在: 如果后来的 LLM 时代把四个部件重新捏合成一个端到端(一整根不分段的)模型(事实上部分发生了),规律二就要改写成「一体化再一体化」——但「怎么给模型喂对上下文」这个规律一的核心,到今天反而更吃重了。

8. 可带走的

  1. CMRC = 一次一问的 MRC + 历史选择/历史建模两个新部件;四部件流水线是全书的坐标系;
  2. 历史选择三路数:固定 K 轮、紧邻几轮、动态选择——「紧邻」与「相关」是两回事(话题回归专治紧邻);
  3. 硬选择=丢掉无关轮次,软选择=加权;两者可以组合(第 07 章就这么干);
  4. 历史建模三花招:拼问答对、HAE 标记(含 POS-HAE 位置版)、隐式状态;
  5. 推理四代:手拼注意力 → 预训练一体 → 流式 → 开放检索;每代都上一级台阶;
  6. span 预测的标准动作:算每个词「是开头/是结尾」的概率,取最高的一对;
  7. UNANSWERED 标记是个体面设计:给模型一个「文中无答案」的正式出口;
  8. 三条规律的接棒:动态化由第 07 章接(三层过滤),开放化由第 08 章接(检索进流水线),一体化则已在本章完成(预训练模型把编码与推理捏成一件)。

9. 原文地图

主题原书章原文位置
两模块的来历、正式定义2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:30(搜「history selection and history modeling」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:33(搜「Formally, given a context」)
历史选择动机:噪声2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:47(搜「bring more noise」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:49(搜「quite critical」)
三路数:K 轮/紧邻/动态2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:52(搜「Selecting K Turns」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:65(搜「2-ctx」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:68(搜「five to six」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:70(搜「dramatic degradation」)
HAM 与 Env-ConvQA2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:75(搜「may not align」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:76(搜「HAM」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:83(搜「backtracking」)
历史建模三花招2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:148(搜「in the encoder module」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:161(搜「appending only history questions」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:168(搜「Positional HAE」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:173(搜「Latent Representations」)
第一代:DrQA+PGNet/BiDAF++/SDNet2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:196(搜「DrQA+PGNet」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:203(搜「BiDAF++」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:206(搜「SDNet」)
第二代:PLM 三绕法、span 概率2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:212(搜「ready-to-tune」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:233(搜「BiGRU」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:247(搜「softmax over all the words」)
第三代:FlowQA/FlowDelta/GraphFlow2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:265(搜「FlowQA」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:274(搜「information gain」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:283(搜「dynamic context graph」)
第四代:ORConvQA/WS-ORConvQA/DPR2.4text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:306(搜「passage retriever」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:324(搜「maximum overlap」) · text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:337(搜「DPR techniques」)
输出预测与 UNANSWERED2.4text/13-ch02-05-2-5-datasets-for-conversational-question-answeri.txt:1(搜「dialog acts prediction」) · text/13-ch02-05-2-5-datasets-for-conversational-question-answeri.txt:4(搜「UNANSWERED」)

Footnotes

  1. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 43 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:43,搜「history selection module」)。Figure 2.6 的说明:历史选择模块从历史中选 H′,编码器转换,推理模块做上下文整合,输出预测器预测答案。

  2. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 30 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:30,搜「history selection and history modeling」)。原文:该工作引入这两个模块以纳入对话性,由此提出 CMRC 任务。

  3. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 33 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:33,搜「Formally, given a context」)。答案可为带证据的自由文本(CoQA 式)或文本 span(QuAC 式)。

  4. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 47 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:47,搜「bring more noise」)。

  5. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 52 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:52,搜「Selecting K Turns」)。

  6. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 65 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:65,搜「2-ctx」)与第 68 段(搜「five to six」)。性能随轮数陡降的观察在第 70 段(搜「dramatic degradation」)。

  7. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 75 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:75,搜「may not align」)。

  8. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 76 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:76,搜「HAM」)与第 79 段(搜「token level or sentence level」)。

  9. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 83 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:83,搜「backtracking」)。把选历史当序贯决策过程的说法在第 85 段(搜「sequential decision-making」)。

  10. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 148 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:148,搜「in the encoder module」)。

  11. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 161 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:161,搜「appending only history questions」)与第 163 段(搜「yields better results」)。

  12. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 168 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:168,搜「indicator」)。

  13. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 168 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:168,搜「Positional HAE」)。空间分布模式的说法在第 170 段(搜「spatial patterns」)。

  14. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 173 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:173,搜「Latent Representations」)。

  15. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 183 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:183,搜「single-step reasoning」)。

  16. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 196 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:196,搜「DrQA+PGNet」)。biLSTM 提供答案线索在第 199 段(搜「biLSTM」),PGNet 解码在第 201 段(搜「decodes」)。

  17. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 203 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:203,搜「BiDAF++」)与第 206 段(搜「SDNet」)。

  18. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 212 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:212,搜「ready-to-tune」)。

  19. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 222 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:222,搜「Highlighting conversational history」)、第 228 段(搜「BiGRU」)、第 237 段(搜「backtracker」)。

  20. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 244–248 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:246,搜「dot product between the final embedding」)。原文:最终向量与起始向量点积、全词 softmax 取最高概率者为答案开头;结尾同法。 2

  21. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 265 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:265,搜「FlowQA」)。集成流(Integration Flow)的名称在第 266 段(搜「Integration Flow」)。

  22. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 272 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:272,搜「FlowDelta」)。信息增益=相邻两层隐表示之差,见第 273 段(搜「information gain」)。

  23. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 282 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:282,搜「Graph Flow」);动态上下文图在第 283 段(搜「dynamic context graph」)。

  24. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 305 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:305,搜「OR-ConvQA」)。三模块与双 ALBERT 编码器在第 306–310 段(搜「dual-encoder」)。

  25. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 321 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:321,搜「WS-ORConvQA」);弱监督在第 321 段(搜「weak supervision」),最大重叠替身答案在第 322 段(搜「maximum overlap」),检索分+阅读分合计在第 332 段(搜「sum of its retriever score」)。

  26. 出处:「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 337 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:337,搜「DPR techniques」)。对话场景词面不匹配更突出、正是稠密检索强项的说法在第 340–344 段(搜「vocabulary mismatch」)。

  27. 出处:「2.5. DATASETS FOR CONVERSATIONAL QUESTION ANSWERING」第 1 段(text/13-ch02-05-2-5-datasets-for-conversational-question-answeri.txt:1,搜「dialog acts prediction」)。span 概率与聚合表示分别在第 2 段与第 5 段。

  28. 出处:「2.5. DATASETS FOR CONVERSATIONAL QUESTION ANSWERING」第 4 段(text/13-ch02-05-2-5-datasets-for-conversational-question-answeri.txt:4,搜「UNANSWERED」)。原文:QuAC 在每段末尾追加 UNANSWERED token,模型判定问题不可答时学习预测它。