# DeepSeek-Coder: When the Large Language Model Meets Programming – The Rise of Code Intelligence
> [!abstract] 概要
> 大規模言語モデルの急速な発展はソフトウェア開発におけるコードインテリジェンスに革新をもたらした。しかしクローズドソースモデルの優位性が広範な研究・開発を制約している。この問題に対処するため、著者らは DeepSeek-Coder シリーズを提案する。これは 1.3B から 33B の規模を持つオープンソースコードモデル群であり、2 兆トークンからスクラッチで学習されている。これらのモデルは高品質なプロジェクトレベルのコードコーパスで事前学習され、16K ウィンドウの穴埋めタスク(Fill-in-the-Blank)を用いてコード生成と補完(インフィリング)を強化する。広範な評価により、DeepSeek-Coder はオープンソースコードモデルの中で複数のベンチマークにおいて最先端の性能を達成するだけでなく、Codex や GPT-3.5 といったクローズドソースモデルをも上回ることが示された。さらに DeepSeek-Coder モデルは研究および無制限の商用利用を許可する寛容なライセンスのもとで公開されている。
## 論文情報
- **著者**: [[Daya Guo]] ほか 13 名([[DeepSeek-AI]] / 北京大学)
- **発表**: arXiv:2401.14196, 2024-01-25
- **分野**: cs.SE, cs.CL, cs.LG
- **リポジトリ**: https://github.com/deepseek-ai/DeepSeek-Coder
## 概要
DeepSeek-Coder は [[DeepSeek-AI]] が開発したオープンソースのコード特化 LLM シリーズである。1.3B・6.7B・33B の 3 スケールで提供され、87 プログラミング言語を含む 2 兆トークンのコーパスでスクラッチから学習されている。リポジトリレベルの依存関係解析によるデータ構築、Fill-in-the-Middle(FIM)学習、16K コンテキストウィンドウの 3 点を柱とし、オープンソースコードモデルで全ベンチマーク SOTA を達成するとともに、指示チューニング版は GPT-3.5 Turbo を多くのタスクで上回る。
## 問題設定
ソフトウェア開発におけるコードインテリジェンス——コード生成、コード補完、プログラムベースの数学推論——において、クローズドソースモデル(GPT-4・Codex 等)が高い性能を持つ一方、オープンソースモデルとの間に大きな性能差が存在する。StarCoder や CodeLlama といったオープンソースモデルは一定の成果を上げたが、クローズドソースモデルとの差を十分に縮められていなかった。特に以下の課題がある。
1. 既存のオープンソースコード LLM はファイルレベルのデータで学習されており、リポジトリ内のファイル間依存関係を扱えない
2. FIM(Fill-in-the-Middle)学習のハイパーパラメータ(FIM 率、PSM vs SPM vs MSP)の最適設定が未解明
3. コード補完ツールへの実用的展開に必要な中規模モデルの性能が不十分
## 提案手法
### データパイプライン
訓練データは 87% がソースコード、10% が英語のコード関連自然言語コーパス(GitHub Markdown + StackExchange)、3% が中国語自然言語コーパスで構成される。データ構築は 5 段階のパイプラインで行われる(図2)。
1. **データクロール・フィルタリング**: GitHub の 2023 年 2 月以前の公開リポジトリから 87 言語を収集し、StarCoder プロジェクトと同様のルールベースフィルタリングで元データの 32.8% に圧縮する
2. **依存関係解析**: ファイル間のインポート関係を正規表現で抽出し、トポロジカルソート(アルゴリズム1)でファイルを依存順に並べ替える。サイクルを含むグラフにも対応するため、入次数最小のノードを選ぶ変形版を採用する
3. **リポジトリレベル重複排除**: ファイル単位ではなくリポジトリ全体を 1 サンプルとして近似重複排除を適用し、リポジトリ構造の整合性を保持する
4. **品質スクリーニング**: コンパイラ・品質モデル・ヒューリスティクスを組み合わせ、構文エラー・低可読性・低モジュール性のコードを除去する。最終データ量は 798 GB・6 億 300 万ファイル(表1)
5. **汚染除去**: HumanEval・MBPP・GSM8K・MATH のテストデータと 10-gram 一致するコードを除外する
### 学習戦略
- **次トークン予測(NTP)**: 標準的な自己回帰目的関数
- **Fill-in-the-Middle(FIM)**: コードファイルを prefix・middle・suffix の 3 部分に分割し、PSM(Prefix-Suffix-Middle)モードで再構成する。1.3B モデルでのアブレーション(図3)により、PSM 50% が HumanEval-FIM と HumanEval(コード補完)のトレードオフで最適と判定。MSP(Masked Span Prediction)は PSM に劣後する
- **トークナイザ**: HuggingFace Tokenizer で BPE を訓練、語彙サイズ 32,000
### モデルアーキテクチャ
デコーダオンリー Transformer で、RoPE(Rotary Position Embedding)を採用する。33B モデルは GQA(Grouped-Query-Attention、グループサイズ 8)を導入し学習・推論効率を向上する。FlashAttention v2 を使用する。ハイパーパラメータは表2 に詳述されている。
### 長文脈対応
RoPE のスケーリングファクターを 1→4、ベース周波数を 10000→100000 に変更し、バッチサイズ 512・シーケンス長 16K で 1000 ステップの追加学習を行う。理論上は 64K トークンまで対応可能だが、実測で信頼性の高い出力は 16K トークン範囲である。
### 指示チューニング
DeepSeek-Coder-Base を Alpaca 形式の高品質な指示データでファインチューニングし、DeepSeek-Coder-Instruct を構築する。コサインスケジュール・100 ウォームアップステップ・初期学習率 1e-5・バッチサイズ 4M トークン・総量 2B トークンで訓練する。
## 新規性
1. **リポジトリレベルデータ構築の初導入**: コード LLM の事前学習にリポジトリ内ファイル間の依存関係解析とトポロジカルソートを初めて適用し、クロスファイルコード生成の能力を大幅に向上させた
2. **FIM 学習戦略の体系的分析**: PSM・SPM・MSP の各モード、FIM 率 0%/50%/100% を網羅的にアブレーションし、PSM 50% が最適であることを実証した
3. **小規模モデルの高効率性**: 6.7B モデルが 5 倍大きい CodeLlama-34B と同等以上の性能を達成し、データ品質がモデル規模を補完しうることを示した
4. **汎用 LLM からの継続事前学習**: DeepSeek-LLM 7B Base からの継続事前学習で DeepSeek-Coder-v1.5 を構築し、コーディング性能を維持しつつ自然言語理解と数学推論を大幅に改善した
## 実験設定
以下の 4 カテゴリのベンチマークで評価を行っている。
- **コード生成**: HumanEval(多言語・8 言語)、MBPP、DS-1000(データサイエンス)、LeetCode Contest(180 問、2023 年 7 月〜2024 年 1 月)
- **FIM コード補完**: Single-Line Infilling ベンチマーク(Python・Java・JavaScript)
- **クロスファイルコード補完**: CrossCodeEval(Python・Java・TypeScript・C#)
- **プログラムベース数学推論**: PAL 方式で GSM8K・MATH・GSM-Hard・SVAMP・TabMWP・ASDiv・MAWPS の 7 ベンチマーク
比較対象: CodeGeeX2、StarCoder、CodeLlama(7B/13B/34B)、code-cushman-001、GPT-3.5 Turbo、GPT-4
## 実験結果
### コード生成(表3)
- DeepSeek-Coder-Base 33B は HumanEval 多言語平均 50.3%(CodeLlama-34B の 41.0% を 9 ポイント上回る)、MBPP 66.0%(同 55.2% を 11 ポイント上回る)で全オープンソース SOTA を達成
- DeepSeek-Coder-Base 6.7B(多言語平均 44.7%)が CodeLlama-Base 34B(41.0%)を上回る
- DeepSeek-Coder-Instruct 33B は HumanEval 多言語平均 69.2% で GPT-3.5 Turbo(64.9%)を上回る
### DS-1000(表4)
- DeepSeek-Coder-Base 33B が全体平均 40.2% で CodeLlama-Base 34B(34.3%)を大幅に上回り、7 ライブラリ全てで最高精度
### LeetCode Contest(表5)
- DeepSeek-Coder-Instruct 33B は全体 27.8% で GPT-3.5 Turbo(23.3%)を上回る唯一のオープンソースモデル
- Chain-of-Thought(CoT)プロンプティングにより中〜高難度問題で追加的改善が得られる(全体 28.9%)
- GPT-4-Turbo(40.6%/CoT 41.8%)との差は依然として大きい
### FIM コード補完(表6)
- DeepSeek-Coder-Base 1.3B でも StarCoder 16B および CodeLlama 7B を上回る平均精度 70.4% を達成
- 33B では平均 81.2% に到達
### クロスファイルコード補完(表7)
- DeepSeek-Coder-Base 6.7B は全 4 言語で他の 7B 級モデルを上回る
- リポジトリレベル事前学習を除外したアブレーション(w/o Repo Pre-training)では Java・TypeScript・C# で性能が低下し、リポジトリレベルデータ構築の有効性が確認された
### プログラムベース数学推論(表8)
- DeepSeek-Coder-Base 33B は 7 ベンチマーク平均 65.8% で CodeLlama-Base 34B(62.0%)を上回る
- 特に MATH(29.1% vs 21.2%)で顕著な差
### DeepSeek-Coder-v1.5(表10)
- DeepSeek-LLM 7B Base からの継続事前学習により、コーディング性能をほぼ維持しつつ MMLU(36.6%→49.1%)、BBH(44.3%→55.2%)、GSM8K(43.2%→62.4%)と自然言語理解・数学推論が大幅に向上
## 考察
- **データ品質はモデル規模を補う**: 6.7B モデルが 34B の CodeLlama を凌駕する結果は、事前学習データの品質と構成がモデル規模以上に性能を左右しうることを示す
- **リポジトリレベル構造の有効性**: クロスファイル補完でのアブレーション結果は、ファイル間依存の学習がコード LLM の実用性向上に寄与することを実証する
- **FIM のトレードオフ**: FIM 率を 100% にすると補完性能は最大化されるがコード生成性能が低下する。50% PSM が両者のバランスを取る設計判断として妥当である
- **CoT プロンプティングの効果**: 高難度タスクで CoT が特に有効であり、コード生成モデルの実用展開において推論ステップの明示化が重要となる
- **汎用 LLM ベースの優位性**: DeepSeek-Coder-v1.5 の結果から、最も効果的なコード特化 LLM は強力な汎用 LLM をベースに構築されるという知見が得られた。コーディングタスクの正しい解釈には人間の指示の深い理解が必要なためである
## 強み
- 1.3B・6.7B・33B の 3 スケールを提供し、エッジ展開からサーバ展開までカバーする
- 87 言語を網羅する多言語性
- リポジトリレベルの依存関係解析によるデータ構築は実際の開発フローに即した学習を実現する
- 寛容なライセンス(研究・商用利用ともに無制限)
- FIM 学習戦略のアブレーションがコミュニティに有用な設計指針を提供する
## 弱点・課題
- LeetCode Contest で GPT-4-Turbo との差が依然として約 13 ポイントあり、クローズドソースモデルとの完全な差の解消には至っていない
- 長文脈対応は理論上 64K まで可能だが実測では 16K が信頼範囲であり、大規模リポジトリへの適用に限界がある
- 指示チューニングのデータ構成・品質に関する詳細が限定的であり、再現性に課題がある
- FIM のアブレーションは 1.3B・Python サブセットのみで実施されており、大規模モデル・他言語での汎化が未確認
- LeetCode Contest ベンチマークにおけるデータ汚染の可能性を著者ら自身が認めている
- DeepSeek-Coder-v1.5 は FIM 学習を行っておらず、コード補完性能の比較が不完全である