Tagged: 表格问答

2,717  0

[精读]表格问答TAPAS

文献 TAPAS:Weakly Supervised Table Parsing via Pre-training Abatract 通过表格回答自然语言问题通常被视为语义解析任务。为了减轻完整逻辑格式的数据收集成本,一种常用的方法是使用侧重于由表达结果(denotation)而不是逻辑格式的弱监督。但从弱监督中训练语义解析器比较困难,并且生成的逻辑形式仅被用作检索表达结果之前的中间步骤。在本文中,我们提出了TAPAS,一种在不生成逻辑形式的情况下通过表格回答问题的方法。TAPAS从弱监督中训练,通过选择单元格并选择性地将相应的聚集运算符应用于所选单元格来预测表达结果。TAPAS扩展了BERT的体系结构,将表格作为输入进行编码,通过对从维基百科抓取的文本段和表进行有效的联合预训练进行初始化,进行端到端的训练。我们用三个不同的语义解析数据集进行实验,发现TAPAS比语义解析模型有竞争力甚至更优,因为它将SQA上SOTA的准确率从55.1提高到67.2,在WIKISQL和WIKITQ上的表现与SOTA水平相当,但模型架构更简单。我们还发现,从WIKISQL到WIKITQ的迁移学习在我们的设置中非常容易,可以产生48.7的准确率,比SOTA高出4.2个百分点。 Introduction 半结构化表格的问答任务通常被视为语义解析任务,其中问题被翻译成逻辑形式,可以在表格上执行以检索正确的表达结果。语义解析器依赖于将自然语言问题与逻辑形式配对的监督训练数据,但是标注这些数据非常昂贵。 近年来,有许多旨在减轻语义解析的数据采集负担的尝试,包括paraphrasing, human in the loop, training on examples from other domains. 一种重要的数据采集方法关注弱监督,即训练示例由问题及其表达结果组成,而不是完整的逻辑形式。尽管这种方式很引人注目,但由于大量虚假的逻辑形式和稀疏奖励,从这个输入训练语义解析器通常很困难。 此外,语义解析应用程序只利用生成的逻辑形式作为检索答案的中间步骤。然而,生成逻辑形式会带来一些困难,如保持具有足够表现力的逻辑形式、遵守解码约束(例如良好的形式)和标签偏差问题。 在本文中,我们提出了TAPAS(用于表解析器),这是一个弱监督的问答模型,它在不生成逻辑形式的情况下对表进行推理。TAPAS是通过选择表单元格的子集以及在它们之上执行某些聚合操作来预测的最小程序。因此,TAPAS可以从自然语言中学习操作,而不需要在某种格式中指定它们。这是通过扩展BERT的体系结构(Devlin等人,2019年)来实现的,在该体系结构中增加爱了捕获表格结构的embedding,以及用于选择单元格和预测相应聚合运算符的两个分类层。 重要的是,我们为TAPAS引入了一种预训练方法,这对它在最终任务中的成功至关重要。我们将BERT的掩蔽语言模型目标扩展到结构化数据,使用从维基百科抓取的上百万表格和相关文本片段进行模型预训练。在预训练期间,模型从文本段和表格本身mask一些token,目标是基于文本和表格上下文预测原始mask token。 最后,我们提出了一个端到端的可微训练配方,允许TAPAS从弱监督中训练。对于只涉及选择表中单元格子集的示例,我们直接训练模型选择黄金子集。对于涉及聚集的示例,无法从表达结果中获取相关的单元格和相应的聚集操作。在这种情况下,我们在给定的当前模型上计算所有聚集算子的 expected soft scalar outcome,并用针对gold denotation的回归损失来训练模型。 在不生成逻辑形式的情况下,与之前算法进行表格推理比较,TAPAS达到了最高的准确率,并有几个优势:它的架构更简单,因为它包括一个没有自回归解码的单一编码器,更适合预训练,能处理更多的问题类型,如涉及聚合的问题,并能直接处理对话场景。 我们发现,在三个不同的语义解析数据集上,与其他语义解析和问答模型相比,TAPAS的性能更好或相当。在对话SQA上,TAPAS将最先进的准确率从55.1提高到67.2,并在WIKISQL和WIKITQ上实现了同等的性能。迁移学习在TAPAS中很简单,从WIKISQL到WIKITQ的准确率达到48.7,比SOTA高4.2分。代码和预训练模型开源。 TAPAS Model 我们的模型架构基于BERT的编码器(如图1),带有用于编码表格结构的额外位置嵌入(如图2所示)。我们将表格展平为words序列,将words拆分为word的token组成tokens,并将问题tokens加在表格tokens之前。我们另外添加了两个分类层,用于选择单元格和选择对单元格进行操作的聚合运算符。 Additional embeddings 我们在问题和表之间添加分隔token,并在送入模型前与表位置感知token组合,这与Hwang et al. (2019) 不同。我们使用不同类型的位置嵌入: Position ID 表格展平后的顺序标记 Segment ID 有两个值,0表示问题,1表示表头和单元格 Column / Row ID 在问题中为0,在表格中是表示token所在行、列 Rank ID 如果列值可以被解析为浮点数或日期,我们会对它们进行相应的排序,并根据它们的数字排名分配嵌入(0代表不可比,1代表最小的项目,i+1代表排名为i的项目)。这可以在涉及最高级的问题时帮助模型,因为单词块不能表示数字排序 Previous Answer 给定当前问题可能涉及前一个问题或其答案的对话设置(如图3中的问题5),我们添加了一个特殊的嵌入,标记单元格令牌是否是前一个问题的答案(如果token内容是答案,则为1,否则为0)。 Cell selection 分类层选择表格子集,根据所选聚类操作符,这些单元格可以是最终答案,也可以是用于计算最终答案的输入。单元格被建模为独立的伯努利变量。首先,我们在token的最终隐向量上加线性层计算logit,然后将一个单元格中的所有logit求平均作为单元格的logit。该层的输出p(c)s是选择单元格c的概率。另外我们发现增加归纳偏置在单列中选择单元格式有效果的,我们通过引入一个分类变量来选择正确的列来实现这一点。列中所有单元格的embedding 平均后通过新线性层来计算列的logit。我们添加一个额外的列logit,对应于不选择列或单元格,我们将其视为没有单元格的额外列。该层的输出p(co)coll是使用softmax在列logits上计算选择列co的概率,我们将选定列之外的单元格概率p(c)s设置为0。 Aggregation operator prediction 语义解析任务需要对表进行离散推理,例如求和数字或计数单元格。为了在不产生逻辑形式的情况下处理这些情况,TAPAS输出表单元格的子集以及可选的聚合运算符。聚合运算符描述了应用于所选单元格的操作,例如SUM、COUNT、AVERAGE或NONE。运算符由第一个token(特殊的[cls] token)的最终隐向量,经过线性层+softmax后选择,记为pa(op),其中op是聚合运算符。 Inference 我们预测最有可能的聚合运算符以及使用单元格选择层选择最有可能的单元格子集。为了预测离散单元格选择,我们选择其概率大于0.5的所有表单元格。然后对表执行这些预测,通过在选定单元格上应用预测的聚合运算符来检索答案。 Pre-training 随着最近针对自然语言理解任务的文本数据预训练模型的成功,我们希望将这一过程扩展到结构化数据,作为我们表解析任务的初始化。为此,我们在维基百科的大量表上预训练TAPAS。这允许模型学习文本和表之间以及列的单元格和它们的标题之间的许多有趣的相关性。 我们通过从维基百科中提取文本-表格对来创建预训练输入。我们提取了6.2M表格:Infobox类型的3.3M,WikiTable类型的2.9M。我们限制表格最多有500个单元格。我们实验中的所有任务数据集都是只带有列名作为标题行的水平表。因此,我们在维基表中只使用<th>标签来识别和提取标题。此外,我们将Infobox转置为具有单个标题和单个数据行的表。从Infobox创建的表可以说不是非常典型,但我们发现它们提高最终任务的性能。 作为最终任务中问题的替代,我们提取表格标题、文章标题、文章描述、片段标题和表格所在片段的文本作为相关文本片段。这样我们提取21.3M片段。 我们将提取的文本表对转换为预训练示例,如下所示:遵循Devlin et al. (2019),我们使用掩蔽语言模型预训练目标。我们还尝试添加第二个目标,即预测表是属于文本还是随机表,但发现这不能提高最终任务的性能。 为了提高预训练的效率,我们将单词片段序列长度限制在一定的范围内(例如,我们在最终实验中使用128个)。也就是说,标记化文本和表格单元格的组合长度必须适配这个范围。为了实现这一点,我们从相关文本中随机选择8到16个单词片段。为了适合表格,我们从只添加每个列名和单元格的第一个单词开始,然后我们依次添加单词,直到我们达到单词片上限。对于每个表,我们以这种方式生成10个不同的片段。 我们遵循BERT引入的掩蔽过程。我们对文本使用整个单词掩蔽,我们发现对表格应用整个单元格掩蔽(如果单元格的任何部分被掩蔽,则掩蔽单元格的所有单词片段)也是有益的。 我们还尝试了数据增强,这与预训练有着相似的目标。我们通过语法在真实表格上生成合成的问题和结果表达对,并将这种增强应用到最终任务的训练数据中。由于这并没有显著提高最终任务的性能,我们忽略了这些结果。 Fine-tuning 在如下所示的弱监督设置中,我们正式定义了表格解析。给定含有N个例子的训练集{(xi, Ti, yi)}N i=1 ,x是语句,T是表格,y是相应结果表达,我们的目标是训练一个将语句x映射到程序z的模型,这样z在表格T上执行时,会产生正确的结果表达y。程序z包括表格单元格子集和可选的聚合运算符。 作为第5.1节中描述的预处理步骤,我们将每个示例的结果表达y转换为元组(C, s),C是单元格坐标,s是仅当y是单个标量时才填充的标量。然后,我们根据(C, s)的内容指导训练。对于单元格选择示例(即s为空),我们训练模型选择C中的单元格。对于标量答案示例(即C为空),我们训练模型来预测数量指向s的表单元格聚合运算。 Cell selection 用图3中的问题1举例,在这种情况下,y映射到表单元格坐标C的子集。对于这种类型的示例,我们使用分层模型,首先选择一列,然后只选择该列中的单元格。我们直接训练模型选择C中单元格数量最多的列col。对于我们的数据集,单元格C包含在单个列中,因此对模型的这种限制提供了有用的归纳偏差。如果C是空的,我们选择额外的空列对应需选择空单元格。然后训练模型选择单元格C∩col,而不选择(T\C)∩ col。损失由三个部分组成: Scalar answer 用图3中的问题2举例,在这种情况下,y是一个没有出现在表中的单个标量,即C=∅。这通常对应于涉及一个或多个表单元格的聚合的示例。在这项工作中,我们处理对应于SQL的聚合运算符,即COUNT、AVERAGE和SUM,但是我们的模型并不局限于这些。...