Qwen3-27B の 3 段階カリキュラムファインチューニングによる C から Rust への高精度コード変換
事前学習、デバッグ認識型 SFT、タスク特化型 SFT の組み合わせにより、C 言語から安全性と慣用句を重視した Rust への変換精度を向上させた手法の提案。
リリース: 2026-08-13 · 読了 5 分論文概要
本論文では、C 言語のコードベースをメモリ安全性に優れる Rust 言語へ変換するタスク(C2Rust)において、Qwen3-27B をベースモデルとした 3 段階のカリキュラムファインチューニング手法を提案している。汎用的な事前学習モデルでは、慣用的な(idiomatic な)Rust の生成やコンパイラからのフィードバックを伴う自己修復能力が不足しているため、これを克服するための専用アプローチを設計した。検証には、静的解析ガイド付きの検証フレームワークである SACTOR を用いて評価を行っている。
関連研究
従来の大規模言語モデルによるコード変換は、汎用的なコーディングデータセットを用いた事前学習や単純な指示チューニングに依存していた。そのため、得られた Rust コードが不自然(C 言語のイディオムをそのまま引きずった状態)になったり、unsafe ブロックが過剰に含まれるという課題があった。本研究は、事前学習からタスク特化型ファインチューニングまでを段階的に行うことで、これらの構造的な課題にアプローチしている。
新規性と貢献
本研究の最大の貢献は、C から Rust への変換に特化した 3 段階のカリキュラム(継続事前学習、デバッグ認識型 SFT、タスク特化型 SFT)を体系化した点にある。これにより、単なる構文の置き換えではなく、Rust 固有の安全規則や標準ライブラリの活用、コンパイラエラーを踏まえた自己修復能力をモデルに統合している。
提案手法の詳細
提案手法は以下の 3 つのステージで構成されている。
- 継続事前学習: Rust 中心のコーパスを用いてモデルの事前知識を強化し、慣用的な Rust 構文や標準ライブラリの使用法を学習させる。
- デバッグ認識型 SFT:
microsoft/Verus_Training_Dataデータセットを活用し、Rust コードに対するデバッグや自己修復行動をモデルに習得させる。 - タスク特化型 SFT: LeetCode の問題から導出された C/Rust のペアデータを用いて直接的な意味的変換を学習させる。
評価・考察
エージェントベースの静的解析ガイド付き検証フレームワークである SACTOR を用いて評価が実施された。非慣用的な表現から慣用的な表現への 2 段階変換や、外部関数インターフェース(FFI)を用いたエンドツーエンド(E2E)テストを通じて、成功率、Clippy の警告数、unsafe コードの割合などの観点から性能が分析されている。
応用例と今後の展望
レガシーな C 言語製システム(組み込み機器やインフラソフトウェア分野など、数十万行規模のコードベース)を安全な Rust へ移行する際の自動変換ツールとしての応用が期待される。日本の組み込みシステム開発企業や社会インフラを担うエンジニアチームにおいて、移行コストを削減するための基盤技術としての実務インパクトが見込まれる。
結論
Qwen3-27B に対する 3 段階のカリキュラムファインチューニングは、C から Rust への高精度かつ安全なコード変換において有効なアプローチであり、実用的なコードモダナイゼーションへの道を開くものである。
注釈
- C2Rust: C 言語から Rust 言語へのコード変換タスク。
- SACTOR: 構造を考慮した 2 段階の変換と FFI ベースの E2E テストを行う静的解析ガイド付き検証フレームワーク。
- Clippy: Rust 公式のリンター(コードの静的解析ツール)。