Kaggle - LLM Science Exam コンペ終了 / 2023年10月11日
kaggleのLLMコンペ終了。順位は40/2700位銀メダル🥈で、かけた時間の割にはまだまだだったなぁと力不足を感じた。ただ、コードや試行錯誤はたくさん行ったので得られたものは結構あった。上位解法は丁寧にRAGしているものも多く、めちゃめちゃ参考になる。
- ざっくりやっていたのはllama2-13Bの派生モデルと deberta-v3-large のアンサンブル。13Bはlast_hidden_state的なtokenの該当箇所をavg poolingして使った。デコーダーモデルはA,B,C,D,Eで並べた時、AはEまで読んでいない状態なのだけど、そこそこなスコア(序盤は金圏)は出た。
- RAG の実装方法、RAGへの考察。ベクトルでのANNも良いが、キーワードを使った従来の検索も得手不得手があるので両方大事。
- RAG はwikipedia全部をElasticsearchに突っ込んで取得して使う(BM25)という力技でやっていた。終盤出てきた270kサンプリングされたデータにかなり負けてしまった。もっと丁寧にやるべきであった。
- 中盤までやたらLLaMA2-13Bモデル(の派生モデル)を学習させていたので、デコーダーモデルのお気持ち理解。デコーダーモデルのfinetuneやデコーダーでなにができるかの知見が広がる。13B程度のモデルならQLoraでご家庭24GB GPUで学習可能。
- LoRA/QLoRA の理解。deberta-v3-large程度(0.3B encoder)のモデルサイズでも、線形層全部 + r=64,dropout=0.2あたりでほぼ性能変わらない、というのが知れて良かった。実務応用しやすい。
- LoRA の層自体を merge することによっての性能向上。fold0-4とかのCV作って、それらの重みを(タスクにもよる?)がmerge可能。実務だとCVしても全部のモデルを実行するのが運用やコスト的にやりにくかったけどうまくいく。これも実務応用しやすい。