导入Prefix+Suffix+Middle代码补全数据
更新时间:2025-03-06
登录到千帆ModelBuilder操作台,在左侧功能列选择通用数据集,进入主任务界面。
FIM(Fill In the Middle)结构说明
FIM 结构
FIM(Fill In the Middle,中间填充)是OpenAI提出的一种大模型训练方法,旨在提高大模型的内容补全能力,使模型能够在给定上下文中预测中间缺失的内容,而不仅仅是从左到右生成文本。
通常大模型训练过程中,采用从左到右的方式生成文本,即仅根据前缀(prefix)预测下文。然而,在许多实际应用场景(特别是代码补全任务)中,大模型需要能够在已有文本的中间插入、修改内容。而在 FIM 训练过程中,训练的文本样本被拆分为三个部分:
- 前缀(Prefix):文本的开头部分
- 中间(Middle):需要被模型预测的缺失部分
- 后缀(Suffix):剩余的文本内容
FIM 训练让模型在已有的前缀和后缀的基础上补全中间内容。这种方式可以极大提升模型在代码补全等方面的能力。
FIM 精调的优势
- 更好地填充中间内容:通过FIM训练,模型能学会如何在已有的上下文中生成更自然的衔接内容,从而更好地补全复杂文本。
- 不损失原有生成能力:OpenAI 的研究表明,使用 FIM 结构的数据进行训练,不会影响模型原本的左到右生成能力。模型在不损失原有能力的情况下,额外学会了填充任务。
适合的精调场景
- 代码补全:特别适用于编程大模型(如ERNIE Code等),支持自动补全函数体、修复问题代码段、补充注释等。
FIM格式的数据当前仅适用于ERNIE Code模型精调,暂不支持其它模型训练。
数据格式说明
Prefix+Suffix+Middle:单轮的FIM(Fill In the Middle)结构数据,涵盖代码补全位置的前/后缀及待补全内容。适用于有监督微调SFT的代码生成大模型训练。
- 有后缀样例
# "prefix" 为必填字段,表示代码补全位置的前文
# "suffix" 为可选字段,表示代码补全位置的后文
# "middle" 为必填字段,表示代码补全位置的内容
{"prefix": "def process_data(data):", "suffix": " return processed", "middle": " # 对数据元素进行翻倍\n processed = [d * 2 for d in data]"}
{"prefix": "def calculate_sum(a, b):", "suffix": " return result", "middle": " # 计算两个数的和\n result = a + b"}
FIM数据固定为单轮形式。
- 无后缀样例
# "prefix" 为必填字段,表示代码补全位置的前文
# "suffix" 为可选字段,表示代码补全位置的后文
# "middle" 为必填字段,表示代码补全位置的内容
{"prefix":"import pandas as pd\n# 读取test.xlsx文件并打印数据集描述\n", "middle": "df = pd.read_excel('test.xlsx') \nprint(df.describe()) \nprint(df.columns) \nprint(df.shape[0])"}
可不填写suffix字段,例如上述依据代码和注释补全的场景。
数据文件要求
文件类型 | 无后缀数据 | 有后缀数据 |
---|---|---|
jsonl文件 |
![]() |
![]() |
xlsx文件 |
![]() |
![]() |
csv文件 |
![]() |
![]() |
压缩包 |
|
|
- 文件编码支持UTF-8。
数据导入方式
创建数据集完成后,在数据集管理页面中,找到该数据集,点击右侧操作列下的“导入”按钮,即可进入导入数据页面。

您可以使用以下方案上传数据集:本地导入、BOS导入、分享链接导入、平台已有数据集。
导入方式 | 存储类型:对象存储BOS | 存储类型:平台共享存储 |
---|---|---|
本地导入 |
|
|
BOS导入 |
![]() |
![]() |
分享链接导入 |
![]() |
![]() |
平台已有数据集 |
|
|