大規模言語モデルの有効性は、モデルに与える指示に大きく依存します。プロンプト エンジニアリングは、LLM から最適な出力を得る方法で質問を作成するプロセスです。これは、LLM ベースの機能を実装する際の重要なステップです。
プロンプト エンジニアリングは反復的なプロセスです。さまざまな LLM を試したことがある場合は、より良い結果を得るためにプロンプトを調整する必要があることに気づいたことでしょう。
これは、サイズの異なるモデルにも当てはまります。
Gemini や ChatGPT などの大規模な LLM を活用したチャット インターフェースでは、最小限のプロンプト作業で満足のいく結果を得ることができます。ただし、微調整されていないデフォルトの小型 LLM を使用する場合は、アプローチを調整する必要があります。
小さい LLM は強力ではなく、参照できる情報プールが小さくなります。
「小さい LLM」とは
LLM サイズの定義は複雑であり、メーカーが開示するとは限りません。
このドキュメントでは、「小規模な LLM」とは、300 億個未満のパラメータを持つモデルを指します。現在、数百万から数十億のパラメータを持つモデルを、コンシューマ グレードのデバイスでブラウザで実行することは現実的です。
どこで小規模な LLM が使用されるか
- デバイス上またはブラウザ内の生成 AI。たとえば、MediaPipe の LLM 推論 API で Gemma 2B を使用している場合(CPU 専用デバイスにも適しています)や、ブラウザで Transformers.js で DistilBert を使用している場合などです。モデルのダウンロードとユーザーのデバイスでの推論の実行は、ウェブ ダウンロードを合理的に保ち、デバイスのメモリと GPU / CPU の制約に合わせて、これらの小規模な LLM でのみ可能です。
- カスタム サーバーサイド生成 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 | 4 つ星(5 つ星満点)** |
ストラップが薄くて、重い負荷がかかると私の肩に食い込み始めました。 | 1 | 2/5 |
Gemini 1.5 はこのシンプルなプロンプトで目的の出力を提供しますが、Gemma の出力は要件を満たしていません。
- 形式が正しくありません。評価には整数値を指定してください。
- 評価が正確ではないようです。最初のレビューは、5 つ星のレビューに値するほど熱狂的です。
この問題を解決するには、プロンプト エンジニアリング手法、ワンショット プロンプト、少数ショット プロンプト、マルチショット プロンプトとチェーン オブ ソート プロンプトを使用する必要があります。また、明確な形式の指示を提供し、モデルがすべての評価範囲を使用しなければならないことを明記する必要があります。
例:
`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(最低) |
より精巧なプロンプトと、少数ショット プロンプトと思考の連鎖プロンプトの手法により、より正確な評価が得られます。
手動出力解析を想定
LLM の出力は常に手動でクリーンアップして解釈する必要がありますが、これは特に小規模な LLM に当てはまります。この場合、生成される結果があまり洗練されず、思考の連鎖プロンプトが必要になる可能性があります。
最初の例では、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);
}
Mind API の違い
LLM クラウド API(Gemini API や OpenAI など)は、通常はより大きな 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 を使用している場合、高度なプロンプト エンジニアリングでも一部のユースケースでは不十分な場合があります。
ファインチューニングは、次の場合に使用します。
- 特定のタスクに対して最高水準の精度とパフォーマンスを必要とする。ファインチューニングでは、最適な結果が得られるようにモデルの内部パラメータを直接調整します。
- タスクに関連する、適切な出力にラベル付けされた、適切にキュレートされたデータがある。効果的なファインチューニングを行うには、このデータが必要です。
- 同じ目的でモデルを繰り返し使用する。ファインチューニングは 1 回行えば、特定のタスクで再利用できます。