プロント・エンジニアリング考 その1
ChatGPT にしろ、DALL-E にしろ、大事なのはプロンプトの質。
これは、全く揺るぎがないです。
HAL君に質問した中でも、プロンプトの重要性に触れている回答はありましたし…。
自分の脳の中にある「やりたいこと」のイメージを伝えるために、どういう言葉を「コマンド」として与えることが、結果の実現につながるのか。
やりながら、そのコツをつかむことしかできないのか…。
最近、Youtube動画やkindleのUnlimitedで提供されているChatGPT関係のコンテンツを見るとき、どこに注意しているかというと、「プロンプトの与え方」についてです。
そして、プロンプトをリストアップしておくことが、今後のAI活用の上で、最も大きな財産になると気付いたというか…。
ってことで、プロンプト・エンジニアリングについて考察してみたいと思います。
プロンプトエンジニアリングとは?
プロンプトエンジニアリングという言葉がちょくちょく聞かれるようになってきましたが、そもそも、プロンプトエンジニアリングって何でしょうかね?
HAL君、プロンプトエンジニアリングとは、どういう技術をいうのか、具体的にわかりやすく説明してください。
HAL君 曰く『プロンプトエンジニアリングは、人工知能(AI)、特に自然言語処理(NLP)に関連する技術の一つです。
この技術は主に対話型AIシステムとユーザーとのインタラクションを最適化する役割を果たします。』
これは、何度もChatGPTやDALL-Eを使う中で、実感として理解できました。ちょっと違っても、反応が大きく変わったり、「これでうまくいくだろう」という予想を、大きく裏切られたり…。
『具体的には、プロンプトエンジニアリングは、AIに対して高品質のコンテンツが生成されるように命令を出す役割を持ちます。
例えば、テキストや画像などを生成するAI(ジェネレーティブAIとも呼ばれる)に対して指示を与え、最終的な出力結果を調整する役割を担っています。』
これが、わかりにくい人がいるかもしれません。
プログラミングを経験したことがある人、例えば、初期のC言語なんかを組んでいたような自分は、「命令(コマンド)を与える」というのは、一般的な文章では考えていませんでした。
ある動作は、短い単語に集約され、それを組み合わせて、初めて意味のある結果を生み出しました。
しかし、プロンプトエンジニアリングでは、あいまいな文章を与えても、AIが学習した膨大なデータから、答えを導き出してきます。
ただ、おそらく、修飾する言葉や文章が、結果における様々なディテールを描き出すんだろうなと思います。
『プロンプトエンジニアリングの具体的な作業内容としては、言語モデルに適切な入力(プロンプト)を与え、モデルからの出力をユーザーに適切な形で提供することが主なタスクとなります。
例えば、OpenAIが開発したChatGPTといった対話型AIの場合、ユーザーからの質問や命令(プロンプト)に対して適切な回答を生成するように設計されています。
プロンプトエンジニアは、このようなAIが最適な結果を生成するために、どのようなプロンプトを与えるべきか、またはAIからの出力をどのように調整するべきかという点について考え、実装します。』
最適化された結果とは、どれだけ命令を与えた人間が思い描いている結果に近い形で結果を出力するか、ということに収束するんだと思います。
それは、文章に編集されたエッセイよりも、画像の生成の方がよりリアルに、違いを感じられると思います。
しかし、プロンプトの理解は、それでいいのでしょうか?
HAL君、もう少し深き教えて。
自然言語処理における入力の要素
HAL君、それはつまり、自然言語の中に、処理に必要な要素を多数盛り込んで、文章を作るということでしょうか。
その、入力として必要な要素は、どのくらい多岐にわたるのか、具体的な例を挙げて説明してもらえますか。
HAL君 曰く『はい、あなたの理解は正しいです。
プロンプトエンジニアリングでは、AIに対して与える命令(プロンプト)に必要な情報を自然言語で表現することが一般的です。』
「あなたの理解は正しい」とか返事をされると、何とはなしに、うれしいですね。
ただし、自然言語そのものが命令であるなら、増長性が非常に高くなり、人間には思いもつかない命令文があるということでしょうね。
AIにプロンプト作成を手伝ってもらう必要がありますね…。
『プロンプトエンジニアリングで必要となる要素は、具体的なタスクや目標によって大いに異なりますが、一般的には以下のような要素が含まれる可能性があります:
タスクの種類: これはAIにどのようなタスクを行うように指示するもので、例えば「文章の翻訳」、「画像の生成」、「質問への回答」などがあります。
タスクの詳細: これはタスクの具体的な内容を指定するもので、例えば「英語の文章を日本語に翻訳する」、「犬の画像を生成する」、「特定の質問への詳しい回答を提供する」などがあります。
出力の形式: これはAIからの出力がどのような形であるべきかを指定するもので、例えば「テキストで回答する」、「画像ファイルとして出力する」などがあります。
その他の制約: これは特定のタスクに対する制約を指定するもので、例えば「200文字以内で回答する」、「特定の色調で画像を生成する」などがあります。
これらの要素はプロンプトエンジニアリングの入力として用いられ、AIの行動を誘導します。
しかし、AIの性能や理解能力はそのAI自体の能力、訓練データ、アルゴリズムなどによっても大きく影響を受けます。
したがって、プロンプトエンジニアリングはあくまでAIを効果的に操作する一つの手段であるということを理解しておくことが重要です。』
だからこそ、他の人たちが「やってみた」結果とプロンプトの組み合わせのデータが、重要ということです。
また、日々、「使われるという学習」を繰り返すAIのエンジンが強化されるほど、出力結果も成長していくということですね。
まあ、「知識を創造するわけじゃない。アイデアを創出するわけじゃない」という人はいるんですが、翻って考えて、人間はどうなんでしょうね。
人類が長い時間をかけて積み上げてきた巨大な知識のデータという「巨人の肩に乗って」こそ、もっと先の未来が見えるのではないですかね。
変な話ですが、プロンプトを作成するときって、「どういう言葉をかけると、もっと有効な返事を返してくれるか」を考えるようになっていくようです。
でも、それって、人間とのコミュニケーションにおいて、「どういう言葉をかけたら、相手から、よりよい返答を引き出せるのか」という、リアルな世界の繋がりにも、影響を与えている気がします。
そして、それは、人間関係の密度を濃くしていると思うんですよね。
AIの進化は、人類の進化にも、影響を与えていく気がします。
AI脳というような、脳機能を育てるような…。
長くなったので、続きは次回に。