对于自然语言处理任务而言,机器学习需要从一个较为连续的(离散度高于图像)、有着较清晰边界的数据集建立与另一个较为连续的、有着较清晰的边界的数据集之间的映射关系。
而由于自然语言处理中的文本数据相比图像数据更为稀疏,因此自然语言处理相关的任务更难取得较好的模型性能。
但是在代码生成方面,从编程者的意图(intent)生成程序代码的问题,可以看做是「程序员意图空间」到「程序代码空间」的映射,其中意图可以是由自然语言描述的信息。如上图所示,这是从一个较为连续的、有着较清晰边界的数据集,向一个更加离散而没有清晰边界的数据集进行映射。
换句话说,尽管代码生成的意图较为清楚,但是实现该意图的代码数据却比较稀疏,而且即便对于相同的意图,其对应的实现代码之间仍存在较大差距,因此这样的任务是非常难学习的。
为此,在 aiXcoder 的实际实现中,对不同应用领域的代码都采用了特定的模型,它们仅使用该领域的数据进行训练。例如,对 TensorFlow 或 PyTorch 等框架也有其特定的代码补全模型。这样做的主要目的就是加强程序分布的稠密性,在特定领域下,代码分布更加接近连续性。可见,根据编程者的「意图」来「直接」生成完整代码是非常困难的,但李戈教授表示,可以用类似的技术来辅助人类程序员来编写代码,我们可以从程序员已经写下的代码中获取程序员的「编程意图」,然后综合分析代码,的结构信息、变量引用信息、API 序列信息、继承关系信息等等,以自动生成后续代码。然而,在这个过程中,只有语言模型是远远不够的,还需要对很多其它代码特征进行分析,才能做好生成式的代码补全。 (编辑:西安站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|