大規模言語モデルの有効性は、与える指示に大きく左右されます。プロンプト エンジニアリングとは、 LLM から最適な出力を得るように質問を作成するプロセスです。 これは、LLM ベースの機能を実装するうえで重要なステップです。
プロンプト エンジニアリングは反復的なプロセスです。さまざまな LLM を試したことがある方は、より良い結果を得るためにプロンプトを調整する必要があることに気づいたかもしれません。
これは、さまざまなサイズのモデルにも当てはまります。
Gemini や ChatGPT などの大規模 LLM を搭載したチャット インターフェースでは、プロンプトの労力を最小限に抑えながら、満足のいく結果が得られることがよくあります。 ただし、ファインチューニングされていないデフォルトの小規模な LLM を使用する場合は、アプローチを調整する必要があります。
小規模な LLM は性能が低く、利用できる情報のプールも小さくなります。
「小規模な LLM」とは
LLM のサイズを定義するのは複雑で、メーカーによって 公開されていない場合もあります。
このドキュメントでは、「小規模な LLM」とは 300 億未満のパラメータを持つモデルを指します。 現時点では、数百万から数十億のパラメータを持つモデルを、ブラウザや一般消費者向けのデバイスで現実的に実行できます。
小規模な LLM の使用例
- デバイス上/ブラウザ内の生成 AI。たとえば、Gemma 2B を MediaPipe の LLM 推論 API(CPU のみのデバイスにも適しています)で使用する場合や、Transformers.js でブラウザで DistilBert を使用する場合などです。モデルをダウンロードしてユーザーのデバイスで推論を実行できるのは、これらの小規模な LLM のみです。ウェブのダウンロードを合理的な範囲に抑え、デバイスのメモリと GPU/CPU の制約に対応するためです。
- カスタム サーバーサイド生成 AI 。Gemma 2B、Gemma 7B、Gemma 27B などの小規模なオープン ウェイト モデルは、独自のサーバーで実行できます(必要に応じてファインチューニングすることもできます)。
始める
Gemini や ChatGPT などの大規模 LLM を搭載したチャット インターフェースでは、プロンプトの労力を最小限に抑えながら、満足のいく結果が得られることがよくあります。ただし、小規模な LLM を使用する場合は、アプローチを調整する必要があります。小規模な LLM は性能が低く、利用できる情報のプールも小さくなります。
コンテキストと正確な形式の指示を提供する
小規模な LLM で最適な結果を得るには、より詳細で具体的なプロンプトを作成します。
次に例を示します。
Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.
Review: "${review}"
Rating:
| 入力(レビュー) | 出力(評価) | |
|---|---|---|
| 大規模な LLM(Gemini 1.5) | 小規模な LLM(Gemma 2B) | |
| フィット感が最高です。重量が分散され、1 日中歩いても驚くほど快適です。おすすめです。 | 5 | 5 つ星のうち 4 つ** |
| ストラップが薄く、重い荷物を背負うと肩に食い込みます。 | 1 | 2/5 |
Gemini 1.5 はこのシンプルなプロンプトで目的の出力を提供しますが、Gemma の出力は満足のいくものではありません。
- 形式が正しくありません。評価には整数をリクエストしました。
- 評価が正確ではないようです。最初のレビューは、5 つ星の評価を示すのに十分なほど熱心です。
これを修正するには、プロンプト エンジニアリングの手法( ワンショット プロンプト、少数ショット プロンプト、マルチショット プロンプト 、Chain-of-Thought プロンプト)を使用する必要があります。 また、明確な形式の指示を提供し、モデルが評価の全範囲を使用するように指示する必要があります。
次に例を示します。
`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
\n\n
Here are some examples of reviews and their corresponding analyses and
ratings:
\n\n
Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
use, but it's perfect for urban exploring.'
Analysis: The reviewer appreciates the product's style and basic
functionality. They express some uncertainty about its ruggedness but
overall find it suitable for their intended use, resulting in a positive,
but not top-tier rating.
Rating (integer): 4
\n\n
Review: 'It's a solid backpack at a decent price. Does the job, but nothing
particularly amazing about it.'
Analysis: This reflects an average opinion. The backpack is functional and
fulfills its essential purpose. However, the reviewer finds it unremarkable
and lacking any standout features deserving of higher praise.
Rating (integer): 3
\n\n
Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
Rating (integer): 1
\n\n
Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
Rating (integer): 5
\n\n
Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
Rating (integer): 1
\n\n
Now, here is the review you need to assess:
\n
Review: "${review}" \n`;
| 入力(レビュー) | 小規模な LLM(Gemma 2B)での出力 |
|---|---|
フィット感が最高です。重量が分散され、1 日中歩いても驚くほど 快適です。おすすめです。 |
分析: このレビューは非常に肯定的で、商品の フィット感と快適さを強調しており、商品に非常に満足していることを示しています。これにより、高い評価が正当化されます。 評価(整数): 5 |
ストラップが薄く、重い荷物を背負うと肩に食い込みます 。 |
**分析:** レビューでは、ストラップの快適性に大きな問題があることが 強調されています。また、重い 荷物や長時間の外出には適していない可能性も示唆されています。 **評価:** 1(最低) |
より詳細なプロンプトと、少数ショット プロンプトと Chain-of-Thought プロンプトの手法を組み合わせることで、より正確な評価が得られます。
手動での出力解析を想定する
LLM の出力は常に手動でクリーンアップして解釈する必要がありますが、特に小規模な LLM では、洗練されていない結果が生成される可能性があり、Chain-of-Thought プロンプトが必要になる場合があります。
最初の例では、Chain-of-Thought プロンプトを使用したため、出力には分析と評価の両方が含まれており、評価を手動で解析する必要があります。また、前のセクションの出力の形式が不統一であることにも注意してください。モデルはマークダウンを出力することがありますが、毎回ではありません。
// Use try/catch to catch (parsing) errors
try {
// Parse the output for a rating
const int = /[1-5]/;
const ratingAsString = llmOutput.match(int)[0];
// Parse as int
const ratingAsInt = parseInt(ratingAsString);
// `checkRating` checks the rating is a number between 1 and 5, since the
// regEx may catch a number like "100"
const finalRating = checkRating(ratingAsInt);
} catch (e) {
console.error('Error', e);
}
API の違いに注意する
Gemini API や OpenAI などの LLM クラウド API は、通常、大規模な LLM へのエントリ ポイントであり、便利なプロンプト機能を提供します。たとえば、Gemini 1.5 Pro にはシステム指示と JSON モードがあります。
現時点では、これらの機能は、カスタムモデルの使用や、 MediaPipe LLM 推論 API や Transformers.jsなどのブラウザ内 AI API を使用してアクセスする小規模な LLM では、常に利用できるとは限りません。 これは必ずしも技術的な制限ではありませんが、ブラウザ内 AI API はより軽量になる傾向があります。
トークンの上限に注意する
小規模な LLM のプロンプトには、例や詳細な指示を含める必要があるため、長くなる可能性があり、入力トークンの上限がある場合は、その上限を超える可能性があります。
また、小規模なモデルは入力トークンの上限が小さい傾向があります。たとえば、Gemini 1.5 Pro の入力トークンの上限は 100 万ですが、Gemma モデルのコンテキスト ウィンドウは 8K です。
時間の見積もりを調整する
エンジニアリング時間の見積もりには、プロンプトの設計とテストを含めます。
API の違いとトークンの上限により、大規模な LLM よりも小規模な LLM のプロンプトを作成するのに時間と労力がかかる可能性があります。LLM の出力のテストと検証にも、より多くの労力がかかる場合があります。
プロンプト エンジニアとファインチューニングの違い
ウェブ デベロッパーにとって、プロンプト エンジニアリングは、 生成 AI をカスタム トレーニングやファインチューニングよりも活用するうえで推奨される方法です。 ただし、高度なプロンプト エンジニアリングでも、特に小規模な LLM を使用している場合は、一部のユースケースでは十分でない可能性があります。
ファインチューニングは次の場合に使用します。
- 特定のタスクで最高レベルの精度とパフォーマンスが求められる場合。ファインチューニングでは、最適な結果を得るためにモデルの内部パラメータを直接調整します。
- タスクに関連する、適切にキュレーションされたデータがあり、推奨される出力でラベル付けされている場合。効果的なファインチューニングにはこのデータが必要です。
- 同じ目的でモデルを繰り返し使用する場合。ファインチューニングは一度だけ行い、特定のタスクで再利用できます。