AI・機械学習
中級
Fill-in-the-Middle (FIM)(フィルインザミドル)
コードLLMのプリトレーニング目的の一種。テキストの先頭(Prefix)と末尾(Suffix)を与え、中間部分(Middle)を生成する能力を学習する手法。SPMフォーマットが主流。
0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
fill-in-the-middle
fim
code-llm
pretraining
spm
code-completion
Fill-in-the-Middle (FIM)
FIMはコード特化LLMのプリトレーニング目的として2022年にOpenAI Code Infilling論文で体系化された技術で、通常の左→右の次トークン予測(CLM)に加え、テキスト中間部の補完能力を明示的に学習させる。現在のほぼ全ての主要コードLLMが採用する標準的なプリトレーニング戦略となっている。
SPMフォーマット(Suffix-Prefix-Middle)
StarCoder2・DeepSeek-Coderが採用する主流フォーマット。Suffixを先にモデルに提示することで、中間生成時にすでにsuffixを「見た」状態となり、PSM(Prefix-Suffix-Middle)より補完精度が高い。
3つのスペシャルトークンを使用する:
<fim_prefix>— 補完前の文脈<fim_suffix>— 補完後の文脈<fim_middle>— モデルが生成する中間部
FIM比率とトレードオフ
学習データの通常50%をFIMフォーマットに変換し、残り50%は通常のCLMとして学習する。FIM比率を上げるとコード補完精度は向上するが、テキスト生成やチャット能力が若干低下するため、用途に応じて調整する。
採用主要モデル
- StarCoder2 (BigCode): SPM形式、128K語彙、15.5B/7B/3B
- CodeLlama (Meta): SPM形式、Llama 2ベース、70B/34B/13B/7B
- DeepSeek-Coder V2 (DeepSeek): SPM形式、236B MoE
- Codestral (Mistral AI): SPM形式、22B専用コードモデル
- Qwen2.5-Coder (Alibaba): SPM形式、最大32B
IDE統合の仕組み
CursorやGitHub Copilotなどのコード補完ツールは、カーソル前後のコードを自動的にPrefix/Suffixとして構成し、FIMエンドポイントを呼び出す。単純な「次トークン予測」ではなく、コード中間部の文脈aware補完が実現され、変数名・関数シグネチャを考慮した高精度な挿入が可能になる。