BINDING LANGUAGE MODELS IN SYMBOLIC LANGUAGES论文阅读

终于保研结束啦!!928之后先划水了一周,然后老师就布置任务了,于是就对这一篇免训练的神经符号框架论文进行阅读,论文的一个背景是越来越多的端到端的模型在QA以及其他自然语言处理领域的任务上取得了良好的效果,但是它们具有缺乏可解释性的缺点,本文将符号方法绑定到语言模型中,增强了模型的可解释性,另外现有的一些模型在特定领域需要进行模型微调,本文提出的框架具有免训练的特点,只需要一些精心挑选的prompt和API调用就可以达到SOTA效果。

摘要

  1. 端到端的神经方法最近在性能和易用性方面在NLP任务中占主导地位,但它们缺乏可解释性和稳健性
  2. 本文提出BINDER,一个免训练的神经符号框架,它将任务输入映射到程序中
    • 采用GPT-3 Codex作为语言模型
    • 解析阶段,只需几个上下文示例,Codex就能识别出任务输入中无法由原始编程语言回答的部分,正确地生成API调用以促使Codex解决无法回答的部分,并在于原始语法兼容的情况下确定API调用的位置
    • 执行阶段,鉴于API调用中的适当提示,Codex可以执行多种功能(如常识性的QA、信息提取)

介绍

  1. 自然语言处理任务的性能由直接将输入映射到输出的神经端到端系统主导
    • 优点:灵活且易于使用
    • 缺点:缺乏可解释性和稳健性
  2. 端到端的方法与产生明确的中间表征(如逻辑形式、推理路径或程序代码)的符号方法形成对比
    • 优点:这些符号方法产生的中间形式是可解释的,由此产生的执行结果使它们对输入的变化更加稳健
    • 缺点:语义覆盖面受到所选符号语言的语法承受力的限制
  3. 一些工作已经提出将神经模块和符号语言结合起来,以利用两种方法的优势
    • 缺点:在不同的任务和领域中,需要定制不同的符号语言和神经模块,并且需要各种大量的训练数据,以确保所有模块都得到良好的训练
  4. 提出BINDER,一个免训练的神经符号框架,它将任务输入映射到编程语言中的可执行程序,并绑定了一个统一的API来调用语言模型来执行多功能
    • 首先,将输入问题通过Codex解析为BINDER程序,其中Codex需要决定以下三点:
      • 输入中的哪些部分可以转换为目标编程语言
      • 相应的任务API调用(可以理解为prompt
      • BINDER程序中插入API调用的位置
    • 接下来,Codex生成任务API调用的答案,将生成的结果整合回编程语言,并执行生成的编程语言表达式以得到最终答案

方法

BINDER框架

  1. 概述:解决NLP任务的BINDER框架定义如下:给定自然语言输入\(Q\)和可选上下文\(D\)(如段落、表格、图像或上述组合)作为输入,生成可执行的BINDER程序\(Z\),最后,输出答案\(A\)是通过使用BINDER解释器执行\(Z\)得到的

  2. BINDER解析:在解析阶段,输入的自然语言\(Q\)被解析为BINDER程序\(Z\)BINDER程序是一种符号语言的表达,在核心符号语言无法提供所需功能的情况下,可以选择API调用

    • 将程序中的API调用定义为方法\(f(\hat{Q};\hat{D})\),其中\(\hat{Q}\)是等待回答的问题,可以查询的上下文为\(\hat{D}\),这里\(\hat{Q}\)\(Q\)中不能仅仅运用程序语言回答的部分,\(\hat{D}\)\({D}\)中和\(\hat{Q}\)有关的上下文

      这里文中举出了一个例子:

      Which is the best-selling shirt made in North America and with no chemicals?

      其中的North America\(\hat{Q}\),Made_in列是对应的上下文

      \(f(\hat{Q};\hat{D})\)API调用的输出是\(\hat{Q}\)查询的答案,它被表示为与符号语言语法兼容的变量,以便程序可以被执行

  3. BINDER执行:在执行阶段,程序\(Z\)BINDER解释器执行得到答案a,BINDER解释器由一个标准符号语言解释器和实现API调用的模型组成,执行阶段包括词法分析、语法分析和程序评估,

    • 词法和语法分析中,\(f(\hat{Q};\hat{D})\)被添加为语法中的一个新标识符,程序被解析为基于该扩展语法的抽象语法树
    • 程序评估中,API调用是通过调用底层神经模型来评估的,API调用输出被保存为与标准符号语言兼容的变量,因此程序最终可以由一个现成的符号语言解释器执行,从而获得输出

BINDER的上下文学习

  1. 在解析阶段,由于插入了API调用,BINDER程序的语法与原始编程语言的语法不同,这里利用Codex的少样本泛化能力,发现它只需要少量的上下文示例就可以有效地学习修改后的语法
  2. 在执行阶段,Codex作为底层的LM,通过连接API调用的输入,\(\hat{Q}\)\(\hat{D}\)作为语言模型的提示,给API调用提供输出,而程序的其余部分则由编程语言解释器执行
  3. BINDER的上下文学习遵循下面这个过程:
    • 输入由\(k\)个上下文示例和推理问题组成
    • 输出是\(n\)个候选的BINDER程序,由BINDER解释器运行得到\(n\)个答案,根据多数投票策略选出正确答案

BINDER实现

  1. 实现了两个API
    • \(f_{col}(\hat{Q};\hat{D})\):将已知的列(上下文)映射到一个新的列
    • \(f_{val}(\hat{Q};\hat{D})\):将已知的列(上下文)映射到一个新的值

实验

实验设置

  1. 数据集

    • WIKITQ
    • TABFACT
  2. 评价指标:评价指标是WIKITQTABFACT的执行精度(EA)。在实际情况中,程序的执行结果往往在语义上是正确的,但是不能匹配黄金答案,因此,文章在WIKITQ中为这些语义上正确的情况添加了一个预匹配检查,主要包括以下两种情况

    • A或B的选择问题:1代表yes,0代表no
    • 带单位的数字问题:去掉单位也是匹配的
  3. 基线模型:除了一些传统的强有力的模型,为了进一步证明BINDER的有效性,还使用附加的推理模型来评估Codex,包括:

    • Codex end-to-end QA:端到端QA,即根据输入问题和表直接输出答案
    • Codex SQL:使用标准SQL语言进行语义解析(同样的,先调用Codex生成中间SQL,再调用Codex生成答案)
  4. 实现细节

    • 使用OpenAI中提供的Codex模型接口,作为生成程序的解析器和每个程序执行过程中API调用的基础模型

    • 为了生成正确的BINDER程序,为每个数据集注释了14个上下文示例,每个上下文示例提示主要遵循表结构、前三行表、问题和对应的BINDER程序的格式,如下所示

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      CREATE TABLE Fabrice Santoro(
      row_id int,
      name text,
      2001 text,
      2002 text,
      2003 text,
      2004 text,
      2005 text,
      2006 text,
      2007 text,
      2008 text,
      2009 text,
      2010 text,
      career\nsr text,
      career\nwin-loss text)
      /*
      3 example rows:
      SELECT * FROM w LIMIT 3;
      row_id name 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 career\nsr career\nwin-loss
      0 australian open 2r 1r 3r 2r 1r qf 3r 2r 3r 1r 0 / 18 22–18
      1 french open 4r 2r 2r 3r 1r 1r 1r 2r 1r a 0 / 20 17–20
      2 wimbledon 3r 2r 2r 2r 2r 2r 2r 1r 2r a 0 / 14 11–14
      */
      Q: did he win more at the australian open or indian wells?
      NeuralSQL: SELECT name FROM w WHERE name IN ('australian open', 'indian wells') ORDER BY QA("map@how many wins?"; `career\nwin-loss`) DESC LIMIT 1

主要结果

  1. WIKITQ
    • SOTA
    • Codex BINDER比使用标准SQL在测试集上的执行精度提高,说明BINDER确实缓解了原始语言的覆盖限制
    • Codex BINDERCodex SQL都比端到端QA具有显著优势,说明在结构化知识基础和与代码相关的任务中,使用Codex进行语义解析(先生成代码)是更好的默认选择
  2. TABFACT
    • SOTA
    • 需要注意的是,符号方法在二元分类问题上通常落后于端到端的方法,因为答案空间很小,但是文章的方法取得了最先进的结果
    • 然而,用于上下文学习的有效样本选择仍然是一个挑战

分析

消融分析

  1. 将问题分为两种,一种是程序(SQL)可以解决的问题,一种是程序无法解决的问题,Codex BINDER在程序无法解决的问题上明显优于Codex SQL,说明其语义覆盖范围更广
  2. BINDER的假象率更低(没有意外得出正确答案)
  3. BINDER在程序可解性方面也取得了比SQL更高的分数

可解释性

  1. 显式程序可以帮助人工调试和错误分析,增加了可解释性

鲁棒性

可伸缩性
  1. 端到端QA在预测答案时由于需要整个表作为输入,所以当知识源很大时不能很好地适应,而BINDER的输入只有三条表行,所以当知识源很大时能更好地适应
噪声内容
  1. 端到端的方法对噪声输入比较脆弱,特别是当存在与问题相关内容相似的干扰物时,文章构建了一个具有干扰物的数据集并进行实验,发现BINDER比端到端QA更稳定
使用PythonBINDER
  1. 文章设计的BINDER很容易扩展到各种编程语言
多模态应用
  1. 文章在多模态数据集上应用BINDER,跨越文本、表格和图像,为了将图像输入到LM程序生成中,事先用视觉—文本预训练模型OFA将图像转换成文本图像说明,文章的工作是第一个证明跨文本、表格和图像的多模态QA可以用可解释和可执行的程序来处理,并且取得了和最先进的模型相媲美的性能

相关工作

  1. 语义解析:语义解析能够在给定自然语言输入的情况下产生可执行的程序,生成协助解决问题的中间结构,并比后来直接生成解决方案的神经方法提高可解释性,然而,语义解析方法受限于其语法覆盖范围,无法解决需要外部知识或功能的问题

  2. 神经—符号方法:一些工作将神经模块与符号语言整合起来,以获得两种方法的优势,即良好的性能和可解释性,然而,这些方法往往需要精心设计用于相应任务的函数和校准相应的神经模块,这需要复杂的训练步骤和大量的训练数据来解决特定领域的问题

  3. 与这些方法相比,BINDER具有很强的表现力和灵活性,能够处理现实世界中的各种问题,因为它能够通过适当的API调用来增强其功能。此外,BINDER不需要训练,只需要几十个基于特定符号语言的注释就可以完成一个特定领域的任务,同时保持:出色的性能、对输入的扩展能力、可解释性和对嘈杂内容的稳健性

总结

  1. 文章提出了BINDER,一个免训练的神经符号框架,它将任务输入映射到一个程序中,允许绑定一个统一的LM API来实现额外的功能
  2. BINDER旨在结合端到端方法(高覆盖率)和符号方法(高可解释性)的优势
  3. BINDER使用Codex作为LM,在选定的数据集上达到了最先进的性能
  4. 文章还对BINDER进行了一系列的分析,分解了性能提升,检查了对大的或嘈杂的输入的鲁棒性,将其应用于多模态知识源,并将其扩展到Python语言