对话形式的Text-to-SQL旨在将多轮次自然语言查询转换为相应的SQL表示。多轮Text-to-SQL中最棘手的问题之一是对多轮次查询的语义建模和收集当前SQL查询所需的适当信息。本文表明,通过增加每个轮次的语义变化和对整个上下文的总结来显式建模,可以提高多轮Text-to-SQL任务上的性能。特别地,我们在轮次和对话粒度上提出了对话建模任务。这两个任务只是辅助训练任务,以帮助进行多轮次对话语义分析。我们进行了实证研究,并在大规模开放领域的Text-to-SQL数据集上取得了最新的结果。结果表明,该机制显著提高了多轮次语义分析的性能。
conversational text-to-sql, human-computer interaction, computational paralinguistics
语义解析是将自然语言查询映射为相应的机器可执行逻辑形式的任务。Text-to-SQL作为语义解析最流行的分支之一,减轻了实际用户学习查询背后技术的负担,在自然语言处理领域引起了大量的关注。现有的工作主要集中在将单个语句转换为SQL查询。然而,在实际场景中,用户倾向于通过对话与系统交互来获取信息,在这种情况下,应该考虑对话上下文。为了解决用户的这一需求,越来越多的关注从单轮次Text-to-SQL转向多轮次Text-to-SQL任务。
多轮Text-to-SQL是标准Text-to-SQL任务的扩展,它将自然语言查询从单轮次设置到多轮次设置的限制解放出来。最近的研究表明,多轮任务比单轮任务的难度要高得多,特别是在建模多轮次自然语言查询方面。图1显示了多轮对话语义解析的示例。在这段对话中出现了三句话。第二个查询是根据第一个查询查询的,第二个查询的SQL是对第一个查询的修改,添加了一个额外的限制。第三个查询基于第二个查询更改所选的列,结果是修改SQL中所选的列。
从示例中可以看出,为了更好地理解上下文查询并生成相应的SQL,通过添加每个单独的轮次对语义更改进行建模,以及将这些更改映射到SQL操作中是至关重要的。一方面,通过添加每个单一轮次对语义变化建模,有助于更好地理解对话期间的语义流,从而有助于更好地将它们总结成单个SQL。另一方面,为了生成正确的预测SQL,必须将这些语义变化与数据库schema关联起来。
基于这些观察结果,在本文中,我们提出RAT-SQL-TC,它使用两个辅助任务来帮助更好地建模多轮次会话上下文,并基于RAT-SQL生成正确的SQL表示。第一个任务是Turn Switch Prediction (TSP),它预测在对话进行过程中添加一个新的Turn时SQL将如何变化。第二个任务是Contextual Schema Prediction(CSP),它帮助将上下文更改映射到数据库schema操作。CSP需要话语编码器模型来预测对话的当前轮次时每一个数据库列的用法变化。CSP还增强了编码器模型,以便更好地理解数据库模式。这两个任务作为多任务学习的辅助任务,与SQL生成任务一起训练。我们提出的两个任务分别从自然语言理解和数据库模式感知的角度进行工作,以增强对对话上下文的理解,并进一步促进Text-to-SQL的生成。
我们在一个流行的大规模跨域多轮Text-to-SQL基准(即SParC)上评估了我们提出的方法。通过添加我们的机制,QM和IM与baseline相比都得到了显著提高。在本文书写时,我们实现了新的SOTA表现。
我们提出的机制在以下几个方面具有优势。
语义分析已经被研究了很长一段时间。以前的语义分析器通常是基于专家设计的规则或统计技术。近年来,神经网络语义解析器开始崭露头角。神经语义解析器通常将语义解析视为一项seq2seq任务,采用编码器-解码器框架进行求解。
Text-to-SQL在所有语义解析任务中占据了很大的份额。以前的Text-to-SQL任务主要集中于相对简单的域内Text-to-SQL任务,最先进的模型在此场景中显示了良好的性能。最近,一个跨域的多表Text-to-SQL数据集Spider被提出。与域内的text-toSQL相比,跨域的多表text-to-SQL模型对自然语言和数据库模式理解的泛化能力要求更高。为了更好地解决这一问题,除了纯序列到序列的方法外,还提出了一种新的框架-优化范式,并得到了广泛应用。这个范例首先生成一个SQL框架,然后用数据库schema token填充这个框架。属于该范例的模型包括SQLNet、TypeSQL、SQLova、Coarse2Fine、XSQL、HydraNet等。此外,还提出了一些增强Text-to-SQL解析器的策略,包括中间表示增强、通过GNN模型进行推理和数据增强。
与单轮Text-to-SQL相比,多轮对话Text-to-SQL需要语义解析器来理解对话的上下文,从而做出正确的SQL预测。最近,两个大型的Text-to-SQL会话的跨域基准数据集(即SParC和CoSQL)发布,人们基于这两个基准进行了多项研究。EditSQL以上一轮次的预测SQL和当前回合的自然语言语句作为输入,根据当前回合编辑前一回合的SQL,生成新的预测SQL。当用户提出一个与对话上下文关系不太密切的新问题时,这种方法往往会失败。IGSQL通过在数据库模式和查询轮之间构建图来对会话期间的上下文一致性建模来解决这个问题。IST-SQL借鉴了对话状态跟踪的思想,将列视为槽,值就是它们的一些使用方式。存储这些槽值对来表示对话状态。R2SQL引入了一个动态模式链接图网络和几个动态内存衰减机制来跟踪对话状态,并使用一个重排序来过滤掉一些容易检测到的错误预测SQL。Yu等人提出了一种用于多轮对话Text-to-SQL的语言模型预训练方法SCORE,并在两个数据集上实现了最好的结果。但该方法需要大量的合成对话语义解析数据,且训练成本较高。
多轮对话的Text-to-SQL任务概括如下:在已知数据库schema S = [ s 1 , s 2 , ⋯ , s m ] S = \left[s_{1}, s_{2}, \cdots, s_{m}\right] S=[s1,s2,⋯,sm]的前提下,将多轮的自然语言问句 u = [ u 1 , u 2 , ⋯ , u T ] u=\left[u_{1}, u_{2}, \cdots, u_{T}\right] u=[u1,u2,⋯,uT]转换为对应的SQL语句 y = [ y 1 , y 2 , ⋯ , y T ] y=\left[y_{1}, y_{2}, \cdots, y_{T}\right] y=[y1,y2,⋯,yT]。神经语义解析器的目标是最大化预测正确SQL y t y_t yt的概率,即给出第 t t t轮次之前的所有用户问句,希望模型能够
与单轮语义解析不同,解析 y t y_t yt时,所有第 t t t个轮次之前的问句都应该被考虑。
在本文中,我们提出了用于会话文本sql的RAT-SQL-TC,它为广泛应用的RAT-SQL增加了两个辅助任务。在下面的部分中,我们将介绍我们提出的模型的框架和两个任务。
RAT-SQL是近年来最先进的神经语义解析器之一。RAT-SQL是一个统一的框架,它编码数据库模式和Question中的关系结构。我们将RAT-SQL作为构建模型的基础。具体地说,我们使用一个基于关系感知转换器的编码器模型将自然语言查询编码为向量,并使用一个解码器模型将编码后的向量解码为抽象语法树(AST),后者可以进一步转换为SQL。
记 u = [ u 1 , u 2 , ⋯ , u T ] u=\left[u_{1}, u_{2}, \cdots, u_{T}\right] u=[u1,u2,⋯,uT]是T轮次的所有的问题序列,其中 u i = [ u i 1 , u i 2 , ⋯ , u i ∣ u i ∣ ] u_{i}=\left[u_{i}^{1}, u_{i}^{2}, \cdots, u_{i}^{\left|u_{i}\right|}\right] ui=[ui1,ui2,⋯,ui∣ui∣]。记数据库schema S = [ s 1 , s 2 , ⋯ , s m ] S = \left[s_{1}, s_{2}, \cdots, s_{m}\right] S=[s1,s2,⋯,sm]。我们可以通过连接每个轮次和每个列名来获得编码器模型的输入。具体来说,我们用一个特殊标记 < s > <s>连接查询的轮,以指示每个轮的边界,每个列名与另一个特殊标记 < / s > </s>连接。然后将Question和数据库schema的组合输入编码器,如图2所示。该输入序列由类似于RAT-SQL的基于Transformer的编码器模型进行处理,生成一组与输入序列长度相同的编码器向量。我们遵循RAT-SQL的AST解码范式,使用一个解码器根据这些向量生成预测SQL,loss定义为:
其中 y = [ y 1 , ⋯ , y ∣ Y ∣ ] y=\left[y_{1}, \cdots, y_{|Y|}\right] y=[y1,⋯,y∣Y∣]为ground truth的AST序列标签。
除了对SQL AST进行解码外,我们还增加了两个辅助任务,以帮助模型更好地建模对话过程中的上下文信息以及与数据库模式的关系。第一个是TSP (Turn Switch Prediction)任务,它要求编码器模型通过添加每一轮次的Question来判断语义的变化。第二个是CSP(Contextual Schema Prediction)任务,它强制模型将那些语义变化映射到数据库模式。根据编码向量计算这两个辅助任务的loss,并与SQL解码的loss同时优化。
Turn Switch Prediction (TSP)任务旨在增强编码器模型,理解每对相邻查询之间的会话流。这个任务需要编码器模型预测是否通过添加新的语句来对SQL进行某种类型的修改。总共定义 N T = 17 N_T = 17 NT=17种类型的操作,例如,改变选择的聚合操作(SELECT sales --> SELECT count(sales))和在条件子句中添加新的条件(None–> WHERE sales > 100)。对于每种类型的操作,我们对是否进行了这样的更改进行了二分类。
设 t i t_i ti表示第i轮的特殊标记 < s > <s>的编码向量。我们同时使用 t i t_i ti和 t i − 1 t_{i-1} ti−1来预测是否进行了某种类型的修改。而TSP loss是每个相邻轮次之间所有修改类型loss的总和。
s i s_i si是 t i t_i ti和 t i − 1 t_{i-1} ti−1的混合特征。 W T S P j W_{TSP}^j WTSPj是用来预测第j种类型的修改是否做了的参数矩阵。 y ^ i j ∈ ( 0 , 1 ) \hat{y}_{i}^{j} \in(0,1) y^ij∈(0,1)是第i轮时是否进行第j个操作时的ground truth标签, p i j p^j_i pij是进行该操作的预测概率。计算时设 t 0 t_0 t0为零向量。采用 N T N_T NT个二分类,而不是单一的多分类,因为通过增加一个新轮次,可以同时进行多种类型的修改。
上下文模式预测(Contextual Schema Prediction, CSP)任务旨在帮助编码器模型将每个修改操作映射到数据库中的具体列上。因此,我们使用schema token的表示来进行预测。
我们还使用特殊标记 < / s > </s>的编码向量作为数据库模式中的列的表示,并使用列表示来预测对其进行哪种更改。定义了共 N C = 11 N_C = 11 NC=11类型的修改,包括adding to select, deleting from where, changing of distinct 等。由于与TSP任务相同的原因,在SQL的不同子句中,一个列可以有多个修改,所以我们也使用 N C N_C NC个二分类作为本次任务的目标。记 [ c 1 , c 2 , ⋯ , c m ] \left[c_{1}, c_{2}, \cdots, c_{m}\right] [c1,c2,⋯,cm]为M个column在Encoder后的输出向量,CSP可以这样计算loss:
其中, W C S P j W_{CSP}^j WCSPj是用来预测第j种类型的schema修改是否做了的参数矩阵。 y ˉ i j \bar{y}_{i}^{j} yˉij表示其ground truth标签,表示第j中类型的修改是否应用到了第i个schema column上。
注意,与TSP计算相邻轮次之间的语义变化不同,CSP只考虑后一轮的影响,而忽略前面轮次的影响。通过这种方式,CSP可以强制编码器模型更好地关注最后一轮的语义,进而增强Text-to-SQL解析器以生成正确的SQL。
Ttext-to-SQL解析器以多任务训练的方式进行训练,同时优化提出的三种损失。
α > 0 , β > 0 \alpha>0,\beta>0 α>0,β>0是两个控制TSP损失和CSP损失权重的超参数。在实践中,我们设置α = 0.5和β = 8来获得最佳结果。与预训练-微调范式相比,多任务训练在计算成本方面显著提高了效率。
在大规模跨域Text-to-SQL多轮对话数据集SparC上进行了实验。SparC是一个上下文相关的数据集,解析后面的SQL需要正确理解前面的步骤。训练集和验证集分别有2159和422个对话,平均轮次数为2.97和2.85个。可以提交在线评判,但测试集没有公开发布。
我们遵循与[40]中相同的超参数设置。选择QM(查询精确匹配)和IM(交互精确匹配)作为与我们的baseline方法遵循相同标准的度量。我们使用GAP模型实现RAT-SQL-TC。GAP是BERT的一个域适应版本,它以seq2seq的方式与单轮Text-to-SQL生成任务进行了调优,并且只保留了BERT编码器。
我们提出的RAT-SQL-TC (GAP)和几个baseline方法的性能如表1所示。
从表1可以看出,我们提出的RATSQL-TC (GAP)在QM和IM准确性方面显著优于所有baseline方法。需要说明的是,我们建议的RAT-SQL-TC (GAP)击败了目前最先进的RAT-SQL + Score方法,在开发集中的QM和IM准确性分别为1.6%,在测试集中分别为3.3%和5.1%。我们还在公共排行榜上获得了SOTA的结果。此外,与直接baseline方法RAT-SQL (GAP)相比,通过在多任务学习范式中添加TSP和CSP目标,在QM和IM方面的绝对收益分别为4.5%和3.5%。通过将TSP和CSP作为辅助任务与原来的SQL解码目标相结合,RAT-SQL模型被迫更好地理解当前转向增加的新语义,并将这种语义变化映射到与数据库相关的表示中,以便更好地生成SQL。
为了更好地理解我们提出的RAT-SQL-TC是如何工作的,我们在SparC开发集上使用RATSQL-TC (GAP)进行了消融研究和分析。
TSP和CSP都旨在更好地建模对话过程中的信息流,因此我们评估它们各自如何影响整体性能。我们删除了它们,并测试了模型的性能,其结果如表2所示。在没有TSP或CSP的情况下,QM和IM的性能都显著下降。需要特别说明的是,在没有TSP的情况下,IM和QM的绝对下降分别为4.5%和3.9%,这表明了显式建模上下文更改以跟踪会话过程中的信息流的有效性。有趣的是,IM的准确性甚至比纯RAT-SQL还要低,这表明过度关注列使用变化而不建模自然语言方面的语义变化甚至可能会损害性能。通过移除CSP, QM和IM都降低了3.1%,证明了使用数据库模式建模语义的适当机制对于做出正确的预测至关重要。TSP和CSP分别从自然语言理解和数据库模式感知方面增强语义解析器以生成正确的sql。虽然单独的每一个都不能带来精度度量的显著改进,但这两个目标的结合可以很好地实现更好的性能。
由于TC的两个任务旨在更好地建模对话中的上下文信息,我们评估TC在问题匹配准确性方面能带来多大的改进。表3显示了每个轮次的QM精度。RAT-SQL和RAT-SQL- TC在预测轮数较大表现都变差,这表明随着轮数的增加,要生成正确的预测就更难理解整个上下文。然而,与纯RAT-SQL相比,添加TC作为辅助任务可以显著提高在2.3轮次查询的QM精度。TC在自然语言和数据库的角度上都可以作为上下文建模策略,从而在使用长上下文信息建模查询时改进语义解析器。
在会话过程中对语义流进行建模以进行语义分析是多轮语义分析的一项艰巨任务。为了解决这一问题,本文提出了RAT-SQL-TC算法,该算法在语义解析器训练中增加了两个辅助任务(即TSP和CSP)。TSP和CSP分别从自然语言理解和数据库模式感知的角度对多回合会话进行建模,并将语义转换为SQL。我们在大规模的open-domain基准测试中展示了TC的高度有效性,并取得了最好的结果。