我来说话你来查,智能代码新技术!语义解析专场干货

语义解析是自然语言处理的重要研究领域,旨在将自然语言转化为可执行的编程语言,如SQL。本文探讨了语义解析的几个关键方向,包括Text-to-SQL、代码生成、代码检索和对话系统,以及相关的新技术和挑战。嘉宾们分享了Spider、DuSQL等数据集,以及预训练模型如TaBERT、GraPPa和TAPEX在增强模型性能方面的作用。此外,还讨论了交互式语义解析,通过用户反馈和编辑来提高系统理解力。
摘要由CSDN通过智能技术生成

点击蓝字

7503253651a23c8ef45e8132f152770d.png

关注我们

AI TIME欢迎每一位AI爱好者的加入!

一直以来是,语义解析(Semantic Parsing) 都是自然语言处理领域一个非常基础且重要的研究问题。通俗来讲,语义解析旨在让计算机学会理解自然语言,并将其翻译成机器可执行的、形式化的编程语言(比如 SQL语句) 。这样一来,用户无需学习编程,通过描述就可以驱动系统生成代码。鉴于语义解析潜在的商业应用价值,近些年来以Text-to-SQL为代表的语义解析领域引起了很多国内外研究者的研究兴趣。

739eb0baade1f1e995c325ff43e12e91.png

7月31日,PhD Debate第五期“语义解析漫谈:机会与挑战”,AI TIME特别邀请了来自卡内基梅隆大学的殷鹏程学长俄亥俄州立大学的姚子瑜学姐爱丁堡大学的王柏林学长,并由北京航空航天大学的刘乾AI Timer张亚娴主持,共话语义解析方向的机会与挑战。话不多说,下面就让我们来看看嘉宾们具体讨论了哪些话题吧!

 语义解析领域近年来受关注的具体方向和任务

计算机自然语言接口 Natural Language Interface

# SQL Generation (Text-to-SQL)

王柏林: 语义解析最常见的一个应用场景就是数据库的自然语言接口(Natural Language Interface for Database, 又名 NLIDB)。一个主要的原因是数据库我们平时应用比较多,许多应用都是通过数据库来存储数据的,而用户和开发者也都需要与数据库的频繁交互来查询数据。在这个方向上,最近受大家关注度比较多的就是 Spider这个数据集 [1]。它的创建过程是这样的:首先收集一些数据库,每个数据库里可能包含很多表格,比如下图中的 instructor 和 department。

8f99b791f14e66f201ba8afa0125725e.png

 标注者被要求想出一个复杂的问句,同时要标注出跟这个问句对应的SQL语句,如下图所示:

c6147afc6dacf9fff538043a2e7a6293.png

当这个数据集创建完成后,我们就可以构建一个系统从这个数据集中学会将人类的自然语言翻译成SQL语句,进而实现用户通过自然语言查询数据库的需求。

刘乾:Spider是一个英文的数据集,中文领域与Spider相对应的是百度NLP团队发表在EMNLP2020上的数据集 DuSQL [2],它的一个例子如下图所示。

9eeb91178f11daf58173d552a9bf22ea.png

DuSQL与Spider一样,生成的SQL都需要在多张表格上进行连表查询,问句也比较复杂。除了中文和英文的区别外,DuSQL相比Spider还额外考虑了用户场景的区别,继而在标注数据时考虑到不同场景的用户的问句涉及到SQL语句的分布情况。例如说,信息检索场景的用户一般不涉及SQL里的计算(Calculation)操作,因为他们提问主要是想得到一个通过检索可得到的事实性答案,但它对于数据分析场景的用户来说却是很常见的。从这个角度来说,DuSQL带给我们的启示是: 在收集语义解析的数据前我们就要考虑好面向用户的场景。场景的不同也会决定数据集的侧重有所不同。

# Code Generation

殷鹏程: 刚刚两位讲到了如何将自然语言转换成SQL语句这种领域相关的代码(Domain-Specific Language, DSL),其实语义解析还可以用在更广泛的范畴,比如说通用的代码生成(Code)。在代码生成领域,第一项工作是由DeepMind于2016年发布的HeartStone数据集[3]。在这个数据集的设定下,系统所接受的自然语言的输入并不是一个用户提交的问题,而是一组关于炉石传说卡牌的描述,系统的目标就是生成一串能够实现这个卡牌的代码。一个包含输入、输出的示例如下图:

490c8f7cc309c95f487523569ca5a103.png

 相比于前面所讲到的SQL Generation,Code Generation的难点在于输出是更加复杂和多样的。比如这里系统要生成Python一个类的名字和成员函数。

其实呢,除了炉石传说这种特定领域下的代码生成,我们还可以考虑开放领域下的代码生成。下图是CoNaLa数据集,是由我们团队在2018年构建的[4],它的目标是能够自动化地把一个程序员的自然语言问题变成相应的Python代码实现。这个数据集是源自一些知名的编程问答平台(如StackoverFlow)上网友提问的问题,和其他网友贡献的一些Python实现。但是,想从这样的平台上自动抽取干净的平行语料还是比较困难的,我们团队当时构建了一个模型来自动地抽取这样的数据对。有了这些数据对后,我们邀请一些程序员对这些数据对进行进一步的过滤和修正,最终就可以得到CoNaLa这个数据集。

66cdf6374a50d57257c248b0a74c982b.png

除了这种简短的代码外,近些年也有如Github Copilot 这样的能够生成较为复杂程序的技术。Copilot背后的技术就是OpenAI最近提出的CodeX [5],一个基于代码的预训练模型。CodeX系统的输入是一段提示(Prompt),比方说下图中的提示输入到CodeX中,它可以生成一个判断输入数字是否为质数的Python程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值