🚀 CodeLlama-7B-KStack模型
CodeLlama-7B-KStack是在特定数据集上微调后的模型,以Hugging Face Transformers格式呈现。它基于KStack数据集进行微调,该数据集是许可宽松的Kotlin代码的最大集合,因此该模型在处理Kotlin代码方面表现更优。
🚀 快速开始
模型使用示例
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = 'JetBrains/CodeLlama-7B-KStack'
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name).to('cuda')
input_text = """\
This function takes an integer n and returns factorial of a number:
fun factorial(n: Int): Int {\
"""
input_ids = tokenizer.encode(
input_text, return_tensors='pt'
).to('cuda')
output = model.generate(
input_ids, max_length=60, num_return_sequences=1,
pad_token_id=tokenizer.eos_token_id,
)
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
FIM使用说明
和基础模型一样,我们可以使用FIM。要使用FIM,必须使用以下格式:
'<PRE> ' + prefix + ' <SUF> ' + suffix + ' <MID>'
✨ 主要特性
- 基于KStack数据集微调,在处理Kotlin代码方面表现更优。
- 支持FIM功能。
📦 安装指南
文档未提及具体安装步骤,可参考Hugging Face Transformers库的安装方式。
💻 使用示例
基础用法
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = 'JetBrains/CodeLlama-7B-KStack'
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name).to('cuda')
input_text = """\
This function takes an integer n and returns factorial of a number:
fun factorial(n: Int): Int {\
"""
input_ids = tokenizer.encode(
input_text, return_tensors='pt'
).to('cuda')
output = model.generate(
input_ids, max_length=60, num_return_sequences=1,
pad_token_id=tokenizer.eos_token_id,
)
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
高级用法
使用FIM功能时,需使用以下格式:
'<PRE> ' + prefix + ' <SUF> ' + suffix + ' <MID>'
📚 详细文档
训练设置
该模型在一个A100 GPU上进行训练,使用了以下超参数:
属性 |
详情 |
warmup |
5% |
max_lr |
1e - 6 |
num_epochs |
1 |
attention_dropout |
0.1 |
scheduler |
cosine |
total_batch_size |
128 (~65K tokens per step) |
num_epochs |
1 |
更多关于微调的详细信息可在技术报告中找到(即将发布!)。
微调数据
为了微调模型,我们使用了KStack数据集,这是许可宽松的Kotlin代码的最大集合。为了提高数据集的质量并过滤掉异常值(如作业任务),我们根据以下规则过滤数据集条目:
- 过滤掉属于低流行度仓库(星标和分支总数少于6)的文件。
- 过滤掉属于Kotlin文件少于5个的仓库的文件。
- 移除少于20个SLOC的文件。
我们根据以下规则清理剩余数据集条目的内容:
- 移除所有非ASCII条目。
- 移除所有包行,如
package kotlinx.coroutines.channels
。
- 移除一半的导入行。
我们移除一半的导入是为了避免模型可能出现的幻觉,即模型可能尝试导入不必要的库。此外,移除包是因为此信息仅在项目级别有用,并且可能在学习过程中引入额外的噪声。
评估
为了进行评估,我们使用了Kotlin HumanEval数据集,该数据集包含由人类专家翻译成Kotlin的HumanEval的所有161个任务。你可以在数据集页面上找到获得我们的结果所需的预处理的更多详细信息,包括运行代码。
评估结果如下:
模型名称 |
Kotlin HumanEval通过率 |
CodeLlama-7B |
26.09 |
CodeLlama-7B-KStack |
29.19 |
伦理考量和局限性
CodeLlama-7B-KStack是一项新技术,使用时存在风险。到目前为止进行的测试并未涵盖,也不可能涵盖所有场景。出于这些原因,与所有大语言模型一样,CodeLlama-7B-KStack的潜在输出无法提前预测,并且在某些情况下,模型可能会对用户提示产生不准确或令人反感的响应。该模型是在特定数据格式(Kotlin任务)上进行微调的,偏离此格式也可能导致对用户查询的不准确或不理想的响应。因此,在部署CodeLlama-7B-KStack的任何应用程序之前,开发人员应针对其特定的模型应用进行安全测试和调整。
📄 许可证
本项目采用Apache-2.0许可证。