跳到主内容
快讯直播
AI智模界
AI 词典

填充中间(FIM):让补全模型看懂光标后面的代码

一句话定义

填充中间(Fill-in-the-Middle,FIM)是一种训练目标:把一段文本从中间切开,让模型同时看着前文后文,把中间缺掉的那一段补出来。

为什么需要专门练这个

语言模型默认的训练方式是"预测下一个词":给它前文,让它猜后面接什么。这对聊天、写文章够用,但对写代码不够。

设想你在编辑器里改代码,光标停在函数中间,你想补两行。你不仅知道上面写了什么,也知道下面要接什么——下面那行已经在调用某个变量,你把名字写错就编译不过。如果模型只能看上文,它补出来的代码常常和下文对不上:函数名拼错、括号对不齐、参数个数不对。

FIM 就是把"看得见下文"的能力练进模型里。它像玩拼图:不是从左上角一块块往下拼,而是先看清左右两边的图案,再判断中间那块长什么样。

具体怎么练

做法很朴素:拿一个文件,随机切成三段——前段 A、中段 B、后段 C,然后重排成 A → C → B 的顺序,中间插入几个特殊标记(哨兵 token),大致长这样:

```

<前缀> A <后缀> C <中间> B

```

模型顺序读入,读到 <中间> 之后开始生成 B。因为注意力机制能看见前面的 A 和 C,它就学会了"在给定前后文的条件下生成中间那一整段"。

前后缀谁先谁后有两种常见排列,效果差别不大,看实现选择。另外有个细节:如果只练 FIM,模型会变成"只会填空、不会往下写",所以实际训练通常把 FIM 样本和普通的从左往右样本按比例混着喂。

和相邻概念的区别

普通自回归掩码语言模型(MLM)填充中间(FIM)
能看到只有上文上下文上文 + 下文
要预测下一个词若干零散被挖掉的词一整段连续文本
典型用途对话、续写分类、检索代码补全、文档改写

掩码语言模型和 FIM 长得像,但思路不同:前者随机挖很多零散的小洞、逐个预测词,主要服务于"理解"类任务;后者挖掉一整段连续文本、要把它生成出来,服务于"补全"类任务。本质上 FIM 仍是生成式目标,只是条件里多了后文。

对实际工作的意义

做模型的人:代码大模型基本都会把 FIM 列为训练目标之一。只做从左往右预训练的模型,塞进 IDE 做行内补全会明显吃亏。FIM 的样本比例、哨兵标记怎么选,都值得当超参数认真调。

用模型的人:你在编辑器里把光标放在函数中间敲几行,补出来的代码和下面已经写好的调用严丝合缝,多半就是 FIM 在起作用。一些模型服务会专门提供 FIM 接口或对应的哨兵标记,具体格式以官方页面为准。

再往外看,"看着前后文补中间"不限于代码:改一段合同、修一句译文、填一个表格单元格,都是同一个需求。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。