大規模言語モデルの有効性は、モデルに与える指示に大きく依存します。プロンプト エンジニアリングは、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) | |
フィット感が抜群です。重量が分散され、一日中歩いても驚くほど快適です。おすすめします。 | 5 | 4 つ星(5 つ星が最高)** |
ストラップが弱く、重い荷物を背負うと肩に食い込むようになりました。 | 1 | 2/5 |
Gemini 1.5 では、この簡単なプロンプトを使用して目的の出力が得られますが、Gemma の出力は満足のいくものではありません。
- 形式が正しくありません。評価には整数値を指定してください。
- 評価が正確ではないようです。最初のレビューは、5 つ星のレビューに値するほど熱狂的です。
この問題を解決するには、プロンプト エンジニアリングの手法、1 ショット、少数ショット、マルチショット プロンプト、思考プロンプトを使用する必要があります。また、明確な形式の指示を提供し、モデルがすべての評価範囲を使用しなければならないことを明記する必要があります。
次に例を示します。
`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 に当てはまります。
最初の例では思考プロセスのプロンプトを使用したため、出力には分析と評価の両方が含まれ、評価を手動で解析する必要があります。また、前のセクションの出力ではフォーマットが一貫していません。モデルはマークダウンを出力する場合もありますが、毎回出力するとは限りません。
// 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 モデルのコンテキスト ウィンドウは 8, 000 トークンです。
トークン数関数を使用して、上限に達しないようにします。
所要時間を調整する
エンジニアリングの時間見積もりに、プロンプトの設計とテストを考慮します。
API の違いとトークンの上限により、サイズの小さい LLM のプロンプトを作成するには、サイズの大きい LLM よりも時間と労力が必要になる可能性があります。LLM の出力のテストと検証も、より多くの労力を必要とする場合があります。
プロンプト エンジニアリングとファインチューニングの違い
ウェブ デベロッパーにとって、カスタム トレーニングやファインチューニングよりも、プロンプト エンジニアリングの方が生成 AI を活用するのに適しています。ただし、特に小規模な LLM を使用している場合、高度なプロンプト エンジニアリングでも一部のユースケースでは不十分な場合があります。
ファインチューニングは次の場合に使用します。
- 特定のタスクで最高レベルの精度とパフォーマンスが求められる。ファインチューニングでは、最適な結果が得られるようにモデルの内部パラメータを直接調整します。
- タスクに関連する、適切な出力にラベル付けされた、適切にキュレートされたデータがある。効果的なファインチューニングを行うには、このデータが必要です。
- 同じ目的でモデルを繰り返し使用する。ファインチューニングは 1 回行えば、特定のタスクで再利用できます。