1.背景・経緯
チームねこ
のnakanoです。今回のコンペでは、学習用の合成データ生成チームの一員として、SFTやGRPO用の合成データの生成に取り組みました。最終課題のHLE対策として難易度の高い学際的な問題を合成する必要がありましたので、IMO(国際数学オリンピック)などの高難易度の数学データセットをベースとし、異なる領域・分野に関わる情報をseedとして追加することで、より複合的な情報を内包した合成データの生成に関する検討を行いました。
基本的には、AI-Assisted Generation of Difficult Math Questionsで用いられている$MATH^2$という手法を応用し、数学(Math)と物理(Phisycs)の問題をseedとして与えて、2つの異なる領域を組み合わせた合成問題の生成を行いました。これらの手法により、より複雑な難易度の高い問題を生成することはできたのですが、 合成問題の難化 に伴う以下のような課題が見えてきました。
1. 「正答」を得ることが困難である。また、問題として成立していない場合がある。
⇒【対策】合成した問題を複数回解き、回答の一貫性・確からしさに基づいて判断する。
2. 問題に伴い解答も複雑化し、展開形・因数形など多様な表現形式をもつ数式が最終回答なるケースが増える。
⇒【対策】Tex形式で出力した解答をSympy形式に変換し、等価性によって正誤を判定する。
3. 単純な計算負荷が増大することで、問題を解く際のreasoning tokenの出力が非常に長くなる。
⇒ CoT(Chain of Thought)が過度に長くなる場合、環境によっては解答生成時にエラーが発生し、結果が得られないケースが頻発する。
このうち、「1.」「2.」についての対策には目途が立ったのですが、「3.」への対応に難航しました。
今回の検討では、計算ノードに余裕がなく、合成データに割く計算資源がなかったため、OpenRouteの無料枠の範囲内で「問題合成」と「解答生成」を行ったのですが、「解答生成」においてエラーにより出力が得られないという問題が多発しました。このエラーの明確な原因は判明していませんが、解答生成時の reasoning token が過度に長くなり、OpenRouterの無料枠における利用制限に抵触していたのではないかと推測しています。
2.より高品質な合成問題の生成
上記の問題によりPhase1のトレーニングデータの生成に間に合わず、今回のコンペには本手法で合成したデータを適用することはできませんでした。ここで紹介するのは、その後、決勝進出を想定して検討を進めていた内容になります(残念ながら予選敗退という結果に終わりましたが...)。
2.1 合成問題の品質の定量化
先に示した手法によって複合的な問題を生成できたものの、実際に合成された問題を読み解いてみると、単に計算量や手順が増えただけの見かけ上の難化に留まるケースが多いことが分かりました。これは、モデル自身が「本質的な難しさ」と「計算の煩雑さ」を適切に区別できていないことが原因と考えられます。
有意義なCoTを実現し、トレーニングデータとして有用な reasoning token を得るためには、本質的な問題の難易度を維持しつつ、計算負荷を抑制する調整が必要です。一般的にも、良質な問題とは「本質的な難易度は高いが、適切な着想や方針が得られれば、最小限の手順で解答に到達できるもの」と考えることができます。そこで、以下のような評価基準を定義し、定量的な評価基準に基づいて合成問題の生成・修正を行うようプロンプトで指示しました。
(B) Next, provide a **quantitative evaluation**:
- Domain Knowledge Requirement (0–10)
- Conceptual Insight (0–10)
- Essential Difficulty (0–10)
- Computational Burden, inverted (0–10; lighter computation → higher score)
- Overall Quality Score = average of the above (rounded to one decimal)
(B) 定量的評価
- 分野知識要件 (0–10)
- 概念的洞察 (0–10)
- 本質的難易度 (0–10)
- 計算負荷(逆評価:0~10;計算負荷が軽いほど高得点)
- 総合品質スコア = 上記項目の平均値(小数点以下1桁で四捨五入)
2.2 合成問題の生成手順
具体的には以下のような手順で合成問題の生成し、比較的品質の良い問題のみをスクリーニングして解答の生成を行いました(プロンプトやスクリプトなどの詳細はGitHubリポジトリをご参照ください)。
Step1 合成問題の生成
プロンプト内で段階的に手順を指示し、複合的な合成問題を生成する。
- 数学と物理問題をseedとして合成問題の草案を生成($Math^2$を応用)
- Evol-InstructやWizardMathの手法を適用して草案を修正
- 問題の質に関する定量指標を導入し、問題を反復的に改訂・採点することで、より高品質な合成問題を生成。比較的スコアの高い問題のみをスクリーニングして以降のStepで利用。
Step2 解答の生成
合成した問題を各10回づつ解き合成問題の正答を推定する。その際、reasoning token (CoT)とTex形式で出力させた最終解答を同時に収集。
Step3 TeX形式の解答をSymPy形式に変換
得られた最終解答の一貫性を定量的に評価するため、解答をLaTeX形式からSymPy形式に変換。
Step4 self-consistencyによる検証
Sympy形式に変換した複数の推論結果を用いて等価性を評価し、解答の整合性や採用の評価基準とする。
3.おわりに
本手法により1000個の新たな合成問題を生成し、その一部(id1~300)について解答の生成を行いました。筆者の経験・知識不足のため合成データの効果検証までは実施できませんでしたが、本プロジェクトを通じて貴重な経験を積むことができました。ご協力いただいたチームメンバーおよび関係者の皆様に心より感謝申し上げます。
本プロジェクトは、国立研究開発法人新エネルギー・産業技術総合開発機構(以下「NEDO」)の「日本語版医療特化型LLMの社会実装に向けた安全性検証・実証」における基盤モデルの開発プロジェクトの一環として行われます。