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

MAP-7thplaceSolution

Avatar for yukichi0403 yukichi0403
November 27, 2025

 MAP-7thplaceSolution

Avatar for yukichi0403

yukichi0403

November 27, 2025
Tweet

Other Decks in Technology

Transcript

  1. Baselineを作る前に考えていたこと • 正解/不正解は予測の必要性がなさそう ◦ ChrisさんのDiscussion*1にあったとおり、TrainDataとTestDataでQuestionが完全にOverwrapしていた。よって 正解かどうかはLLM使わずともわかる(QuestionIdとMCAnswerをキーに結合) ◦ 生徒の説明からMisconception(Correct/Neither含む)のみを分類するシンプルなタスク • 予測すべきはMisconceptionの36クラス(Correct/Neither含む)なので普通の分類問題として解けそう

    ◦ Eediの時(2587クラスあった)と比べるとクラス数も多くない *2 ◦ RetrieverやReranker等のマルチステージの推論は、 Baselineとしては不要そう *1:https://www.kaggle.com/competitions/map-charting-student-math-misunderstandings/discussion/589400 *2:参加していない方はわかりやすい振り返り資料がいくつか公開されているのでそれを見るといいかも。こちらとか False_Misconception:Incomplete 2587class 100 @25 36class @3 Retriever Reranker Classifier Eediの基本解法 MAPのBaseline この部分は予測不要 4
  2. 5 Baselineの概要 • Model ◦ Qwen/Qwen2.5-Math-7B ◦ google/gemma-2-9b-it • Parameter(主要なもののみ)

    ◦ lora_r:64, lora_alpha:128(大きめの値にする) ◦ lr_lora_a: 1e-5, lr_lora_b: 5e-5*1(LoraのRankとAlphaを固定したうえでいくつか試す) • 学習方法 ◦ 記号のトークンを割り当てる方法 *2/分類ヘッドを使う方法の 2種類を試した ▪ 記号のトークンを割り当てる方法 • Misconceptionと記号を1対1にして、Promptで対応する記号を出力するよう指示 • そのtokenに対応するLogitsのみを取り出しCrossEntropyで学習 ▪ 分類ヘッドを使う方法( AutoModelForSequenceClassificationではない自作クラスを使用) • Automodelクラスを使い、LastHiddenStateを取り出しその最後の Embeddingを自作分類ヘッドに通して Logitsを得る ◦ 結果としてあまり精度差がなかったので、 vllmで推論しやすい前者を採用 ◦ Eediの上位解法でYes/Noのトークンを使ってRerankerを学習しており、本質的には 1つ目のアプローチと同じ *1:A行列とB行列で初期化の方法が違うためB行列の学習率を高くしている。今回のコンペでは精度比較していないのでどこまで有効だったかは不明。関連する論文 *2:同じようなアプローチのNotebookが公開されている。(https://www.kaggle.com/code/aleaiest/lb-0-945-qwen2-5-32b-gptq) 記号のトークンの割り当て … lm_head attention機構 … extracted-logits 分類ヘッド … lm_head attention機構 … cls_head
  3. • スコア/推論時間 • (補足)Misconceptionの説明 ◦ ラベルにノイズがあるのはわかっていたので、 MisconceptionごとにFewShotsの具体例を与えたうえで、 Reverse-Engeneering的にMisconception の説明文を生成。モデルは claude-sonnet-4を使用*2

    ◦ 学習時/推論時にMisconceptionにプラスしてこの説明文を Promptに入れ込む。 ◦ 説明文を入れると当然 TokenLengthが長くなるので、Questionごとに考えられるMisconceptionの選択肢に絞ることにした チームマージ前のスコア モデルの種類 Misconceptionの説明 Public LB score Private LB score 推論時間 Qwen/Qwen2.5-Math-7B なし 0.94664 0.94196 20min google/gemma-2-9b-it なし 0.94790 0.94276 2h*1 Qwen/Qwen2.5-Math-7B あり 0.94700 0.94230 20min *1:Prefix_caching=Trueとするとメモリが溢れたため、Prefix Cachingをオフにして推論した結果遅くなった。 *2:Eediの1位の方のソリューションでも説明文を合成したアプローチが紹介されており、これからも着想を得た。 You are an expert in mathematics education. Your task is to write a one-sentence explanation that describes the given Misconception. Guidelines: - Summarize the core reasoning error in simple, general terms. - Do not copy or mention numbers, variable names, or wording from the examples. - Keep the description abstract and focused on the misunderstanding itself. - Be concise, clear, and helpful for a teacher to quickly grasp the misconception. このアンサンブル(Probの単純な平均)でPublic LB score:0.95006に(当時の順位で20位くらい) 6
  4. チームマージ前に考えていたこと • 推論時間は1モデル20分〜2時間なので、たくさんアンサンブルできそう ◦ 可能な限りチームマージしたい • TestDataには新たなMisconceptionやQuestionがないのだとすると、 合成データを作ることでスコアあげられるのでは? ◦ 右の表はMisconceptionごとのMap@3スコア

    ◦ 特にスコアの低い Misconceptionにおいてデータ量が少ない ことに気づく ◦ これらについてデータ合成を行ってスコアの底上げ を行うことを考えた ▪ 結果としてCVもPublicScoreスコアも上がらず。。 ▪ なぜうまくいかない。。妙だなと思いながら一回合成データは諦める モデルのサイズを上げるくらいしかアイディアがなくなったところで、 ISAKAさんがチーム募集していたためマージ! 7 データカウント スコア
  5. • 合成データ*1の生成方法 • 合成データを使用した場合のスコア( by ISAKAさん) ◦ ISAKAさんがGemma2-9B-itで検証した*2結果のスコアは以下のとおり ◦ CV/LBともに向上

    チームマージ後の取り組み(合成データ by ISAKAさん) *1:実際に使用した合成データはこちらで公開しています。 *2:ChrisさんのNotebookのコードを元に検証しています。 合成に使用した Few ShotsのExample 合成方法 合成数 使用モデル 正解ラベル(True/False)、QuestionID、 Misconceptionの3つの項目が完全に一致 し、かつ該当するデータが5件以上存在する グループを対象に生成 各グループからランダムに3件のデータをサンプリング し、それらを参考 に新しい「生徒の説明文」を生成。 (単一のデータだけを参考にすると元データに酷似してしまう懸念があっ たため、3つの異なるデータを参照することで、より多様で質の高い合成 データを目指した。) 50,000レコード×4 グループ! (学習にはうち1つ のグループのデー タを使用) GPT-4.1と GPT-5-mini (主に4.1のデー タを使用) CVスコア : +0.003〜+0.004 LBスコア : +0.002〜+0.005 8
  6. 上記の学習の結果は以下の通り。スコア伸びた! *1 チームマージ後の取り組み(擬似ラベルつき合成データで学習) *1:Validationスコアも向上したものの、OOFで学習しているとはいえ多少のリークはあるはずなので、参考値程度にみていた。 モデルの種類 合成データ 擬似ラベル Public LB score

    Private LB score Qwen/Qwen2.5-Math-7B なし - 0.94664 0.94196 Qwen/Qwen2.5-Math-7B あり なし 0.94112 0.93823 Qwen/Qwen2.5-Math-7B あり あり 0.94993 0.94613 教師モデル (Qwen/Qwen2.5-32B-Instruct) コンペデータ 合成データ コンペデータ (擬似ラベルあり) 生徒モデル 学習 (Fulltrainingしたモデルで)推論 (3foldにわけてOOFで)推論 学習 // 教師モデルのターゲット準備 teacher_targets ← Softmax(teacher_targets / temperature) // 蒸留損失の計算 FOR each sample in batch: student_logits ← StudentModel(each sample) log_student_probs ← LogSoftmax(student_logits) individual_loss[sample] ← -Sum(log_student_probs × teacher_targets) END FOR distillation_loss ← Average(individual_loss) // 最終損失の計算 base_loss ← 0.5 × ce_loss + 0.5 × distillation_loss 学習の擬似コード データの生成方法は似ていたので、一人で取り組んでいた合成データについても同じ理由(ラベルノイズ)でうまくいかなかっただけかも。 10
  7. チームマージ後の取り組み(アンサンブル) *1:コンペデータのみを使い、CE_loss + KL_div_lossで蒸留学習。 *2:合成データについては学習済みモデルの予測結果のTop1とラベルが一致するものについてのみ学習に使用。CE_loss + KL_div_lossで学習。 テストデータのサイズは十分にあるとはいえ、切り捨て後のスコアが同じチームがいくつもあったため、 Shakeが怖い。。 takaitoさんがOptunaを使ってモデルの重みの最適化を担当。

    OOFの予測を元に最適化 作成者 モデルの種類 Misconceptionの説明文 合成データ Public LB score Private LB score yukichi Qwen/Qwen2.5-32B なし あり 0.94968 0.94708 yukichi google/gemma-2-9b-it なし あり 0.95038 0.94646 yukichi Qwen/Qwen2.5-32B あり あり 0.94940 0.94625 yukichi google/gemma-2-9b-it あり あり 0.95059 0.94528 takai deepseek-ai/DeepSeek-R1 -Distill-Qwen-32B あり なし*1 0.94894 0.94494 takai deepseek-ai/DeepSeek-R1 -Distill-Qwen-32B あり あり*2 0.95080 0.94585 sinchir0 Qwen/Qwen3-8B あり なし 0.94824 0.94536 (最終的に使用したモデル一覧) 11
  8. まとめ • NLPコンペは今の所Eediで学んだことの応用で十分戦える! ◦ 復習が大事。強い人がRepoを公開してくれているので動かしながら学ぶと良さそう • 合成データがスコアブーストにつながる場合も ◦ ラベルノイズはつきものなので、これを考慮しつつ合成データをうまく扱うべし •

    データをよく見て仮説立てて実験すること ◦ ラベルノイズやMisconceptionの選択肢をQuestionごとに絞れることなど、自分では気づきれていない部分もあり、 他のメンバーに気づかされた ◦ (n番煎じではありますが)実験の乱れうちではなく、データをよく見た上で仮説を立ててこれを検証するための実験 サイクルが重要 • 金メダル取れると信じて手と頭を動かし続けること(結局一番大事) 13
  9. 14 その他関連するリンク • 弊チームのSolution Writeup:https://www.kaggle.com/competitions/map-charting-student-math-misunderstandings /writeups/private-7th-public-10th-place-solution • Eediの1位のSolution Writeup(Raja Biswasさん)

    :https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/writeups/ mth-101-1st-place-detailed-solution • vLLM:https://docs.vllm.ai/en/latest/