使用神经网络在表格中查找答案

使用神经网络在表格中查找答案
文章图片
来源:TensorFlow
本文约2481字 , 建议阅读6分钟 。
本介绍如何通过自然语言进行查询 , 从表格中找到所需的内容 , 从而提升信息的可用性和实用性 。
使用神经网络在表格中查找答案
文章图片
绝大多数的信息都以表格为形式进行存储 , 并包含于网页、数据库或是文档中 。 从消费类商品的技术规格到金融和国家发展统计数据、体育赛事结果等等 , 都可能使用表格存储 。 目前 , 人们需要通过手动查看这类表格才能找到问题的答案 , 或者需要通过某项服务来获得特定问题的答案(如体育赛事结果) 。 如果可以通过自然语言进行查询 , 这些信息的可用性和实用性都将得到大幅提升 。
例如 , 下图展示了一个表格以及人们可能会询问的一些问题 。 这些问题的答案能在表格的一个或多个单元格内找到(“哪位摔跤手卫冕次数最多?”) , 或者需要结合多个单元格计算得出(“有多少世界冠军仅卫冕过一次?”) 。
使用神经网络在表格中查找答案
文章图片
表格和带有预期答案的问题:答案可以从表格中直接找出(#1,#4) , 或通过计算得出(#2,#3)
【使用神经网络在表格中查找答案】最近许多对于此类问题的解决方法都应用了传统的语义分析 , 将自然语言问题转换为类似SQL的数据库查询 , 通过对数据库执行查询来获取答案 。 例如 , 问题“有多少世界冠军仅卫冕过一次?”将映射到类似“selectcount(*)wherecolumn(''No.ofreigns'')==1;”的查询 , 然后执行该查询来生成答案 。 这类方法通常需要大量的工程设计才能生成句法和语义上都有效的查询 , 并且针对性极强 , 很难扩展到任意问题(如体育赛事结果) 。
收录在ACL2020的论文《TAPAS:通过预训练进行弱监督表格解析》(TAPAS:WeaklySupervisedTableParsingviaPre-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的Minetal(2019)、用于WTQ的Wangetal.(2019) , 以及我们之前用于SQA的自建模型(Muelleretal.,2019) 。 对于所有数据集 , 我们报告了用于弱监督训练环境的测试集的答案准确率 。 对于SQA和WIkiSQL , 我们使用了在维基百科上进行预训练的基础模型 , 而对于WTQ , 我们发现对SQA数据进行额外的预训练很有益处 。 我们表现最好的模型比以前用于SQA的最先进(SOTA)模型高出12分以上 , 比以前用于WTQ的最先进(SOTA)模型高出4分以上 , 并且性能与WikiSQL上发布的最佳模型性能相当 。
使用神经网络在表格中查找答案
文章图片
弱监督环境下对三个学术性TableQA数据集的测试答案准确率
致谢
此项研究由苏黎世GoogleAI语言小组的JonathanHerzig、Pawe?KrzysztofNowak、ThomasMüller、FrancescoPiccinno和JulianMartinEisenschlos协作完成 。 我们在此感谢YaseminAltun、SriniNarayanan、SlavPetrov、WilliamCohen、MassimoNicosia、SyrineKrichene和JordanBoyd-Graber就本文提出的建设性评论与建议 。
如果您想详细了解本文提及的相关内容 , 请参阅以下文档 。 这些文档深入探讨了这篇文章中提及的许多主题:
最近许多https://www.aclweb.org/anthology/P15-1142/解决方法https://www.aclweb.org/anthology/N19-1273TAPAS:通过预训练进行弱监督表格解析https://arxiv.org/abs/2004.02349GitHub代码库https://github.com/google-research/tapasSQAhttps://www.microsoft.com/en-us/download/details.aspx?id=54253WTQhttps://nlp.stanford.edu/blog/wikitablequestions-a-complex-real-world-question-understanding-dataset/WikiSQLhttps://github.com/salesforce/WikiSQLMinetal(2019)https://www.aclweb.org/anthology/D19-1284Wangetal.(2019)https://www.aclweb.org/anthology/D19-1391Muelleretal.,2019https://www.aclweb.org/anthology/D19-1603—完—
想要获得更多数据科学领域相关动态 , 诚邀关注清华-青岛数据科学研究院官方微信公众平台“数据派THU” 。


    推荐阅读