AI News HubLIVE
サイト内リライト2 分で読了

ツール呼び出しLLMのファインチューニング完全ガイド: XYZ-Aquila-SFTとQwen3を使用

ツール呼び出しLLM向けのエンドツーエンドの教師ありファインチューニングパイプラインを解説。軌跡の解析、構造化ツール呼び出しの抽出、Qwen互換ChatMLレンダリング、XYZ-Aquila-SFTデータセットでのQwen3-0.6BのLoRAファインチューニングをカバーします。

ソースMarkTechPost著者: Sana Hassan

本チュートリアルでは、ツール呼び出しを行う大規模言語モデル向けの、教師ありファインチューニング(SFT)パイプライン全体を構築する方法を紹介します。データセットにはXYZAILabが公開するXYZ-Aquila-SFTを、ベースモデルにはQwen/Qwen3-0.6Bを使用します。実装はHugging Face Transformers、PyTorch、PEFT、Accelerateをベースにしており、データのストリーミング読み込み、軌跡の解析、コーパス統計、ChatMLレンダリング、カスタムデータセットとコレーター、LoRA学習、評価までの完全なコードが含まれています。

まず、パイプラインは400件の英語サンプルをストリーミングで読み込み、各サンプルの質問、回答、宣言されたツール呼び出し数、マルチターン軌跡などのフィールド構造を確認します。著者は、ネストされたJSONにも対応するスキャナーと正規表現パーサーを実装し、アシスタントメッセージからQwen形式のツール呼び出しを抽出するとともに、推論ブロックと観測メッセージも保持します。各サンプルはTrajectoryオブジェクトに変換され、データセットが宣言したツール呼び出し数と比較してパーサーの正確性を検証します。

次に、コーパス統計として、軌跡ごとのツール呼び出し数、メッセージの深さ、文字数分布、ツールごとの呼び出し頻度、引数キーの使用傾向を集計し、ヒストグラムや棒グラフで可視化しています。分析の結果、ツール呼び出しの分布は長尾性を持ち、最長の10%の軌跡が全体の文字数の大きな割合を占めることが分かります。これは後のトランケーション戦略や学習効率に影響します。

形式変換のセクションでは、システムメッセージに埋め込まれたツールスキーマを抽出して構造化されたtoolsリストに変換し、逆の操作も行えるようにしています。情報損失を防ぐため、元のシステムメッセージと再構成されたメッセージを比較し、テンプレートのずれが生じた場合は、元のtools_suffixをそのまま使ってレンダリングします。また、著者はQwen3のapply_chat_templateを直接使わず、手動でChatMLをレンダリングしています。Qwen3のテンプレートは最後のアシスタントターンを除くすべてのターンから推論ブロックを削除してしまい、学習に必要な推論の教師信号を壊すためです。手動レンダリングにより、トークン単位のラベルを正確に制御し、アシスタント部分のトークンだけに損失を計算し、systemとuserのトークンは-100で無視します。

データ準備では、カスタムPyTorch Datasetとコレート関数を実装し、系列を右側パディングし、トランケーション戦略を設定します。学習設定は、LoRA(rank=16)、学習率1e-4、勾配累積8ステップ、最大系列長2048、30ステップ、コサイン減衰スケジューラを使用します。最終的には、学習前後のツール呼び出し予測を評価し、変換後のデータセットとコーパス統計をエクスポートして、後続の実験に利用できるようにしています。

このチュートリアルは、ツール呼び出しLLMのファインチューニングを再現可能な形で実装するための工学的な例であり、データ解析、形式レンダリング、損失マスキングといった細部で陥りがちな落とし穴を避ける点に重点を置いています。SFTの内部実装を深く理解したい開発者にとって有益な内容です。