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

Kaggle Eediコンペ振り返り

Kyohei Uto
January 09, 2025
320

Kaggle Eediコンペ振り返り

DeNAとGOのAI技術共有会で発表したスライドです。

参考文献リンク
[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
[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

Kyohei Uto

January 09, 2025
Tweet

Transcript

  1. AI 3 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 -

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

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

    Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法
  4. 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
  5. 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]のコードより抜粋
  6. AI 14 埋め込みモデルの学習では対照学習が一般的に利用される。 対照学習でよく利用されるMultipleNegativesRankingLossを利用する場合、 ハード負例とバッチ内負例という2種類の負例を扱う。この負例数が重要なハイパーパラ メータでありここのチューニングが上位でもされていた。[4][5][6][7] Retrieverのfine tuning③ 対照学習 Query

    誤解(正例) 誤解(負例) embedding model MultiNegative RankingLoss 学習時に同じバッチ内に存在する 他の正例をバッチ内負例という バッチ数=バッチ内負例数 embedding 正例に似た負例をハード負例 という。fine tuning前の埋め 込みモデルを使って求める
  7. 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]のコードより抜粋
  8. AI 17 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 -

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

    Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法
  10. AI 20 埋め込みモデルを使って関連する誤解候補を抽出するパート 基本解法と構成は同じだが上位チームは後述の合成データで スコアを伸ばしていた印象 埋め込み特化モデルとテキスト生成LLMの両方が採用 • 埋め込み特化モデル ◦ MTEB

    LBの上位が利用されていた ◦ https://huggingface.co/spaces/mteb/leaderboard ◦ モデルサイズは7B程度 • テキスト生成LLM ◦ モデルサイズが大きいほどretrieval性能が向上する 傾向にあったため採用されていた。 1.Retrieval テキスト生成LLM
  11. AI 21 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 -

    Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法
  12. 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]
  13. 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位のプロンプトを簡略化したもの
  14. AI 28 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 -

    Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法
  15. AI 31 • LLMによる品質評価[1][2] ◦ 生成されたデータをLLMでスコアリングし低スコアのデータは除外する • Many shot prompting[4]

    ◦ exampleを多く含むほど生成品質が向上したため100件のexampleをプロンプト に含めてデータ生成する • 類似誤解をexampleとしてプロンプトに含める[1] ◦ RetrieverやRerankerの出力結果を元に誤解をいくつかのクラスタに分類し同一 クラスタの誤解をプロンプトに含めて質問を生成する ◦ 誤解データセットには表現が少しだけ違う似た誤解があったのでそれらをまとめ てプロンプトに渡すことで誤解の情報を豊富にするみたいな気持ち? 合成データ生成時の工夫
  16. AI 32 項目 01|コンペ概要 03|上位解法 1 - Retrieval 2 -

    Reranking 3 - LLMによる合成データ生成 4 - LLMテクニック 02|基本解法
  17. AI 35 • LoRAパラメータのモデルマージ[4] ◦ 複数のモデルを全て推論に使ってアンサンブルすると推論時間が足りないので、 複数モデルのLoRAパラメータの平均をとることでアンサンブル効果を得る • 誤解の埋め込みの事前計算[7] ◦

    アンサンブル時の計算時間を短縮するために誤解の埋め込みを事前に計算してお く ◦ その埋め込みと複数モデルのquery埋め込みの類似度をとることで誤解の埋め込み 計算を1回で済ませる 4. LLMテクニック: アンサンブル
  18. AI Retrievalパート データ生成パート 36 1位解法にLLMはどれだけ使われている? 合成データ生成LLM 合成データ評価LLM CoT生成教師LLM CoT生成LLM Retriever

    LLM x 2 Rerankingパート Reranker LLM x 3 Fine Tuning済みモデル 埋め込み特化モデルはカウントから除外 役割別にLLMがどのくらい使われているかを解法から読み解いて見るとこんな感じ。
  19. 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 参考文献
  20. 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 参考文献