1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SDG(Scalable Data Generation)で作る高難度QAデータセット

Last updated at Posted at 2025-09-21

1. 概要

この記事は 東京大学松尾・岩澤研究室 LLM開発コンペ2025 に参加して得られた知見をまとめたものです。
ここでは、近年盛んに用いられている合成データ。その中でも今回の課題である「高難度の問題と回答」データセットを作るために、私が実際に試みたプロセス・改善点・最終プロンプト・パイプラインを共有いたします。

2.1この記事でわかること

  • SDG(Scalable Data Generation)による合成データ生成
  • 学術グラフ(MAG由来)を使った難問生成のコツ
  • 一貫性を損なったデータセット → 対策パイプライン

3. SDGとは

SDG(Scalable Data Generation)とは

この手法は、チームリーダーの Holy-fox さんから学びました。
質問と回答だけの一般的なQAデータセットからthinkingモデル用のデータセットを作る際には思考過程パートだけを後から作って追加したりします。SDGはそこから着想を得たのかどうかわかりませんが、ゼロから合成データを生成するひとつの手法です。

生成パイプラインの例:

  1. 問題生成:問題生成のためのプロンプトを使いLLMで問題を生成
  2. 回答生成:問題を解かせるためのプロンプトと生成した問題で回答を生成
  3. 思考過程生成:思考過程を生成するためのプロンプト、生成した問題と回答を使って思考過程を生成

これらの生成の順番や生成プロンプトを工夫することで目的にあった合成データセットを作成します。

コンペの課題と戦略

そして、コンペの課題がHumanity's Last Exam(以下HLE)とDo not Answer(以下DNA)での高得点を狙うこと。Do not Answerはある程度のデータセットは巷に落ちていそうなものだけれど、HLEについてはまぁ、データがないのです。ここに目をつけたリーダー「Holy-foxさん」の戦略はこれ。

戦略
作りたいモデルをしっかりと言語化して、データを生成し、学習することによって理想のモデルを目指す

なんかね、ワクワクするでしょ
ここでいう言語化の部分はまた別で報告できればと思います。

チームで取り掛かった改造点

データ班はSDGを使いこなし、より良いデータセットを生成するために、プロンプトの改良や生成パイプラインの工夫をミッションとしました。
当初、データ生成プログラムは vllm サーバーを立てることを前提に作られていました。予選で用意された環境は H100×8 を3ノードという驚異的なものでしたが、私たちは DeepSeek-r1-0528 のファインチューニングを予定していたため、まずファインチューニングのテストを優先しました。vllm を動かせる環境を手元に持たないメンバーが多かったため、メンバーの協力で API 対応、ollama 対応、Mac 対応などに改善が加えられ、私も問題なく作業できるようになりました

初期のパイプライン

4. 課題

データを生成し、一つ一つ確認をしていくと一つの問題に行き当たりました。
30Bのモデルで生成していたせいか、先に出力した回答と後から作った思考過程がうまく回答とつながらないことです。自分の中で仮説を立てました。

  • 難問生成はうまくいきそう(プロンプトとモデル次第)
  • そもそも難問なので回答生成でハルシネーションを起こす
  • 結果、思考過程もめちゃくちゃになる

そこで、以下の仮説を立ててパイプライン改善することにしました

  • 難問を解くにはしっかりと思考させてから回答させたほうが良いのではないか(出力のスケーリング則)
  • そもそも一貫性のないセットで思考進化工程は正常に機能しないのでは → いったんやめてみる

5. SDGの改造

そこでSDGのパイプラインを改造することにしました。
パイプライン変更に伴い、一部のプログラム改造、プロンプトは作り直しです。

5-1.パイプライン改善

  • 改良版 SDGの作成(パイプライン変更に伴う小改造)
    • GitHubリポジトリ:ikedachin/modified_sdg(公開中;*_2.pyを実行)
      (最終的には多少変更になっています)
  • 難問を生むためのネタ元:学術グラフ
    • Microsoft Academic Graph(MAG)系の分野/トピックから3段のナレッジグラフを100種用意。(TajimaItsuroさんのアイデア)
    • ナレッジグラフからランダムに選択し、問題分野の指定をするためプロンプトに埋め込み。
  • パイプラインの変遷(課題と仮説)
    • 課題1:あとから問題や進化を入れると一貫性を壊すことがある

    • 課題2:「問題生成 → 回答生成 → 思考過程生成」のパイプラインは思考過程と回答の間に 整合ミスが出やすい

    • 解決方法(最終):問題生成 → 多様性フィルター(embedding使用) → 思考過程生成 → 回答生成

      • 思考過程生成時のモデルの役割を「その分野の専門家」に固定
      • 思考過程生成では解に至るステップ列を明示
      • 問題と思考過程 を入力にして、回答生成することで一貫性を強制

5-2. 問題、思考過程、回答作成のためのプロンプト改善

最終プロンプト

(1) 問題生成プロンプト

  • 役割:学術グラフで指定した分野の世界最高の専門家
  • 出力制約:
    • 1問だけ
    • 数式は LaTeX
    • PhDレベル以上の問題作成を指示
  • 入力: 学術グラフから選択した一つ(以下の工程全てで利用)
日本語版学術グラフ
数学/算術/メディアント(数学)
数学/数学教育/教育研究
数学/数学教育/手段-目的分析
数学/幾何学/15面体
数学/数理最適化/最近接点
数学/計量経済学/切断正規分布
数学/数理最適化/静的最適化
数学/制御理論/位相制御
数学/計算科学/Xeon
数学/数理経済学/完全情報
数学/微積分学/ダルブー積分/ダルブーベクトル
数学/微積分学/パースの法則
数学/離散数学/列挙/逆探索
数学/計量経済学/価格方程式
数学/離散数学/ZJ定理
数学/数学教育/社会科/資料に基づく設問
数学/数理経済学/超加法性
数学/制御理論/ジャイレータ
数学/アルゴリズム/トランスピュータ/トランスピュータネットワーク
数学/数学教育/状況的興味
数学/幾何学/不完全群
数学/オペレーションズリサーチ/在庫計画
数学/アルゴリズム/問題記述
数学/数学教育/プログラム学習/プログラム化教科書
数学/数理最適化/シンプレックス探索
数学/アルゴリズム/ランダム射影
数学/オペレーションズリサーチ/ジープ問題
数学/数学教育/成果基盤型学習
数学/微積分学/クアドラトリクス
数学/組合せ論/カタラン数/コスタン分割関数
数学/幾何学/多項式増加群に関するグロモフの定理
数学/統計学/強い推論
数学/算術/サラミスのタブレット
数学/応用数学/打ち切り誤差(数値積分)
数学/幾何学/ナーゲル–ルッツの定理
数学/離散数学/予想/ホワイトヘッド予想
数学/純粋数学/クンマー面
数学/数理経済学/需要ベクトル
数学/計量経済学/期待損失
数学/微積分学/数学定理
数学/数理物理学/ポアンカレ群
物理学/工学物理学/AP物理
物理学/大気科学/非一様加熱
物理学/数理物理学/4因子公式
物理学/数理物理学/ブリンクマン座標
物理学/大気科学/霧/氷霧
物理学/熱力学/エントロピー保存
物理学/大気科学/潜熱/潜熱伝達
物理学/化学物理学/水の動態
物理学/地球物理学/四面体仮説
生物学/遺伝学/小児遺伝学
生物学/神経科学/場所記憶
生物学/毒物学/生物兵器/バイオテロ因子
生物学/古生物学/カランティクス科
生物学/遺伝学/プセウドトリボス
生物学/分子生物学/葉緑体ピルビン酸デヒドロゲナーゼ複合体
医学/循環器学/不整脈シミュレーター
医学/リハビリテーション医学/補助椅子
医学/免疫学/二次呼吸器感染症
医学/解剖学/虹彩間質
医学/循環器学/ニトログリセリン
社会学/人類学/民間信仰
芸術/人文学/ニュージーランド研究
政治学/広報/組織科学
哲学/人文学/カリローエ
哲学/宗教学/ムハンマド=アリ
心理学/心理療法士/心理的レジリエンス/パナキー
歴史/古典学/クロマトグラフィーの歴史
経済学/商業/直接店舗配送
ビジネス/産業組織/技術選択
化学/物理化学/Babr
化学/放射化学/放射性医薬品
化学/計算化学/可逆参照系伝播アルゴリズム
化学/計算化学/計算化学グリッド
化学/生化学/サルトリイバラ(Smilax excelsa)
化学/計算化学/チイレン
化学/核化学/水酸化カリウム/KOHの製法
工学/組込みシステム/ハードディスクドライブの性能特性
工学/ソフトウェア工学/コード共有
工学/海洋工学/冠水したエンジン
工学/石油工学/ガスリフト
計算機科学/計算科学/グラフィックス処理ユニット/物理演算プロセッサ
計算機科学/図書館情報学/情報ニーズ/印刷資料の読書
計算機科学/データマイニング/矛盾解決
計算機科学/機械学習/信念集約
計算機科学/機械学習/ランダムフォレスト/勾配ブースティング
人工知能/Friday Night at the ER(ERの金曜夜)
人工知能/コンテキスト認識
自然言語処理/言語系統
機械学習/特徴ベクトル/非類似空間
機械学習/勾配ネットワーク
歴史/経済史/社会科学史学会
医学/薬理学/米国食品医薬品局への批判
工学/経営科学/意思決定の質
地理学/環境保護/エルサルバドル・プロジェクト
物理学/気象学/災害研究
計算機科学/シミュレーション/コンタクトセンター
物理学/量子電磁力学/複素エネルギー
哲学/美学/シミュラークル
歴史/美術史/未発表作品
日本語版問題文生成プロンプト(academicに学術グラフの一つを埋め込む)
## プロンプト(Markdown形式)
あなたは世界で最も優れた{academic}の学者です。
この分野の大学院生を超えるAIに向けた問題を作成してほしいです。Ph.D.レベルの問題で、解くことが非常に困難な問題を作成してください。

以下の指示を厳密に遵守し、指定された条件を満たす独立した質問を1つ生成してください。

---

### 質問生成の条件

次の条件を全て満たした質問を1つだけ作成してください。

1. **質問数について**
   * 生成する質問は、必ず1つだけに限定してください。複数の質問を含めることは認められません。

2. **質問の独立性**
   * 生成する質問は、他の質問や文脈とは一切関連せず、完全に独立した内容である必要があります。

3. **質問内容の分野**
   * あなたの専門分野から、以下に示す観点の少なくとも1つを明確に取り入れて、多様性のある質問を生成してください。
     * **設問のタイプ**(例:多肢選択式、もしくは短答式)
     * **問題のレベル** (例:専門家レベルの知識と推論力が必要であり、単なる知識問題やパターン認識では解くことが困難)
     * **視点の多様性**(例:第一人称視点、第二人称視点、第三者的視点など)
     * **文体の多様性**(例:敬体・丁寧語、常体・普通語、詩的表現、口語的表現、疑問文形式など)

4. **具体性と簡潔性**
   * 生成する質問は具体的かつ簡潔であり、一般的な知識を持つ人物が十分に回答可能な内容でなければなりません。

5. **出力形式**
   * 生成する問題は数式はLaTex形式を用いる
   * 生成する問題に表が含まれる場合はMarkdown形式を用いる
---

以上の条件を十分に理解したうえで、直ちに質問の生成を開始してください。
また、質問のためのプロンプトのみを出力してください。(## 質問 などは必要ありません。)


(2) 思考過程 生成プロンプト

  • 目的:答えに至るための推論経路だけを書く(答えは書かない)
  • 構成:射程の明示 → 用語最小定義 → 前提/仮定 → 戦略列挙 → 主筋推論 → 検証 → 直前要約
  • 役割:学術グラフで指定した分野の専門家
  • 入力:問題文 + 学術グラフ
日本語版思考過程生成プロンプト
# 目的
あなたは卓越した「思考の探索者」であり、世界最高水準の {academic} の専門家です。
このプロンプトの目的は、与えられた「質問」に対して、答えへ到達するための最適な思考過程(推論の道筋) を、文章主体で明晰に生成することです。
出力すべきは「思考過程」のみ です(最終的な答えそのものは書かないでください)。

⸻

# 定義	
•答えに至る道:質問を起点に、情報整理 → 仮定設定 → 手法選択 → 推論展開 → 妥当性検証 へと進む、結論に到達するための論理的手順。
•思考過程:上記の道筋を散文で可視化したもの。必要に応じて数式(LaTeX)や表(Markdown)を用いてもよいが、説明の主役は文章とする。

⸻

# 原則(良い思考過程の条件)
1.文章主体
•説明は散文を基本とし、必要時のみ LaTeX(数式)・Markdown(表)を補助的に使用する。
2.射程の明示
•冒頭で「質問が求める答えの種類・範囲・前提条件」を簡潔に特定する。
3.背景と根拠
•利用する定理・法則・事実・定義は、なぜ必要かを短く説明し、出典レベルの厳密さは不要だが論拠の妥当性を示す。
4.段階的・可監査性
•各ステップで「何をして、なぜそうするか」を明確化し、途中の飛躍や省略を避ける。
5.初学者にも追える透明性
•専門用語は最小限にし、登場させる場合は一行の定義または直観を添える。
6.代替案と選定理由
•可能なアプローチの候補を挙げ、採用した主筋と棄却理由を一言で整理する。
7.検証(Sanity Check)
•単位・境界・極限・反例可能性・オーダー評価など、結果の整合性点検を行う。
8.安全性
•倫理・安全上の問題を含む場合は、当該内容の展開を行わず、思考過程内で扱えない旨を明記する。
9.内的独白の外化
•文章は論理的な内的独白を外化した体裁で、読者が追跡できる粒度で記述する。

⸻

# 推奨構成(雛形)
1.問題の射程と目的:求める出力形式・評価基準・制約を一行で特定。
2.用語・記号の最小定義:不明瞭さを消すためのミニ辞書。
3.前提・仮定・与件:確定事項/不確定要素/必要仮定を仕分け。
4.戦略の列挙と選定:候補手法 → 採用理由/棄却理由。
5.主筋の推論展開:各ステップの操作と根拠を対応づけて進める(必要に応じて数式は LaTeX)。
6.検証と感度:境界・極限・オーダー・反例探索・誤差源の点検。
7.導出直前の要約:最終解は書かず、どこまで確定したかを要約。

⸻

# 出力仕様
•出力は「思考過程」テキストのみ。最終的な答え・コード・箇条書きの羅列のみ・謝辞・付記は不要。
•数式がある場合は LaTeX、表は Markdown を用いる。
•冗長な装飾は避け、論理と可読性を最優先する。

⸻

# 入力
•Question: {Question}

⸻

# 指示
以下に、上記の原則・構成・仕様に従った**「思考過程」**のみを出力してください。
いかなる場合も「思考過程」以外は出力してはなりません。

(3) 回答 生成プロンプト

  • 入力:問題文 + 思考過程 + 学術グラフ
  • 出力:結論先出し、簡潔・正確、必要なら式は LaTeX
  • 安全性:リスクのある領域なら注意喚起
日本語版回答生成プロンプト
# 目的

あなたは卓越した「回答生成者」であり、{academic} 分野における世界最高の研究者です。
このプロンプトの目的は、提示された「質問」と「思考過程」に基づき、正確かつ簡潔な「回答」を生成することです。内容は Ph.D. レベルでも困難な場合がありますが、あなたの知識と推論力を最大限に活用し、必要に応じて関連分野の知見を統合して、妥当性と再現性の高い最終解を提示してください。

「良い回答」とは何かを理解し、その指針に従って出力を行ってください。なお、出力すべき内容は 「回答」のみ であり、それ以外の情報は含めてはなりません。


# 定義 * 問(Question)
ユーザーがAIに投げかけた要求です。ユーザーの意図を正確に把握し、その意図に応じた回答を生成してください。 * 考過程(Think)
質問に対する回答を導くための論理的・段階的な推論や考察を文章で記述したものです。必要に応じて数式や表を用いることは可能ですが、基本的には文章を主体とします。
思考過程の要件: * 理的であること * 階的かつ明確であること


# 良い回答の条件
良い回答とは、以下の要件を満たすものです:

1.結論を先に述べる
  * 回答冒頭で結論を簡潔に提示し、その後必要に応じて補足や要約を示す。
2.簡潔であること
  * 質問の意図に沿った結論を簡潔に述べる。
3.正確であること
  * 思考過程に基づき、誤りのない内容を含む。
4.ユーザー視点の考慮
  * 質問者の意図を的確に把握し、求められる回答を提供する。
5.安全性と倫理性
  * 回答が倫理的・安全上の問題を含む場合、そのリスクを適切に伝える。


# 出力形式
 * 文章主体:基本は散文形式で記述。必要に応じて Markdown や LaTeX を活用する。
 * 数式:LaTeX 形式で記述する。
 * 表:Markdown 形式で記述する。



# 指示
以下に「回答」を出力してください。
いかなる場合も「回答」以外を出力してはなりません。


# 質問と思考過程
Question(質問): {Question}
Think(思考過程): {thinking}


5-3. 最終パイプライン

ポイントは以下

  • 当初の生成順から「問題生成 → 思考過程 → 回答生成」の順を上記に変えたこと
  • プロンプトの改善による生成物の安定
    (例:思考過程生成により具体的なに**段取り(ステップ列)**を強く指定)
  • 「問題、思考過程、回答」までの一連の流れのブレが減ったと思う

問題は「僕が解けそうな問題がほとんどないことなんですけどね。」

すごいよ、LLM。そしてプロンプトをの大事さを思い知らされたよ・・・。

6. 生成したデータセット

  • Hugging Face:ikedachin/difficult_problem_dataset_v2
  • Team-Kitsune のプロジェクトデータセットにもマージしています。

7. 課題と対策

  • プロンプト改善は出力を見て改良をする手立てしか持ち合わせていない
    • 出力をよく読んだり、LLMにジャッジさせたりしていた
  • 問題が難しくて、正しいかどうか判定できない。
    • データセット完成後にクローズドモデルに解かせてみて検証すると、データセットが良かったり悪かったり。
      注:絞り込みやデータ生成にクローズドモデルは使っていません。
  • 一度にたくさんのデータを作ろうとするとメモリーがキビシイ
    • 中間データをメモリーに保持しているから?
    • 対策
      • シェルスクリプトでバッチ生成
      • 「64 問 × 20 回(合計 1,280 問)」のように刻んで生成
  • データ生成中は何もできなくなるので別のパソコンが必要
    • 旧PCが残してあってよかった!

8. 得ることができた知見

  • SDG で得たこと
    • 合成データを生成する方法の一つがよく理解できた
    • より正確に指示に従うプロンプト作成能力の向上
    • 各モデルの出力特性を感じ取れた
      • Phiなどはかっちり回答、Qwen系は知識が豊富でふんわり回答など
    • 今回は難問のデータセット生成に活用した、例えばRAG用データ生成にも活用可能だと思う。
  • プロンプトエンジニアリングの重要性
    • 20B 級でもプロンプトが良ければかなり戦える
    • 特に難問生成は非常に効果的
  • LLM開発に誰でも貢献できる
    • 合成データ生成にはドメイン知識が必要
      • ドメイン知識を持った人がLLM開発に参加
    • データ作成は非常に重要な役割であること

9. 終わりに

AIは「現代のソロバン」とも比喩されますが、私自身は「データセットづくりこそ、現代のソロバン」だと感じています。そして何より結構楽しい。来年も同様のコンペがあれば来年もチャレンジしたい。ぜひ、皆さんもチャレンジしてみてください。

松尾・岩澤研の皆さん、このプロジェクトを支援してくださったさくらインターネットはじめ関係者の皆様にお礼申し上げるとともに、この経験を必ずや社会に還元したいと思います。

本プロジェクトは、国立研究開発法人新エネルギー・産業技術総合開発機構(以下「NEDO」)の「日本語版医療特化型LLMの社会実装に向けた安全性検証・実証」における基盤モデルの開発プロジェクトの一環として行われます。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?