使用自然语言写程序不行吗(使用自然语言进行程序合成)
使用自然语言写程序不行吗(使用自然语言进行程序合成)文本编辑(终端用户编程)我们描述了可以应用 NL-to-DSL 合成器的 3 个不同领域:文本编辑,面向智能辅导的问题自动构造和航空旅行信息系统的问答查询。与大多数现有的专门针对特定 DSL 的合成技术不同,我们的方法可以应用于各种 DSL。我们的方法需要来自合成程序设计者的两个输入:(i)DSL 定义,(ii)训练数据,包含英语语句和相应预期 DSL 程序的实例对。训练阶段推断英语单词和 DSL 终结符(以半自动交互方式)成对的字典关系,以及最佳权重/分类器(以完全自动化的方式),以供通用合成算法使用。我们的方法可以看作是构建 NL-to-DSL 合成器的元合成框架。通用合成算法(算法 1)将一个英语句子作为输入,并生成可能的程序的排名集。首先,它使用一个 Bag 算法(算法 2)来高效地计算所有包含与句子中单词相关的终结符的的 DSL 程序集。为此,它使用了将英文单词和 DSL 终结符
1. 引用
Desai A Gulwani S Hingorani V et al. Program synthesis using natural language[C].Proceedings of the 38th International Conference on Software Engineering. 2016: 345-356.
2. 摘要
与计算机进行交互是数百万人的普遍活动,重复的或特定的任务通常需要创建小的一次性的程序。终端用户努力学习并使用无数领域特定语言(DSL)来有效地完成这些任务。
我们提出了一个通用框架,用于构造采用自然语言(NL)输入并在目标 DSL 中生成表达式的程序合成器。该框架输入为 DSL 定义以及由 NL / DSL 对组成的训练数据。通过学习优化的权重和分类器(使用 NLP 特征)来构建一个合成器,对基于翻译的关键字编程的输出进行排名。我们将框架应用于三个领域:重复文本编辑,智能辅导系统和航班信息查询。在 1200 多个英语描述中,相应的合成器对于 80%和 90%的描述将所需的程序分别排为第 1 名和第 3 名。
3. 技术介绍
3.1 介绍
本文中,我们解决了从 NL 合成底层 DSL 程序的问题。NL 本质上是不精确的;因此,可能无法保证合成程序的正确性。相反,我们的目标是生成一组排序的程序,并让用户可以通过检查程序的源代码或在某些测试输入上执行该程序得到的结果来选择其中一个程序。这种用户交互类似于 Flash Fill 等一些 PBE 技术中采用的交互。读者也可以将此过程比作用户如何在搜索引擎中搜索和选择所需结果。此外,类似于搜索引擎,本文中的合成算法能够一致地生成和排序期望的结果程序,在我们的基准测试中,超过 80%的时间排在第一位,或者超过 90%的时间排在前三位。为了使用户对他们选择的程序有信心,我们将代码翻译显示为消除歧义的英语或运行它并将结果显示为预览。
与大多数现有的专门针对特定 DSL 的合成技术不同,我们的方法可以应用于各种 DSL。我们的方法需要来自合成程序设计者的两个输入:(i)DSL 定义,(ii)训练数据,包含英语语句和相应预期 DSL 程序的实例对。训练阶段推断英语单词和 DSL 终结符(以半自动交互方式)成对的字典关系,以及最佳权重/分类器(以完全自动化的方式),以供通用合成算法使用。我们的方法可以看作是构建 NL-to-DSL 合成器的元合成框架。
通用合成算法(算法 1)将一个英语句子作为输入,并生成可能的程序的排名集。首先,它使用一个 Bag 算法(算法 2)来高效地计算所有包含与句子中单词相关的终结符的的 DSL 程序集。为此,它使用了将英文单词和 DSL 终结符相关联的字典(在训练阶段学习到的)。然后,它基于一组评分函数对这些程序进行排名。这些功能的灵感来自于程序的抽象语法树(AST),它涉及两个组成部分:程序中的终结符集,以及这些终结符之间的树结构。我们使用 3 个评分的加权线性组合来确定每个程序的等级:(i)覆盖评分:忽略用户输入中的许多单词得到的结果是不可能正确的。(ii)映射评分:英语单词可以具有多种含义和预期的关于 DSL 的行为,但我们倾向于可能性大的解释(iii)结构评分:自然语言和编程语言都具有共性结构,我们倾向于更自然的结果。
在训练阶段使用现成的机器学习算法学习用来计算这些分数以及用来组合分数的权重的分类器。我们的方法的新颖之处在于产生的用于分类器学习的数据来自于高级数据,并且为了有效地学习权值,将离散的分数准则平滑为连续的、可微的损失函数。
3.2 激励方案
我们描述了可以应用 NL-to-DSL 合成器的 3 个不同领域:文本编辑,面向智能辅导的问题自动构造和航空旅行信息系统的问答查询。
文本编辑(终端用户编程)
通过针对 Office 套件应用程序(例如 Microsoft Excel 和 Word)的帮助论坛的研究,我们发现用户经常请求有关重复文本编辑操作的帮助,例如在文本文件中进行插入,删除,替换或提取。这些操作(表 1(b))比通过其他方法简单地用一个字符串搜索和替换常量字符串更为复杂。 首先,要搜索的字符串通常不是常量,需要正则表达式匹配。其次,编辑通常取决于周围的环境。 即使是这样相对简单的任务,也需要用户了解正则表达式,条件和循环的语法和语义,这超出了大多数终端用户的能力。
这启发了我们设计一种用于文本编辑的命令语言(表 1(a)中显示了语法的一个子集),其中包括关键命令 Insert,Remove,Print 和 Replace。这些命令中的每一个都依赖于 IterScope 表达式,该表达式指定文本编辑操作所处的区域(行集合,单词集合或整个 Word 文档)。 SelectStr 产品包括一个 Token,该 Token 允许有限的通配符匹配(例如,整个 WORDTOK,NUMBERTOK 或 PString 指定的模式),布尔条件 BCond 用作对匹配值的附加(局部)过滤。表 1(c)描述了我们的系统可以处理同一示例的不同变化版本。
我们的想法是,一旦用户能够完成这些条件性的和重复性的小任务,则可以通过将其他更复杂的任务缩减为一系列较小的任务来轻松完成。
面向智能辅导的问题自动构造
传统方法研究的结果已应用于智能辅导系统的许多方面,包括问题生成,解决方案生成,尤其是反馈生成,涉及包括几何和自动机理论在内的各种主题领域。这些领域每个都包含一个专用的 DSL,问题生成器工具使用它来创建新问题,解决方案生成工具使用它来生成解决方案,更重要的是,反馈生成工具用它来提供有关学生解决方案的反馈。
考虑自动机构造的领域,在该领域中,要求学生构造一个自动机,该自动机接受英语描述(有关示例参见表 2)。我们基于 Alur 等人提供的描述设计了一个 DSL。该 DSL 包含字符串谓词、布尔连接词、返回子字符串位置的函数以及字符串位置的通用/现有量化。这种语言通过两种方式为学生的错误尝试生成反馈:(i)解决方案生成工具使用它来生成正确的解决方案,以对学生的尝试进行评分;(ii)还用于提供反馈并生成与学生的尝试相符的问题变体。该反馈生成工具已部署在教室中,并且能够以有意义的方式同时比人类更快,更一致地分配成绩并生成反馈。我们的合成方法可用于从自然语言描述中自动生成该系统所需的规范。
航空旅行资讯系统(ATIS)
ATIS 是用于查询航空旅行信息的标准基准,这些信息包括英语查询和包含航班信息的相关数据库。长期以来,它一直被用作自然语言处理和语音处理社区的标准基准。表 3 显示了来自 ATIS 套件的一些示例查询。对于 ATIS,我们设计了基于 SQL 样式的行/列操作的 DSL,并为谓词/表达式提供了支持,这些谓词/表达式对应于航空查询的重要概念,例如到达/出发位置,时间,日期,价格等。
3.3 算法
合成算法(算法 1)从用户处接收自然的语言命令,并创建候选的 DSL 程序排名列表。第一步(第 2 行)是使用 NL 对终结符字典 DLDict 进行编程,将用户输入中的每个单词转换为一个或多个终结符(函数名称或值)。该循环在输入语句的长度范围内,对于每个索引,查找与 NLDict 中该索引处的单词相关联的 DSL 中的终结符集。从根本上讲,NLDict 对每个终结符进行编码,表示哪些单词很可能暗示该终结符在期望程序中出现。可以半自动方式构造此映射。一旦为终结符 t 建立了关联,我们将一个终结符元组和一个单例映射(将单词的索引与所产生的终结符相关联)存储到集合 R0(第 4 行)中。
对于每个自然语言单词,字典 NLDict 为它关联一组终结符集。终结符可以是常量值,也可以将带有漏洞参数的函数应用程序。因此,算法(算法 1)(在第 3 行上使用 NLDict 时)可能会创建不完整的程序,其中缺少函数的某些参数。例如,考虑句子“打印不包含 834 的所有行”。由于语法包含 PrintCmd:= PRINT(SelectStr,IterScope),词典将单词“ print”与函数 PRINT 相关联,因此将生成部分程序。以后,这些漏洞将被其他与参数类型 SelectStr 和 IterScope 匹配的程序替换。
一旦构建了基本的终结符集,算法便会使用 Bag 算法(算法 2)生成所有一致的程序集 ResT。 最后一步是使用分数和权重的组合,在第 7 行的循环中对这组程序进行排名。
4. 本文主要贡献
本文提出了一种从自然语言描述中合成程序的新技术(从终结符集中生成程序并且排序,这些终结符与自然语言描述中的词相对应)。并且,我们展示了这个框架如何通过简单地提供转化示例来创建支持不同 DSL 的程序合成器。
致谢
国家重点研发计划课题:基于协同编程现场的智能实时质量提升方法与技术(2018YFB1003901)和国家自然科学基金项目:基于可理解信息融合的人机协同移动应用测试研究(61802171)
本文由南京大学软件学院 2020 级硕士王一博转述