Open28
AI時代の質問力 プロンプトリテラシー 「問い」と「指示」が生成AIの可能性を最大限に引き出す
第1章 大規模言語モデルの登場
ChatGPT を支える技術
- トランスフォーマー
- ディープラーニングモデルの一つ
- アテンション
- 自己注意:単語間のつながりを捉える
- マルチヘッド自己注意:文書を複数の観点から捉えて、深く理解できる
- 自己注意機構のおかげで過学習に陥りにくい
- なんでそうなるかはわかりきっていない
- 自己教師あり学習
- 既存文章から穴埋めの予測問題を作成して、穴埋めしながら自己学習する
- 会話に特化した学習
- GPT (Generative Pretrained Transformer)
- 自己学習された生成モデルである意味
- ChatGPT = 対話に特化した自己学習がされている生成モデル
- 学習の流れ
- モデルに適切な答え方を教える
- 答えの善し悪しを人間がフィードバックする
- 良い評価が増えるようさらに学習させる
- ファインチューニング(追加学習)
- 日本の首都は?の回答をあらかじめ与えておく
- RLHF(人間からのフィードバックに基づく教科学習)
- AIアライメント(人間に寄り添うAIシステム)
第2章 プロンプトエンジニアリング
プロンプトの語義
- prompt の意味合い
- 動詞:促す
- 形容詞:すぐに、即座に
- 名詞:合図、手がかり
後続すべき文章を促す
- LLM的にはモデルは続きの単語を予測している
- 毎回同じ出力があるようには作られていない
- ブレをコントロールするためにモデルは「温度」という概念を持っている
- 温度が低いと、確率が高い単語のみを選択するようになる
- 温度が高いと、確率が低い単語も選択されるようになる
- 温度のようなモデルの振る舞いを大きく左右するパラメータをハイパーパラメータと呼ぶ
文脈を指定するプロンプト
- 「これ以降、」のような後続のプロンプトに影響を与える指示ができる
- 連続するプロンプトは、それまでのプロンプトも含む全文を送信している
- 3つめの場合は Q1+A1+Q2+A2+Q3 の内容が入力される
- これをコンテキストと呼ぶ
- コンテキストには上限がある
- コンテキストが長すぎる場合、「これ以降、」のような指示がぼやけてしまうので再度指示が必要になるケースもある
- 事前学習は長期記憶、コンテキストは短期記憶的な解釈で良い
- コンテキストのみから解決方法を探すような振る舞いを文脈内学習と呼ぶ
- サービスによってはプロンプトの入力から追加学習が行われている可能性がある
プロンプトを書くときに気をつけるべきこと
- 強いパターン
- LLMの訓練元となった文章を意識する
- 強いパターンが含まれていれば、一貫性のある出力が得られやすくなる
- 弱いパターンのプロンプトでは出力がブレやすい
- 具体的に、詳細に
- 具体的かつ詳細な記述にすると良い
- 質問の前に、質問したい事柄の具体的な詳細を伝えるのもあり
プロンプトでプログラミング
- データをどのように解釈して処理するかを指示すること
- プログラムのように従って欲しい指示を具体的に与える
ハルシネーション
- 数式処理は穴埋めとは別の思想原理なので、不得意
- とはいえ、学習結果からそれっぽいことは出してくる
- けど、 1+1=3 となる可能性はゼロにできない
- 人間には常識でも、文章としておかしくなければ誤った情報から文章を生成される可能性がある
- このような振る舞いをハルシネーションという
なぜプロンプトが重要なのか、再考
- プロンプトエンジニアリングの基本的な考え方
- 推論や応答は人間に近い
- 固有の癖を持っている
- よりよい応答を得るには癖を理解した上で上手く指示を与える
- プロンプトを変えることは入力を変える以上の意味がある
第3章 プロンプトパターン
ペルソナパターン
- 「〜のように振る舞ってください。」
- 一般名詞を書くだけで、意味を汲んでくれる
- ペルソナに基づいて回答してくれる
- 架空の人物像でも(人物じゃなくても)可能
オーディエンス・ペルソナパターン
- 「〜を説明してください。私は〜であると仮定してください。」
- 説明先のペルソナを指定することで回答をチューニングしてくれる
質問精緻化パターン
- 「私が質問をしたときは、常に改善した質問を提案してください。」
- 入力に対して改善・改良・精密化してくれる
- ペルソナパターン、オーディエンス・ペルソナパターンを組み合わせるとより意図した回答を得やすい
- LLMは質問者の前提などを持っていないので
認識検証パターン
- 大きな問題を一つ一つの小さな問題に分けて解決していく
- 「来月の売り上げ予想」のための周辺情報を集めていくみたいなイメージ
- 「より正確に答えるための追加の質問をいくつか生成して」→「質問の回答の組み合わせから最終的な答えを導き出して」
- フェルミ推定的な流れ
反転インタラクションパターン
- LLMから質問をしてもらうアプローチ
- 「Xを達成するために質問して」→「目標を達成するもしくは条件が満たされるまで質問を続けて」
少数ショットパターン
- 少数の例(ショット)をモデルに与える
- Show, don't tell
- ゼロショット
- 何も例を示さない
- 1-ショット
- 一つだけの例を提示する
- 膨大なデータから学習されている場合は有効
- 少数ショット
- 複数の例を提示する
- 複数の例から一般化できる
- 中間ステップ
- 例は自動生成させられる(結果を人間がチェックしないといけないが)
第4章 トリガープロンプトの威力
Chain-of-Thought パターン
- 思考の連鎖(Chain-of-Thought / CoT)
- コンテキストを区切って定期的に結論を出すことで正確性の高い回答が得られる
- ゼロショットCoT
- 「ステップバイステップで考えよう。」
- 人間への指示と同じような性質がある
Chain-of-Verification パターン
- 検証の連鎖(Chain-of-Verification / CoVe)
- CoVeの段階
- 最初の回答を生成する
- 最初の質問の誤りの可能性をただすための複数の検証質問を用意する
- 検証質問に対して回答を生成する
- 検証結果を含めて最終的な回答を生成する
- モデルが回答のプロセスで正誤を自力で確認して確度を高められる
- コンテキストを分けると、シンプルな回答を得られる
- 「簡潔に回答してください。」
- 計算などは前提そのものを検証してしまって、結果の精度を高めるような動きになりづらい
ステップバックプロンプトパターン
- 質問の前に、前提など俯瞰した情報を与える
- CoTと違って誤りが発生する確率を減らすアプローチ
- 段階
- 抽象化ステップ
- 推論ステップ
- ステップバック質問は自動生成させても良い
- 「事実の提示が困難であれば推測してください。」で事実が参照できないので諦めることを防げる
メタ認知的プロンプトパターン
- これまでのパターンは再帰的な処理を行っていた
- メタ認知的プロンプト(Metacognitive Prompt / MP)パターン
- 人間のメタ認知
- 解釈と理解→判断と内省→行動の修正
- MPパターンの段階
- 入力されたタスクを解釈→初期の推論→初期の推論の批判的評価→批判的評価に基づく推論→結果に対する信頼度の評価
- 人間が正当性をひねり出せるので、人間サイドの根拠も必要
第5章 発展的な技術
自己一貫性パターン
- 自己一貫性(Self-consistency / CoT-SC)
- 自分の一連の言動に矛盾がないこと
- GPT, PaLM, Llama
- LLM-Blender
- モデルのアンサンブル
- 段階
- CoTパターンから質問プロンプトを作成する
- ハイパーパラメータを変えながら、応答を複数生成する
- 多数決で最終的な回答を選ぶ
- 複数回回答を作らせて、一番多い回答を正解と見なす
- LLMにレビューさせる、みたいな方法もある
ReAct パターン
- Reason + Act
- CoTパターンのような推論と、ウェブにアクセスする行動が組み合わされている
- ハルシネーションを抑えられるが、間違わないわけではない
RAG
- 検索拡張生成
- ゼロショットでは以下のような性質に対して弱い
- 極めて専門性が高い知識
- 秘匿性が高い知識
- リアルタイムで生成される知識
- 情報検索(Retrieval)とテキスト生成(Generation)を組み合わせたアプローチ
- 実装
- 埋め込み(Embedding)
- 分散表現(Distributed Representation)
- フレームワーク
- LangChain
- LlamaIndex
第6章 AIエージェントと社会