
「あなたのLLMスキル、「実戦」で通用しますか? ファインチューニング、RAG、量子化、モデルマージ......知識や理論を知っているだけでは、性能を引き出すことはできません。トップKagglerたちはスコアを削り出すために、何を試し、何を捨て、なぜその手法を選んだのか。課題解決のための"本物"の技術を身につけられる一冊です。」
秋葉拓哉氏推薦!!
(Sakana AI Staff Research Scientist)
従来のKaggle関連書籍では、十分に取り扱うことができずにいたテキストデータを扱うコンペティション(NLPコンペ)に焦点を当てた初の書籍!注目が集まっている大規模言語モデルに関する内容をふんだんに盛り込み、基本的な使い方から、性能を底上げする応用的な使い方まで幅広く解説。
・実践的な課題解決の場で得られた知見をもとに内容を構成し、教科書的な書籍とは異なる実用的な視点を提供。コンペ参加者に限らず、大規模言語モデルに関心を持つエンジニアや研究者にとっても有益!
・基礎編では、基礎知識のみにとどめず、大規模言語モデルの性能をさらに引き出すための、実践的な暗黙知や勘所などのウラ側も詳しく解説。コンペの上位スコアを追体験できるサンプルコードも提供。
・応用編では、多彩な8つのKaggleコンペを題材に、概要・データ構造・評価指標を整理し、ベースラインとして公開されている手法および上位解法を紹介。
【基礎編の編著者の紹介】
高野海斗、Kaggle Master、https://www.kaggle.com/takaito
主に1、3章を執筆。資産運用会社で自然言語処理技術を活用した投資戦略の開発や業務効率化ツールの開発を担当。Kaggleでは「LLM - Detect AI Generated Text」コンペで単独で金メダルを獲得したほか、さまざまなコンペでメダルを獲得。共著に『自然言語処理の導入と活用事例』。博士(理工学)。大阪公立大学客員研究員。人工知能学会企画委員(コンペ担当)。
齋藤慎一朗、Kaggle Master、https://www.kaggle.com/sinchir0
主に 4、5、10章を執筆。Sansan株式会社研究開発部シニアリサーチャー。業務ではファインチューニングしたLLMを活用したプロダクト改善に従事。Kaggleでは「The Learning Agency Lab - PII Data Detection」コンペや「LMSYS - Chatbot Arena Human Preference Predictions」コンペにて銀メダルを獲得。LLMの技術記事を多く投稿。Kaggle Competitions MasterおよびNotebooks Master。共著に『Polarsとpandasで学ぶデータ処理アイデアレシピ55』。
石原祥太郎、Kaggle Master、https://www.kaggle.com/sishihara
主に2章の執筆と全体の編集を担当。株式会社日本経済新聞社でLLMの開発や利活用を推進。Kaggleでは「PetFinder.my Adoption Prediction」コンペの優勝をはじめ、Kaggle Days Tokyoでのコンペ開催、「Kaggle Days Championship Final 2022」進出など、幅広い経験を持つ。共著に『PythonではじめるKaggleスタートブック』『Kaggleに挑む深層学習プログラミングの極意』『事例でわかるMLOps』、訳書に『Kaggle Grandmasterに学ぶ機械学習実践アプローチ』。2019 年から「Weekly Kaggle News」を配信している。人工知能学会企画委員(コンペ担当)、Google Developer Expert(AI、Kaggle)。
【応用編の寄稿者の紹介】
坂見耕輔さん(6章)/中真人さん(7章)/郭林升さん(8章)/三好拓志さん(9章)/村上直輝さん(11章)/洪立航さん(12章)/吉原浩之さん(13章)/井ノ上雄一さん(13章)/山口大器さん(13章)
各寄稿者の詳細なプロフィールは、サポートサイトに掲載しています。(近日公開予定)
https://github.com/sinchir0/kaggle_llm_book/blob/main/profiles.md
はじめに
基礎編
第1章 自然言語処理の基礎
1.1 自然言語処理の考え方
1.2 自然言語処理のタスクと評価
1.2.1 分類
1.2.2 回帰
1.2.3 生成
1.2.4 検索・推薦
1.2.5 最適化する関数と評価指標
1.3 単語の頻度情報に基づく伝統的手法
1.3.1 Bag-of-Words
1.3.2 TF-IDF
1.3.3 単語文脈行列
1.3.4 次元圧縮
1.3.5 word2vec
1.4 深層学習モデルの台頭
1.4.1 多層パーセプトロン
1.4.2 Recurrent Neural Network
1.4.3 Encoder-Decoder Model
1.4.4 Attention
1.4.5 Transformer
1.5 BERTの登場
1.5.1 概要
1.5.2 モデル構造
1.5.3 トークナイザ
1.5.4 事前学習
1.5.5 ファインチューニング
1.5.6 派生形モデル
1.5.7 Kaggleへの架け橋
1.6 大規模言語モデルの衝撃
1.6.1 概要
1.6.2 ChatGPTによる一般認知の拡大
1.6.3 大規模言語モデルの定義
1.6.4 大規模言語モデルの構築
1.6.5 プロンプト
1.6.6 大規模言語モデルのファインチューニング
1.6.7 クローズドモデルとオープンモデル
1.6.8 大規模言語モデルのライセンス
1.6.9 Kaggleへの架け橋
第2章 データサイエンスコンペティションの基礎
2.1 コンペの歴史・意義・役割
2.1.1 データサイエンスコンペの概要
2.1.2 Kaggleの設立とNLPコンペの開催動向
2.2 コンペの一般的な枠組み
2.2.1 コンペの一般的な流れ
2.2.2 Kaggle特有の仕組みや制約
2.3 コンペにおける機械学習の標準的な作法
2.3.1 モデルの検証
2.3.2 アンサンブル
2.3.3 データセットに対する試行錯誤
2.4 コンペで利用する計算資源
2.4.1 コンピュータの構成要素
2.4.2 Kaggleで利用可能な計算資源
2.4.3 Kaggle外の計算資源
2.4.4 Kaggleへの架け橋
第3章 「atmaCup #17」に挑戦
3.1 コンペの概要
3.2 探索的データ解析
3.2.1 事前準備
3.2.2 読み込んだデータの確認
3.2.3 データの加工
3.2.4 簡単な分析
3.2.5 交差検証
3.2.6 参考となるEDAの紹介
3.3 単語の頻度情報を用いたモデル
3.3.1 事前準備
3.3.2 データの加工
3.3.3 テキストデータからの特徴量作成
3.3.4 モデルの学習と推論
3.3.5 Kaggleへの架け橋
3.4 BERT系統のモデル
3.4.1 事前準備
3.4.2 トークナイザの設定
3.4.3 データセットの作成
3.4.4 モデルの学習と推論
3.4.5 Kaggleへの架け橋
3.5 大規模言語モデル
3.5.1 事前準備
3.5.2 トークナイザの設定
3.5.3 データセットの作成
3.5.4 モデルの学習と推論
3.5.5 Kaggleへの架け橋
3.6 アンサンブル
3.6.1 事前準備
3.6.2 最適な重みの探索
3.6.3 提出用のファイル作成
3.6.4 提出結果
3.7 上位解法の紹介
3.7.1 上位解法の概要
3.7.2 補助損失関数
3.7.3 大規模言語モデルの特徴と工夫
第4章 大規模言語モデルの性能改善
4.1 ファインチューニング
4.1.1 ファインチューニングに用いるライブラリ
4.1.2 分類のためのファインチューニング
4.1.3 回帰のためのファインチューニング
4.1.4 トークン分類のためのファインチューニング
4.1.5 生成のためのファインチューニング
4.1.6 検索・推薦のためのファインチューニング
4.1.7 LoRAファインチューニング
4.1.8 ハイパーパラメータ調整の方針
4.1.9 Kaggleへの架け橋
4.2 プロンプトエンジニアリング
4.2.1 プロンプト設計の基本方針
4.2.2 プロンプトエンジニアリングの手法
4.2.3 Kaggleへの架け橋
4.3 検索拡張生成
4.3.1 RAGの構成要素
4.3.2 Retriever
4.3.3 Reader
4.3.4 Kaggleへの架け橋
4.4 モデルマージ
4.4.1 モデルマージの種類
4.4.2 モデルマージの手法
4.4.3 モデルマージに用いるライブラリ
4.4.4 Kaggleへの架け橋
第5章 大規模言語モデルの軽量化・高速化・省メモリ化
5.1 低精度化と量子化
5.1.1 コンピュータ上での数値表現
5.1.2 低精度化の手法とライブラリ
5.1.3 量子化の手法とライブラリ
5.1.4 Kaggleへの架け橋
5.1.5 二重量子化
5.2 知識蒸留
5.2.1 知識蒸留の手法
5.2.2 Kaggleへの架け橋
5.3 Attentionの高速化
5.3.1 FlashAttention
5.3.2 KVキャッシュ
5.3.3 Paged Attention
5.3.4 vLLM
5.3.5 Kaggleへの架け橋
応用編
第6章 Jigsaw Unintended Bias in Toxicity Classification
6.1 コンペの情報
6.2 コンペの概要
6.3 コンペの評価
6.3.1 データのカラム
6.3.2 評価指標
6.4 コンペの特徴
6.4.1 有害データの割合
6.4.2 サブグループの割合
6.5 ベースライン
6.5.1 評価指標に合わせた重みの設定
6.5.2 BERT
6.6 上位解法の紹介
6.6.1 1位解法
6.6.2 2位解法
6.6.3 4位解法
6.7 筆者のチームの解法紹介
6.7.1 解法概要
6.7.2 有効だったこと
6.7.3 効かなかったこと
6.8 LLMを用いた追加検証
第7章 CommonLit - Evaluate Student Summaries
7.1 コンペの情報
7.2 コンペの概要
7.3 コンペの評価
7.4 コンペの特徴
7.4.1 データ数の不均衡
7.4.2 [SEP]でつなぐだけではスコアが伸びない
7.5 ベースライン
7.6 上位解法の紹介
7.6.1 1位解法
7.6.2 2位解法
7.6.3 3位解法
7.7 筆者のチームの解法紹介
7.7.1 解法概要
7.7.2 全データ学習の有効性
7.7.3 モデルアーキテクチャ
7.7.4 (Seed/Model)アンサンブルの可視化
7.7.5 Seed値によるPublic/Private LBのばらつき
7.7.6 Seedアンサンブルの可視化
7.7.7 Modelアンサンブルの可視化
7.7.8 考察と実際のコンペ結果(1全データ学習×7モデル)
7.8 Gemma 2での再検証:スコア向上の難しさ
第8章 Kaggle - LLM Science Exam
8.1 コンペの情報
8.2 コンペの概要
8.3 コンペの評価
8.4 コンペの特徴
8.4.1 提供されている訓練セットが少ない
8.4.2 テストセットも生成データセット
8.4.3 順位表スコアとローカル評価スコアの乖離
8.4.4 データがWikipediaの記事をもとに生成されている
8.5 ベースライン
8.5.1 ベースラインの概要
8.5.2 データセット生成
8.5.3 関連情報の付加
8.5.4 学習
8.5.5 検索拡張生成による推論
8.6 上位解法の紹介
8.6.1 検索データソース
8.6.2 Retrieval
8.6.3 Reranking
8.6.4 推論モデル
8.6.5 推論パフォーマンス改善
8.7 筆者のチームの解法紹介
8.7.1 Retrieval対象のデータソースの用意
8.7.2 Retrievalパートの構築
8.7.3 Rerankingパートの構築
8.7.4 推論モデルの学習
8.7.5 推論
第9章 Bengali.AI Speech Recognition
9.1 コンペの情報
9.2 コンペの概要
9.3 コンペの評価
9.4 コンペの特徴
9.5 ベースライン
9.5.1 CTC Model
9.5.2 言語モデル
9.5.3 推論
9.6 上位解法の紹介
9.6.1 訓練セットから低品質なデータを除外する
9.6.2 Whisperをバックボーンにする
9.6.3 外部データの利用、データ拡張
9.6.4 句読点の付与
9.6.5 ノイズ・BGMの除去(音源分離)
9.7 筆者のチームの解法紹介
9.7.1 解法概要
9.7.2 有効だったこと・効かなかったこと
9.8 音声認識コンペへのLLMの活用方法
9.8.1 最終的な出力テキストをLLMで校正する
9.8.2 句読点付与モデルのバックボーンをLLMにする
9.8.3 Whisperを量子化して使う
第10章 The Learning Agency Lab - PII Data Detection
10.1 コンペの情報
10.2 コンペの概要
10.3 コンペの評価
10.4 コンペの特徴
10.4.1 極端に少ないラベルが存在する
10.4.2 文書の最初と最後にPIIが登場しやすい
10.4.3 NAME_STUDENTについて、名前だが生徒名ではないテキストと、生徒名のテキストを区別するのが困難である
10.4.4 spaCyとDeBERTaのトークナイザの間にずれがある
10.5 ベースライン
10.5.1 ベースラインの概要
10.5.2 DeBERTaによるStrideを用いたトークン分類
10.5.3 LLMとfakerを用いたデータ拡張
10.6 上位解法の紹介
10.6.1 上位解法で共通している手法
10.6.2 チームごとの手法
10.7 筆者のチームの解法紹介
10.7.1 解法概要
10.7.2 有効だったこと
10.7.3 効かなかったこと
第11章 Eedi - Mining Misconceptions in Mathematics
11.1 コンペの情報
11.2 コンペの概要
11.3 コンペの評価
11.4 コンペの特徴
11.4.1 各誤答に必ずしも誤解が与えられるわけではなかった
11.4.2 誤解のリストの中に、訓練セットで使われていない誤解があった
11.4.3 推論時に使える計算資源によって、扱えるLLMのパラメータ数がある程度決まっていた
11.4.4 API経由でしか使えないLLMを利用したデータ拡張が許可されていた
11.5 ベースライン
11.5.1 埋め込みモデルをファインチューニングしてRetrieval
11.5.2 LLMを利用した2段階Retrieval
11.5.3 LLMを利用した多肢選択の予測
11.6 上位解法の紹介
11.6.1 パイプライン
11.6.2 合成データの活用
11.6.3 誤解やCoTの生成
11.6.4 Retrieval
11.6.5 Reranking
11.6.6 後処理(Post-Processing)
11.7 筆者のチームの解法紹介
11.7.1 概要
11.7.2 検証戦略
11.7.3 データ生成
11.7.4 誤解の生成
11.7.5 Retrieverモデルの学習と推論
11.7.6 Rerankerモデルの学習と推論
11.7.7 後処理(Post-Processing)
第12章 WSDM Cup - Multilingual Chatbot Arena
12.1 コンペの情報
12.2 コンペの概要
12.3 コンペの評価
12.4 コンペの特徴
12.4.1 開発するモデルは、多言語に対応する必要がある
12.4.2 promptの長さにかなりのばらつきがある
12.4.3 正解ラベルはノイズを含む
12.4.4 最終順位の決定方法が特殊
12.5 ベースライン
12.5.1 ファインチューニング前Zero-Shotベースライン
12.5.2 ファインチューニング後のベースライン
12.6 上位解法の紹介
12.6.1 外部データセットの活用
12.6.2 学習と推論:文分類タスク vs 生成タスク
12.6.3 知識蒸留
12.6.4 アンサンブル戦略
12.7 筆者のチームの解法紹介
12.7.1 訓練セットの準備
12.7.2 合成データ
12.7.3 モデル選定および学習手法
12.7.4 知識蒸留
12.7.5 ハイパーパラメータ探索
12.7.6 量子化
12.7.7 推論およびアンサンブル
第13章 AI Mathematical Olympiad - Progress Prize 2
13.1 コンペの情報
13.2 コンペの概要
13.2.1 第1回AIMOとの違い
13.2.2 出題された問題数と順位表の算出方法
13.2.3 評価スコアの計算方法
13.3 賞金について
13.3.1 上位チームへの賞金
13.3.2 Overall Progress Prize Winner
13.3.3 Early Sharing Prize
13.4 コンペの特徴
13.5 ベースライン
13.5.1 モデルの種類
13.5.2 推論フレームワーク
13.5.3 LLMの出力の抽出
13.5.4 LLMへ入力するprompt
13.5.5 Voting
13.6 優勝チームの解法紹介
13.6.1 CoTデータセットの作成
13.6.2 ツール統合型推論
13.6.3 モデル学習
13.6.4 モデルマージ
13.6.5 推論の高速化
13.7 筆者のチームの解法紹介
13.7.1 解法の概要
13.7.2 初期の実験:プロンプトエンジニアリングと制約付きデコーディング
13.7.3 第1段階:SFTによる思考能力の改善
13.7.4 第2段階:GRPOによる思考効率の改善
13.7.5 コンペに特化した最適化:推論時間のスケーリング
13.7.6 成果物の公開:Fast-Mathシリーズ
あとがき
索引