5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MATRIX-Genでマルチターンの日本語合成データを作る

Posted at

目次

はじめに

LLMのファインチューニングのために,日本語の合成データを作ろうとしています.そのなかでも特に,マルチターンの日本語かつreasoningを含んだ合成データがほしいのですが,Hugging Faceを探してもそのようなデータがあまり見当たらない事に気づきました.
マルチターンの合成データについて色々調べていたところ,"Synthesizing Post-Training Data for LLMs through Multi-Agent Simulation"1という論文で提唱されていたMATRIXとMATRIX-Genというフレームワークが良さそうに見えました.この記事ではこの論文でどんなふうにマルチターンデータ合成をしているか紹介するとともに,簡略版2の実装を行うことで実際にマルチターン合成データを生成してみようと思います.

この記事はLLM・LLM活用 Advent Calendar 2025の2日目です.

論文の紹介ではNotebookLMを使用したうえで適宜修正・目視によるチェックを行いました.また,実装ではGoogle Antigravity(Gemini 3 Pro,Claude Sonnet 4.5)を使用しました.

論文紹介

I. 表題と概要

項目 説明
タイトル Synthesizing Post-Training Data for LLMs through Multi-Agent Simulation
研究の背景と課題 ポスト訓練(Post-training)は,大規模言語モデル(LLMs)が人間の指示に従う能力を持つために不可欠である.しかし,高品質な訓練データの確保は,プライバシー,データの希少性,高額なアノテーション費用により困難である.
従来の合成手法の限界 既存のデータ合成手法(例:Self-Instruct,WizardLM,Star-Agents,Magpie)は,実用的なユーザーシナリオに根差さないインストラクションを生成することが多く,多様なユーザーニーズを効果的に反映できない.
提案手法 このギャップを埋めるため,マルチエージェントシミュレーター MATRIX を提案し,現実的でスケーラブルな多様なテキストベースのシナリオを自動生成する.このシナリオを利用して,制御可能で非常に現実的なデータを合成する MATRIX-Gen を導入する.
主要な成果 MATRIX-Gen で合成されたわずか 20K のインストラクションと応答のペアでポスト訓練されたLlama-3-8B-Baseモデルが,MetaのLlama-3-8B-Instructモデル(10Mペア以上で訓練)をAlpacaEval 2およびArena-Hardベンチマークで上回った.

II. 提案されたポストトレーニングシステム

項目 説明
システム全体像 ヒトのような指示がLLMのポストトレーニングを強化するという動機に基づき,ソーシャルシミュレーションを利用して多様で現実的なシナリオをデータ合成のコンテキストとして生成する.
主要な3ステップ 1. ソーシャルシナリオの合成 (MATRIXによるマルチエージェントシミュレーション).2. シナリオに基づくポスト訓練データの生成 (MATRIX-Gen).3. モデルのファインチューニング.
MATRIX-Genによるデータ合成 シミュレーションされたソーシャルシナリオに基づき,特定のユーザー要求の下でポスト訓練データを生成する.
データ合成プロセス 1. 人間の要求に基づいて最も関連性の高いシミュレーションシナリオを検索.2. 選択されたシナリオごとに,エージェントのペルソナとアクションをインストラクション合成プロンプトに統合して指示を合成する.3. 整合されたLLMを直接呼び出して,合成された指示とその対応する応答を取得する.
合成されるデータセットの種類 制御された合成プロセスを通じて,教師ありファインチューニング(SFT)データセット MATRIX-Gen-SFT,選好チューニング(DPO)データセット MATRIX-Gen-DPO,推論データ MATRIX-Gen-Reason,および特殊ドメインのSFTデータを含む4種類を合成する.

III. MATRIX:マルチエージェントシミュレーター

項目 説明
目的 リアルで多様なシナリオを効率的にシミュレートし,テキスト形式でエージェントのアクションを含むシナリオを出力する.
現実世界に根ざしたエージェント エージェントは,名前,性格,人生の目標の属性と,記憶,行動のモジュールを持つ. i) 匿名化された現実の人間プロファイル(例:Xから収集された1,000件のプロファイル,過去のツイートを含む)を用いて初期化される. ii) 目標指向の行動(人生の目標を行動可能なステップに分解した計画)によって駆動され,人間の行動に類似した行動をとる.
ホモフィリー誘導型通信プロトコル 現実世界で観察されるホモフィリー現象(類似した特性を持つ人々が交流する傾向)に基づき,人間のような効率的なコミュニケーションを可能にする.
エージェントのグループ化 エージェントプロファイルをテキスト埋め込みに変換し,制約付きK-meansクラスタリングにより類似したプロファイルを持つエージェントをグループ化する.これにより,多様な相互作用タイプ(ペアワイズ,グループワイズ)が生まれる.
モジュレーター(LLM-powered Modulator) 各エージェントグループに割り当てられ,エージェントのアクションを収集・配布する.関連性の高い情報のみを選択的に転送することで,グループ内およびグループ間の複雑な通信を効率的に維持する.
シミュレーションの利点 大規模かつ本物のプロファイルと動的な相互作用により,日常会話から複雑な専門的タスクまで,多様で現実的なシナリオが生成され,合成データの多様性とリアリティが確保される.

IV. 実験結果と分析

項目 説明
実験概要 MATRIX-Genによって生成された合成データ(MATRIXデータセットファミリー)を用いてファインチューニングを行い,複数のベースラインデータセットと比較.
一般ドメイン(SFT)の評価 Llama-3-8BおよびQwen-2.5-7Bを用いたSFTにおいて,MATRIX-Gen-SFTはベースラインを一貫して上回る.特にArena-Hardでは,SOTAの合成データMagpieと比較して相対的に31%の改善が見られた.
一般ドメイン(DPO)の評価 MATRIX-Gen-DPOを用いた選好チューニング(DPO)は,ベースラインモデルを大幅に上回り,Llama-3-8B-Instructモデル(10Mペア以上で訓練)よりも優れたパフォーマンスを示した.
リーズニングの評価 MATRIX-Gen-Reason(MATRIX-Gen-SFTからDeepseek-R1-Distill-Qwen-32Bで生成)を用いた訓練により,複数の推論ベンチマークにおいて,他の合成データセットのベースラインを一貫して上回る.
特定ドメインの評価(Controllability) MATRIX-Genはドメイン固有のデータ生成において制御可能性(Controllability)を示した.コーディング(Coding),マルチターンダイアログ(Multi-turn dialog),安全性(Safety)の各タスクでベースラインを一貫して上回った.
分析:エージェントとシナリオの規模の効果 エージェント数とシナリオ数の増加は,より複雑な相互作用を捉えるため,SFT後のモデル性能の向上につながる.
分析:通信プロトコルの効果 ホモフィリー誘導型通信プロトコルは,ランダム通信や非通信と比較して,最高品質のシナリオを生成し,優れたポストトレーニングデータをもたらす.

V. 関連研究,結論,および限界

項目 説明
関連研究との比較(合成データ) 従来の合成手法は既存の材料に依存し,柔軟性や現実世界のコンテキストに欠けるが,本アプローチはシミュレートされたソーシャルシナリオから指示を生成するため,柔軟性とリアリズムを提供する.
関連研究との比較(シミュレーター) 既存の社会学的シミュレーターは,特定の環境向けに設計され,制約されたシナリオや単純なアクションに苦しむ.MATRIXは人生の目標によってエージェントの行動を駆動し,多様で複雑なプロフェッショナルなタスクを含むデータセット生成に優れている.
結論 提案されたフレームワークは,スケーラブルな通信を備えたマルチエージェントシミュレーター MATRIX と,シナリオ駆動型インストラクションジェネレーター MATRIX-Gen から構成され,SFT,DPO,ドメイン固有アプリケーション用の高品質で制御可能なポスト訓練データを合成する.
限界 LLMエージェント間の相互作用からデータを合成するため,LLM推論の計算コストがかかる.MATRIXはグループ通信構造を採用してP2P(ピアツーピア)相互作用を削減しているが,LLM推論のコストは依然として残るため,通信効率の改善が今後の研究の有望な道筋である.

理解を深めるための比喩

本研究のアプローチは,まるで「俳優を雇って舞台劇を演じさせ,そこで生じた会話や要求を録音して教材にする」ようなものです.

従来のデータ合成手法が,単に「こんな質問を考えろ」とLLMに指示する(つまり,紙の上で脚本を書かせる)のに対し,MATRIXは,多様な背景や目標を持つエージェント(俳優)を集め,社会的な制約(ホモフィリー誘導型通信)の中で自律的に生活(シミュレーション)させます.その結果,彼らの実際の「生活上の要求」(シナリオ)に基づいた,よりリアルで文脈に根ざした高品質な質問と応答(教材)が生成されるのです.これにより,はるかに少ないデータ量(20Kペア)でも,現実世界で役立つ高い性能を発揮できるようになります.

Pythonによる再現実装

次に,この論文の再現実装をしました.2025/12/2時点で,リポジトリ3にコードが掲載されていなかったためです.今回の実装はサンプルであるため,論文の条件と完全に同じではないことに注意してください4

完成したリポジトリはこちらです.
https://github.com/Osakana7777777/matrix-gen-implementation-sample

実装内容

2パターンの実装をしました.(Modulatorなしとありのバージョン)

Modulatorなし

1. 環境構築

  • Python: 3.12 (uv経由)
  • 依存パッケージ: openai, pypdf, python-dotenv
  • 設定: .envファイルでOPENAI_API_KEY, OPENAI_BASE_URL, OPENAI_MODEL_NAMEを管理

2. コア実装

  • utils.py
    • AsyncOpenAIクライアント生成
    • レート制限対応のgenerate_completion(指数バックオフによるリトライ機能)
    • JSONL保存機能
  • generate_data.py
    • Agent クラス: プロフィール、目標、計画を持つエージェント
    • 3つの日本語シナリオ:
      • 佐藤健太 (22歳、情報系大学生) - Pandasでデータ分析を学びたい
      • 田中みさき (35歳、主婦) - 余り野菜で健康的な夕食を作りたい
      • 鈴木一郎 (65歳、定年退職者) - 京都の穴場寺院を巡りたい
    • 非同期処理: asyncio.gatherで3シナリオを並列生成
      • 2ターン会話: User → Assistant → User → Assistant

3. 生成データ

  • output.jsonl
    • 形式: JSONL (Hugging Face互換)
    • 件数: 3件
    • 構造: 各行に{"messages": [...]}形式で会話履歴を格納
    • 内容: 自然な日本語での2ターン会話
  • 技術的な工夫
    • レート制限対策
    • AsyncOpenAIによる非同期処理
      • RateLimitError検出時の指数バックオフ (1秒 → 2秒 → 4秒)
      • 最大3回のリトライ
    • エラーハンドリング
      • API互換性: temperatureパラメータ非対応モデルへの対応(削除)
      • 環境変数の柔軟な設定(OPENAI_BASE_URL, OPENAI_MODEL_NAME)
  • 検証結果
    • ✅ 3つのシナリオすべてで2ターンの会話生成に成功
    • ✅ 自然な日本語での対話
    • ✅ エージェントのプロフィールと目標に沿った内容
    • ✅ JSONL形式で正しく保存

Modulatorあり

1. 新規ファイル

  • generate_data_with_modulator.py

    • Modulatorクラス: グループ内コミュニケーション管理
    • 拡張Agentクラス: 他エージェントの発言を観察
    • マルチエージェント会話生成: 2グループ×2エージェント×2ターン
  • output_with_modulator.jsonl

    • 2グループの会話データ
    • エージェント間の自然な対話
  • MODULATOR_README.md

    • Modulatorの詳細説明
    • 論文との対応表

2. 実装内容

  • Modulatorの機能
class Modulator:
    - collect_action(): エージェントの発言を収集
    - distribute_to_relevant_agents(): LLMで関連性判定し配信
    - 構造化メモリ: 過去のアクションを保持
  • 生成された会話

    • グループ1: health_lifestyle

      • 田中みさき (主婦): 「キャベツと人参で健康的な夕食を作りたい」
      • 山田健二 (トレーナー): 「高タンパク低カロリーのレシピを提案」
      • 結果: 4ターンの自然な料理相談会話
    • グループ2: tech_learning

      • 佐藤健太 (大学生): 「Pandasの基本を最短で学びたい」
      • 中村ユキ (データサイエンティスト): 「実践的なチュートリアルを提供」
      • 結果: 4ターンの技術的な対話
  • 関連性判定の動作例

tanaka_misaki: キャベツと人参で...
  -> Relevant to: ['yamada_kenji']  ✅

sato_kenta: Pandasの基本を...
  -> Relevant to: ['nakamura_yuki'] ✅
  • 論文との対応
機能 論文 実装 状態
エージェントグループ K-meansクラスタリング 手動定義 ✅ 簡略化
Modulator グループごとに配置 グループごとに配置 ✅ 完全
グループ内通信 関連性ベース配信 LLM判定で配信 ✅ 完全
グループ間通信 メモリベース伝播 未実装 ⚠️ 今後
構造化メモリ 過去アクション記録 実装済み ✅ 完全

Todo

  • グループ内通信: 実装完了
  • ⚠️ グループ間通信: 次のステップ
  • ⚠️ K-meansクラスタリング: 自動グルーピング
  • ⚠️ 大規模化: 10+エージェント、5+グループ
  • ⚠️ ペルソナ収集: nvidia/Nemotron-Personas-Japan5など

データセット

作成したデータセットのサンプルは以下です(GPT-5を使用して合成しました).今後open-weightモデルを用いて,データ件数を増やしたものを公開予定です(計算資源がもっと欲しい・・・).またreasoning過程を含んだものも公開予定です.

  1. https://arxiv.org/abs/2410.14251

  2. 今回はサンプルのためreasoning過程を含んだデータにはなっていません.今後作成予定です.また,本文中にあるように論文の実装とは完全には一致していません.

  3. https://github.com/ShuoTang123/MATRIX-Gen

  4. 筆者のリソースの制約のため.

  5. https://huggingface.co/datasets/nvidia/Nemotron-Personas-Japan

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?