# ケーススタディ: 新卒にふさわしい仕事の分類

[Clavié et al., 2023](https://arxiv.org/abs/2303.07142) は、プロダクションシステムにおける中規模なテキスト分類の応用にプロンプトエンジニアリングを適用した事例を掲載しています。彼らは、新卒のメンバーに割り当てる仕事として本当にふさわしいものであるかどうかを分類するというタスクを題材にして、 GPT-3.5 (`gpt-3.5-turbo`) を用いて一連のプロンプトエンジニアリング手法を評価しその結果を報告しました。

この取り組みは、 LLMs が他の DeBERTa-V3 の強力なベースラインも含めてテストされた他のすべてのモデルよりも優れていることを示しています。また `gpt-3.5-turbo` はすべての主要な指標で古い GPT3 のバリアントよりも優れていますが、テンプレートに従う能力が他のバリアントよりも劣るように見えるため、追加の出力解析が求められます。

彼らのプロンプトエンジニアリングのアプローチによる主要な発見は以下のとおりです。

- このような専門家の知識が不要なタスクでは、すべての実験において Few-shot CoT プロンプティングは Zero-shot プロンプティングよりも悪いパフォーマンスでした。
- 正しい推論を引き出すことにおいてプロンプトの影響は非常に大きいです。与えられた仕事を分類するだけのモデルでは F1 スコアが 65.6 であるのに対し、プロンプトエンジニアリング後のモデルでは F1 スコアが 91.7 を達成しています。
- モデルを強制的にテンプレートに沿うようにすると、すべてのケースでパフォーマンスが低下します（この振る舞いは、論文の後半にある GPT-4 を使用した初期のテストでは見られません）。
- 多くの小さな調整がパフォーマンスに多大な影響を与えます。
  - 以下のテーブルはテストされたすべての調整を示します。
  - 適切に指示を出し、重要なポイントを繰り返すことがパフォーマンスを最大限に引き出します。
  - モデルに（人間の）名前を付けて呼ぶだけで、 F1 スコアが 0.6pts 上昇しました。

### テストされた調整プロンプトたち

| Short name | Description                                                                   |
|------------|-------------------------------------------------------------------------------|
| Baseline   | 求人情報を与えて、それが新卒に適した仕事であるかどうかを聞く。                          |
| CoT        | クエリを送信する前に、いくつかの正確な分類例を与える。                                 |
| Zero-CoT   | その答えを与える前に、モデルにステップバイステップで推論してもらう。                     |
| rawinst    | そのユーザーのメッセージに追加して、その役割とタスクについて指示を与える。                |
| sysinst    | システムのメッセージに追加して、その役割とタスクについて指示を与える。                   |
| bothinst   | システムのメッセージとしての役割とユーザーのメッセージとしてのタスクを使って指示を分割する。 |
| mock       | 認められた議論をモックして、タスクの指示を与える。                                    |
| reit       | 主要な要素を繰り返すことで強調する。                                              |
| strict     | 与えられたテンプレートに厳密に従うように求める。                                      |
| loose      | 与えられたテンプレートに従って、最終的な答えだけを求める。                              |
| right      | 正しい結論に達することをモデルに求める。                                             |
| info       | 一般的な推論の間違いに対処するために、追加情報を与える。                               |
| name       | 会話で使う呼び名をモデルに与える。                                                  |
| pos        | クエリを送信する前に、ポジティブなフィードバックをモデルに与える。                       |


### 調整プロンプトが与えるパフォーマンスへの影響

|                                        | Precision     | Recall        | F1            | Template Stickiness    |
|----------------------------------------|---------------|---------------|---------------|------------------------|
| _Baseline_                             | _61.2_        | _70.6_        | _65.6_        | _79%_                  |
| _CoT_                                  | _72.6_        | _85.1_        | _78.4_        | _87%_                  |
| _Zero-CoT_                             | _75.5_        | _88.3_        | _81.4_        | _65%_                  |
| _+rawinst_                             | _80_          | _92.4_        | _85.8_        | _68%_                  |
| _+sysinst_                             | _77.7_        | _90.9_        | _83.8_        | _69%_                  |
| _+bothinst_                            | _81.9_        | _93.9_        | _87.5_        | _71%_                  |
| +bothinst+mock                         | 83.3          | 95.1          | 88.8          | 74%                    |
| +bothinst+mock+reit                    | 83.8          | 95.5          | 89.3          | 75%                    |
| _+bothinst+mock+reit+strict_           | _79.9_        | _93.7_        | _86.3_        | _**98%**_              |
| _+bothinst+mock+reit+loose_            | _80.5_        | _94.8_        | _87.1_        | _95%_                  |
| +bothinst+mock+reit+right              | 84            | 95.9          | 89.6          | 77%                    |
| +bothinst+mock+reit+right+info         | 84.9          | 96.5          | 90.3          | 77%                    |
| +bothinst+mock+reit+right+info+name    | 85.7          | 96.8          | 90.9          | 79%                    |
| +bothinst+mock+reit+right+info+name+pos| **86.9**      | **97**        | **91.7**      | 81%                    |

Template stickness はモデルがどれくらいの頻度で希望のフォーマットで答えるかを意味します。