点击蓝字
关注我们
AI TIME欢迎每一位AI爱好者的加入!
一直以来是,语义解析(Semantic Parsing) 都是自然语言处理领域一个非常基础且重要的研究问题。通俗来讲,语义解析旨在让计算机学会理解自然语言,并将其翻译成机器可执行的、形式化的编程语言(比如 SQL语句) 。这样一来,用户无需学习编程,通过描述就可以驱动系统生成代码。鉴于语义解析潜在的商业应用价值,近些年来以Text-to-SQL为代表的语义解析领域引起了很多国内外研究者的研究兴趣。
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。
标注者被要求想出一个复杂的问句,同时要标注出跟这个问句对应的SQL语句,如下图所示:
当这个数据集创建完成后,我们就可以构建一个系统从这个数据集中学会将人类的自然语言翻译成SQL语句,进而实现用户通过自然语言查询数据库的需求。
刘乾:Spider是一个英文的数据集,中文领域与Spider相对应的是百度NLP团队发表在EMNLP2020上的数据集 DuSQL [2],它的一个例子如下图所示。
DuSQL与Spider一样,生成的SQL都需要在多张表格上进行连表查询,问句也比较复杂。除了中文和英文的区别外,DuSQL相比Spider还额外考虑了用户场景的区别,继而在标注数据时考虑到不同场景的用户的问句涉及到SQL语句的分布情况。例如说,信息检索场景的用户一般不涉及SQL里的计算(Calculation)操作,因为他们提问主要是想得到一个通过检索可得到的事实性答案,但它对于数据分析场景的用户来说却是很常见的。从这个角度来说,DuSQL带给我们的启示是: 在收集语义解析的数据前我们就要考虑好面向用户的场景。场景的不同也会决定数据集的侧重有所不同。
# Code Generation
殷鹏程: 刚刚两位讲到了如何将自然语言转换成SQL语句这种领域相关的代码(Domain-Specific Language, DSL),其实语义解析还可以用在更广泛的范畴,比如说通用的代码生成(Code)。在代码生成领域,第一项工作是由DeepMind于2016年发布的HeartStone数据集[3]。在这个数据集的设定下,系统所接受的自然语言的输入并不是一个用户提交的问题,而是一组关于炉石传说卡牌的描述,系统的目标就是生成一串能够实现这个卡牌的代码。一个包含输入、输出的示例如下图:
相比于前面所讲到的SQL Generation,Code Generation的难点在于输出是更加复杂和多样的。比如这里系统要生成Python一个类的名字和成员函数。
其实呢,除了炉石传说这种特定领域下的代码生成,我们还可以考虑开放领域下的代码生成。下图是CoNaLa数据集,是由我们团队在2018年构建的[4],它的目标是能够自动化地把一个程序员的自然语言问题变成相应的Python代码实现。这个数据集是源自一些知名的编程问答平台(如StackoverFlow)上网友提问的问题,和其他网友贡献的一些Python实现。但是,想从这样的平台上自动抽取干净的平行语料还是比较困难的,我们团队当时构建了一个模型来自动地抽取这样的数据对。有了这些数据对后,我们邀请一些程序员对这些数据对进行进一步的过滤和修正,最终就可以得到CoNaLa这个数据集。
除了这种简短的代码外,近些年也有如Github Copilot 这样的能够生成较为复杂程序的技术。Copilot背后的技术就是OpenAI最近提出的CodeX [5],一个基于代码的预训练模型。CodeX系统的输入是一段提示(Prompt),比方说下图中的提示输入到CodeX中,它可以生成一个判断输入数字是否为质数的Python程序。