pipeline_tag: 文本生成
inference: true
widget:
- text: 'def print_hello_world():'
example_title: Hello world
group: Python
license: bigscience-openrail-m
pretrain-datasets:
- 书籍
- 学术论文
- C4数据集
- 精炼网页数据
- 维基百科
- GitHub问题
- 技术文档
- 自建开源代码数据集
datasets:
- 去重代码库
- 多语言代码训练集
- 提交记录数据集
metrics:
- 代码评估
library_name: transformers
tags:
- 代码
model-index:
- name: Refact-1.6B
results:
- task:
type: 文本生成
dataset:
type: OpenAI HumanEval
name: HumanEval
metrics:
- name: 首次通过率(T=0.01)
type: pass@1
value: 32.0
verified: false
- name: 首次通过率(T=0.2)
type: pass@1
value: 31.5
verified: false
- name: 十次通过率(T=0.8)
type: pass@10
value: 53.0
verified: false
- name: 百次通过率(T=0.8)
type: pass@100
value: 76.9
verified: false
- task:
type: 文本生成
dataset:
type: 多语言代码评估集
name: Python代码生成
metrics:
- name: 首次通过率(T=0.2)
type: pass@1
value: 35.8
verified: false
- task:
type: 文本生成
dataset:
type: 多语言代码评估集
name: JavaScript代码生成
metrics:
- name: 首次通过率(T=0.2)
type: pass@1
value: 31.6
verified: false
- task:
type: 文本生成
dataset:
type: 多语言代码评估集
name: Java代码生成
metrics:
- name: 首次通过率(T=0.2)
type: pass@1
value: 29.1
verified: false
- task:
type: 文本生成
dataset:
type: 多语言代码评估集
name: Go代码生成
metrics:
- name: 首次通过率(T=0.2)
type: pass@1
value: -1
verified: false
- task:
type: 文本生成
dataset:
type: 多语言代码评估集
name: C++代码生成
metrics:
- name: 首次通过率(T=0.2)
type: pass@1
value: 26.3
verified: false
- task:
type: 文本生成
dataset:
type: 多语言代码评估集
name: Rust代码生成
metrics:
- name: 首次通过率(T=0.2)
type: pass@1
value: -1
verified: false
- task:
type: 文本生成
dataset:
type: 多语言代码评估集
name: 平均代码生成
metrics:
- name: 首次通过率(T=0.2)
type: pass@1
value: -1
verified: false
language:

我正在持续优化这些模型描述,为您提供最相关全面的信息
Refact-1_6B-fim - GGUF格式
Refact似乎是目前没有衍生版本的原创模型。
该模型在refact.ai官网宣布并发布在Huggingface上。
关于GGUF格式
gguf
是ggml
库使用的当前文件格式。
越来越多的软件正在使用它,因此可以运行此模型。
使用ggml库的核心项目是Georgi Gerganov的llama.cpp
量化版本
提供多种量化文件以满足不同需求。以下是选择建议:
传统量化
Q4_0、Q4_1、Q5_0、Q5_1和Q8是传统量化类型。
它们仍被完全支持,因为某些情况下现代K量化不兼容某些模型。
注意:
现在即使对之前"不兼容"的模型也可以使用K量化,虽然这涉及一些折中方案。详情参见相关模型描述。
(主要涉及Falcon 7b和Starcoder模型)
K量化
K量化设计理念是在模型不同部分采用不同量化级别以优化性能、文件大小和内存占用。
如有可能,请使用K量化。
使用Q6_K时,您可能难以察觉与原始模型的质量差异 - 但相同问题询问两次可能会发现明显差异。
原始模型卡:

Refact-1.6B
我们终于完成了博客文章中开始训练的模型🎉
经过生成数据微调后,它超越了Replit 3b、Stability Code 3b等众多模型。几乎媲美体积大十倍的StarCoder!
模型 |
大小 |
HumanEval pass@1 |
HumanEval pass@10 |
DeciCoder-1b |
1b |
19.1% |
|
Refact-1.6-fim |
1.6b |
32.0% |
53.0% |
StableCode |
3b |
20.2% |
33.8% |
ReplitCode v1 |
3b |
21.9% |
|
CodeGen2.5-multi |
7b |
28.4% |
47.5% |
CodeLlama |
7b |
33.5% |
59.6% |
StarCoder |
15b |
33.6% |
|
这可能是IDE中代码补全的最佳选择,因为它既智能又快速!
您可以通过下载Refact插件立即使用。也可以使用开源docker容器自行托管。
支持多语言(参见下方MultiPL-HumanEval等指标),并具备对话功能(见下文)。
对话功能
虽然主要应用于多语言代码补全(填充),但对话表现同样出色。
使用指令跟随(对话)格式的HumanEval结果,对比专为对话优化的模型:
模型 |
大小 |
pass@1 |
pass@10 |
Refact-1.6-fim |
1.6b |
38.4% |
55.6% |
StableCode-instruct |
3b |
26.9% |
36.2% |
OctoGeeX |
6b |
44.7% |
|
CodeLlama-instruct |
7b |
34.8% |
64.3% |
CodeGen2.5-instruct |
7b |
36.2% |
60.87 |
CodeLlama-instruct |
13b |
42.7% |
71.6% |
StarChat-β |
15b |
33.5% |
|
OctoCoder |
15b |
46.2% |
|
示例
填充中间部分使用特殊标记区分输入输出的前缀/中间/后缀:
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "smallcloudai/Refact-1_6B-fim"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint, trust_remote_code=True).to(device)
prompt = '<fim_prefix>def print_hello_world():\n """<fim_suffix>\n print("Hello world!")<fim_middle>'
inputs = tokenizer.encode(prompt, return_tensors="pt").to(device)
outputs = model.generate(inputs, max_length=100, temperature=0.2)
print("-"*80)
print(tokenizer.decode(outputs[0]))
对话格式
同一模型支持对话(实验性功能)。
prompt_template = "<empty_output>SYSTEM {system}\n" \
"<empty_output>USER {query}\n" \
"<empty_output>ASSISTANT"
prompt = prompt_template.format(system="您是一个编程助手",
query="Python中如何对列表排序?")
架构
如博客文章详述,我们采用:
还应用了LiON、闪电注意力和早期dropout。创新程度适中,您完全可以运行它。
预训练
基础模型使用仅含宽松许可证的自建代码数据集和开放文本数据集。
数据筛选是本模型成功的关键:
文本与代码比例保持50:50,训练1.2T tokens。
由于填充中间(FIM)功能存在重复问题,暂不发布基础模型。如需获取可通过Discord联系我们。
微调
我们验证了对话数据应能提升基础模型在FIM和常规从左到右代码补全表现的假设。
发现仅需15%经过质量筛选的开放代码指令数据集即可提升几乎所有指标。
为改进FIM,我们观察常见失败模式,基于去重代码库v1.1创建合成数据集解决问题。
网络代码与IDE编写代码存在分布差异。前者通常是完整的,模型会尝试给出完整建议。而后者多为半成品代码,没有单一修复方案。
实践中,模型需要能在添加几行后停止,有时完全不输出。我们发现提供空补全、单行补全、以较小缩进或换行结束的多行补全数据能显著提升可用性。这类数据占微调数据集的85%。
最终模型经过多次尝试,在代码补全方面表现优异,各项指标均衡。最佳尝试消耗40B tokens。
局限与偏差
Refact-1.6B主要训练英语文本。虽然代码注释包含更多语言,但非英语性能较低。
模型统计
- 架构: 类LLAMA模型,多查询注意力
- 目标: 填充中间、对话
- 上下文长度: 4096 tokens
- 预训练tokens: 1.2T
- 微调tokens: 40B
- 精度: bfloat16
- GPU: 64块NVidia A5000
- 训练时间: 28天
许可
采用BigScience OpenRAIL-M v1许可证
引用
使用本模型时请注明本页面链接。
原始模型文件结束
请考虑支持我的工作
即将推出: 我正在筹备赞助/众筹计划。考虑使用Kickstarter、Patreon或GitHub Sponsors平台,期待您对持续提供这类模型的支持。您的赞助将帮助我提供更多有价值资源。
