Slide 1

Slide 1 text

AI 2025.01.09 宇都恭平 GO株式会社 Kaggle Eediコンペ振り返り

Slide 2

Slide 2 text

AI 2 kaggleで開催されていたEedi - Mining Misconceptions in Mathematicsの振り返りです。 メダル圏外となってしまいましたが解法の至る所にLLMが用いられている 面白いコンペだったのでその集合知や面白さを少しでも伝えることができればと思います。 参考: Eediコンペ上位解法まとめ[13](https://zenn.dev/kuto5046/articles/8e612b473c4d75) 今日話すこと

Slide 3

Slide 3 text

AI 3 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 - Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法

Slide 4

Slide 4 text

AI 4 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 - Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法

Slide 5

Slide 5 text

AI 5 数学の質問に対して1つの正解と3つの不正解で構成される多肢選択問題が与えられ、 不正解の背景にある誤解(Misconception) を予測するタスク タスクの紹介 例)Bの13という選択肢を選んだ人は「四則演算の優 先順位に関係なく左から右へ計算を実行する」 という誤解がある

Slide 6

Slide 6 text

AI 6 1868件の数学の質問と各質問に4つの回答の選択肢が紐づいているデータセット 不正解の選択肢にのみ誤解が紐づく。誤解が不明のものも存在する。 データセットの構成① Construct: 問題の構造/内容 Subject: 問題の科目 Question: 質問 Answer: 回答(正解1不正解3) Misconception: 誤解 (ターゲット) https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/542654

Slide 7

Slide 7 text

AI 7 2587件の誤解候補が用意されており、ここから質問-誤回答ペアに合う誤解を選択する。 ただし誤解候補の38%はtrainデータに含まれていない。 データセットの構成②

Slide 8

Slide 8 text

AI 8 MAP@25: 検索・レコメンドタスクでよく用いられるランキング指標。予測の順位が重要。 ◾ ポイント ● 最大25個の予測値を提出可能 ● 真の誤解が予測の中に含まれるとスコアが加算 ● 真の誤解が上位にあるほどスコアが高くなる 評価指標

Slide 9

Slide 9 text

AI 9 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 - Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法

Slide 10

Slide 10 text

AI 10 stage1のRetrievalパートで誤解の候補を絞り込んで、stage2のRerankingパートで 適切に並び替える、文章検索やレコメンドのタスクでよく取られるアプローチ。 RetrieverとRerankerの両方にLLMが使われていたのが特徴的 RetrievalとRerankingの2stageアプローチ Retriever Reranker 誤解: 2587件 問題-誤回答ペア 問題-誤回答ペア 問題-誤回答ペア 誤解: N件(ex;N=100) 誤解: 25件 stage1: Retrieval(候補絞り込み) stage2: Reranking(並び替え)

Slide 11

Slide 11 text

AI 11 Queryと誤解の埋め込みの類似度から関連する誤解候補をN件抽出する 埋め込み計算にはFine Tuning済みの埋め込み特化モデルやテキスト生成LLMが公開 notebookで利用されていた[14][15] stage1では真の誤解をどれだけ抽出できるかが重要のためrecall指標も評価 stage1: Retrieval (関連候補の抽出パート) Q 1 Q 1 Q 1 M 1 embedding model embedding model cosine similarity Q 1 M 1,1 M 1,2 M 1,N … Q 2 M 2,1 M 2,2 M 2,N … … 1つの質問-誤回答ペアに対し てNこの誤解を紐付ける embedding Misconception Construct + Subject + Question + Correct Answer + InCorrect Answer text

Slide 12

Slide 12 text

AI 12 QLoRAとはLLMを効率的にFine Tuningする手法 - モデルパラメータは量子化(Quantization)して固定 - ハイパーパラメータである r/lora_alphaが重要[15] 左はBitsAndBytesによる4bit量子化の例だが AutoAWQやintel/auto-roundも利用されていた Retrieverのfine tuning① QLoRA from transformers import AutoTokenizer, AutoModel,BitsAndBytesConfig from peft import LoraConfig, get_peft_model, bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16 ) config = LoraConfig( r=64, lora_alpha=128, target_modules=[ "q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj", ], bias="none", lora_dropout=0.05, # Conventional task_type="CAUSAL_LM", ) model = AutoModel.from_pretrained(model_path, quantization_config=bnb_config,device_map=device) model = get_peft_model(model, config) [15]のコードより抜粋

Slide 13

Slide 13 text

AI 13 埋め込み特化モデルの学習はsentence transformersライブラリが通常利用されるが テキスト生成用のLLMを埋め込みモデルとして使う場合そのままでは使えない(はず) transformersのTrainerを使うとコード量は少なく実装できる。 ただし損失計算周りは自身で実装する必要がある(はず) あまり情報がなかったので参考になるコードを置いておく[20][21] Retrieverのfine tuning② 実装方法

Slide 14

Slide 14 text

AI 14 埋め込みモデルの学習では対照学習が一般的に利用される。 対照学習でよく利用されるMultipleNegativesRankingLossを利用する場合、 ハード負例とバッチ内負例という2種類の負例を扱う。この負例数が重要なハイパーパラ メータでありここのチューニングが上位でもされていた。[4][5][6][7] Retrieverのfine tuning③ 対照学習 Query 誤解(正例) 誤解(負例) embedding model MultiNegative RankingLoss 学習時に同じバッチ内に存在する 他の正例をバッチ内負例という バッチ数=バッチ内負例数 embedding 正例に似た負例をハード負例 という。fine tuning前の埋め 込みモデルを使って求める

Slide 15

Slide 15 text

AI stage1で抽出した誤解候補をプロンプトに追加しLLMを用いて関連度順に並び替える。 方法はいくつかあるため詳細は後述。 公開notebookではNVIDIA/logits-processor-zooを用いて「最大9件の誤解候補から LLMに1つ選ばせる」処理を複数回実施してrerankingしていた(Fine Tuning未実施) [17] 15 stage2: Reranking (関連度に基づいて並び替えるパート) Task description Q 1 M 1,1 M 1,2 M 1,N … LLM Reranker Q 1 M 1,1 M 1,2 M 1,N … prompt 誤解候補 誤解候補を関連度順に並び替える

Slide 16

Slide 16 text

AI 16 公開notebook[16] のRerankerでは 量子化済み32BのLLMが採用されており、 推論を高速化するためにvLLMが利用 されていた。 vLLMによる推論高速化 https://docs.vllm.ai/en/latest/ llm = vllm.LLM( model_path, quantization="awq", tensor_parallel_size=2, gpu_memory_utilization=0.90, trust_remote_code=True, dtype="half", enforce_eager=True, max_model_len=5120, disable_log_stats=True ) tokenizer = llm.get_tokenizer() responses = llm.generate( df["text"].values, vllm.SamplingParams( n=1, # Number of output sequences to return for each prompt. top_p=0.8, # Float that controls the cumulative probability of the top tokens to consider. temperature=0, # randomness of the sampling seed=777, # Seed for reprodicibility skip_special_tokens=False, # Whether to skip special tokens in the output. max_tokens=512, # Maximum number of tokens to generate per output sequence. ), use_tqdm=True ) [16]のコードより抜粋

Slide 17

Slide 17 text

AI 17 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 - Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法

Slide 18

Slide 18 text

AI 18 上位解法では後処理やcv戦略なども重要な要素であったが ここではLLMの知見に絞って4つの観点で紹介する。 1. Retrieval 2. Reranking 3. LLMによる合成データ生成 4. LLMテクニック 上位解法の重要ポイント4つ

Slide 19

Slide 19 text

AI 19 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 - Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法

Slide 20

Slide 20 text

AI 20 埋め込みモデルを使って関連する誤解候補を抽出するパート 基本解法と構成は同じだが上位チームは後述の合成データで スコアを伸ばしていた印象 埋め込み特化モデルとテキスト生成LLMの両方が採用 ● 埋め込み特化モデル ○ MTEB LBの上位が利用されていた ○ https://huggingface.co/spaces/mteb/leaderboard ○ モデルサイズは7B程度 ● テキスト生成LLM ○ モデルサイズが大きいほどretrieval性能が向上する 傾向にあったため採用されていた。 1.Retrieval テキスト生成LLM

Slide 21

Slide 21 text

AI 21 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 - Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法

Slide 22

Slide 22 text

AI 22 上位解法の多くがLLMをQLoRAでFine-TuningしたものをRerankerとして利用 量子化すればkaggleのT4(16GB)x2でも72Bを動かすことができた模様 rerankingの方法にはバリエーションあり ● Point wise reranking ● List wise reranking ● Iterative reranking 2. Reranking

Slide 23

Slide 23 text

AI 23 質問-誤回答-1つの誤解のペアに対して推論するアプローチ 与えられた誤解が正しいかをYes/Noで出力させそのtokenのlogitsを利用する[1][7] atmaCup#17の1位解法[18] でも採用されていた(学習コードあり) Point wise reranking Question: ~ Answer: ~ IncrrectAnswer: ~ Misconception: xxx Does this misconception lead to the incorrect answer? (Yes/No) 1位のプロンプトを簡略化したもの

Slide 24

Slide 24 text

AI 24 List wise reranking 質問-誤回答-複数の誤解のペアに対して推論するアプローチ 与えられた候補から正しい誤解indexを出力させそのtokenのlogitsを利用する[1][2][4][5][7] point wiseと比べてプロンプトに含まれる誤解情報が多くかつ複数候補を1回の推論で扱える ため推論回数が少なく済む Question: ~ Answer: ~ IncrrectAnswer: ~ Candidate Misconception: A: aaa B: bbb … E: eee which misconception explain the incorrect answer most specifically? (A,B,C,D or E) 1位のプロンプトを簡略化したもの

Slide 25

Slide 25 text

AI 25 5位チームが学習/推論コードを公開してくれている[5] vLLMで推論する際はmax_tokens=1として1tokenだけ出力するようにして、 max_logprobsとlogprobsをプロンプト内の選択肢の数(以下の例では52)にすると 1回の推論で全ての選択肢のlogitsを得ることができる。 List wise rerankingの推論方法 # Initialize model model = LLM( model=gptq_name, trust_remote_code=True, gpu_memory_utilization=0.99, max_logprobs=52, dtype="bfloat16", max_model_len=2048, enforce_eager=True, ) # Generate predictions sampling_params = SamplingParams(temperature=0.0, max_tokens=1, logprobs=52) 5位の推論コードより抜粋[5]

Slide 26

Slide 26 text

AI 26 ● 選択肢の位置バイアスの補正 ○ プロンプト内での誤解候補の順番によって推論結果にバイアスが入る傾向がある ○ 学習時にプロンプトに与える誤解候補数Nを複数パターン用意する[2] ○ 推論時にrerankerに与えるプロンプトの候補順を昇順/降順の平均を使う[2] [6] List wise rerankingの工夫 Question: ~ Answer: ~ IncrrectAnswer: ~ Candidate Misconception: A: aaa B: bbb … E: eee which misconception explain the incorrect answer most specifically? (A,B,C,D or E) ex)一番先頭の Aが選ばれやすい 1位のプロンプトを簡略化したもの

Slide 27

Slide 27 text

AI 27 予測上位ほど大きいモデルを使って反復的にrerankingを実施[1][2] スコア向上のために重要な上位の予測に対して適切にモデルリソースを割くために 予測順位に応じて段階的にLLMのモデルサイズを大きくしてrerankingを実行する Iterative reranking 1位解法より抜粋[1]

Slide 28

Slide 28 text

AI 28 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 - Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法

Slide 29

Slide 29 text

AI 29 trainには含まれない未知の誤解をtestで予測する必要があったこともあり LLMを用いた合成(Synthetic)データ生成が有効だった。 生成されたデータをRetrieverやRerankerの学習に使用することでスコアが向上した。 3.LLMによる合成データ生成

Slide 30

Slide 30 text

AI 30 データ生成の用途は3パターン ①未知の誤解を学習するための質問&回答の生成 (これが最重要) ②誤解の表現力を高めるための誤解詳細の生成 [2] ③データ数増のための新規誤解の生成 [1][4] データ生成のパターン LLM 誤解 (未知) 質問 回答 その他情報 LLM 誤解 誤解詳細 LLM 誤解 (新規) 質問 回答 その他情報

Slide 31

Slide 31 text

AI 31 ● LLMによる品質評価[1][2] ○ 生成されたデータをLLMでスコアリングし低スコアのデータは除外する ● Many shot prompting[4] ○ exampleを多く含むほど生成品質が向上したため100件のexampleをプロンプト に含めてデータ生成する ● 類似誤解をexampleとしてプロンプトに含める[1] ○ RetrieverやRerankerの出力結果を元に誤解をいくつかのクラスタに分類し同一 クラスタの誤解をプロンプトに含めて質問を生成する ○ 誤解データセットには表現が少しだけ違う似た誤解があったのでそれらをまとめ てプロンプトに渡すことで誤解の情報を豊富にするみたいな気持ち? 合成データ生成時の工夫

Slide 32

Slide 32 text

AI 32 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 - Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法

Slide 33

Slide 33 text

AI 33 知識蒸留とはモデルサイズが大きい教師モデルの知識をモデルサイズが小さい生徒モデルへ引き 継がせる手法 ● 質問と回答を教師LLMに入力してその回答が導かれる推論過程(CoT;Chain-of-Thought)を出力させ Retriever/Reranker用のプロンプトに追加する[1][2] ● 強力な推論性能を持つclaude3.5 SonnetのCoTを模倣するようにCoT生成モデルをfine tuningする[1] ● 質問と回答を教師LLMに入力して誤解を予測させRetriever/Reranker用のプロンプトに追加する[4][5][9] 4. LLMテクニック: 知識蒸留 CoTありRerankingプロンプト例[1]

Slide 34

Slide 34 text

AI 34 ● vLLMでenable_prefix_cachingを有効にする プロンプトに必ず含まれるテキストがある場合、enable_prefix_caching=Trueとすること でそのプロンプト分の計算結果がcacheされ推論時間を短縮できる。 ● vLLMによる埋め込みモデルの推論高速化[4] テキスト生成用のLLMを埋め込みモデルとして利用する場合vLLMはそのままでは使えない ため、vLLM側の実装に手を加えて使用可能にした (埋め込み特化モデルはそのままでも可能?) https://docs.vllm.ai/en/v0.6.2/getting_started/examples/offline_inference_embeddi ng.html 4. LLMテクニック: 推論高速化

Slide 35

Slide 35 text

AI 35 ● LoRAパラメータのモデルマージ[4] ○ 複数のモデルを全て推論に使ってアンサンブルすると推論時間が足りないので、 複数モデルのLoRAパラメータの平均をとることでアンサンブル効果を得る ● 誤解の埋め込みの事前計算[7] ○ アンサンブル時の計算時間を短縮するために誤解の埋め込みを事前に計算してお く ○ その埋め込みと複数モデルのquery埋め込みの類似度をとることで誤解の埋め込み 計算を1回で済ませる 4. LLMテクニック: アンサンブル

Slide 36

Slide 36 text

AI Retrievalパート データ生成パート 36 1位解法にLLMはどれだけ使われている? 合成データ生成LLM 合成データ評価LLM CoT生成教師LLM CoT生成LLM Retriever LLM x 2 Rerankingパート Reranker LLM x 3 Fine Tuning済みモデル 埋め込み特化モデルはカウントから除外 役割別にLLMがどのくらい使われているかを解法から読み解いて見るとこんな感じ。

Slide 37

Slide 37 text

AI 37 従来のNLPコンペではBERT系のモデルが多くを占めていた。 序盤のdiscussionでrerankerとしてBERTを使う公開notebookが紹介されていたがスコアは 低く、それ以降は出てきていない。上位解法でもBERTに言及しているものはなかった。 今回のタスクは数学の問題から誤解を予測するというreasoning(推論)性能が必要であった ためLLMに軍配が上がったのだと予想している。 BERTは?

Slide 38

Slide 38 text

AI 38 すべての解法パートにLLMが活用されており有用性を強く実感した 次NLPコンペに出るならまずこのあたりを試す ● LLMによる合成データ生成 ● 従来のNLPモデルでやるところをLLMに置き換える ● LLMのFine Tuning まとめ

Slide 39

Slide 39 text

AI 39 [1] 1st Place Detailed Solution https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551688 [2] 2nd place solution https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551651 [3] 3rd Place Solution(with Magic Boost) https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551498 [4] 4th Place Solution https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551559 [5] 5th Place Solution https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551391 [6] 6th Place Solution https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551565 [7] Private 7th(Public 2nd) Place Solution Summary https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551388 [8] 8th Place Solution https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551412 [9] Private 9th(Public 7th) Place Solution https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551420 [10] 10st Place Solution Summary https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551722 [11] Private 11th (Public 9th) Place Solution Summary https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551424 [12] 12th Place Solution https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/551429 参考文献

Slide 40

Slide 40 text

AI 40 [13] Eedi上位解法まとめ https://zenn.dev/kuto5046/articles/8e612b473c4d75 [14] Fine-tuning bge [Train] https://www.kaggle.com/code/sinchir0/fine-tuning-bge-train [15] Some tricks for training LLM Recall Model: CV 0.490, LB 0.352 https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics/discussion/543519 [16] Eedi Qwen-2.5 32B AWQ two-time retrieval https://www.kaggle.com/code/takanashihumbert/eedi-qwen-2-5-32b-awq-two-time-retrieval [17] Eedi Qwen32B vllm with logits-processor-zoo https://www.kaggle.com/code/aerdem4/eedi-qwen32b-vllm-with-logits-processor-zoo [18]1st place solution https://www.guruguru.science/competitions/24/discussions/21027ff1-2074-4e21-a249-b2d4170bd516/ [19]How To Synthesize Your D̶ata https://www.answer.ai/posts/2024-10-15-how-to-synthesize-data.html [20][15]のdiscussionで共有されていたkddで使用した学習コード https://github.com/BlackPearl-Lab/KddCup-2024-OAG-Challenge-1st-Solutions/tree/main/AQA [21]私の学習コード https://github.com/kuto5046/kaggle-eedi/blob/main/exp/exp050/train.py 参考文献