Slide 1

Slide 1 text

キーワードはRAG!
 Kaggle LLMコンペの攻略法を解説
 
 
 
 早野康太


Slide 2

Slide 2 text

自己紹介
 ● 名前
 ○ 早野 康太
 ● お仕事
 ○ 自然言語モデルの改善
 ● 今期アニメ
 ○ フリーレン
 ○ 100カノ
 ○ ウマ娘
 ○ アンデラ
 ○ 薬屋のひとりごと
 ● 映画
 ○ ゴジラ -1.0


Slide 3

Slide 3 text

Kaggleとは
 ● Kaggleは、データサイエンスの目標を達成するための
 強力なツールとリソースを提供する世界最大の
 データサイエンス・コミュニティです
 Kaggle is the world's largest data science community with powerful tools and resources to help you achieve your data science goals. (https://www.kaggle.com/)


Slide 4

Slide 4 text

Kaggleとは
 ● コンペティション
 ○ 企業や政府などが主体となって
 データサイエンスのコンペティションを開催し
 世界中のデータサイエンティストが順位を競います
 
 
 出典: チェンソーマン © 藤本タツキ / 集英社 


Slide 5

Slide 5 text

Kaggleとは
 ● コンペティション
 ○ 企業や政府などが主体となって
 データサイエンスのコンペティションを開催し
 世界中のデータサイエンティストが順位を競います
 
 
 ● 順位に応じてメダルがもらえます
 ○ ゴールド: 上位1パーセント以内
 ○ シルバー: 上位5パーセント以内
 ○ ブロンズ: 上位10パーセント以内


Slide 6

Slide 6 text

Kaggleとは
 参加者
 Public Score
 モデルや
 コードを提出
 (submission)
 テストデータセット
 Public
 Private
 開催期間中は
 参加者はこれしか見えない 
 Private Score
 Public + Privateで算出 
 最終的な順位はこれで決まる 
 スコアは運営側が用意した 
 環境で計算される


Slide 7

Slide 7 text

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)


Slide 8

Slide 8 text

Kaggle LLM コンペティションに参加しました
 205th / 2,664 teams で銅メダルでした!


Slide 9

Slide 9 text

今日のお話
 ● 本コンペでは
 特にRAGと呼ばれる手法をうまく使うことが
 鍵となっていました
 ○ さまざまな議論や試行錯誤を
 体験することができとても有意義なコンペとなりました
 
 今日のお話としては
 ● 発表者がコンペにどう取り組んだか
 ● うまいコンペの解法は何だったのか
 を中心にしていきたいと思います


Slide 10

Slide 10 text

今日のお話
 ● どういうコンペだったか
 
 ● コンペに取り組む中で
 どういう手法があったか
 ○ RAG
 
 ● 上位勢はどう解いたか
 ○ 1st, 2nd, 6th の解法を紹介
 
 ● まとめ


Slide 11

Slide 11 text

タスク設定
 科学系の質問に対して
 LLMに選択肢を選ばせて
 正解率を競う!
 電磁気学の
 統一理論を発表したのは誰?
 質問
 選択肢
 A: マクスウェル
 B: アインシュタイン
 C: ガリレオ
 D: ファラデー
 E: ニュートン


Slide 12

Slide 12 text

以下の文章について
 質問と選択肢を作ってください
 質問はLLMが生成
 プロンプト
 Wikipedia文章
 GPT-3.5
 電磁気学の
 統一理論を発表したのは誰?
 質問
 選択肢
 A: マクスウェル
 B: アインシュタイン
 C: ガリレオ
 D: ファラデー
 E: ニュートン


Slide 13

Slide 13 text

質問はLLMが生成
 ● GPT-3.5で評価データ作成
 (参加者には見えない)
 
 ● 参加者が提出した
 モデルで正解率評価
 運営
 ● 質問に答えられるような
 モデルを学習
 
 ● 評価データに対して
 推論するコード・モデルを提出
 
 ● リーダーボードスコアで
 上位を目指す
 
 
 参加者


Slide 14

Slide 14 text

ざっくりポイント
 ● fine-tuningするLLMの選択
 
 ● 学習データの工夫
 
 ● 入力するプロンプトの工夫
 


Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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をまともに動かすのはムリ!

Slide 17

Slide 17 text

fine-tuningするモデルの選択
 
 プロンプト
 LLM
 質問:
 電磁気学の
 統一理論を発表したのは誰?
 
 A: マクスウェル
 B: アインシュタイン
 C: ガリレオ
 D: ファラデー
 E: ニュートン
 Linear Layer
 +
 0.8
 0.4
 0.3
 0.2
 0.2
 Logits
 この部分に使うモデルを
 いろいろ試す


Slide 18

Slide 18 text

学習データをLLMで生成
 ● ふつうのコンペと違って
 学習データがほとんど与えられていない
 → 自分で作れってこと 
 
 ● Wikipedia APIでWikipedia文章を取得し
 プロンプトとともにGPT-3.5に与え
 質問と解答の選択肢を生成させた
 → 最終的に学習に使った質問は10万問程度
 


Slide 19

Slide 19 text

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


Slide 20

Slide 20 text

以下の文章について
 質問と選択肢を作ってください
 学習データをLLMで生成
 プロンプト
 Wikipedia文章
 GPT-3.5
 電磁気学の
 統一理論を発表したのは誰?
 質問
 選択肢
 A: マクスウェル
 B: アインシュタイン
 C: ガリレオ
 D: ファラデー
 E: ニュートン


Slide 21

Slide 21 text

学習データ作成


Slide 22

Slide 22 text

学習データ作成
 システムメッセージで 
 出力のフォーマットを指定 


Slide 23

Slide 23 text

学習データ作成
 ユーザーメッセージに 
 Wikipedia文章を入力 


Slide 24

Slide 24 text

● 例えばこういう問題は
 文章のみからでは正解を判定不能 
 (前提知識を必要とする) 
 
 
 LLMへのインプット
 
 電磁気学の
 統一理論を発表したのは誰?
 質問
 選択肢
 A: マクスウェル
 B: アインシュタイン
 C: ガリレオ
 D: ファラデー
 E: ニュートン
 なんなんこいつら
 知らんわ


Slide 25

Slide 25 text

● 例えばこういう問題は
 文章のみからでは正解を判定不能 
 (前提知識を必要とする) 
 
 
 LLMへのインプット
 
 電磁気学の
 統一理論を発表したのは誰?
 質問
 選択肢
 A: マクスウェル
 B: アインシュタイン
 C: ガリレオ
 D: ファラデー
 E: ニュートン
 序盤はこの形式で
 fine-tuningしていた
 → 精度が70%台で停滞


Slide 26

Slide 26 text

LLMへのインプット
 
 電磁気学の
 統一理論を発表したのは誰?
 質問
 選択肢
 A: マクスウェル
 B: アインシュタイン
 C: ガリレオ
 D: ファラデー
 E: ニュートン
 マクスウェル方程式は、
 電磁場を記述する古典電磁気学の...
 背景(Context)
 質問に関連する文章を
 追加して
 答えやすくしてあげる


Slide 27

Slide 27 text

LLMへのインプット
 
 電磁気学の
 統一理論を発表したのは誰?
 質問
 選択肢
 A: マクスウェル
 B: アインシュタイン
 C: ガリレオ
 D: ファラデー
 E: ニュートン
 マクスウェル方程式は、
 電磁場を記述する古典電磁気学の...
 背景(Context)
 コンペ途中からインプットに
 Contextを追加する形式に
 → 最終的に
 精度90%台まで向上


Slide 28

Slide 28 text

RAG (Retrieval Augmented Generation)
 質問 + 選択肢
 関連する文章
 (Context)
 LLMへのインプット
 外部から
 情報を取ってくる


Slide 29

Slide 29 text

RAG (Retrieval Augmented Generation)
 質問 + 選択肢
 Wikipedia passages
 dump
 Wikipedia embeddings
 
 あらかじめベクトル化 
 ベクトル化
 embedding
 ベクトル類似度検索 
 関連する文章
 (Context)
 LLMへのインプット


Slide 30

Slide 30 text

RAG (Retrieval Augmented Generation)
 質問 + 選択肢
 Wikipedia passages
 dump
 Wikipedia embeddings
 
 あらかじめベクトル化 
 ベクトル化
 embedding
 ベクトル類似度検索 
 関連する文章
 (Context)
 LLMへのインプット
 Wikipedia記事から
 検索してContextを取得


Slide 31

Slide 31 text

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


Slide 32

Slide 32 text

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


Slide 33

Slide 33 text

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


Slide 34

Slide 34 text

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
 


Slide 35

Slide 35 text

RAG (Retrieval Augmented Generation)
 質問 + 選択肢
 Wikipedia passages
 dump
 Wikipedia embeddings
 
 あらかじめベクトル化 
 ベクトル化
 embedding
 ベクトル類似度検索 
 関連する文章
 (Context)
 LLMへのインプット
 ポイント3
 ● LLMによるembedding類似度
 ● TF-IDFで作成したベクトルによる類似度


Slide 36

Slide 36 text

RAG工夫どころまとめ
 ● ポイント1: 
 検索対象の文書集合になるべく科学関連の記事が含まれるようにする
 ○ ↓ノートブックによるSTEM記事クラスタを活用
 Finding 270K Wikipedia STEM articles!
 
 ● ポイント2:
 性能の高いLLMを使って埋め込みを作成する
 ○ MTEB Leaderboard - a Hugging Face Space by mteb 
 
 ● ポイント3:
 検索の手法を工夫する
 ○ LLMからのembeddingによる類似度検索
 ○ TF-IDFで作成したベクトルによる類似度検索
 


Slide 37

Slide 37 text

RAG工夫どころまとめ
 ● ポイント1: 
 検索対象の文書集合になるべく科学関連の記事が含まれるようにする
 ○ ↓ノートブックによるSTEM記事クラスタを活用
 Finding 270K Wikipedia STEM articles!
 
 ● ポイント2:
 性能の高いLLMを使って埋め込みを作成する
 ○ MTEB Leaderboard - a Hugging Face Space by mteb 
 
 ● ポイント3:
 検索の手法を工夫する
 ○ LLMからのembeddingによる類似度検索
 ○ TF-IDFで作成したベクトルによる類似度検索
 


Slide 38

Slide 38 text

モデルの学習・アンサンブル
 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で作成したデータセット


Slide 39

Slide 39 text

モデルの学習・アンサンブル
 ● 最終的に提出したのは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%) だった


Slide 40

Slide 40 text

上位勢はどう解いたか
 1st Place Solution
 ● RAGの工夫
 ○ 独自のWikipediaコーパスを作成
 ■ 最終的にCirrusSearchダンプを512文字単位のチャンクに区切り
 ■ 科学記事のフィルタリングは行っていない
 (Wikipedia全記事分のダンプを使用した)
 ○ 複数のembeddingモデルから取得したContextを使用
 ● モデルの工夫
 ○ 5種類の7Bモデルと13Bモデルをアンサンブル
 (8bitで量子化して推論を実行)
 ■ fine-tuneにはLoRAを使用
 ○ LLMモデルの最終隠れ層の値からロジットを計算
 
 


Slide 41

Slide 41 text

上位勢はどう解いたか
 2nd Place Solution
 ● RAGの工夫
 ○ Huggingfaceで公開されているデータセットからWikipediaチャンク作成
 (graelo/wikipedia · Datasets at Hugging Face)
 ○ DeBERTa-largeをベースにしてContextを取得するための
 リランカーモデルをfine-tuneした
 ● モデルの工夫
 ○ DeBERTa-largeを使用
 ■ 選択肢の答えが似通っている場合に専用のMasked LMを使用
 ○ 選択肢に正解が含まれていない質問セットでモデルをfine-tuneし
 アンサンブルに使用した
 
 
 


Slide 42

Slide 42 text

上位勢はどう解いたか
 6th Place Solution
 ● モデルの工夫
 ○ DeBERTaと7B LLMをアンサンブル
 ■ 7B LLM
 ● LoRA + bf16量子化でfine-tune
 ○ ゼロショット 70B LLMを一部の問題に対して使用した (!)
 ■ ロジットの値が低い予測選択肢をピックアップして
 LLMに真偽判定をさせた
 
 
 


Slide 43

Slide 43 text

コンペを通しての学び・反省点
 ● 学び
 ○ QA 形式のデータセットでのfine-tuningはあまり経験がなかったが
 コンペティションを通して前処理や学習手法を学ぶことができた
 ○ RAGによるプロンプト拡張により
 劇的にLLMの精度を向上させることができる
 ■ faiss indexによる文書検索実装も勉強になった
 ● 反省点
 ○ 学習データ取得やハイパラ探索に拘泥しRAGの改善がほぼできなかった
 ■ このコンペではいかにRAGをうまく活用するかが鍵になっており
 学習データ数はそこまで重要ではなかった
 ○ public scoreだけをみてベストサブミッションを提出できなかった
 ■ アンサンブルを検討する時間がなかった