作者 | 蒋宝尚编辑 | 贾伟 BERT自诞生之后,其应用边界便不断扩张,从自然语言到图像、语音等。过去的一年也因此被誉为“BERT爆发的一年”。近日,微软亚洲研究院周明、微软亚洲搜索技术中心姜大昕、哈工大刘挺等人在arxiv上联合发表了一篇论文,标题为《CodeBERT: A Pre-Trained Model for Programming and Natural Languages》,再次拓宽了BERT的应用,将BERT应用到了Python、PHP、Java、JavaScript、Go、Ruby等编程语言的代码搜索和生成任务当中。
论文链接:https://arxiv.org/pdf/2002.08155.pdf 这篇论文提出了一个被称为「CodeBERT」的双模预训练模型,据作者介绍,这也是目前已知的第一个大型 NL-PL(自然语言-编程语言)预训练模型。该预训练模型能够处理NL-PL 的普遍问题,例如用自然语言搜索代码、自动生成代码等。所谓自然语言代码搜索,所要解决的问题是,如何通过自然语言query查找到所需的代码块,这和我们常用的搜索引擎(通过自然语言query来查找所需网页)类似。事实上,微软Bing在2018年便上线了类似的功能,在搜索框中输入自然语言 “convert case using a function of R”,便会返回一段 R 代码。针对自然语言代码搜索,在这篇论文里,作者在 CodeSearchNet语料库上对CodeBERT进行了预训练并做微调,这是一个包含了 6 种较为普遍的代码语言(分别为Ruby、JavaScript、Go、Python、Java、PHP)的语料库。如下图所示,他们在自然语言代码搜索任务中取得了SOTA的结果:
这部分研究代码到文档的生成问题,并在六种编程语言中研究了生成任务在Code Search Net Corpus上的结果。另外,为了证明CodeBERT在代码到NL生成任务中的有效性,作者采用了各种预训练的模型作为编码器,并保持了超参数的一致性。 实验结果如下:在编程语言上进行预训练的模型的性能优于ROBERTa