AIは心を読めない。だからこそプロンプトエンジニアリングが武器になる

『生成AIのためのプロンプトエンジニアリング』(2024年刊)は、テキスト生成AIと画像生成AIを効果的に活用するための総合ガイドです。ChatGPTのような大規模言語モデルやStable Diffusionのような拡散モデルに対して有効なプロンプトを作成するための5つの基本原則に焦点を当てています。また、これらのモデルの背後にある計算メカニズムを探り、AIワークフローを改善するための実践的なヒントやアイデアを多数紹介しています。

この本で得られること:効率的なプロンプトエンジニアになろう

生成AIモデルは、ほぼ毎日のように飛躍的な進歩を遂げています。そのペースはあまりにも速く、追いつくのが難しいほどです。それでも追いつかなければなりません。一つ確かなことは、AIは今後も存在し続けるということです。AIが進化するにつれて産業も進化し、今後ますます多くの仕事に浸透していくことは間違いありません。

とはいえ、AIは人の心を読めるわけではありません。少なくとも今はまだ。常に期待どおりの答えを返してくれるとは限りません。実際、AIはもっともらしく事実を捏造することがよくあります。これはハルシネーション(幻覚)と呼ばれる現象です。AIの出力の質は、入力するものの質にかかっています。だからこそ、効果的なプロンプトを作成する能力、すなわちプロンプトエンジニアリングが必要なのです。それは、今日のMicrosoft Excelのスキルのように、将来多くの仕事で必須となる可能性が高いスキルです。

幸いなことに、著者たちは生成AIの黎明期、遠い昔の2020年から生成AIに取り組んできました。彼らは一連のベストプラクティス、つまり初期のモデルにも最新のモデルにも有効であることが証明された原則を確立しました。この記事では、それらの原則を紹介します。著者たちは書籍の中で多くのプロンプト手法を提供しており、その多くはPythonでのコード実行を必要とします。

ここでは、平易な英語だけで実行できる内容に焦点を当てます。でも心配しないでください。プロンプトエンジニアリングの原則は、どのような状況でも同じように適用できます。では早速、AIの広大なプレイブックを開いて始めましょう。

プロンプトエンジニアリングの3つの原則

シンプルで素朴なプロンプトから始めましょう。例えば「どんなサイズにも合う靴の名前をリストで教えてください」というものです。これをChatGPTのような大規模言語モデルに入力すると、OmniFitやUniversoleのような名前が返ってきます。考えてみれば、これはすでに非常に印象的です。しかし、AIモデルを娯楽以上の目的で使うなら、もう少し具体的にする必要があります。

そこで登場するのが、プロンプトエンジニアリングの5つの原則です。これらは著者たちが特定した普遍的な原則で、人間でも人工知能でもあらゆる知性に当てはまることが分かっています。まず最初の原則は、常に方向性を示すことです。簡単に言えば、入力に詳細を含めるほど、モデルの出力が期待に合う可能性が高くなります。これを実践する優れた方法は、プリウォーミングまたは内部検索と呼ばれるテクニックです。靴の名前の例で言えば、まず製品命名のヒントを専門家のアドバイスに基づいて網羅的にリストアップするようAIモデルにプロンプトを出します。

次に、今しがたAIが提供したアドバイスに基づいて製品名を生成するようプロンプトを出します。方向性を示すことは、画像生成モデルでも同様に重要です。丸いガラステーブルを囲むビジネス会議の画像をプロンプトにすれば、単にビジネス会議の画像を求めるよりも具体的な出力が得られます。ただし注意が必要です。具体的すぎると、AIが解決できない矛盾する組み合わせに陥ることがあります。2つ目のプロンプト原則は、形式を指定することです。AIモデルは、フランス語からクリンゴン語、JSONからPythonまで、ほぼあらゆる形式でデータを出力できます。

画像生成モデルについては、ストック画像、油絵、モザイク、Minecraft風など、無数の形式を生成できます。しかし、希望する形式を指定しなければ、出力でその形式が得られる可能性は低くなります。また、AIツールを本番ソフトウェアに統合する場合は、形式を特に注意深く指定する必要があります。わずかな逸脱がさまざまなエラーを引き起こす可能性があるからです。では、目的に合った出力を得る可能性を高めるために、プロンプトエンジニアリングの3つ目の原則、例を示すことを活用しましょう。例を含まないプロンプトはゼロショットプロンプトと呼ばれます。

プロンプトに1つの例を添えるとワンショットプロンプトになり、複数の例を含めるとフューショットプロンプトになります。提供する例が多いほど、出力は予測可能になります。ただし、信頼性と創造性の間には常にトレードオフがあることを忘れないでください。多様性に欠ける例をあまりにも多く提供すると、AIは良い意味でも悪い意味でも驚きを与えてくれなくなります。

さらに2つのプロンプト原則

では、4つ目のプロンプト原則、出力を評価することを詳しく見ていきましょう。再度使うことのない一度きりのプロンプトの場合は、単純な試行錯誤で十分なことが多いです。これはブラインドプロンプティングと呼ばれます。しかし、プロンプトを繰り返し使う場合や、プロンプトに基づいてアプリケーションを構築する場合は、もう一歩踏み込む必要があります。

多くの場合、出力を評価するための解決策は非常にシンプルです。親指アップ/親指ダウンの評価システムです。テストしたいプロンプトを選び、それぞれをAIモデルで複数回実行します。そして、出力をスプレッドシートに並べて、親指アップか親指ダウンをつけます。より細かく評価したい場合は、親指の代わりに数値評価スコアを使用することもできます。スプレッドシート作成部分はOpenAIのPythonパッケージを使って自動化することも可能ですが、ここでは具体的な手順を説明できません。画像も同様にパーミュテーションプロンプティングと呼ばれる手法で評価できます。

これは、異なる方向性と形式を持つ複数のプロンプトをAIモデルに与え、すべてのモデル出力を並べて比較するというものです。これにより、今後の作業で実際に効果的なものに集中できます。さて、いよいよ5つ目にして最後のプロンプト原則に到達しました。それは作業を分担することです。考えてみてください。プロンプトに要素を追加するほど、1回の呼び出しでAIモデルに多くのことを要求することになります。ある時点で、複雑なプロンプトは重くなりすぎて、ハルシネーションや異常が増える可能性があります。そういう時に重要になるのがタスク分解です。

人間と同じように、複雑なタスクをAIにとって管理しやすい塊に分解することで、より効果的な結果が得られます。また、どの塊がうまく機能していて、どの塊が機能していないかを正確に把握することもできます。「一歩ずつ考えてみよう」という言葉をプロンプトに含めるだけでも、多くの場合大きな効果があります。これは思考連鎖推論と呼ばれるものの重要な要素です。さらに、テキスト生成モデルと画像生成モデルの間で作業を分担することもできます。すでに、どんなサイズにも合う靴の名前リストを持っています。

次に、LLMにそれらの靴の詳細な説明を生成するようプロンプトを出します。そして、その説明を画像生成モデルのプロンプトとして使用し、製品に適した画像を作成できます。さて、以上が5つのプロンプト原則です。全体として、これらの原則は少なくとも今のところ、時の試練に耐えてきました。確かに、今日の最新技術はほんの数ヶ月で時代遅れになるかもしれません。しかし著者たちは、これらの原則が常にAIモデルから望むものを引き出す助けになると確信しています。

大規模言語モデル(LLM)の仕組み

一般的な原則として、仕組みを理解すればより多くのものを引き出せます。では、大規模言語モデル(LLM)を理解するという大変な作業に取り掛かりましょう。すべてはトークンと呼ばれるものから始まります。これは自然言語処理(NLP)の基本単位です。

トークンは、文、単語、さらにはサブワードを形成する文字の集合を表すことができます。サイズの目安として、100トークンのテキストは約75語の長さです。なぜトークンが重要なのでしょうか。NLPタスク用にデータを準備するために、LLMはまずトークン化を実行する必要があります。一般的に使用される方法の1つは、バイトペアエンコーディング(BPE)です。このプロセスは頻度を分析して語彙を構築します。

単一文字から始まり、最も頻繁に一緒に現れるものを反復的にマージしていきます。最終的に、「c」「a」「t」が「cat」を綴るような頻繁なシーケンスは、1つのトークンになります。この戦略により、LLMは非常に柔軟になります。一般的な単語は全体として保存しますが、まれな単語や新しい単語は、より小さな既知のコンポーネントから組み立てて処理できます。トークン化された後、これらの単位はベクトルまたは単語埋め込みと呼ばれる数字のリストに変換されます。これらの埋め込みは、単語の構造と意味の両方を捉えます。トレーニング中、LLMはこれらのベクトルを巨大な多次元グリッドにマッピングします。

「swimming」と「swam」、「immoral」と「sin」のような関連する意味を持つ単語は、物理的に近くに配置されます。この近接性により、モデルは概念間の論理的関係を理解できます。これらのベクトルを処理するエンジンがトランスフォーマーであり、その特徴は自己注意と呼ばれるメカニズムです。これにより、文中のすべての単語が他のすべての単語を同時に分析でき、モデルが単に左から右へ読むのではなく、完全な文脈を把握することができます。では、LLMがテキストを理解する仕組みが分かりました。しかし、どのようにして自分の言葉を生成するのでしょうか?

すべては確率に行き着きます。簡単に言えば、モデルは現在のトークンの並びに続いて特定のトークンが現れる可能性を計算し、最も可能性の高いトークンを選びます。次に、この新しいトークンを以前のすべてのトークンと組み合わせて、再びプロセスを開始し、テキストをトランスフォーマーに通して次のトークンを生成します。このループは応答が完了するまで続きます。さて、LLMの仕組みが分かりました。では、LLMを最大限に活用する方法を見ていきましょう。

テキスト生成におけるシンプルな実践法

LLMにプロンプトを出す前に、まずどのモデルを使うかを選ぶ必要があります。多くのモデルから選ぶことができ、それぞれが独自の計算アーキテクチャ、長所、短所を持っています。もちろん、OpenAIのChatGPT、AnthropicのClaude、GoogleのGeminiのような大手もありますが、MetaのLlamaや、フランスのスタートアップMistral AIが開発したMistralのような小規模なモデルもあります。最も確実な方法は、同じプロンプトをこれらのLLMのいくつかで実行し、特定のタスクに最適な出力を確認することです。

ただし注意点があります。これらのモデルを使用する際、データプライバシーは現実的な懸念事項です。モデルが再トレーニングやファインチューニングにユーザーのデータを使用する場合、機密情報を入力しないよう注意してください。モデルを選択したら、特に先ほど学んだ5つのプロンプト原則と併用することで、モデルを最大限に活用するためのシンプルなテクニックがいくつかあります。その一つがテキストスタイル分解と呼ばれるものです。これは、テキストからトーン、語彙、構造などの重要な特徴を抽出するようモデルにプロンプトを出すことです。これは、ブランドの一貫性を維持しながら新しいコンテンツを生成したり、既存の素材を新しいスタイルや形式に適応させながら重要なメッセージを保持したりするのに非常に役立ちます。

テキストスタイルを分解する一つの方法は、探している特定の特徴を定義し、それらの特徴に基づいてテキストを分析するようAIモデルにプロンプトを出すことです。しかし別の方法として、メタプロンプティングを使うこともできます。これは、別のプロンプトを生成するプロンプトを作成する方法です。例えば、モデルにテキストを分析させ、それを模倣できるようにする核となる特徴を特定させ、それらの特徴を今後の文書用のスタイルライティングガイドとして提示させることができます。そのライティングガイドを次のテキスト生成プロンプトの一部として含めることもできます。もう一つの重要なメタプロンプティングの方法は、特定の目標を達成するために既存のプロンプトを改良するようモデルに依頼することです。例えば、テキスト全体で一貫したブランドアイデンティティを実現するために、スタイルライティングガイドを吟味して改善するようモデルに依頼できます。

ロールプロンプティングによっても、出力全体で一貫したスタイルを維持できます。これは、AIに特定の役割やキャラクターを与えることです。例えば、テックレビュアーのように振る舞うようAIにプロンプトを出したり、ドナルド・トランプや他の有名人の話し方を模倣させることもできます。ブランドの一貫性に加えて、ロールプロンプティングはAIがトピックについて異なる視点を提供したり、ユーザーエンゲージメントを高めるために少しユーモアを加えたりするよう促すことができます。ただし、AIの出力を継続的に評価することを忘れないでください。時間が経つと割り当てられた役割から逸脱し始めることがあります。

画像生成の仕組み

一つの絵は千の言葉に値すると言われます。AIを使えば、わずか数語で何千もの画像を生成できます。しかし、実際にはどのように機能するのでしょうか?テキストから画像を生成する最も一般的なAIモデルは拡散モデルと呼ばれます。

2025年後半時点では、OpenAIのGPT Image、GoogleのNano Banana、そしてStable Diffusionのようなオープンソースの代替モデルが含まれます。トレーニング中、拡散モデルは鮮明な画像を取り、ランダムなピクセルのざらつき(技術的にはノイズと呼ばれます)を加えることで徐々に劣化させ、最終的にただのぼやけた状態にします。その後、このプロセスを逆に学びます。ざらつきを段階的にクリーンアップして元の画像に戻すのです。このクリーンアップはテキストの説明によってガイドされます。復元された画像が説明と一致しない場合、モデルは自己修正します。このサイクルが数十億回実行されます。

トレーニングが完了すると、モデルは純粋なランダムノイズの正方形を取り、指示に基づいて詳細な画像に洗練させることができます。このプロセスを通じて、モデルは物体やスタイルを定義する視覚的パターンを学習します。これらのパターンを、LLMが単語を保存するのと同じように数字のリスト(ベクトル)として保存します。これらのベクトルは潜在空間という、モデルが想像できるすべての画像の組み合わせを含む巨大な多次元マップ上の特定の位置として機能します。

モデルにテキストプロンプトを与えると、単語がこれらのベクトル座標に変換されます。マップ上のその位置に存在する画像を生成し、最後にそのデータを画面上のピクセルに変換します。多くの拡散モデルが存在し、それぞれに独自の強みがあります。テキスト生成モデルと同様に、モデルを選ぶ最良の方法は、同じプロンプトを異なるモデルで使用し、出力を比較することです。

画像生成テクニック

最後に、画像生成のテクニックをいくつか紹介します。拡散モデルを使う際の優れたツールの一つがプロンプトの逆解釈です。出力をどのように見せたいかは分かっているけれど、言葉にする方法が分からないということがあります。幸いなことに、GPT ImageやNano Bananaのようなモデルでは、画像をアップロードして説明を生成してもらうことができます。

そのプロンプトを受け取り、微調整して希望の出力を得ることができます。プロンプトに品質ブースターを含めることもできます。これは「beautiful」「high resolution」「trending on ArtStation」のようなシンプルな表現で、結果の画像の品質を向上させるためにプロンプトに含めることができます。ネガティブプロンプティングは、モデルに避けてもらいたいものを含めることです。例えば、「Tom and Jerry, no cartoon(トムとジェリー、カートゥーンなし)」というプロンプトは、この二人の有名なキャラクターを写実的に描写します。プロンプトでより細かいことをしたい場合は、特定のモデルでは用語に重みを追加できます。

プロンプト内のすべての単語の重みはデフォルトで1ですが、プロンプト内で先に来るものほど効果が大きくなります。これを明示的に変更して独自の結果を得ることができます。Midjourneyのようなモデルでは、2つのセミコロンと希望する重みを示す数字を、スペースなしで追加します。例えば、次のように入力できます:「painting of Tom and Jerry, in the style of Rembrandt::0.8, in the style of Pollock::0.2」

これにより、主にレンブラント風ですが、少しポロック風も混ざった絵画が得られます。作成できるプロンプトの数は無限であり、AIの進化が続くにつれて、新しいオプションが利用可能になります。しかし、ここで学んだ原則があれば、次に何が来ても最大限に活用する準備ができています。

まとめ

『生成AIのためのプロンプトエンジニアリング』(ジェームズ・フェニックス、マイク・テイラー著)の主な要点は、テキスト生成AIと画像生成AIを最大限に活用するには、プロンプトエンジニアリングの5つの基本原則、つまり方向性を示す形式を指定する例を示す出力を評価する作業を分担するに従うことです。また、大規模言語モデルの基本的なメカニズムと、それらを最大限に活用するためのシンプルな戦術についても学びました。その後、拡散モデルの仕組みと、それらを操作する際に最適な方法を見てきました。この知識を身につけて、進化し続ける生成AIの世界を自信とスキルを持ってナビゲートできるようになりました。

以上で本要約は終わりです。お読みいただきありがとうございました。

Add Comment