跳到主要内容

两条路线 — 查表的知识库 vs 读文章的机器

这一章讲三件事: 问答这门手艺的年龄;给问答系统分类的四把尺子;以及机器答问的两条根本路线——查表与读文——各自的构造和死穴。 读完你会明白:这本书为什么选「读文章」这条线,而不是「查表」。

1. 问答这件事的年龄

先纠正一个直觉:让机器答问,不是深度学习(让机器从海量例子里自己学规律的那套方法)之后才有的新想法。

机器问答(QA,question answering)可以追溯到 1960 年代。最早那批系统用规则方法——人工写死「遇到这类问句就套这类模板」——外加当时能找到的数据集小得可怜,两头都不行,一直没法实用1

复活发生在 2015 年前后。原书把这次复活归功于两个驱动因素,缺一不可2:

因素干了什么
深度学习方法不再靠人工规则,从数据里自己学「问句和答案的关系」,效果压过规则模型
大规模数据集SQuAD(10 万+问答对)、MS MARCO、CNN(美国有线电视新闻网)的新闻稿数据集 CNN & Daily Mail 等——既是训练料,又是统一的考卷

这个组合值得记住,因为它是整个领域的工作方式:先有一个公开数据集当考卷,大家对着考卷刷分数,方法进步由考卷裁决。 第 05 章讲这本书领域的四张考卷。

而 ConvQA(对话式问答)是 2015 年这波复兴之后更进一步的方向:把「一问一答」接成「多轮对话」,而且是一种「系统问、用户答」的设定——系统为了搞清你到底想要什么,可以反过来向你提问3

2. 四把尺子:给问答系统分类

这一节是领域地图。四把尺子各量一个侧面,后面章节会反复用到其中两把。

尺子一:数据域。 问题范围不设限的叫开放域(open domain)——天文地理什么都问;限定在某个应用场景的叫封闭域(closed domain)——旅行、餐厅、医院。封闭域的问题库小,模型也更容易做精,但换个领域就得重练,所以封闭域模型的迁移性天生比开放域差4

尺子二:问题类型。 原书按「答案长什么样」把问题分成七种5:

类型要什么答案例子
事实型(factoid)一个短事实,常以 wh-词开头「《老友记》里 Chandler 是谁演的?」
确认型是/否「悉尼是澳大利亚的首都吗?」
简单型一小段文字「巴基斯坦地震震级多少?」
复杂型多步推理「中国有多少城市人口比新德里多?」
因果型解释为什么/怎么办「为什么会发生地震?」
列举型一串实体清单「列出美国所有前总统」
不可答型老实说「资料里没有」资料里根本没写的事

最后一种最容易被忽略,却最要紧:系统必须学会说「答不了」。SQuAD 数据集后来专门扩充了 5 万多个不可答问题,就是逼模型学会这件事6

尺子三:数据源。 答案从哪里来——这是两条路线的分水岭,下一节展开。

尺子四:系统类型。 对着结构化数据源查的,长成「顺序式知识库问答」;对着文章读的,长成「对话式机器阅读理解」(第 01 章层级图里那对兄弟)。

3. 路线一:对着知识库查表

这一节讲查表路线的机器怎么转、为什么非要做成多轮。

知识库(KB,knowledge base)是一种把知识整理成实体和关系的仓库。最流行的形态是知识图谱(KG,knowledge graph):一张由「三元组」结成的网。三元组就是一条「主语—关系—宾语」记录,比如「(周杰伦,出生于,台北)」——实体 s,经过关系 r,连到实体 t7。Freebase、DBpedia、Wikidata 都是千万级三元组的大型知识图谱。

对着知识库答问(KB-QA)有实打实的好处:用户不用再写 SQL(数据库专用的查询语言)那种复杂查询,用自然语言直接问就行8。但单轮版有个尴尬的死穴:用户问的问题往往复杂,机器要拆解、要多跳——而要可靠地拆复杂问题,机器得先知道这张图内部是怎么组织的;指望用户按知识库的结构习惯来提问,不现实9。原书的裁决很直接:既然如此,做成多轮的顺序式 KB-QA 是更优的选择——让系统用追问一点点问清用户的条件10

原书举的场景:想找一部电影看。传统 KB-QA 第一轮就会甩出一堆结果结束对话;顺序式系统则先追问「什么类型?」「哪个年代?」「要不要避开恐怖片?」,几轮之后才给出一个最合适的答案11

顺序式 KB-QA 的机器由三个部件组成12:

用户问题 ──→ ①语义解析器 ──→ ②对话管理器 ──→ ③响应生成器 ──→ 回复
把问句连 记着之前的问答对
同上文翻译 和数据库状态,
成逻辑形式 决定下一步是答题
(能查表的表达) 还是继续追问

图说:①是翻译官——把「有没有 20 分钟做完的素食菜」变成查询语句;
②是记事本+决策者;③把决定变回人话。

①语义——指问句的意思——解析器(semantic parser):把问句连同上文翻译成逻辑形式(logical form,一种机器可执行的规范化表达),拿去查表;「对话管理器」(dialog manager)负责记住历史问答对和数据库当前状态,并按一套策略决定「下一步是作答还是追问」——这套策略可以训出来,也可以人工写死;「响应生成器」最后把系统动作转成自然语言13

死穴在部件①:语义解析器需要大量昂贵的人工标注(雇人标答案)才能训好,所以新一批研究干脆想把它整个砍掉14。这是查表路线的结构性麻烦——知识越结构化,人和它的语言鸿沟越大,翻译层就越重。

4. 路线二:对着文章读

这一节讲本书所在的路线:答案不在表里,在文章里。

机器阅读理解(MRC,machine reading comprehension)就是「给一篇文章+一个问题,机器从文章里找答案」。把它接上对话(第 01 章的 CMRC),得到的是完全不同的一种问答机。

原书用找餐厅的例子把两条路线的差别一刀切开:你想找某片区一家合口味的餐厅——

  • 搜索引擎(传统路线):还给你摊开多页的结果列表,自己慢慢挑;
  • CMRC 问答机:先追问几个问题摸清你的偏好,然后把结果收窄到「一个最合适的答案」15

读文章这条路不要求世界先被整理成表。文章是人类知识的天然形态——维基百科、新闻、说明书,拿来就能用;代价是机器得自己「读懂」文章,于是所有难度都压到了一个问题上:机器到底怎么把文字变成能计算的东西? 这就是下一章的全部内容。

5. 走查:同一段对话,只答单问的机器死在第 2 问

主走查。 拿原书引的 CoQA 数据集里的一段真实对话,逐轮走一遍,看只答单问的机器(每问独立作答、不看历史)和对话机各自的表现。文章节选自维基百科「斯塔滕岛(Staten Island)」条目,开头是「斯塔滕岛是纽约市的五个区之一……2016 年人口约 476,015,是人口最少的区,但面积排第三……它有时被居民称为『被遗忘的区』」16

问序问题标准答案只答单问的机器怎么样
Q1有几个区?Five能答——文章第一句就有
Q2在哪个城市?New York City。问题里没有「什么」的指代对象;答案其实在 Q1 的问题里(「区」属于城市),必须把 Q1 连起来读
Q3那州呢?New York死得更透——连名词都省了,只有一个「州」字
Q4斯塔滕岛是其中之一吗?Yes能答——这问居然是完整的;但「是/否」题需要拿文章判断,不是抽原文
Q5它在哪里?在城市西南死——「它」指斯塔滕岛,答案藏在对文章地理位置的描述里
Q6它有时被叫做什么?The forgotten borough能答——前提是知道「它」还是斯塔滕岛
Q1 完整问 ──→ 单轮机活着
Q2「In what city?」──→ 没有历史就没有问句语义 ──→ 单轮机死
Q3「And state?」──→ 问题缩成两个词 ──→ 连话题都靠上文补
Q5「Where is it?」──→ 共指消解上场:「它」=斯塔滕岛
Q6──→ 答案在文章里,但找准它仍依赖 Q5 确认的指代

图说:六问里三问对单轮机是「病句」。这些对话不是故意刁难——
人跟人说话就是这么说的。

这段走查把第 01 章的抽象名词全部落了地:追问不完整(Q2/Q3)、共指消解(Q5/Q6)、答案不直接是原文片段(Q4)。对话机要活下来,第一件事就是让机器把「历史」和「当前问题」一起读进去——而「一起读进去」说来简单,机器读的其实是数。下一章从「词怎么变数」讲起。

6. 可带走的

  1. 问答是 1960 年代就有的老想法,2015 年靠「深度学习+大数据集」复活,考卷驱动是这行的基本工作方式;
  2. 四把分类尺子:数据域、问题类型、数据源、系统类型——听到任何「XX 问答系统」,先问这四样;
  3. 七种问题类型里最要紧的是「不可答」:学会说「答不了」和学会答题一样重要(SQuAD 专门为此扩了 5 万题);
  4. 知识图谱 = 三元组结成的网;查表路线的三部件是语义解析器+对话管理器+响应生成器;
  5. 查表路线的结构性死穴在翻译层:知识越结构化,自然语言到查询语句的鸿沟越大,语义解析器越贵;
  6. 读文章路线不需要世界预先整理成表,代价是机器必须自己解决「读懂」——难度全压在表示这一层;
  7. 只答单问的机器在真实对话里活不过第二问:人说话天然省略,「In what city?」这类问题离开上文就是病句。

7. 原文地图

主题原书章原文位置
QA 起源与 2015 复兴2.2text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:26(搜「1960s」) · text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:30(搜「rise in 2015」) · text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:36(搜「SQuAD」)
system ask, user respond2.2text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:46(搜「user respond」)
四把尺子与七种问题2.2text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:82(搜「domain-free」) · text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:97(搜「Factoid Questions」) · text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:125(搜「how many cities in China」) · text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:150(搜「Unanswerable Questions」) · text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:155(搜「50,000 unanswerable」)
三种数据源2.2text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:161(搜「Structured Data Source」) · text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:177(搜「Unstructured Data Source」)
知识图谱三元组、顺序式 KB-QA 的动机2.3text/11-ch02-03-2-3-sequential-kb-qa-systems.txt:6(搜「triples」) · text/11-ch02-03-2-3-sequential-kb-qa-systems.txt:23(搜「more optimal option」)
找电影场景、三部件架构2.3text/11-ch02-03-2-3-sequential-kb-qa-systems.txt:31(搜「find a movie」) · text/11-ch02-03-2-3-sequential-kb-qa-systems.txt:38(搜「Dialog Manager」) · text/11-ch02-03-2-3-sequential-kb-qa-systems.txt:43(搜「Response Generator」)
砍语义解析器的动向2.3text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:8(搜「semantic parser module」)
找餐厅例子2.2text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:206(搜「popular restaurant」)
斯塔滕岛对话(走查)2.2text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:253(搜「Staten Island」) · text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:261(搜「least populated」) · text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:272(搜「In what city」) · text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:278(搜「Where is it」)

Footnotes

  1. 出处:「2.2. FOUNDATIONS OF QA AND INTRODUCTION TO CONVQA」第 26 段(text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:26,搜「1960s」)。原文:早期 QA 系统因规则方法和数据集太小而没有做好,难以实用。

  2. 出处:「2.2. FOUNDATIONS OF QA AND INTRODUCTION TO CONVQA」第 30 段(text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:30,搜「rise in 2015」)。两个驱动因素分列第 33–42 段;SQuAD 全称在第 36 段(搜「Stanford Question Answering Dataset」)。

  3. 出处:「2.2. FOUNDATIONS OF QA AND INTRODUCTION TO CONVQA」第 46 段(text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:46,搜「user respond」)。原文:「ConvQA is a system ask, user respond kind of setting where the system can ask a user multiple questions to understand the user's information need」。

  4. 出处:「2.2. FOUNDATIONS OF QA AND INTRODUCTION TO CONVQA」第 82 段(text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:82,搜「domain-free」)与第 84 段(搜「less transferable」)。

  5. 出处:「2.2. FOUNDATIONS OF QA AND INTRODUCTION TO CONVQA」第 97–154 段(text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:97,搜「Factoid Questions」)。七类的定义与例子都在这一段区间;Chandler 例子在第 99 段(搜「Chandler」),「中国城市人口」例子在第 125 段。

  6. 出处:「2.2. FOUNDATIONS OF QA AND INTRODUCTION TO CONVQA」第 155 段(text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:155,搜「50,000 unanswerable」)。SQuADRUn(SQuAD 2.0)是 SQuAD 的扩充版。

  7. 出处:「2.3. SEQUENTIAL KB-QA SYSTEMS」第 6 段(text/11-ch02-03-2-3-sequential-kb-qa-systems.txt:6,搜「triples」)。原文:典型知识图谱由「主语、谓语、宾语三元组 (s,r,t)」构成,r 是两实体间的关系。

  8. 出处:「2.3. SEQUENTIAL KB-QA SYSTEMS」第 2 段引用部分(text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:192,搜「extremely flexible」)。原文:KB-QA 系统比要求用户写复杂 SQL 查询的传统系统灵活易用得多。

  9. 出处:「2.3. SEQUENTIAL KB-QA SYSTEMS」第 22 段(text/11-ch02-03-2-3-sequential-kb-qa-systems.txt:22,搜「organizational structure」)。原文:指望这些系统在「对知识库组织结构没有完整了解」的情况下组出复杂查询是不理性的。

  10. 出处:「2.3. SEQUENTIAL KB-QA SYSTEMS」第 23 段(text/11-ch02-03-2-3-sequential-kb-qa-systems.txt:23,搜「more optimal option」)。

  11. 出处:「2.3. SEQUENTIAL KB-QA SYSTEMS」第 31 段(text/11-ch02-03-2-3-sequential-kb-qa-systems.txt:31,搜「find a movie」)。原文:传统 KB-QA「对话会在第一轮后结束并给出一堆结果」,顺序式系统会追问细节再给最合适的答案。

  12. 出处:「2.3. SEQUENTIAL KB-QA SYSTEMS」第 38 段(text/11-ch02-03-2-3-sequential-kb-qa-systems.txt:38,搜「Dialog Manager」)。三部件(i)语义解析器(ii)对话管理器(iii)响应生成器;对话管理器记录历史与数据库状态的说明在第 45 段(搜「DB state」)。

  13. 出处:「2.3. SEQUENTIAL KB-QA SYSTEMS」第 44 段(text/11-ch02-03-2-3-sequential-kb-qa-systems.txt:44,搜「logical form」)与「2.4. CONVERSATIONAL MACHINE READING COMPREHENSION」第 5 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:5,搜「dialog policy」)。原文:对话管理器按 dialog policy 决定下一步是作答还是追问;policy 可以在对话上训练,也可以人工编写。

  14. 出处:「2.3. SEQUENTIAL KB-QA SYSTEMS」第 8 段(text/12-ch02-04-2-4-conversational-machine-reading-comprehension.txt:8,搜「elimination of the semantic parser」)。原文:新方法致力于砍掉语义解析器模块,因为它需要大量昂贵的数据标注。

  15. 出处:「2.2. FOUNDATIONS OF QA AND INTRODUCTION TO CONVQA」第 206 段(text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:206,搜「popular restaurant」)。

  16. 出处:「2.2. FOUNDATIONS OF QA AND INTRODUCTION TO CONVQA」第 254 段(text/10-ch02-02-2-2-foundations-of-qa-and-introduction-to-convqa.txt:254,搜「five boroughs of New」)与第 261 段(搜「least populated」)。Table 2.1 出自 CoQA 数据集(Reddy et al.),对话原文在第 270–281 段;「被遗忘的区」在第 268 段(搜「forgotten borough」)。