language: code
thumbnail: https://cdn-media.huggingface.co/CodeBERTa/CodeBERTa.png
datasets:
这是huggingface/CodeBERTa-small-v1的非官方重新上传版本,采用SafeTensors
格式,使用transformers
4.41.1
。重新上传的目的是防止那些仍作为相关基准的旧模型因HuggingFace的变更而过时。此外,我可能包含一些小的修正,比如模型的最大长度配置。
原始模型卡片如下:
CodeBERTa
CodeBERTa是一个类似于RoBERTa的模型,基于GitHub的CodeSearchNet数据集训练而成。
支持的语言:
"go"
"java"
"javascript"
"php"
"python"
"ruby"
分词器是一个基于字节级BPE的分词器,使用Hugging Face的tokenizers
在语料库上训练而成。
由于它是基于代码语料库(而非自然语言)训练的,因此它能高效地编码语料库(与使用gpt2/roberta分词的相同语料库相比,序列长度缩短了33%到50%)。
(小型)模型是一个6层、8400万参数的RoBERTa-like Transformer模型——与DistilBERT的层数和头数相同——从默认初始化设置开始,并在完整语料库(约200万个函数)上训练了5个周期。
训练过程的Tensorboard ⤵️

快速开始:掩码语言建模预测
PHP_CODE = """
public static <mask> set(string $key, $value) {
if (!in_array($key, self::$allowedKeys)) {
throw new \InvalidArgumentException('Invalid key given');
}
self::$storedValues[$key] = $value;
}
""".lstrip()
模型知道如何补全简单的PHP代码吗?
from transformers import pipeline
fill_mask = pipeline(
"fill-mask",
model="huggingface/CodeBERTa-small-v1",
tokenizer="huggingface/CodeBERTa-small-v1"
)
fill_mask(PHP_CODE)
' function'
'function'
' void'
' def'
' final'
是的!这很简单 🎉 那Python呢?(警告:这会有点元)
PYTHON_CODE = """
def pipeline(
task: str,
model: Optional = None,
framework: Optional[<mask>] = None,
**kwargs
) -> Pipeline:
pass
""".lstrip()
结果:
'framework', 'Framework', ' framework', 'None', 'str'
这个程序可以自动补全自己!😱
只是为了好玩,试试掩码自然语言(非代码):
fill_mask("My name is <mask>.")
这(某种程度上)有效是因为代码中包含注释(注释中包含自然语言)。
当然,计算机科学家最常见的名字必须是undefined 🤓。
查看**huggingface/CodeBERTa-language-id
**的模型卡片 🤯。
CodeSearchNet引用
@article{husain_codesearchnet_2019,
title = {{CodeSearchNet} {Challenge}: {Evaluating} the {State} of {Semantic} {Code} {Search}},
shorttitle = {{CodeSearchNet} {Challenge}},
url = {http://arxiv.org/abs/1909.09436},
urldate = {2020-03-12},
journal = {arXiv:1909.09436 [cs, stat]},
author = {Husain, Hamel and Wu, Ho-Hsiang and Gazit, Tiferet and Allamanis, Miltiadis and Brockschmidt, Marc},
month = sep,
year = {2019},
note = {arXiv: 1909.09436},
}