LLMコンペの取り組み方



# LLMコンペとは何なのか？

Kaggle初のLLMコンペは、2023年7月に登場した[「LLM Science Exam」](https://www.kaggle.com/competitions/kaggle-llm-science-exam)です。当時は、「LLMコンペ」＝「LLM Science Exam」でした。それ以来、LLMコンペの開催頻度は徐々に増え、今後もその数は増加することが予想されます。

誤解を恐れずに表現すると、KaggleにおけるLLMコンペとは、**エンジニアリング要素が強いNLPコンペ**です。
LLMコンペには通常のNLPコンペの要素が多く含まれています。たとえば、[「LMSYS - Chatbot Arena Human Preference Predictions」](https://www.kaggle.com/competitions/lmsys-chatbot-arena)や[atam cup #17](https://www.guruguru.science/competitions/24/)のようなコンペは、従来のNLPタスクに似たアプローチで進められました（ファインチューニングなど）。一方で、エンジニアリング要素が特に重要なコンペもあり、データセットの拡張やRAG（Retrieval-Augmented Generation）の実装など、通常のアプローチに加えてエンジニアリング要素が多分に含まれます。



### 筆者が参加したLLMコンペ一覧
以下は筆者が参加したLLMコンペの一覧と、それぞれの特徴です。

| コンペ名                  | 主流モデル | データセットの拡張                 | 主なエンジニアリング要素                               |
|---------------------------|------------|------------------------------------|-------------------------------------------------------|
| LLM Science Exam        | Llama2, Mistral, DeBERTa-v3          | Wikipedia                         | RAGの実装、データセットのクレンジングが必要           |
| LLM Prompt Recovery     | Mistral    | 生成AI                           | 埋め込み表現へのadversarial attack（Magic）                   |
| AI Mathematical Olympiad - Progress Prize 1                     | DeepSeekMath        | 公開数学データセット             | 実行時間制約下での試行回数最大化、出力パース処理       |
| LLM 20 Questions          | Llama3    | 外部データセット・生成AI          | 外部データ準備、二分探索、質問選択の統計的手法の実装       |

Kaggle Master振り返り記事でも少し触れているので、興味があればそちらもご覧ください。

https://qiita.com/Isaka-code/items/b036f7abae55795bb006



### 全LLMコンペ一覧
以下にその他のLLMコンペを含めて、名前だけですが、一挙紹介します。
※抜け漏れがあれば、コメントかTwitterで教えて下さい！

#### 【チュートリアルコンペ】
- **Kaggle**
  - [LLM Classification Finetuning](https://www.kaggle.com/competitions/llm-classification-finetuning)


#### 【開催中のコンペ】
- **Kaggle**
  - [AI Mathematical Olympiad - Progress Prize 2](https://www.kaggle.com/competitions/ai-mathematical-olympiad-progress-prize-2)
  - [Eedi - Mining Misconceptions in Mathematics](https://www.kaggle.com/competitions/eedi-mining-misconceptions-in-mathematics)
  - [Santa 2024 - The Perplexity Permutation Puzzle](https://www.kaggle.com/competitions/santa-2024)
  - [WSDM Cup - Multilingual Chatbot Arena](https://www.kaggle.com/competitions/wsdm-cup-multilingual-chatbot-arena)


#### 【過去のコンペ】

- **Kaggle**
  - [LLM Science Exam](https://www.kaggle.com/competitions/kaggle-llm-science-exam)
  - [LLM Prompt Recovery](https://www.kaggle.com/competitions/llm-prompt-recovery)
  - [AI Mathematical Olympiad - Progress Prize 1](https://www.kaggle.com/competitions/ai-mathematical-olympiad-prize)
  - [LLM 20 Questions](https://www.kaggle.com/competitions/llm-20-questions)
  - [LMSYS - Chatbot Arena Human Preference Predictions](https://www.kaggle.com/competitions/lmsys-chatbot-arena)
  - [LLM - Detect AI Generated Text](https://www.kaggle.com/competitions/llm-detect-ai-generated-text)
  - [ARC Prize 2024](https://www.kaggle.com/competitions/arc-prize-2024)

- **Nishika**
  - [ChatGPTの限界を知ろう　〜「正しい用法」を広めよう〜](https://competition.nishika.com/competitions/chatgptlimit/topics/561)

- **SIGNATE**
  - [RAG-1グランプリ](https://signate.jp/competitions/1407)
  - [ChatGPT チャレンジ](https://signate.jp/competitions/1037)

- **AtmaCUP**
  - [AtmaCUP #17](https://www.guruguru.science/competitions/24/)

- **Raggle**
  - [法務RAGシステムの性能改善ハッカソン](https://raggle.jp/competition/29676d73-5675-4278-b1a6-d4a9fdd0a0ba)




# 初手は、『N=1のデータセットでLLMの出力を確認』
LLM（特にオープンソースのモデル、小さいモデル）を使う際、しばしば予想外の挙動を示すことがあります。

以下のような問題が代表例です：
- 不要なフレーズ（例: "Sure!"）が出力される
- 指示したフォーマットを守らない
- 突然中国語で出力される
- 無限ループに陥る
など

これらの挙動を早期に把握するために、まずは**小さなデータセット（N=1でもOKです！）を使った、簡単なLLM出力のエラー分析**を行うことをおすすめします。そして、可能であれば継続的にログ出力すると良いと思います。


### 具体例
以下の記事では、文字列をLLMで反転させる架空のLLMコンペについて紹介しました。とても簡単に見えますが、LLMにとっては難しいタスクです。

https://qiita.com/Isaka-code/items/d09b2b4b031f1c856b7e

このタスクでは、Llama3を使用しましたが、余計な文字列（"Here is"）が追加されたり、正解を生成できなかったりする問題が見られました。以下はその一例です。

```bash
Here is
ydsapptfqt
```

上記の結果から、モデルの挙動を詳細に分析する必要性がわかります。


# 次の一手
簡単なLLM出力のエラー分析を終えて、次の一手の候補となるチェックリストを下記に示します。

- **ChatGPTなど高性能なクローズドモデルでタスクを試す**  
- **外部データセットの拡張を試みる**  
- **そのコンペにおける主流のLLMモデルを把握する**  
- **類似タスクのSOTAモデルを調査（Hugging FaceやPapers With Code）**  
- **外部知識が必要な場合、RAGを導入する**  
- **プロンプトエンジニアリング（参考：[Optunaを用いたプロンプトエンジニアリング](https://qiita.com/Isaka-code/items/7c13652b416d9ee56585)）**  
- **フローエンジニアリング（モデル推論のパイプラインやロジック）の見直し**  
- **インストラクションチューニング、LoRA**  
- **入力データの前処理・出力データの後処理（ノイズ除去やフォーマット変換など）**  
- **メトリクスのハックを試みる（参考：[LLM Prompt Recoveryでは、adversarial attackが可能でした](https://www.kaggle.com/competitions/llm-prompt-recovery/discussion/494343)）**  
- **LB Probingを試みる**  
- **LLM以外の手段（機械学習モデルやルールベース手法）を検討する**  
など

# おわりに
この記事では、LLMコンペの取り組み方を紹介しました。特に、初めてLLMコンペに参加する方が、効率的に成果を上げるための戦略や注意点について解説しました。
LLMコンペは、他のコンペ（テーブル・画像・NLPなど）と比較して、まだ定跡が整備されていない分野です。そのため、（通常のコンペでもそうですが）**タスクの深い理解**が強く求められます。  
また、エンジニアリングスキル（データ拡張、RAG、フロー設計、プロンプトエンジニアリング など）が要求され、実装力も身につきます。
データセットの拡張が可能なことが多いなど、実務に近しいところもあり、大変勉強になります。興味を持った方は、ぜひLLMコンペに参加してみてください！

本記事は以上です。皆様の良いKaggleライフを応援しております。