Upgrade to Pro — share decks privately, control downloads, hide ads and more …

松尾研LLM講座2024 最終コンペ解法

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Aratako Aratako
May 21, 2025
320

松尾研LLM講座2024 最終コンペ解法

Avatar for Aratako

Aratako

May 21, 2025
Tweet

Transcript

  1. 最終コンペの簡単な概要 Baseモデルから SFTやDPO等で追加学習を行ってモデルを開発し、 そのモデルで Elyza-tasks-100に似た独自ベンチマークに対して 回答を行い、その回答の品質を競う • 予選:LLM as a

    judgeによる自動評価(開発期間公開データ) • 決勝:LLM講座受講者による人手評価(開発期間非公開データ) 最終結果 • 予選最終スコア(Public Leaderboard): 3.83 • 決勝最終スコア(人手評価): 3.77 • 最終順位: 1位
  2. 最終コンペの内容公開~開発方針決定 まず最初にやったこと:コンペルールの熟読 と公開問題の目視確認 コンペルールについて • ベースモデルはllm-jp-3またはGemma 2シリーズの各種baseモデルから選択 →llm-jp-3 13bかGemma-2 27bのどちらかを使うことになりそう

    • 推論の際にはL4で1時間以内に推論完了 することが必須 →llm-jp-3 13bは8bit、Gemma-2 27bは5bit程度に量子化が必要 →5bit程度であれば性能劣化は比較的抑えられる だろうと考えられる • 決勝では公開された問題とは別の非公開問題に対して人手評価 が行われる →公開タスクだけに対してOverfitしても決勝でスコアが下がってしまう →人手評価が行われるのでLLM評価では気付きにくい問題に対処 が必要
  3. 最終コンペの内容公開~開発方針決定 以上の内容から、以下のような開発方針を決定 • 公開タスクにOverfitしないように、公開タスクからデータを合成する等は行わ ず、あくまで汎用的な日本語対話性能の高いモデル を目指す • 外部知識無しで解ける問題が多いためRAG的なシステムは利用しない ◦ RAGはLong

    Contextの情報抽出タスクのようなものなので、外部知識不要な 場合に行ってもシンプルなQA性能には悪影響を及ぼす可能性がある ◦ 同様に継続事前学習も行わない(元モデルのパラメータを破壊したくない) • 数学や推論タスクの難易度は比較的低いため、Reasoningのような高度な 推論は基本的に行わない ◦ ただし性能向上の余地はあるので、余裕があれば取り組みたかった
  4. ベースモデル選定 ベースモデルにはllm-jp-3 13bとGemma-2 27bの2つの選択肢があった • 単純なモデルサイズはGemma-2 27bの方が2倍程度大きい • llm-jp-3 13bを採用する場合は8bit、Gemma-2

    27bを採用する場合は 5bit程度に量子化が必要 • 事前学習データの全量は恐らく Gemma-2 27bの方が多い が、 日本語データの多寡については不明 シンプルに同じデータで2つをSFT→量子化・推論して精度評価して選定した 結果、Gemma-2 27bをベースモデルとして採用
  5. 学習 学習は以下のような4段階で行った baseモデル Gemma-2 27b 中間モデル ① 中間モデル ② 中間モデル

    ③ 最終提出 モデル④ SFT オープンデータ中心 CPO-SimPO Off-Policyデータ中心 CPO-SimPO On-Policyデータ ORPO On-Policyデータ
  6. 学習 ①SFT 主要な学習パラメータ • learning rate: 1e-5 • lr scheduler:

    cosine_with_min_lr (min_lr=1e-6) • epochs: 2 • sequence length: 4096 評価 Llama.cppでQ5_K_Mに量子化して評価 • 予選リーダーボードスコア:3.66 • 手元のElyza-tasks-100スコア:4.11/4.17(gemini-1.5-flash/pro-002評価)
  7. 学習 ②CPO-SimPO(1回目) 主要な学習パラメータ • learning rate: 3e-7 • lr scheduler:

    cosine • epochs: 1 • sequence length: 2048 • beta: 10 • simpo_gamma: 5 • cpo_alpha: 0.05 ※一部のハイパーパラメータについてはSimPOの公式リポジトリを参考にした
  8. 学習 ②CPO-SimPO(1回目) 評価 Llama.cppでQ5_K_Mに量子化して評価 • 予選リーダーボードスコア:3.66 • 手元のElyza-tasks-100スコア:4.17/4.18(gemini-1.5-flash/pro-002評価) スコアは学習元のSFT後モデルとほぼ同じだが、目視で以下のような変化を確認 •

    推論能力が向上し、難しめのタスクが解ける ようになっている • 出力に日本語以外の言語 (英語など)が一部混ざったり、微妙に不自然な 日本語が増えた(いわゆるcode switching)
  9. 学習 ②CPO-SimPO(1回目) 出力例( Elyza-tasks-100) 質問: 82歳の男性が24歳の友人と、ここ数十年で政治がどれだけ変わったかについて話していました。 Q: 誰が政治の変化を批判しているのでしょうか? 選択肢 -

    82歳の男性 - 24歳の友人 - 情報不足 回答: 情報から具体的に誰が批判的な意見を持っているのかは明確にわからない状況です。特に年齢差によ る立場だけでなく、会話の流れや個別の経験・価値観によって変化を感じたり批評したりする傾向が異なる可能 性もあります。具体的な発言があれば別ですが、この質問の選択肢には「情報不足」が含まれていると思いま す。
  10. 学習 ③CPO-SimPO(2回目) 選好データの合成の流れ 1. Magpieの手法をteam-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-GPTQ-8bitに適用し、約10万件のinstruction を作成 2. cl-nagoya/ruri-largeを使ってinstructionの埋め込み表現を取得 3. 取得した埋め込み表現を元に、

    Mini Batch K-Meansによってinstructionをクラスタリング 4. 各クラスタから最大3個までinstructionを抽出 5. 抽出した約2万6500件のinstructionに対し、Qwen/Qwen2.5-72B-Instruct-GPTQ-Int8を使ってEvol-Instructを適用 6. 上記で作成したinstructionデータに対し、前回の学習済みモデルを用いて temperature=1で回答を1件 あたり5回生成 7. 5個の回答それぞれに対して、 Qwen/Qwen2.5-72B-Instruct-GPTQ-Int8を用いて0~5点のスコア付けを実施 8. 1つのinstructionに対する5個の回答について、最もスコアが高いものを chosen、低いものをrejectedに配置 9. 上記の流れで合計15664件の選好データを作成し利用
  11. 学習 ③CPO-SimPO(2回目) 主要な学習パラメータ • learning rate: 3e-7 • lr scheduler:

    cosine • epochs: 1 • sequence length: 2048 • beta: 10 • simpo_gamma: 5 • cpo_alpha: 0.05
  12. 学習 ④ORPO 選好データの合成の流れ 1. 2回目のCPO_SimPOの学習時に利用した合成 instructionデータ Aratako/Magpie-Tanuki-Instruction-Selected-Evolved-26.5kに対し、Qwen/Qwen2.5-72B-Instruct-GPTQ-Int8を 使ってinstructionのカテゴリをラベル付け 2. 同じカテゴリに分類された

    3つのinstructionをseed taskとしてQwen/Qwen2.5-72B-Instruct-GPTQ-Int8に 与え、Self-Instructの手法で7個のinstructionを生成 3. 上記の流れで合計約6万件のinstructionデータを作成 4. 上記の流れで作成したinstructionデータに対し、前回の学習済みモデルを用いて temperature=1で回答を 1件あたり5回生成 5. 5個の回答それぞれに対して、 Qwen/Qwen2.5-72B-Instruct-GPTQ-Int8を用いて0~5点のスコア付けを実施 6. 1つのinstructionに対する5個の回答について、最もスコアが高いものを chosen、低いものをrejectedに配置 7. 上記の流れで合計25166件の選好データを作成し利用
  13. 学習 ④ORPO なぜ急にORPOに手法を変更した? →3回目のCPO-SimPOをしたモデルの出力に繰り返しが頻繁に発生してしまった 質問: 次の文章を読んで、その人がどの程度怒っているか、 1〜10の尺度で評価してください。 (1=怒っていない、 10=非常に怒っている )。

    1. またテストで赤点か。君は全く ... 2. テストで赤点?今回は難しかったね。 回答: 1. またテストで赤点か。君は全く… - この文は6〜7程度。直接的な怒りの表現「全く」が使われ、具体的な不満や失望が強調されており、強い苛立ちや怒りが感じられますが、怒りが極端な暴力的な表現にまでは至っていないため、10の最高レベルには少し届 かないと解釈できます。\n\n2. テストで赤点?今回は難しかったね。 - この二番目の文章は1〜2程度。失望や同情と混ざった反応であり、具体的な怒りよりも心配や困惑が含まれており、怒りとしては弱いです。どちらかというと、状況に対する理解と少しの懸念の 表現が主です。しかし文脈によっては怒りのニュアンスを示唆する可能性もゼロではないものの、明示的にはほとんどありません。ただし、単に感情の強さで言えば非常に低く評価する方の解釈が適切で、質問文の評価としては、怒りはほとんどないと判断しやす く、ここでは1〜2程度が妥当ですが、厳密に「怒り」の評価だけを考慮すると、この評価はより怒りを示す言葉がないため、具体的怒りとしては下限付近と評価しています。より正確には、怒りに関する評価としてより明確な基準で言えば、この文脈では1に近いとして いますが、初回の回答で明確に「怒り」の度合いを問う場合の直接的なアナライズ結果として、その評価よりも具体的な怒りの言葉として受け取るよりは、1〜2の範囲で怒りを含む表現下の感情を示唆しているというより、前提として提示された怒りの尺度の適用に おいて実際の怒りの表現が弱いという観点から、ここでは具体的な怒りのスケール感を強調するために6〜7との最初の評価に比べて補足的に説明を加えますが、直接の怒りの評価として提示された文からは、再確認すると怒りの度合いを測るには2の方が適切と は言えど、回答の文脈と一致させるために、具体的な評価として怒りの度合いに集中するとこの回答では二番目に対しては一つの誤解を避けるために1〜2と補足しながらも、あなたの問いかけに対する明確さを追求する観点からは誤りとなる部分を強調せず、私 の説明の範囲で既に提供したように、初回の評価に加えて、再度具体的な怒りの表現としてよりも感情のトーンについてもう一度見直すと、あなたの具体的な要求(怒りの評価)に対しては厳密に適用しますが、この二番目の文についての怒りの強い評価を再評価 せずとも、回答の意図に寄り添うと怒りとしては最小限としつつ、あなたの質問の回答としては他の文と比較した分類においても補足を記載したものの、最も適切な怒りの評価を下限寄りとする部分は明確ですが、ここでは特定「怒りの言葉の不在」からして評価の 再考が発生しつつも、具体的な答えとしてあなたの尋ねた尺度での数値化に寄るため、初回の具体的な怒り評価として与えつつも、あなたが特に求めている怒りの強度として第一文との対比で提示するよりも、二番目の文の具体的なあなたの評価要求に対する回 答の補足として位置づけつつも、ここではあなたが示された尺度で厳密に怒りを評価する観点から、最初の実質的な答えを支持しつつも、補足として怒りの具体性に言及せずに見過ごすべきではないと補足したくなるような複雑さを避けるため、最終的な二番目の 文に対して怒り度を再度明確にしつつも、以下のような評価は依然として初回の説明における怒りの度合いの基準に従いながらも、あなたの質問に対する正確な理解のために、怒り評価の意味合いでの補足を避けたい意図もあったが、本質的にはこの評価におい てはすでに近い値域での評価として説明しましたが、再評価を避けつつ補足すると完全に無視することはせずに、あなたの要求に応じて具体的なスケールでの数値として再度強調はせず、初回答の注釈を加える範囲で、怒りの具体的指標に沿った明確な怒りとし ては文章自体の示唆から見ると、初回同様、最後にはこの質問に対する回答として二番目の文を怒りの低さという観点からより明確に示唆した意味を強調するために細かく述べつつも、解答の根拠となる怒りの評価を再度確認する際には...
  14. 学習 ④ORPO 主要な学習パラメータ • learning rate: 8e-7 • lr scheduler:

    cosine • epochs: 1 • sequence length: 2560 • beta: 0.1 評価 ExLlamaV2で5.8bpwに量子化して評価 • 予選リーダーボードスコア:3.83 • 手元のElyza-tasks-100スコア:4.6/4.52(gemini-1.5-flash/pro-002評価)
  15. まとめ ざっくりとした解法まとめ • ベースモデル: Gemma-2 27b • 学習: 以下のような4段階での学習 ◦

    SFT: オープンデータ中心、日英混合約50万件 ◦ CPO-SimPO(1回目): Off-Policyデータ中心、日英混合約16万件 ◦ CPO-SimPO(2回目): On-Policyデータ、日本語約1万5千件 ◦ ORPO: On-Policyデータ、日本語約2万5千件 • 量子化: ExLlamaV2による5.8bpwへの量子化 • 推論: Q8 KV Cacheを使ってVRAM消費量を削減し推論
  16. 謝辞 関係者の皆様の協力のもと、今回のLLM講座および最終コンペに 取り組むことが出来ました。 • 松尾・岩澤研究室の皆様 • 各回の講義を担当していただいた講師の皆様 • 講義やコンペの運営に携わっていた皆様 •

    様々な知見等を共有いただいたコミュニティの皆様 • 様々なオープンデータを開発・公開していただいた皆様 • llm-jpおよびGemmaモデルの開発者の皆様 • その他の講座関係者の皆様 • 一部計算資源を個人的に貸与いただいたSpiral.AI株式会社様 この場を借りて感謝申し上げます。ありがとうございました。