新智元微软亚研院副院长周明:从语言智能到代码智能( 五 )


因此 , 和语言智能相比 , 代码智能无论在数据、建模、评测、应用上都需要更关注代码的语法规则和可执行性 。
Q5: 语言学本体在智能方面的发展前景如何?
周明:近十年 , 人工智能的蓬勃发展主要得益于大数据、数据驱动的大模型和强算力 , 但其建模人类本体知识的能力很有限 , 因此如何结合数据驱动模型(如深度学习)和以知识图谱为代表的本体知识是一个非常有前景的方向 。
Q6: 如何保证生成的 code 的正确性 , 如何测试?
周明:测试 code 的正确性一直是代码生成的一大难点 。 对于比较独立的、不依赖其它函数或者环境的代码 , 测试其正确性可以采用人工设计的 Test Case 来实现 , 但也不能保证通过了这些测试的代码就是正确的 。
对于依赖比较多的函数 , 使用 Test Case 测试比较困难 , 所以只能通过其它的自动评价的方法 , 比如跟参考答案完全匹配的准确率 , 或者N元文法的准确率 。
我们提出了CodeBLEU 的评价方法 , 使用句法树匹配信息和变量依赖关系的匹配信息来逼近生成代码的语义的正确性 。
Q7: 程序自身的算法逻辑思想怎么体现?同样的功能 , 不同的人写的code会不一样 , 这种自动生成能体现这种特点吗?
周明:目前的代码理解方法很难直接体现算法的逻辑 , 已有一些方法在代码理解和生成任务中考虑代码的语法结构(AST)和代码的语义结构(Data Flow) 。 目前的代码生成系统多是基于大规模数据训练的数据驱动模型 , 并没有考虑个性化代码生成 。
Q8: 代码翻译成不同的语言 , 框架层面怎么翻译呢?
周明:框架结构方面的信息对代码翻译是很重要的 。 CodeBERT 在预训练的过程中考虑了句法(AST)和语义(Data Flow)等结构相关的信息 , 使用 CodeBERT 初始化的序列到序列转换模型能够对这些结构信息进行建模 , 从而可以生成框架结构一致的目标语言代码 。 在代码翻译的研究领域也存在显式的基于代码树和逻辑图进行建模的方法 。
Q9: 怎么在NN中解决标识量的作用域问题?
周明:一种解决标识量作用域的方式是使用数据流分析 , 该技术也被我们用来做 CodeBERT 模型和 CodeBLEU 指标 。
数据流分析中,当一个变量离开它的作用域 , 这个变量就会被标记为 dead , 这一定程度上反映了标识量的作用域 。


推荐阅读