摘要:表格问答是一种针对自然语言问题,根据表格内容给出答案的任务。

一、什么是表格问答

表1是一张综艺节目收视率报表,假如你需要了解市场份额在3%以上的综艺节目,你会选择采用什么样的方法?

首先,用肉眼去筛选满足条件的数据,是最方便直观的方法,但显然也是效率最低的一种方式。我们可以采用一些工具,如Excel等,或者你可以选择将表格导入数据库,然后使用数据库语言来进行高效的检索。但是,并不是所有人都懂SQL语法,甚至很多用户都没有接触过Excel。

这些专业工具的使用难度限制了非技术用户,给数据分析和使用带来了较高的门槛,所以我们希望设计一种通过自然语言来对表格数据进行检索、计算等操作的系统,于是就有了表格问答。

表1:综艺节目收视率报表

表格问答是一种针对自然语言问题,根据表格内容给出答案的任务,它的任务可以描述为:输入一个表格集合T(包含一个或多个表格)和一个自然语言形式的问题Q,输出正确的答案A。

有了表格问答,用户在查询这些表格的内容时,可以直接通过自然语言与表格进行交互,如打字或者语音输入,并且可以得到直接结果,甚至是报表,大大降低数据分析门槛,为普通用户带来高效又自然的数据查询、分析和计算体验。

二、表格问答发展历史

表格问答主要经历了三个阶段:数据库自然语言接口、NL2SQL以及复杂表格问答系统。

1. 数据库自然语言接口

表格问答的研究最早可以追溯到数据库自然语言接口NLIDB(Natural Language Interfaces to Databases )。

NLIDB是一种允许用户通过输入某种自然语言表示的请求来访问存储在数据库中的信息的系统。国外NLIDB的研究起始于20世纪60年代,80年代最为活跃,受制于有限的自然语言理解能力,90年代热度开始衰减。

这段时间内出现了很多NLIDB系统:如微软的English Query,IBM的Language Access,以及BIM的LOQUI等等。中文NLIDB的研究始于20世纪70年代末期,后续也出现了一些中文实验模型与系统如NChiql,NLCQI,RChiQL,以及WTCDIS等等。这些系统主要是基于规则的方法,关键步骤主要是词法分析、语法分析、语义分析和生成SQL语句。

NLIDB是TableQA的前身,但它不是真正意义上的QA,而是一种把自然语言翻译成数据库语言的接口。它们完全依赖于规则与模板,对自然语言的约束较多,语言理解能力差,不具备较强的泛化能力。

2. NL2SQL

表格问答的主流技术之一就是让自然语言更加准确地转换成SQL语言,这种方法被称为(Natural Language to SQL)NL2SQL。NL2SQL的主要任务就是将用户的自然语言语句转化为计算机可以理解并执行的规范语义表示,与KBQA类似只不过KBQA的目标逻辑形式是SPARQL。NL2SQL有许多开源数据集,如表2所示,其中最为广泛使用的数据集,有WikiSQL、Spider等。

表2:NL2SQL数据集汇总

WikiSQL是最常用的公开评测数据集之一,它所包含的NL2SQL任务比较简单,主要是单表单列查询,可以进行最大、最小、计数、求和以及平均聚合操作,支持大于、小于和等于的条件比较,仅支持“AND”的条件链接方式。

Spider数据集是目前领域内最困难的数据集之一,训练集有7000条数据,对应140个数据库,验证集有1034条数据,对应20个数据库,数据库名不重合。它支持多表多列查询,包含复杂的子查询,以及更多的聚合操作、条件操作和排序操作等。

近年来,NL2SQL在中文领域也出现了一些优质的数据集,例如TableQA、DuSQL等。

3. 复杂表格问答系统

随着对话领域的不断完善和发展,一些表格问答系统逐渐具备了上下文理解能力,表格问答与一般对话机器人的融合不断深入,形成了较为复杂的表格问答系统。这些系统不仅能够简单的单轮问询,还能实现多轮对话,返回结果也从简单的结果集合变成了丰富的自然语言形式回答。

图1:复杂表格问答系统

三、表格问答的应用场景

据Google2015年对互联网数据的统计,仅英文网页中包含的表格数目就有数百亿,说明表格的数据量十分巨大。不仅如此,表格数据高度结构化,不同表格之间不必遵循统一的本体结构和命名规范,表格的编辑和修改可以高效进行,具有较强的可编辑性和时效性。这些特点使得表格问答能够在诸多应用场景发挥重要的作用。

表格问答具有两个重要的研究方向:结合智能交互,支持对结构化数据查询与问答;优化搜索引擎,智能并高效地检索结构化文本。结合这两个研究方向,在以下应用场景中能够发挥重要作用:保费查询、客户信息查询等内部业务数据查询;覆盖行情信息、行业研报报表、财务报表等结构化数据;支持酒店信息、火车票与飞机票查询等出行场景问答;商品销量、商品详情、商品筛选与推荐等电商场景;产品信息、活动细则等新零售场景问答;话费查询、缴费查询、业务查询等日常生活问答。

四、表格问答的工程挑战

表格问答具有广泛的应用场景,但是在工程实现上也存在很多问题:

表格的识别及规范化表示:表格默认以第一行为表头,但在实际挖掘表格中,有三种情况:以第一行为表头,以第一列为表头,或者第一行和第一列共同表示表格;挖掘的表格存在信息缺失问题,如表名缺失、表格值不全等;同时,面对多个表格时缺失表间链接关系。

外界知识的利用:有一些常识信息不包含在表格中,如排序操作的方向判断(列为“出生日期”,问题为“年龄最大的员工”)、表格值进制转换(列为“人口(亿)”,问题为“人口超5千万的城市”)等,这些信息需要引入外界知识来协助SQL生成。

融进渐进式对话:对于用户的歧义表达和模糊表达,需要有“提问-反馈-再提问”的过程,这类问题往往需要通过多轮对话解决,而用户的问题通常是上下文相关的,因此需要模型具备基于上下文的理解和分析能力。

表格问答具备很高的研究价值和商业价值,很多友商和研究机构都正在致力于表格问答的商业化和研究。与此同时,表格问答也存在很多技术难题和工程难题,在表格问答的研究道路上还有很长的路要走。

点击关注,第一时间了解华为云新鲜技术~

想了解表格问答,我们先看看TA的前世的更多相关文章

  1. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  2. jqGrid subGrid配置 如何首次加载动态展开所有的子表格

    有时候需求需要默认加载表格的时候把子表格的数据也显示出来,经过研究相关SubGrids API配置如下: 属性 类型 描述 默认值 subGrid boolean 设置为true启用子表格.如果启用子 ...

  3. [HTML/HTML5]8 使用表格

    8.1  创建基本的表格结构 8.1.1  表格结构 HTML表格包含4种基本元素: table:在HTML中table元素是一个容器,其中包含用于创建表格的其它的元素: tr:表示表格中的行,开始标 ...

  4. 表格里使用text-overflow后不能隐藏超出的文本的解决方法

          当把text-overflow设为ellipsis时文本溢出内容就能显示为省略标记,而设为clip时就能把文本溢出的部分裁切掉,不过在表格里面使用text-overflow后依旧不能隐藏超 ...

  5. DOM操作表格

    前面的话 表格table元素是HTML中最复杂的结构之一.要想创建表格,一般都必须涉及表示表格行.单元格.表头等方面的标签.由于涉及的标签多,因而使用核心DOM方法创建和修改表格往往都免不了要编写大量 ...

  6. 设置表格td宽度

      CSS布局,表格宽度不听使唤的实例.想把表格第一例宽度设为20,其他自适应.但CSS中宽度是等宽的.只设这一行也不起作用.但是在实际应用中总是等宽处理,并不按照样式来走. XML/HTML代码 & ...

  7. 【BZOJ】【2154】Crash的数字表格

    莫比乌斯反演 PoPoQQQ讲义第4题 题解:http://www.cnblogs.com/jianglangcaijin/archive/2013/11/27/3446169.html 感觉两次sq ...

  8. 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)

    BZOJ 2154 crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b ...

  9. JXL解析Excel表格内容到数据库

    java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...

随机推荐

  1. python类的封装与继承

    封装 关注公众号"轻松学编程"了解更多. 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义本身就是封装的体现. 狭义的封装:一个类的某些属性, ...

  2. bash中选择结构、循环结构与break、continue

    if两种选择结构 if 测试条件; then 程序块 else 程序块 fi if 测试条件1; then 程序块 elif 测试条件2; then 程序块 ... elif 程序条件n; then ...

  3. pytorch训练GAN时的detach()

    我最近在学使用Pytorch写GAN代码,发现有些代码在训练部分细节有略微不同,其中有的人用到了detach()函数截断梯度流,有的人没用detch(),取而代之的是在损失函数在反向传播过程中将bac ...

  4. phpword读取内容和样式 生成新的内容

    table样式还未读出 正在测试中, 目前有 rows cell textrun等样式 顺序不固定 可以设定 <?php require 'vendor/autoload.php'; use P ...

  5. IAuthorizationFilter学习笔记(权限控制)以及非全局的filter

    第一步:新建类CheckLoginFilter实现接口IAuthorizationFilter.请注意接口位于命名空间using System.Web.Mvc; public void OnAutho ...

  6. 压缩法备份Linux系统文件

    在使用Ubuntu之前,相信很多人都有过使用Windows系统的经历.如果你备份过Windows系统,那么你一定记忆犹新:首先需要找到一个备份工 具(通常都是私有软件),然后重启电脑进入备份工具提供的 ...

  7. Linux杂谈: 实现一种简单实用的线程池(C语言)

    基本功能 1. 实现一个线程的队列,队列中的线程启动后不再释放: 2. 没有任务执行时,线程处于pending状态,等待唤醒,不占cpu: 3. 当有任务需要执行时,从线程队列中取出一个线程执行任务: ...

  8. 设计模式之工厂模式(Factory模式)

    在面向对象系统设计中经常遇到以下两类问题: 1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口.这样我们可以通过声明一个指向基类的 ...

  9. shell 脚本之set 命令(转)

    服务器的开发和管理离不开 Bash 脚本,掌握它需要学习大量的细节. set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题.本文介绍它的基本用法,让你可以更安心地使用 ...

  10. 不小心清空了Ceph的OSD的分区表如何恢复

    前言 如果你是新手,应该出现过敲盘符的时候,敲错的情况,有些操作可能没什么问题,查询类的操作都没问题,但是写入的情况,就可能比较麻烦了,当然老手也可能有误操作,本篇将讲述在误操作把分区表给弄丢了的情况 ...