Slide 1

Slide 1 text

Eedi - Mining Misconceptions in Mathematics 4th place solution 株式会社Rist

Slide 2

Slide 2 text

©Rist Inc. 02 1. Competition概要 2. 4th place solution a. misconceptionの生成 b. 合成データの生成 c. retrieval d. reranking e. postprocess 目次

Slide 3

Slide 3 text

©Rist Inc. 03 Competition概要

Slide 4

Slide 4 text

©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個まで予測して良いが、正解が候補のリストの先頭近くにあるほど良いスコアとなる ○ ランキングを考慮した評価指標

Slide 5

Slide 5 text

©Rist Inc. 05 タスク設定 数学の問題に対して1つの正解と3つの不正解の選択肢で構成される4択問題と学生が選んだ誤答が与えられ、その誤答の 背景にある誤解(misconception)を(LLMで)予測するコンペ。 四則演算の優先順を無視して左から計算してしまう Input データ + B: 13 数学の4択問題 学生の誤答 予測したいもの(misconception) 誤答Bの背景にある誤解

Slide 6

Slide 6 text

©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

Slide 7

Slide 7 text

©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

Slide 8

Slide 8 text

©Rist Inc. 08 ● データ数(数学の問題の総数): 1869問 ● 4択問題なので1問あたり3個の誤答があるが、全ての誤答にmisconceptionが紐づいているわけではない ○ 今回のコンペで与えられたmisconceptionのリストの中に対応するものがない誤答、そもそもあま り選ばれなさそう(misconceptionの説明が困難)な選択肢も存在した。 ○ このようなlabelがついていないデータは単純に学習から除外した ● misconceptionが紐づいている誤答の総数は4370個 ○ (問題文+誤答, misconception)のペア、つまりlabel付きの入出力のペアが4370個ある Data - train.csv

Slide 9

Slide 9 text

©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

Slide 10

Slide 10 text

©Rist Inc. 010 理想的(素直?)な解き方 ● (問題文+誤答, misconception)の全てのペアに対してこのペアが正しく紐づいているかの予測を行う ○ LLMにtextを入力してそのペアが正解かどうかの二値分類すれば良さそう ● 入力 (問題文+誤答)ごとに予測値が高いmisconceptionを25個選択して予測値が高い順に並べて提出する 一方で、上記のやり方だといくつか問題がある ● (問題文+誤答, misconception)のペアの数が膨大 ○ train.csvに存在するペアの総数は4370*2587=11,305,190個 ○ 1000万件オーダーのペアがあり、推論に時間がかかりすぎる ● 負例(正解ではないペア)が多すぎる ○ 全部のペアを使うとかなりclass imbalancedな分布になってしまう ○ 全部のペアを使うと学習に時間がかかりすぎる 基本的なパイプライン 推薦系のタスクでよくあるシチュエーション

Slide 11

Slide 11 text

©Rist Inc. 011 ● 推薦系のタスクでよく採用されるRetrieval → Reranking の 2stageでの予測を行った ● Retrieval ○ 軽い計算で済むなんらかのアルゴリズムで正解の候補を絞り込む ○ LLMで頻繁に使われる手法であるRAGの検索部分をretrievalとして使える! ● Reranking ○ retrievalパートで得られた大雑把な候補(のペア)に対して、さらに正確な予測を行っ て順位付けをして最終予測結果とする ● vLLMによる推論の高速化 基本的なパイプライン

Slide 12

Slide 12 text

©Rist Inc. 012 正解の問題+誤答のtext情報 (query) とmisconceptionのembeddingの類似度が高くなるようなembedding modelを作成する。以下が典型的な手法であり、公開notebookや多くの上位解法でも採用されていた。 ● 正解の(query, misconception)のペアのembeddingのcosine類似度が大きく、不正解のペアのcosine類似 度が小さくなるように学習する ● MultipleNegativesRankingLoss による対照学習 Retrieval https://zenn.dev/kuto5046/articles/8e612b473c4d75 から引用

Slide 13

Slide 13 text

©Rist Inc. 013 retrievalパートで得られた(問題+誤答, misconception)の正解のペアの候補について、そのtext情報をLLMに入 力してretrievalよりもリッチな入力やmodelを使用することで(embeddingのcosine類似度による順序付けより も)正確な予測を行って順序付けする。 Reranking https://zenn.dev/kuto5046/articles/8e612b473c4d75 から引用

Slide 14

Slide 14 text

©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による推論の高速化

Slide 15

Slide 15 text

©Rist Inc. 015 4th place solution

Slide 16

Slide 16 text

©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して利用する 基本的なパイプライン

Slide 17

Slide 17 text

©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

Slide 18

Slide 18 text

©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に追加した

Slide 19

Slide 19 text

©Rist Inc. 019 ● 問題+誤答について下に示したpromptをLLMに入力してmisconceptionを生成した ● modelはQwen2.5-32B-Instruct-AWQ ○ 7Bや14Bよりも出力の品質が高い ○ vLLMのおかげで32Bでも十分推論が間に合う misconceptionの生成

Slide 20

Slide 20 text

©Rist Inc. 020 コンペのデータとして与えられたmisconceptionのリストの中にはtrain.csvのデータに紐づかない未知のものが多くあっ た(2587個中983個が未知)。test推論の際にはこのような未知のmisconceptionにも対応する(外挿に近い)ことが必要で あり、未知のmisconceptionに対する予測精度を高めることが非常に重要だった。 そこで、testにしか現れない未知のmisconceptionに紐づくような問題+誤答の合成データをLLMで作成した → testにしかないmisconceptionがmodelにとって未知のものではなくなり、内挿に近い状況を実現できると期待 合成データの生成

Slide 21

Slide 21 text

©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}

Slide 22

Slide 22 text

©Rist Inc. 022 下図は生成された問題の例。生成された問題のほとんどはmisconceptionとの対応も含めて数学的に正しい内容 となっていた。 データ生成

Slide 23

Slide 23 text

©Rist Inc. 023 ● Model: Qwen2.5-14B/32B ● loss : MultipleNegativesRankingLoss ● query ○ QuestionText + 正解の選択肢のtext + AnswerText + ConstructName + SubjectName + LLMで生成したmisconception ● 負例のsampling方法が重要 ○ train.csv内に現れないmisconceptionはsamplingしない Retrieval

Slide 24

Slide 24 text

©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

Slide 25

Slide 25 text

©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

Slide 26

Slide 26 text

©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

Slide 27

Slide 27 text

©Rist Inc. 027 testデータの問題+誤答にしか紐づかない未知のmisconceptionについての予測精度を上げることがとにかく重 要。このようなデータについてピンポイントで精度が上がりそうなpostprocessを模索した結果たどり着いたの が以下の手法 trainにないmisconceptionの順位を上げる ● testデータの予測結果に対し、train.csvに存在するmisconceptionの予測値を0.4倍した ○ public scoreの改善度合いを見て係数(0.4)をtuningした ● train.csvに存在しないmisconceptionが多く存在し、testデータのほとんどがこれらのmisconceptionに 紐づいていたと予想される postprocess

Slide 28

Slide 28 text

©Rist Inc. 028 ● 最終submissionのscoreはpublic 0.65531 / private 0.60044 ● 最終順位は public 3rd / private 4th 最終結果

Slide 29

Slide 29 text

©Rist Inc. 029 今回のコンペで特に重要だった点(勝因)をピックアップすると ● testデータの問題+誤答にしか紐づかない未知のmisconceptionへの対応 ○ LLMを使って合成データを生成する ○ public LBを上手く活用しながら良いpostprocessを発見する ○ そもそも未知のmisconceptionへの対応が勝負を分けることに気づくことがかなり重要 ● 制限時間に間に合う範囲で出来る限り大きいLLMを採用する ○ 32Bなどの大きなmodelを学習することが重要 ■ 7Bや14Bでもサイズとして不十分 ■ 学習に時間がかかるので根気(と計算資源)が必要 ○ kaggle notebook環境という強い制約の中で高速に推論可能な実装をする ■ vLLMを使いこなしたり適切にメモリ管理をする必要があって技術的に大変 まとめ