Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Kaggle_LLMコンペの攻略法を解説.pdf

payanotty
November 30, 2023
1.3k

 Kaggle_LLMコンペの攻略法を解説.pdf

payanotty

November 30, 2023
Tweet

Transcript

  1. 自己紹介
 • 名前
 ◦ 早野 康太
 • お仕事
 ◦ 自然言語モデルの改善


    • 今期アニメ
 ◦ フリーレン
 ◦ 100カノ
 ◦ ウマ娘
 ◦ アンデラ
 ◦ 薬屋のひとりごと
 • 映画
 ◦ ゴジラ -1.0

  2. Kaggleとは
 • コンペティション
 ◦ 企業や政府などが主体となって
 データサイエンスのコンペティションを開催し
 世界中のデータサイエンティストが順位を競います
 
 
 •

    順位に応じてメダルがもらえます
 ◦ ゴールド: 上位1パーセント以内
 ◦ シルバー: 上位5パーセント以内
 ◦ ブロンズ: 上位10パーセント以内

  3. Kaggleとは
 参加者
 Public Score
 モデルや
 コードを提出
 (submission)
 テストデータセット
 Public
 Private


    開催期間中は
 参加者はこれしか見えない 
 Private Score
 Public + Privateで算出 
 最終的な順位はこれで決まる 
 スコアは運営側が用意した 
 環境で計算される

  4. Kaggle LLM コンペティションに参加しました
 • Kaggle - LLM Science Exam |

    Kaggle
 ◦ 開催期間
 ▪ 2023/08/11 - 2023/10/10
 ◦ 概要
 ▪ 大規模言語モデルで作成された
 難しい科学に基づいた質問に答えることに挑戦します
 Inspired by the OpenBookQA dataset, this competition challenges participants to answer difficult science-based questions written by a Large Language Model. (https://www.kaggle.com/competitions/kaggle-llm-science-exam)

  5. 質問はLLMが生成
 • GPT-3.5で評価データ作成
 (参加者には見えない)
 
 • 参加者が提出した
 モデルで正解率評価
 運営
 •

    質問に答えられるような
 モデルを学習
 
 • 評価データに対して
 推論するコード・モデルを提出
 
 • リーダーボードスコアで
 上位を目指す
 
 
 参加者

  6. fine-tuningするモデルの選択
 • 運営側が用意した環境上で推論
 ◦ 推論時間 < 9 hours
 
 


    
 • パラメータ数の少ないBERT-large系列
 ◦ DeBERTa-v3-large: 304M params
 ◦ RoBERTa-large: 355M params
 ◦ Longformer-large: 102M params
 
 • GPU
 ◦ P100
 ◦ T4 x2
 ◦ TPU VM v3-8
  7. fine-tuningするモデルの選択
 • 運営側が用意した環境上で推論
 ◦ 推論時間 ≦ 9 hours
 
 


    
 • パラメータ数の少ないBERT-large系列
 ◦ DeBERTa-v3-large: 304M params
 ◦ RoBERTa-large: 355M params
 ◦ Longformer-large: 102M params
 • GPU
 ◦ P100
 ◦ T4 x2
 ◦ TPU VM v3-8 このスペックだと70B paramsとか
 デカいLLMをまともに動かすのはムリ!
  8. fine-tuningするモデルの選択
 
 プロンプト
 LLM
 質問:
 電磁気学の
 統一理論を発表したのは誰?
 
 A: マクスウェル


    B: アインシュタイン
 C: ガリレオ
 D: ファラデー
 E: ニュートン
 Linear Layer
 +
 0.8
 0.4
 0.3
 0.2
 0.2
 Logits
 この部分に使うモデルを
 いろいろ試す

  9. 学習データをLLMで生成
 • ふつうのコンペと違って
 学習データがほとんど与えられていない
 → 自分で作れってこと 
 
 • Wikipedia

    APIでWikipedia文章を取得し
 プロンプトとともにGPT-3.5に与え
 質問と解答の選択肢を生成させた
 → 最終的に学習に使った質問は10万問程度
 

  10. 学習データをLLMで生成
 • ふつうのコンペと違って
 学習データがほとんど与えられていない
 → 自分で作れってこと 
 
 • Wikipedia

    APIでWikipedia文章を取得し
 プロンプトとともにGPT-3.5に与え
 質問と解答の選択肢を生成させた
 → 最終的に学習に使った質問は10万問程度
 
 OpenAIの規約的にどうなの?
 • 規約による禁止事項
 ◦ Use Output to develop models that compete with OpenAI. (Terms of use)
 (アウトプットをOpenAIと競合するモデルの開発に 使用すること)
 
 以下の点から今回のコンペでは学習データ生成は
 OKと判断しました
 • 運営がChatGPTで生成したデータを
 学習データサンプルとして提供している

  11. • 例えばこういう問題は
 文章のみからでは正解を判定不能 
 (前提知識を必要とする) 
 
 
 LLMへのインプット
 


    電磁気学の
 統一理論を発表したのは誰?
 質問
 選択肢
 A: マクスウェル
 B: アインシュタイン
 C: ガリレオ
 D: ファラデー
 E: ニュートン
 なんなんこいつら
 知らんわ

  12. • 例えばこういう問題は
 文章のみからでは正解を判定不能 
 (前提知識を必要とする) 
 
 
 LLMへのインプット
 


    電磁気学の
 統一理論を発表したのは誰?
 質問
 選択肢
 A: マクスウェル
 B: アインシュタイン
 C: ガリレオ
 D: ファラデー
 E: ニュートン
 序盤はこの形式で
 fine-tuningしていた
 → 精度が70%台で停滞

  13. LLMへのインプット
 
 電磁気学の
 統一理論を発表したのは誰?
 質問
 選択肢
 A: マクスウェル
 B: アインシュタイン


    C: ガリレオ
 D: ファラデー
 E: ニュートン
 マクスウェル方程式は、
 電磁場を記述する古典電磁気学の...
 背景(Context)
 質問に関連する文章を
 追加して
 答えやすくしてあげる

  14. LLMへのインプット
 
 電磁気学の
 統一理論を発表したのは誰?
 質問
 選択肢
 A: マクスウェル
 B: アインシュタイン


    C: ガリレオ
 D: ファラデー
 E: ニュートン
 マクスウェル方程式は、
 電磁場を記述する古典電磁気学の...
 背景(Context)
 コンペ途中からインプットに
 Contextを追加する形式に
 → 最終的に
 精度90%台まで向上

  15. RAG (Retrieval Augmented Generation)
 質問 + 選択肢
 Wikipedia passages
 dump


    Wikipedia embeddings
 
 あらかじめベクトル化 
 ベクトル化
 embedding
 ベクトル類似度検索 
 関連する文章
 (Context)
 LLMへのインプット

  16. RAG (Retrieval Augmented Generation)
 質問 + 選択肢
 Wikipedia passages
 dump


    Wikipedia embeddings
 
 あらかじめベクトル化 
 ベクトル化
 embedding
 ベクトル類似度検索 
 関連する文章
 (Context)
 LLMへのインプット
 Wikipedia記事から
 検索してContextを取得

  17. RAG (Retrieval Augmented Generation)
 質問 + 選択肢
 Wikipedia passages
 dump


    Wikipedia embeddings
 
 あらかじめベクトル化 
 ベクトル化
 embedding
 ベクトル類似度検索 
 関連する文章
 (Context)
 LLMへのインプット
 Wikipedia記事から
 検索してContextを取得
 ベクトル検索用に調整された言語モデルを使う 
 (質問に回答するモデルとは別物) 

  18. RAG (Retrieval Augmented Generation)
 質問 + 選択肢
 Wikipedia passages
 dump


    Wikipedia embeddings
 
 あらかじめベクトル化 
 ベクトル化
 embedding
 ベクトル類似度検索 
 関連する文章
 (Context)
 LLMへのインプット
 ポイント1
 なるべく質問に関連しそうな
 文書集合を使う

  19. RAG (Retrieval Augmented Generation)
 質問 + 選択肢
 Wikipedia passages
 dump


    Wikipedia embeddings
 
 あらかじめベクトル化 
 ベクトル化
 embedding
 ベクトル類似度検索 
 関連する文章
 (Context)
 LLMへのインプット
 ポイント1
 なるべく質問に関連しそうな
 文書集合を使う
 文章埋め込み空間上で
 k-meansクラスタリングを使って
 科学記事のクラスタを作成
 Finding 270K Wikipedia STEM articles!
 

  20. RAG (Retrieval Augmented Generation)
 質問 + 選択肢
 Wikipedia passages
 dump


    Wikipedia embeddings
 
 あらかじめベクトル化 
 ベクトル化
 embedding
 ベクトル類似度検索 
 関連する文章
 (Context)
 LLMへのインプット
 ポイント2
 性能の高いLLMを使って
 embeddingを作成する
 LLMのRetrieval性能リーダーボード MTEB Leaderboard - a Hugging Face Space by mteb
 

  21. RAG (Retrieval Augmented Generation)
 質問 + 選択肢
 Wikipedia passages
 dump


    Wikipedia embeddings
 
 あらかじめベクトル化 
 ベクトル化
 embedding
 ベクトル類似度検索 
 関連する文章
 (Context)
 LLMへのインプット
 ポイント3
 • LLMによるembedding類似度
 • TF-IDFで作成したベクトルによる類似度

  22. RAG工夫どころまとめ
 • ポイント1: 
 検索対象の文書集合になるべく科学関連の記事が含まれるようにする
 ◦ ↓ノートブックによるSTEM記事クラスタを活用
 Finding 270K Wikipedia

    STEM articles!
 
 • ポイント2:
 性能の高いLLMを使って埋め込みを作成する
 ◦ MTEB Leaderboard - a Hugging Face Space by mteb 
 
 • ポイント3:
 検索の手法を工夫する
 ◦ LLMからのembeddingによる類似度検索
 ◦ TF-IDFで作成したベクトルによる類似度検索
 

  23. RAG工夫どころまとめ
 • ポイント1: 
 検索対象の文書集合になるべく科学関連の記事が含まれるようにする
 ◦ ↓ノートブックによるSTEM記事クラスタを活用
 Finding 270K Wikipedia

    STEM articles!
 
 • ポイント2:
 性能の高いLLMを使って埋め込みを作成する
 ◦ MTEB Leaderboard - a Hugging Face Space by mteb 
 
 • ポイント3:
 検索の手法を工夫する
 ◦ LLMからのembeddingによる類似度検索
 ◦ TF-IDFで作成したベクトルによる類似度検索
 

  24. モデルの学習・アンサンブル
 GPT3.5で作成したデータセット
 DeBERTa-v3-large
 • max_tokens = 384
 • x 3folds


    Longformer-large
 • max_tokens = 1024
 GPT3.5で作成したデータセット
 Race QAデータセット
 DeBERTa-v3-large
 DeBERTa-v3-large
 • max_tokens = 1024
 • x 3folds
 fine-tuning
 GPT3.5で作成したデータセット

  25. モデルの学習・アンサンブル
 • 最終的に提出したのは2種類のモデルのアンサンブル
 ◦ DeBERTa-v3-large 
 ▪ GPT-3.5データセットのみでfine-tuning
 ◦ DeBERTa-v3-large

    
 ▪ RACE QAでfine-tuning → GPT-3.5データセットでfine-tuning
 
 
 
 惜しかったところ
 • public scoreが振るわなかったため提出できていなかったが
 Longformerモデルをアンサンブルしたものが最もリーダーボードのスコアが高 かった
 • もし提出できていたら150位 (top 6%) だった

  26. 上位勢はどう解いたか
 1st Place Solution
 • RAGの工夫
 ◦ 独自のWikipediaコーパスを作成
 ▪ 最終的にCirrusSearchダンプを512文字単位のチャンクに区切り


    ▪ 科学記事のフィルタリングは行っていない
 (Wikipedia全記事分のダンプを使用した)
 ◦ 複数のembeddingモデルから取得したContextを使用
 • モデルの工夫
 ◦ 5種類の7Bモデルと13Bモデルをアンサンブル
 (8bitで量子化して推論を実行)
 ▪ fine-tuneにはLoRAを使用
 ◦ LLMモデルの最終隠れ層の値からロジットを計算
 
 

  27. 上位勢はどう解いたか
 2nd Place Solution
 • RAGの工夫
 ◦ Huggingfaceで公開されているデータセットからWikipediaチャンク作成
 (graelo/wikipedia ·

    Datasets at Hugging Face)
 ◦ DeBERTa-largeをベースにしてContextを取得するための
 リランカーモデルをfine-tuneした
 • モデルの工夫
 ◦ DeBERTa-largeを使用
 ▪ 選択肢の答えが似通っている場合に専用のMasked LMを使用
 ◦ 選択肢に正解が含まれていない質問セットでモデルをfine-tuneし
 アンサンブルに使用した
 
 
 

  28. 上位勢はどう解いたか
 6th Place Solution
 • モデルの工夫
 ◦ DeBERTaと7B LLMをアンサンブル
 ▪

    7B LLM
 • LoRA + bf16量子化でfine-tune
 ◦ ゼロショット 70B LLMを一部の問題に対して使用した (!)
 ▪ ロジットの値が低い予測選択肢をピックアップして
 LLMに真偽判定をさせた
 
 
 

  29. コンペを通しての学び・反省点
 • 学び
 ◦ QA 形式のデータセットでのfine-tuningはあまり経験がなかったが
 コンペティションを通して前処理や学習手法を学ぶことができた
 ◦ RAGによるプロンプト拡張により
 劇的にLLMの精度を向上させることができる


    ▪ faiss indexによる文書検索実装も勉強になった
 • 反省点
 ◦ 学習データ取得やハイパラ探索に拘泥しRAGの改善がほぼできなかった
 ▪ このコンペではいかにRAGをうまく活用するかが鍵になっており
 学習データ数はそこまで重要ではなかった
 ◦ public scoreだけをみてベストサブミッションを提出できなかった
 ▪ アンサンブルを検討する時間がなかった