【AI4Code】《CodeBERT: A Pre

编程入门 行业动态 更新时间:2024-10-06 18:31:22

【<a href=https://www.elefans.com/category/jswz/34/715044.html style=AI4Code】《CodeBERT: A Pre"/>

【AI4Code】《CodeBERT: A Pre

《CodeBERT: A Pre-Trained Model for Programming and Natural Languages》 EMNLP 2020

将BERT应用在 双模态数据 上:编程语言(PL)和自然语言(NL),预训练完的CodeBERT得到的通用表示,可以支持下游各种任务比如自然语言代码搜索,代码文档生成等。作者还贡献了一个NL-PL的数据集。

方法

模型架构

模型就是BERT,模型架构和RoBERTa-base 基本一致,包括 12 个层,每一层有 12 个自注意力头,每个自注意力头的维度为 64。隐藏维度为 768,FF层的维度为 3072。模型参数总量为 1.25 亿。

输入输出

输入:预训练的输入是自然语言文本和编程语言文本拼接成的序列:[CLS], w1, w2, …wn, [SEP], c1, c2, …, cm, [EOS],w是文本的token,c是代码的token。

输出:每个token在CodeBERT里都有输出,文本和代码的token的输出就是当前场景下他们的语义向量表示,[CLS]的向量表示作为整个序列表示的聚合(aggregated sequence representation)。 分隔符 [SEP] 和结束符 [EOS]的输出没有意义。

预训练数据

两类训练数据,一类是双模态的PL-NL对数据,此外还有一类单模态的数据,即“不具备平行对应自然语言文本的代码” 和 “不具备对应代码的自然语言文本”。

NL-PL 对示例如下所示,其中 NL 是函数文档(黑色虚线框)中的第一段(红色框)

预训练任务

MLM (Masked Language Modeling)

有两个目标函数,在双模态数据NL-PL用MLM目标函数,在NL和PL随机选择位置mask(两种位置无关),用token [MASK]代替:
m i w ∼ unif ⁡ { 1 , ∣ w ∣ }  for  i = 1  to  ∣ w ∣ m i c ∼ unif ⁡ { 1 , ∣ c ∣ }  for  i = 1  to  ∣ c ∣ w masked  = REPLACE ⁡ ( w , m w , [ M A S K ] ) c masked  = REPLACE ⁡ ( c , m c , [

更多推荐

【AI4Code】《CodeBERT: A Pre

本文发布于:2024-03-07 18:07:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718533.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:AI4Code   CodeBERT   Pre

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!