Kaggleコンペ(LLM Science Exam)の振り返りと上位解法まとめ

概要

  • KaggleのLLMコンペの上位解法まとめ
  • ベクトル検索としては、MTEB learderboardから探したEmbeddingを利用
    • モデル
      • e5-base/large (1位)
      • gte-base/large
      • bge-base/large
    • largeだからといって精度が上がるわけでもないらしい
    • どの単位でベクトル化するかも難しい
      • 10thは3〜4文を1つの文章としてスライド
  • BM25などの手法も複合で使っている
  • 推論はLLM(7B〜70B)かDeBERTa-v3
 
ブログとは別になるが、1位解法
  • 概要
    • WikipediaのチャンクのRAG
    • 公開されている埋め込みモデル、e5が最適。
    • カスタムpytorch余弦類似度コード。- GPU上のチャンクでメモリの問題なく実行できる
    • 5つのチャンクをコンテキストとして使用し、max_lengthに1kを使用するのが最適だった。
    • ほとんどが7BのLLMのアンサンブルで、1つだけ13Bもあるが、それ以上のものは役に立たなかった
    • Debertaを動作させようとしたが、LLMの方が優れており、アンサンブルにすら役立たなかった
      • Llama-2-7b
      • Mistral-7B-v0.1
      • xgen-7b-8k-base
      • Llama-2-13b
    • 異なるwiki/chunking/embeddingをlate fusionするアンサンブル(つまり各LLMが異なるテクニックを得る)
    • すべてのLLMはH2O LLM Studioで微調整され、バイナリ分類ヘッドを持つ
      • context + questtion + Answer (a), context + questtion + Answer (b)のような形でそれぞれの選択肢について分類して並び替え
      • LoRAで線型層を訓練した
      • 最後の次のtokenを予測するlogitの後の二値分類層を追加
      • 細かいHyper parameter tuningはそこまで役に立たなかった。単純にcosine decayとbceで1epochだけ学習させた
    • トレーニングデータはあまり重要ではなく、いろいろ試したが、@radek1から共有された初期のデータを使うか、自分で似たようなものを生成するだけで、かなりうまくいく。
    • 他の選択肢の次のtokenを予測するlogitの平均を各選択肢の二値分類層に入れた
      • 他の選択肢のCross Attention的な情報を使いたいが、一度に学習させると位置のバイアスを受けやすくなってしまったらしく、選択肢をランダムに入れ替えたTTA的な戦略もあったらしいが、上の方法の方が良かったらしい