2024年のビッグプロジェクト
Mamoru です。
アメリカはホリデーシーズン突入しました🎄
私の働いている会社も、今日(12/18)から2週間お休みです。
アメリカはどちらかと言うと、11月末のサンクスギビングが日本のお正月のような雰囲気で、親戚が集まってお祝いをします。
その代わりお正月(新年)を祝う、という雰囲気はほとんどなく、お休みは1月1日のみで、1月2日からお仕事の会社🏢も多いです。
息子たちの学校🏫も1月3日から始まります。
さて、このお休みの期間に、2024年に向けてビッグプロジェクトの準備を始めたいと思っています。
詳しい内容は、ある程度準備ができた段階でお伝えしますが、Mamoruのこれまでのプロンプティング経験を全て凝縮した、
「プロンプティング初心者から上級者まで、オールインワンでプロンプティングを学べるコース」
を作ってみようと思います。
今年の4月からニュースレターの配信を開始して以来、非常に多くの読者さんから、
「Mamoruさんのプロンプティングテクニックをまとめた教材を作ってほしい!」
というご要望をいただきました。
そして、この数か月、色々とブレインストームしてきました。
プロンプトエンジニアリングのコースは、すでに書籍やUdemyなどに溢れていますが、どうせ作るなら、既存の教材とは一線を画すものを作りたい、と思っています。
プロンプティングテクニックを掲載して、ちょちょいっ、と解説を加えただけのものではなく、
- Mamoru独自の視点で解説すること
- 実用的な実験と検証を繰り返し、受講者が確実に理解し、使えるようになること
- 小学生でも分かる平易さ
を追求したいと考えています。
アメリカ渡航前まで、国立大准教授として多くの大学生に講義していましたが、その当時、大学講義の難しさにつまずく多くの大学生を見てきました。
私の講義では、「とにかく難しい内容を平易に解説する」ことに相当こだわりました。
実は、難しい内容を平易に解説するためには、教える内容を、自分自身が隅々までほぼ完ぺきに理解していないとできないんですよね。
難しい言葉でごまかすと、多くの大学生はそこで脱落してしまいますので。
で、完ぺきに理解するためには、教科書を読むだけではなくて、自分で実験してみる。
難しい理論なら、自分で証明してみる、など。
そこで初めて、「初心者の気持ち」になって、どこがつまずきやすいのか、理解できるわけです。
その経験を、今度はプロンプトエンジニアリングに活かしてみたいと思います。
ですので、
「実用的な実験と検証を繰り返し、受講者が確実に理解し、使えるようになること」
は、「小学生でも分かる平易さ」を目指す上で、絶対に欠かせません。
その分、時間がかかるかもしれませんが、2024年はじっくりとこのコースの制作に取り組みたいと思います。
乞うご期待ください!
OpenAI のオフィシャルプロンプトエンジニアリングガイド
OpenAIから、良い結果を得るための6つのプロンプティング戦略(プロンプトエンジニアリングガイド)が公開されました。
今やインターネット上は、多くのプロンプティングテクニック情報で溢れかえっています。
しかし、あまりにもテクニック偏重になってしまって、意外にも、ここに書かれている「基本テクニック」をおろそかにしているケースを、(クライアントのプロンプトを見ていて)感じています。
今一度、基本に立ち戻ってみてはいかがでしょうか。
そこで、OpenAIのガイドに書かれている6つの戦略を簡単にまとめました。
1️⃣Write clear instructions: 指示を明確に書く
LLM(大規模言語モデル)に尋ねる内容を、より詳しく、明確に書くことが重要です。
例えば、
「How do I add numbers in Excel?(エクセルで数字を足し合わせるには?)」
と指示する代わりに、
「How do I add up a row of dollar amounts in Excel? I want to do this automatically for a whole sheet of rows with all the totals ending up on the right in a column called "Total".(エクセルで金額の行を足し算するには?シート全体の行の合計を右側の「合計」という列で自動的に計算したいのです。)」
と質問した方が良い、ということです。
また、LLMに役割を与えるペルソナパターン(Act as: こちらの記事を参照)も有効です。
他にも、タスクを実行するためのステップを定義すること、回答例を定義することなどが推奨されています。
2️⃣Provide reference text: リファレンスを提供する
いわゆる「カンペ」をLLMに提供することが重要です。
特に、LLMに回答して欲しい情報の範囲(コンテキスト)が存在する場合、その範囲に含まれる情報を、参考情報として提供することで、ユーザーの意図した情報に近いものが得られます。
3️⃣Split complex tasks into simpler subtasks: 複雑なタスクを複数のシンプルなタスクに分割する
モデルにはトークン上限がありますので、無限の情報を入力することもできませんし、長い会話を続けることもできません。
ただ、多くの場合、ある特定の前の会話を引用したり、フィルタリングすることで事足ります。
これは、プロンプトワークフローの概念そのものです。
適切なプロンプトを適切な順番で、かつ適切な情報で訓練することが複雑なタスクを完遂するためのポイントです。
4️⃣Give the model time to “think”: モデルに考える時間(順序)を与える
複雑な問題を尋ねるときにいきなり結論を聞いても、期待する結果が得られにくい、という内容です。
そういう場合は、LLMに対して結論を得るためにまず考えるべきポイントを伝えてあげます。
例では、「ある問題に対して、生徒の回答が正しいかどうか判断してください。」という指示を与えたところ、LLMは「生徒の回答は正しい」と回答しています。
実際の生徒の回答は間違っているのですが、度々、LLMはこのような間違いを出力ます。
そこで、LLMに対して、
「まずは与えらた問題をLLM自身で解いてください。その後、LLMの回答と生徒の回答を比較して、生徒の回答が正しいかどうか判断してください。」
と、考える順序を与えてやることで、正しい回答(生徒の回答は間違っている)を得る精度が向上する、ということです。
これは、問題を解くタスクに限ったことではなく、記事を生成したり、マーケティングプランを練ったりする場合も同様です。
3の「複雑なタスクをシンプルなタスクに分割する」にも関連しますが、考える順序を与えることで、ユーザーが求めている回答に近い情報を生成することができます。
5️⃣Use external tools: 外部ツールを利用する
LLMにはいくつか弱点がありますが、それを補うために、例えば以下のようなツールを利用することができます。
- テキスト検索システム(Retrieval Augmented Generationと呼ばれます)によりモデルに関連文書を提供
- コードインタプリタのようなコード実行エンジンを利用し、モデルが算数やコードの実行を補助
複雑なタスクを、より信頼性が高く、効率的に行うためには、LLMと適切な外部アプリを利用することで、より最適な結果を得ることができます。
6️⃣Test changes systematically: 評価手法としてのLLM
LLMを活用した評価手法について述べられています。
新しいプロセスやデザインの変更が、結果的にシステムを改善したのか、逆に悪化させたのかを判断するのは、時に難しい問題です。
サンプルデータが少ない場合、真の改良なのかただの運良い結果なのかを見分けるのも困難です。
ここで重要なのが評価手法です。
評価手法はシステム設計を最適化する上で非常に重要な要素です。
Mamoruは半導体業界で働いていますが、非常に多くのデータから、プロセス条件の変更がどのように結果に影響を与えたのか、日々分析しています。
良い評価手法とは、
- 現実の使用状況(または少なくとも多様性)を代表するもの
- 統計的な有効性を高めるために多くのテストケースを含むもの
- 自動化や反復が容易なもの
ですが、現在は、コンピュータ計算と人間の組み合わせによって行われています。
AIの発展により、最近ではここにLLMベースの評価が加わっています。
つまり、得られた結果をどのように解釈し、どういう結論が導かれるのか、どのように改善する必要があるのか、という、従来(データを見て)人間が判断していたことを、LLMが判断します。
例えばスポーツの分野だと、試合のビデオから、AIが各選手のスタッツ(ゴール数、アシスト数など)を判断して記録することも可能になると思います。
LLMは、情報を生成するだけでなく、情報・データを解釈する「評価方法」としても、今後活用範囲が大きく拡大していくと思われます。