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

4th place solution Eedi - Mining Misconceptions...

4th place solution Eedi - Mining Misconceptions in Mathematics

Rist Inc.

March 03, 2025
Tweet

More Decks by Rist Inc.

Other Decks in Technology

Transcript

  1. ©Rist Inc. 02 1. Competition概要 2. 4th place solution a.

    misconceptionの生成 b. 合成データの生成 c. retrieval d. reranking e. postprocess 目次
  2. ©Rist Inc. 04 Eedi - Mining Misconceptions in Mathematics •

    コンペ基本情報 ◦ 開催期間: 2024/8/13~2024/12/13 (UTC) ◦ 結果: 1446 チーム中 4位 • タスク設定 ◦ 数学の4択問題と誤答の選択肢から、その誤答の背景にある誤解(misconception)を予測する(紐づける) ▪ 入力: 数学の問題、誤答の選択肢 ▪ 出力: 誤答に対応するmisconceptionの候補。2587件のmisconceptionのリストから25個の候補を選択する。 ▪ 提出形式: 問題文のid_選択肢, misconceptionのid 25個 • 例: 1869_B: 1 2 3 … 25 ◦ 学生が数学の4択問題を間違えた際に、先生がその誤答の背景を理解する手助けになるようなNLP modelを作成するのが目的 ◦ 数学の問題を正しく理解するmodelの作成が要求されるため、LLMの使用が不可避な近代的なコンペだった。 • 評価指標 ◦ map@25 ◦ 候補を25個まで予測して良いが、正解が候補のリストの先頭近くにあるほど良いスコアとなる ◦ ランキングを考慮した評価指標
  3. ©Rist Inc. 06 • 25個の候補を提出できる • n番目が正解の場合はscore 1/n ◦ 1,

    2, 3, …, 25番目に正解があるとscoreは1.0, 0.5, 0.333, …, 0.04 ◦ 25個の候補に正解がない場合はscoreは0 ◦ 先頭の近くに答えがあると良いscoreが得られる、ランキングを考慮した評価指標 Metrics(評価指標) - MAP@25
  4. ©Rist Inc. 07 与えられたデータは以下の通り • train.csv / test.csv: 問題文と選択肢(以下が主要なカラム) ◦

    QuestionText : 問題文 ◦ AnswerAText~AnswerDText: 選択肢A,B,C,Dの内容 ◦ CorrectAnswer: 正解の選択肢 ◦ ConstructName : 問題の構造や内容 ◦ SubjectName : 問題の科目カテゴリ ◦ MisconceptionAId~MisconceptionDId: 選択肢A,B,C,Dに対応するmisconception (label) ▪ 正解の選択肢についてはnull ▪ 誤答についてもnullの場合がある(misconceptionが紐づいていない) • misconception_mapping.csv: 誤解(misconception)の一覧 Data
  5. ©Rist Inc. 08 • データ数(数学の問題の総数): 1869問 • 4択問題なので1問あたり3個の誤答があるが、全ての誤答にmisconceptionが紐づいているわけではない ◦ 今回のコンペで与えられたmisconceptionのリストの中に対応するものがない誤答、そもそもあま

    り選ばれなさそう(misconceptionの説明が困難)な選択肢も存在した。 ◦ このようなlabelがついていないデータは単純に学習から除外した • misconceptionが紐づいている誤答の総数は4370個 ◦ (問題文+誤答, misconception)のペア、つまりlabel付きの入出力のペアが4370個ある Data - train.csv
  6. ©Rist Inc. 09 • misconception_mapping.csvのデータサイズ(misconceptionの総数): 2587 個 • columns ◦

    Misconception Id: misconceptionのid ◦ MisconceptionName: misconceptionの内容 ポイント • train.csvのどれかの誤答に紐づくidが1604個 • 残りの983個はtest.csvの誤答にのみ現れる未知のmisconceptionと考えられる ◦ なんらかの工夫をしなければ学習データに含まれない未知のlabelとなり予測が困難 →合成データを生成したりpostprocessで対応した(解法パートで詳細を後述) Data - misconception_mapping.csv
  7. ©Rist Inc. 010 理想的(素直?)な解き方 • (問題文+誤答, misconception)の全てのペアに対してこのペアが正しく紐づいているかの予測を行う ◦ LLMにtextを入力してそのペアが正解かどうかの二値分類すれば良さそう •

    入力 (問題文+誤答)ごとに予測値が高いmisconceptionを25個選択して予測値が高い順に並べて提出する 一方で、上記のやり方だといくつか問題がある • (問題文+誤答, misconception)のペアの数が膨大 ◦ train.csvに存在するペアの総数は4370*2587=11,305,190個 ◦ 1000万件オーダーのペアがあり、推論に時間がかかりすぎる • 負例(正解ではないペア)が多すぎる ◦ 全部のペアを使うとかなりclass imbalancedな分布になってしまう ◦ 全部のペアを使うと学習に時間がかかりすぎる 基本的なパイプライン 推薦系のタスクでよくあるシチュエーション
  8. ©Rist Inc. 011 • 推薦系のタスクでよく採用されるRetrieval → Reranking の 2stageでの予測を行った •

    Retrieval ◦ 軽い計算で済むなんらかのアルゴリズムで正解の候補を絞り込む ◦ LLMで頻繁に使われる手法であるRAGの検索部分をretrievalとして使える! • Reranking ◦ retrievalパートで得られた大雑把な候補(のペア)に対して、さらに正確な予測を行っ て順位付けをして最終予測結果とする • vLLMによる推論の高速化 基本的なパイプライン
  9. ©Rist Inc. 014 kaggle notebookの推論環境はT4 GPU (16GBメモリ) × 2枚であり、LLMの推論を行うにはメモリ/速度の面で 強い制約がある。そこで、vLLM

    (https://github.com/vllm-project/vllm)というLLMの高速化ライブラリを利 用した。vLLMを利用することにより32Bといったパラメータ数のLLMでの推論を制限時間内で実現することが できた。 vLLMがサポートしている形式に合わせてmodel学習、推論の実装をしなければいけない点が難しいポイント だった。一方で、vLLMはパラメータ数が多いLLMの推論を高速かつ少ないメモリ量で行うことができ、kaggle notebookに限らない一般的なケースでも活躍が期待される強力なライブラリとなっている。 vLLMによる推論の高速化
  10. ©Rist Inc. 016 • Retrieval → Reranking の 2stageで予測 •

    Retrieval ◦ 問題+誤答と(embeddingの意味で)類似しているmisconceptionを検索 ▪ 問題+誤答のtext: 問題文と選択肢のtext等を結合 ▪ misconceptionのtext: MisconceptionName ◦ loss: MultipleNegativesRankingLoss • Reranking ◦ 問題+誤答の情報 と 1つのmisconception候補を結合して正解かどうかを予測 (pair-wise) ◦ retrievalパートで得られた候補についてpair-wiseに予測してrerankする ◦ Qwen2.5をQLoRAでfinetuneして利用する 基本的なパイプライン
  11. ©Rist Inc. 017 • https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551559 • misconceptionの生成 ◦ 問題文と誤答の選択肢からLLMでmisconceptionを生成し、retrievalに使用する •

    合成データの生成 ◦ train.csv内の誤答に紐づかないmisconceptionについて、そのmisconceptionに紐 づくような問題と選択肢をLLMで生成し、rerankerの学習データに追加 • Retrieval ◦ Qwen2.5-14B/32Bを学習 • Reranking ◦ Qwen2.5-32Bを学習 • postprocess ◦ train.csv内の誤答に紐づかないmisconceptionに対する予測値が相対的に大きくな るように補正する 4th place solution - Overview
  12. ©Rist Inc. 018 問題文や選択肢のtextと対応するmisconceptionのtextは必ずしも文章の見た目や使われている 単語が似ているとは限らないので、これらのtextをそのままembeddingに変換しても類似度の学 習が難しそう misconceptionの生成 query: Question 5×4+6÷2,

    Answer 13 misconception: Carries out operations from left to right regardless of priority order. 正解のペアだけど全然似てな いように見える... 問題文と誤答の選択肢からLLMでmisconceptionを生成し、queryに追加した
  13. ©Rist Inc. 021 右のようなpromptをLLMに入力して合成データを生成した。 • model: Qwen2.5-72B-Instruct-AWQ • train.csvからrandomに100問samplingして例題に使う ポイント

    • 大きいmodel (72B) を使う ◦ 数学的に正しいデータを生成できる打率が高い ◦ retrieval/rerankingに使ったmodelは14B/32Bだったので、 合成データを通した蒸留効果も期待 • データ生成用promptに多くの例題(100問)を含める ◦ 例題が数件程度だと生成データの品質が低かった ◦ 例題を多く用意することで生成データの品質が大きく向上し、ほとんどの出力が数学的に正しいものになった。 合成データの生成 You are an expert in mathematics. Refer to the examples below to create new problem with given misconception. Misconception: {MisconceptionText} The output format shoud be below. ``` ConstructName: SubjectName: Math problem: Answer A text: Answer B text: Answer C text: Answer D text: Answer: Incorrect answer: ``` The examples are below Example1 ConstructName: {ConstructName1} SubjectName: {SubjectName1} Math problem: {QuestionText1} Answer A text: {AnswerAText1} Answer B text: {AnswerBText1} Answer C text: {AnswerCText1} Answer D text: {AnswerDText1} Answer: {CorrectAnswer1} Incorrect answer: {ans1} Misconception: {MisconceptionText1} … Example100 ConstructName: {ConstructName100} SubjectName: {SubjectName100} Math problem: {QuestionText100} Answer A text: {AnswerAText100} Answer B text: {AnswerBText100} Answer C text: {AnswerCText100} Answer D text: {AnswerDText100} Answer: {CorrectAnswer100} Incorrect answer: {ans100}
  14. ©Rist Inc. 023 • Model: Qwen2.5-14B/32B • loss : MultipleNegativesRankingLoss

    • query ◦ QuestionText + 正解の選択肢のtext + AnswerText + ConstructName + SubjectName + LLMで生成したmisconception • 負例のsampling方法が重要 ◦ train.csv内に現れないmisconceptionはsamplingしない Retrieval
  15. ©Rist Inc. 024 ポイント • Qwen2.5をretrieverに使う ◦ 一般にはRAG用にembedding modelとして学習されたmodelを使うことが多い ◦

    Qwen2.5はembedding用に事前学習されたmodelではないが、パラメータ数も多く数学に強いた め、finetuneすることで強力なembedding modelとなった • 7Bではなく14B/32Bのmodelを使う ◦ modelのパラメータ数を大きくするほど手元でのvalidation scoreが改善したので、できるだけ大き いmodelを採用した。 ◦ 32Bについてはそのまま推論すると制限時間に間に合わなかったのでvLLMの実装に変更を加えるこ とで高速化を実現した • trainに現れないmisconceptionは負例に使わない ◦ 未知のmisconceptionまで負例に使ってしまうと正例のデータが存在しないので精度が悪化する(全 てのqueryと類似度が低くなるように学習してしまう) Retrieval
  16. ©Rist Inc. 025 • Model: Qwen2.5-32B-Instruct-GPTQ-Int4 • pair-wise学習 ◦ 1つの問題+誤答

    に1つのmisconceptionを対応させ、それが正解かどうかを予測 • 正解の場合はYes / 不正解の場合はNoを出力するように学習 ◦ vLLMでの高速化が容易なため • input text ◦ 問題+誤答 と misconception に加えて、正解の選択肢のtextも入力に使用 • positive 1件に対して9件のnegativeをsamplingして学習 • train.csvに存在する問題+誤答のデータに加えて合成データ2500件も学習に使用 ◦ 最終submissionではtrain.csvのデータのみで学習したmodelとtrain + 合成データで学習した modelをアンサンブルした Reranking
  17. ©Rist Inc. 026 ポイント • 32Bのmodelを使う ◦ rerankerについてもmodelを大きくするほど性能が上がった。7B/14Bに比べても32Bの方が圧倒的に性能が高く、 vLLMを使用すれば推論も十分高速だったので最終的には32Bを採用した。 •

    vLLMで高速化できる形式にfinetuneする ◦ 特定の単語を1tokenだけ出力するmodelはvLLMで簡単に高速化することができる → 正解の場合はYes / 不正解の場合はNoを出力するようにfinetuneすることで高速に二値分類を行うmodelを作成し た • 誤答だけではなく正解の選択肢のtextをpromptに入力する ◦ 問題と答えを合わせて入力することで、問題やmisconceptionの内容を理解しやすくなると期待して追加した。実際、 精度改善に大きく貢献した。 • 合成データを学習に使う ◦ testデータにしか存在しない未知のmisconceptionに関する性能向上を期待した。合成データを学習したrerankerをア ンサンブルすることでprivate scoreは大きく改善し、結果的に賞金圏内に入るための決め手となった。 Reranking
  18. ©Rist Inc. 028 • 最終submissionのscoreはpublic 0.65531 / private 0.60044 •

    最終順位は public 3rd / private 4th 最終結果
  19. ©Rist Inc. 029 今回のコンペで特に重要だった点(勝因)をピックアップすると • testデータの問題+誤答にしか紐づかない未知のmisconceptionへの対応 ◦ LLMを使って合成データを生成する ◦ public

    LBを上手く活用しながら良いpostprocessを発見する ◦ そもそも未知のmisconceptionへの対応が勝負を分けることに気づくことがかなり重要 • 制限時間に間に合う範囲で出来る限り大きいLLMを採用する ◦ 32Bなどの大きなmodelを学習することが重要 ▪ 7Bや14Bでもサイズとして不十分 ▪ 学習に時間がかかるので根気(と計算資源)が必要 ◦ kaggle notebook環境という強い制約の中で高速に推論可能な実装をする ▪ vLLMを使いこなしたり適切にメモリ管理をする必要があって技術的に大変 まとめ