使用神经网络在表格中查找答案
文 / 软件工程师 Thomas Müller,Google Research
绝大多数的信息都以表格为形式进行存储,并包含于网页、数据库或是文档中。从消费类商品的技术规格到金融和国家发展统计数据、体育赛事结果等等,都可能使用表格存储。目前,人们需要通过手动查看这类表格才能找到问题的答案,或者需要通过某项服务来获得特定问题的答案(如体育赛事结果)。如果可以通过自然语言进行查询,这些信息的可用性和实用性都将得到大幅提升。
例如,下图展示了一个表格以及人们可能会询问的一些问题。这些问题的答案能在表格的一个或多个单元格内找到(“ 哪位摔跤手卫冕次数最多? ”),或者需要结合多个单元格计算得出(“ 有多少世界冠军仅卫冕过一次? ”)。
表格和带有预期答案的问题:答案可以从表格中直接找出 (#1, #4),或通过计算得出 (#2, #3)
最近许多 对于此类问题的 解决方法 都应用了传统的语义分析,将自然语言问题转换为类似 SQL 的数据库查询,通过对数据库执行查询来获取答案。例如,问题“有多少世界冠军仅卫冕过一次?”将映射到类似“ select count(*) where column("No. of reigns") == 1;
”的查询,然后执行该查询来生成答案。这类方法通常需要大量的工程设计才能生成句法和语义上都有效的查询,并且针对性极强,很难扩展到任意问题(如体育赛事结果)。
收录在 ACL 2020 的论文《 TAPAS:通过预训练进行弱监督表格解析 》 (TAPAS:Weakly Supervised Table Parsing via Pre-training) ”中,我们采用了不同的方法,通过对 BERT 架构进行扩展,将问题与表格数据结构一起编码,从而生成一个可直接指向答案的模型。与创建仅适用于单一表格样式的模型不同,这种方法生成的模型可广泛应用于来自各种领域的表格。在对数百万个维基百科表格进行预训练之后,我们发现,此方法在处理 3 类学术表格问题-答案 (QA) 数据集时在准确率方面表现出优势。
另外,为促进在这一领域展开更多卓有成效的研究,我们已开源了用于训练和测试这些模型的代码,以及已用维基百科表格进行预训练的模型,相关代码请参阅我们的 GitHub 代码库 。
如何处理问题
为了处理“ 排名前两位的摔跤手卫冕冠军的平均时间? ”这个问题,我们的模型使用 BERT 模型通过对问题和表格内容合并进行逐行编码,并特殊嵌入向量进行扩展,以对表格结构进行编码。
同时,利用基于 Transformer 的 BERT 模型,对关键信息添加的额外嵌入向量可用于对结构化输入进行编码。我们依靠已习得的嵌入向量编码列索引、行索引,以及一个表示数字列中元素排序的特殊排名进行索引。下方图片显示了以上所有内容如何一并在输入端完成添加并返回给 Transformer 层。下方图表通过左侧表格说明问题的编码方式。每个单元格的 token 都有一个特殊的嵌入向量,以指明其所在的行、列,以及列中的数字排名。
BERT 层输入:每个输入 token 都表示为其单词、绝对位置、句段(无论是属于问题还是表格)、列和行以及数字排名(如果该列按其数字值排序,则为单元格所处的位置)的嵌入向量总和
模型有两个输出:
-
对于每个表格单元格,输出一个分数,指明该单元格将成为答案一部分的概率;
-
输出一个聚合运算,指明采用哪种运算(如有)来生成最终答案。
下表显示具体操作,对于问题“ 排名前两位的摔跤手卫冕冠军的平均时间? ”,该模型应选择“合并天数”列的前两个单元格和具有较高概率的“求平均值”进行运算。
模型示意图:BERT 层对问题和表格同时进行编码。模型输出每个聚合运算的概率和每个表格单元格的选择概率。对于“排名前两位的摔跤手卫冕冠军的平均时间?”这个问题,“求平均值”运算以及编号为 3749 和 3103 的单元格应有很高的概率
预训练
使用类似于在文本训练的 BERT 方法,我们在从英文维基百科中提取的 620 万个表格文本上对模型进行了预训练。在预训练期间,模型学习恢复表格和文本中已被掩码替换的单词。我们发现,模型可以按相对较高的精度完成此操作(对于训练期间未曾见过的表格,正确还原了 71.4% 的掩码 token)。
仅从答案中学习
在微调期间,模型学习如何回答表格中的问题。此学习可通过使用 强监督 或者 弱监督 训练完成。如果进行强监督学习训练,对于给定的表格和问题,则必须为模型提供单元格和可选择的聚合运算(如求和或计数),这是一个费时费力的过程。最常见的情况是,使用 弱监督 进行训练,在训练中仅提供正确答案(例如,对上述示例中的问题,正确答案是 3426)。在这种训练中,模型将尝试找到聚合运算以及可产生接近正确答案的单元格。通过计算对所有可能的聚合决策的期望值,并将其与真实结果进行比较,即可完成此操作。弱监督训练允许非专家提供训练模型所需的数据,并且比强监督训练花费的时间更少,因而帮助很大。
结果
我们将模型应用于三个数据集—— SQA 、WikiTableQuestions ( WTQ ) 和 WikiSQL ,并将其与解析表格式数据的前三大最先进 (SOTA) 模型进行了性能比较。对比模型包括用于 WikiSQL 的 Min et al (2019) 、用于 WTQ 的 Wang et al. (2019) ,以及我们之前用于 SQA 的自建模型 ( Mueller et al., 2019 )。对于所有数据集,我们报告了用于弱监督训练环境的测试集的答案准确率。对于 SQA 和 WIkiSQL,我们使用了在维基百科上进行预训练的基础模型,而对于 WTQ,我们发现对 SQA 数据进行额外的预训练很有益处。我们表现最好的模型比以前用于 SQA 的最先进 (SOTA) 模型高出 12 分以上,比以前用于 WTQ 的最先进 (SOTA) 模型高出 4 分以上,并且性能与 WikiSQL 上发布的最佳模型性能相当。
弱监督环境下对三个学术性 TableQA 数据集的测试答案准确率
致谢
此项研究由苏黎世 Google AI 语言小组的 Jonathan Herzig、Paweł Krzysztof Nowak、Thomas Müller、Francesco Piccinno 和 Julian Martin Eisenschlos 协作完成。我们在此感谢 Yasemin Altun、Srini Narayanan、Slav Petrov、William Cohen、Massimo Nicosia、Syrine Krichene 和 Jordan Boyd-Graber 就本文提出的建设性评论与建议。