在公众号的第一篇文章中我们介绍了一个厉害的开放域问答系统REALM,它主要解决的问题是从知识库中找到问题相关的文章并从文章中找到问题的答案。REALM这种直接从文章中获取答案的设定在问答领域称为非结构化文档问答,而接下来我们将用几篇文章介绍一下与之相对应的结构化文档问答中的一个重要分支表格问答。
什么是表格问答
表格其实是一种信息密度很高的文档类型,与文章相比,更加适合作为电商、查询场景的知识源。用表格来提供信息不仅方便业务端梳理知识,而且结构化的数据给算法端进行信息聚合、比较甚至推理提供了更肥沃的土壤。
下图是MSRA18年底发的一篇文章的插图,里面对整个表格相关NLP问题有一个比较完整的呈现。其中涉及了检索、语义解析、生成和对话等多个方向。
如图所示,表格问答就是针对一个自然语言问题,根据表格内容给出答案。
表格问答主要涉及的是图中检索和语义解析两个模块。检索模块在文档问答里也有,文档问答的检索模块是为了找到和问题相关的文档,而表格问答里检索模块的目标则是找到和问题相关的表格。这个模块只有在涉及大量表格,例如搜索引擎,的时候才会用到。
语义解析是和文档问答中差别比较大的部分。在文档问答中是使用一个reader模型来处理检索到的文档(context),而表格问答的侧重点则是处理问题(query)。语义解析模型的目标是结合表格信息将问题(如图中的Which city hosted Summer Olympic in 2008?
)转化成一个机器可理解和执行的规范语义表示,对二维表而言这种表示通常就是SQL语句(如图中的SELECT City FROM SummerOlympic WHERE Year="2008"
)。有了SQL语句就可以执行得到针对问题的答案(如图中的Beijing
)。
在不需要表格检索的场景中,表格问答就简化成了一个自然语言转SQL(nl2sql)问题,我们后面的介绍也主要聚焦在nl2sql这个问题上。
NL2SQL数据集
我认为语义解析算是NLP界“最初的梦想”了,NL2SQL由于其实用性渐渐成为了语义解析领域一个重要的方向,近几年也诞生了很多有代表性的nl2sql数据集。
英语世界两个比较有代表性的是WikiSQL和