TL; DR (要約)
AIの「再教育」が不要に? モデルを訓練する代わりに「プロンプト(指示)」で対話する新時代。
AIに未知のタスクをその場で解かせる、魔法のようなテクニックの要点です。
① プロンプトエンジニアリング
(AIへの「的確な指示術」)
AIを「超優秀な新人研修医」と考え、的確な指示(プロンプト)で能力を引き出す技術。良い指示が良い結果を生みます。
② Zero-shot 学習
(お手本ゼロで解く)
「この患者の発言を分類して」のように、お手本なしで指示するだけ。AIが持つ膨大な一般知識でタスクを推論します。
③ Few-shot 学習
(2,3個のお手本を見せる)
プロンプト内に「こういう形式で」と数例のお手本を提示。AIはその場でパターンを学び、より正確な出力を返します。
この章の学習目標と前提知識
はじめに:AIの「再教育」が不要になる世界
皆さん、こんにちは!いよいよ「拡張編」も、AIとの関わり方を根底から変える、魔法のような技術の領域へと入っていきます。
前回の講義で、私たちはLoRAのようなPEFT技術を学び、巨大なAIモデルを驚くほど低コストで私たちのタスクに適応させる「賢い再教育法」を手に入れました。これは大きな進歩でしたよね。しかし、もし、その「再教育(ファインチューニング)」というステップすら、一切不要になるとしたら、どうでしょう?もし、AIが、一度も解いたことのないタスクを、まるで最初から知っていたかのように、その場で解き始めたとしたら…?
これまでの私たちの常識では、AIに新しいタスクを教えるには、必ず「訓練」というプロセスが必要でした。それはまるで、特定の芸を覚える犬に、何度も繰り返しお手本を見せて、ご褒美をあげて(損失を下げて)、正しい行動(重み)を刷り込んでいく作業に似ています。
しかし、GPT-3以降の大規模言語モデル(LLM)の登場は、この常識を覆しました。これらのモデルは、あまりにも膨大なテキストデータで事前学習された結果、言語に関する驚異的な「汎用知能」を獲得しています。その結果、私たちはAIを「訓練する」対象から、「対話し、指示する」対象として捉え直すことができるようになったのです。
つまり、モデルの重みを一切変更するのではなく、モデルに与える指示(プロンプト)を工夫することで、AIが持つ膨大な知識の引き出しの中から、必要な能力をその場で引き出してもらう。この新しいAIとの付き合い方が、Zero-shot学習とFew-shot学習の根幹にある考え方です。これらは、AIをより手軽に、そしてより柔軟に活用するための、まさにゲームチェンジャーと呼ぶべき技術と言えるでしょう。
この記事では、プロンプトという「対話の杖」を振るってAIの能力を最大限に引き出すこれらの技術について、その基本的な考え方と医療分野での応用可能性を、ダイジェスト形式で一緒に探求していきたいと思います。なお、各アプローチのさらに詳細な理論や、プロンプトを工夫する具体的なテクニック(プロンプトエンジニアリング)については、今後の個別記事(29.1〜29.3)でじっくりと掘り下げていく予定です。
29.1 プロンプトエンジニアリングによる推論制御 〜AIとの「対話」を極める技術〜
Zero-shot学習やFew-shot学習の驚くべき能力は、全てこのプロンプトエンジニアリングという、新しい技術の上に成り立っています。これは、AIモデルの重みを一切変更することなく、その振る舞いを自在にコントロールするための、いわば「対話術」なんです。
アナロジーで理解する:「超優秀な新人研修医」への的確な指示
大規模言語モデルは、「全ての医学教科書を読破し、驚異的な知識を持つが、まだ現場経験のない、超優秀な新人研修医」だと考えてみてください。彼に新しい手技を教えるために、何ヶ月もかけて再教育(ファインチューニング)することも一つの手ですが、もっと手軽な方法があります。それは、その場その場で「的確な指示(プロンプト)」を出すことです。
「この患者さんの所見を、カンファレンス用に3行でまとめて」「この論文の結論部分を、患者さん向けに分かりやすく説明して」といった良い指示を出せば、彼はその膨大な知識の中から、必要な情報を引き出して、素晴らしい仕事をしてくれます。この「的確な指示の出し方」を考え、設計し、試行錯誤する技術の総称が、プロンプトエンジニアリングなのです。
良いプロンプトを構成する4つの要素
では、「的確な指示」とは、具体的にどのような要素で構成されるのでしょうか?良いプロンプトは、一般的に以下の4つの要素を組み合わせることで作られます。それぞれの要素を、先ほどの新人研修医への指示に例えて見ていきましょう。
良いプロンプトの構成要素
- 1. 指示 (Instruction)
「君にやってほしい仕事はこれだよ」という、タスクの明確な定義です。例:「要約して」「分類して」「翻訳して」。研修医に「今日のTAVIのサマリー、お願い」と、まず結論を伝えるようなものですね。 - 2. 文脈 (Context)
「君は今、どんな役割を演じるべきか」という、AIのペルソナや背景情報の設定です。例:「あなたはベテランの循環器専門医です」「患者さんに説明するように、専門用語を避けてください」。これにより、アウトプットのトーンや視点が大きく変わります。研修医に「カンファで僕の代わりに発表するつもりで、まとめておいて」と頼むようなイメージです。 - 3. 入力データ (Input Data)
「これが、君が処理すべき情報だよ」という、具体的な対象データです。例:要約したい論文のアブストラクトや、分類したい患者さんの発言など。研修医に、実際のカルテや論文を渡すことにあたります。 - 4. 出力指示子 (Output Indicator)
「さあ、ここから君の仕事を始めて」という、出力の始まりを示す合図です。例:「要約:」「分類結果:」。これにより、AIはどこから自分の回答を始めれば良いかを明確に認識できます。研修医に「じゃあ、サマリーをどうぞ」と話を振るのに似ていますね。
もちろん、常にこれら4つ全てが必要なわけではありません。しかし、AIの出力がどうも思わしくないな、と感じたときは、この4つの要素のどれが不足しているのか、あるいは曖昧なのかを考えてプロンプトを修正していくと、驚くほど的確な答えが返ってくることがあります。プロンプトエンジニアリングは、まさにAIとの対話を通じた、試行錯誤の科学であり、アートでもあるんですね。
29.2 未知のタスクを解くZero-shot学習 〜一度も見たことのない問題を、AIはどう解くのか?〜
プロンプトエンジニアリングの基本が分かったところで、まず最もシンプルで、そして最も魔法のように見えるZero-shot学習から見ていきましょう。
その名の通り、Zero-shot学習とは、モデルに対して、解きたいタスクの具体例を一切(ゼロ個)見せることなく、タスクの「指示」だけで問題を解かせるアプローチです。これは、私たちが育てた「超優秀な新人研修医」に、一切のお手本を見せずに、口頭での指示だけで、全く新しい手技をいきなりやってもらうようなもの。普通に考えたら、無茶なお願いですよね。
しかし、大規模言語モデルは、事前学習の過程で獲得した膨大な汎用知識と、驚異的な文脈理解能力を持っているため、この「無茶振り」に、かなりの精度で応えてくれることがあるのです。これが、Zero-shot学習の驚くべき点です。
医療応用例:患者の発言の意図を分類する
例えば、電子カルテの自由記述や、診察の音声認識テキストから、患者さんの発言のニュアンスを自動で分類したい、というタスクを考えてみましょう。従来であれば、「懸念」「感謝」「質問」といったラベルを付けた何千もの発言データを集めて、分類モデルを訓練する必要がありました。しかし、Zero-shot学習なら、その必要はありません。
Zero-shot学習のプロンプト例
このプロンプトを大規模言語モデルに入力すると、モデルは文脈から「めまい」という副作用への不安を読み取り、これが単なる事実報告ではなく、副作用に対する不安や相談の意図を含んだ「懸念」である、と高い確率で推論してくれるでしょう。
すごくないですか?私たちはモデルに「懸念とは何か」というデータセットを一切与えていません。モデルが持つ元々の言語能力だけで、これを実現しているのです。もちろん、常に100%完璧なわけではありませんが、この能力は、大量の非構造化テキストデータを迅速に整理・分析したい医療現場において、計り知れないポテンシャルを秘めています。
ただし、Zero-shot学習は万能ではありません。タスクが少し複雑になったり、出力の形式を厳密に指定したかったりする場合には、指示だけではモデルが意図を汲み取りきれないこともあります。そんなとき、AIにもう少しだけヒントを与えてあげるのが、次のFew-shot学習です。
29.3 数例の提示から学ぶFew-shot学習 〜AIに「お手本」を見せて、賢く導く〜
Zero-shot学習は、指示だけでタスクを解かせる、非常に強力なアプローチでした。しかし、私たちの指示が少し曖昧だったり、タスクが複雑で出力形式を厳密に指定したかったりする場合には、AIが意図を汲み取りきれないこともあります。
こんな時、私たちは「超優秀な新人研修医」にどう接するでしょうか?いきなり口頭で指示するだけでなく、「例えば、こんな感じのレポートにまとめてほしいんだ」と、いくつかのお手本(具体例)を見せてあげるはずです。この、AIにもう少しだけヒントを与えてあげるアプローチが、Few-shot学習です。
文脈からのその場学習(In-context Learning)
Few-shot学習では、タスクの指示に加えて、いくつかの「入力と期待される出力」のペア(お手本)をプロンプトの中に含めてモデルに提示します。ここで最も重要なのは、モデルがこれらの例から「文脈の中で(In-context)」その場でタスクのパターンを学習する、という点です。
これは、モデルの重み(パラメータ)を一切更新するファインチューニングとは全く異なります。モデルは、プロンプト内で与えられた例だけを頼りに、「ああ、なるほど、このタスクではこういう形式で、こういう情報を抜き出せばいいんですね」とその場で「理解」し、新しい入力に対してそのパターンを応用するのです。まさに、デモンストレーションから学ぶ能力ですね(1)。
医療応用例:検査レポートの構造化データ抽出
臨床研究において、自由記述のテキストから特定の情報を構造化データ(例えば、Excelの表に入れられるような形式)として抽出したい、というニーズは非常に多いですよね。例えば、検査レポートから項目名と値を正確に抜き出す、といったタスクを考えてみましょう。
Few-shot学習のプロンプト例
このプロンプトでは、AIに「こういう文章が来たら、こういうJSON形式で返してね」というお手本を2つ見せています。このお手本(shot)があるおかげで、AIは私たちが望む出力のフォーマットや、抽出したい項目のパターンを正確に理解し、3つ目の新しい入力に対しても、{"AST": "45U/L", "ALT": "52U/L"} という、期待通りの構造化された出力を生成してくれる可能性が格段に高まるのです。
これは、より複雑で、出力形式が厳密に決まっているタスクにおいて、絶大な威力を発揮します。数千、数万のデータでファインチューニングを行う代わりに、ほんの数個の例を作るだけで、AIを私たちの目的に合わせて賢く導くことができる。これは、データ準備のコストを劇的に下げる、非常に実践的なテクニックと言えるでしょう。
まとめと次のステップへ
今回は、モデルの重みを一切変更することなく、プロンプトという「対話」の技術だけで巨大モデルの能力を引き出す、Zero-shot学習とFew-shot学習について学びました。
- プロンプトエンジニアリング: AIの能力を引き出すための「指示の技術」。
- Zero-shot学習: 指示だけで未知のタスクを解く能力。
- Few-shot学習: いくつかの例を提示することで、その場でタスクのパターンを学習する能力。
このパラダイムシフトにより、私たちはAIモデルの「訓練」から解放され、AIとの「対話」を通じて、より迅速に課題を解決できるようになりました。これは、プログラミングや機械学習の専門家でなくても、アイデア次第で誰もがAIの力を活用できる時代の到来を意味しています。
さて、プロンプトによってAIの能力を引き出せるようになりました。では、私たちが実際にアクセスできる、GPT-4VやMedPaLMのような最先端の基盤モデルにはどのようなものがあり、それらをどうやって私たちのプログラムに組み込んでいくのでしょうか?
次回の第30回では、いよいよこれらの大規模言語・視覚モデルをAPI経由で利用する具体的な方法について学んでいきます。
参考文献
- Brown T, Mann B, Ryder N, Subbiah M, Kaplan JD, Dhariwal P, et al. Language models are few-shot learners. In: Advances in neural information processing systems 33. 2020. p. 1877-1901.
- Wei J, Wang X, Schuurmans D, Bosma M, Chi E, Le Q, et al. Chain-of-thought prompting elicits reasoning in large language models. In: Advances in Neural Information Processing Systems 35. 2022. p. 24824-24837.
- Singhal K, Azizi S, Tu T, Mahdavi SS, Wei J, Chung HW, et al. Large language models encode clinical knowledge. Nature. 2023;620(7972):172-180. (Med-PaLMに関する論文)
ご利用規約(免責事項)
当サイト(以下「本サイト」といいます)をご利用になる前に、本ご利用規約(以下「本規約」といいます)をよくお読みください。本サイトを利用された時点で、利用者は本規約の全ての条項に同意したものとみなします。
第1条(目的と情報の性質)
- 本サイトは、医療分野におけるAI技術に関する一般的な情報提供および技術的な学習機会の提供を唯一の目的とします。
- 本サイトで提供されるすべてのコンテンツ(文章、図表、コード、データセットの紹介等を含みますが、これらに限定されません)は、一般的な学習参考用であり、いかなる場合も医学的な助言、診断、治療、またはこれらに準ずる行為(以下「医行為等」といいます)を提供するものではありません。
- 本サイトのコンテンツは、特定の製品、技術、または治療法の有効性、安全性を保証、推奨、または広告・販売促進するものではありません。紹介する技術には研究開発段階のものが含まれており、その臨床応用には、さらなる研究と国内外の規制当局による正式な承認が別途必要です。
- 本サイトは、情報提供を目的としたものであり、特定の治療法を推奨するものではありません。健康に関するご懸念やご相談は、必ず専門の医療機関にご相談ください。
第2条(法令等の遵守)
利用者は、本サイトの利用にあたり、医師法、医薬品、医療機器等の品質、有効性及び安全性の確保等に関する法律(薬機法)、個人情報の保護に関する法律、医療法、医療広告ガイドライン、その他関連する国内外の全ての法令、条例、規則、および各省庁・学会等が定める最新のガイドライン等を、自らの責任において遵守するものとします。これらの適用判断についても、利用者が自ら関係各所に確認するものとし、本サイトは一切の責任を負いません。
第3条(医療行為における責任)
- 本サイトで紹介するAI技術・手法は、あくまで研究段階の技術的解説であり、実際の臨床現場での診断・治療を代替、補助、または推奨するものでは一切ありません。
- 医行為等に関する最終的な判断、決定、およびそれに伴う一切の責任は、必ず法律上その資格を認められた医療専門家(医師、歯科医師等)が負うものとします。AIによる出力を、資格を有する専門家による独立した検証および判断を経ずに利用することを固く禁じます。
- 本サイトの情報に基づくいかなる行為によって利用者または第三者に損害が生じた場合も、本サイト運営者は一切の責任を負いません。実際の臨床判断に際しては、必ず担当の医療専門家にご相談ください。本サイトの利用によって、利用者と本サイト運営者の間に、医師と患者の関係、またはその他いかなる専門的な関係も成立するものではありません。
第4条(情報の正確性・完全性・有用性)
- 本サイトは、掲載する情報(数値、事例、ソースコード、ライブラリのバージョン等)の正確性、完全性、網羅性、有用性、特定目的への適合性、その他一切の事項について、何ら保証するものではありません。
- 掲載情報は執筆時点のものであり、予告なく変更または削除されることがあります。また、技術の進展、ライブラリの更新等により、情報は古くなる可能性があります。利用者は、必ず自身で公式ドキュメント等の最新情報を確認し、自らの責任で情報を利用するものとします。
第5条(AI生成コンテンツに関する注意事項)
本サイトのコンテンツには、AIによる提案を基に作成された部分が含まれる場合がありますが、公開にあたっては人間による監修・編集を経ています。利用者が生成AI等を用いる際は、ハルシネーション(事実に基づかない情報の生成)やバイアスのリスクが内在することを十分に理解し、その出力を鵜呑みにすることなく、必ず専門家による検証を行うものとします。
第6条(知的財産権)
- 本サイトを構成するすべてのコンテンツに関する著作権、商標権、その他一切の知的財産権は、本サイト運営者または正当な権利を有する第三者に帰属します。
- 本サイトのコンテンツを引用、転載、複製、改変、その他の二次利用を行う場合は、著作権法その他関連法規を遵守し、必ず出典を明記するとともに、権利者の許諾を得るなど、適切な手続きを自らの責任で行うものとします。
第7条(プライバシー・倫理)
本サイトで紹介または言及されるデータセット等を利用する場合、利用者は当該データセットに付随するライセンス条件および研究倫理指針を厳格に遵守し、個人情報の匿名化や同意取得の確認など、適用される法規制に基づき必要とされるすべての措置を、自らの責任において講じるものとします。
第8条(利用環境)
本サイトで紹介するソースコードやライブラリは、執筆時点で特定のバージョンおよび実行環境(OS、ハードウェア、依存パッケージ等)を前提としています。利用者の環境における動作を保証するものではなく、互換性の問題等に起因するいかなる不利益・損害についても、本サイト運営者は責任を負いません。
第9条(免責事項)
- 本サイト運営者は、利用者が本サイトを利用したこと、または利用できなかったことによって生じる一切の損害(直接損害、間接損害、付随的損害、特別損害、懲罰的損害、逸失利益、データの消失、プログラムの毀損等を含みますが、これらに限定されません)について、その原因の如何を問わず、一切の法的責任を負わないものとします。
- 本サイトの利用は、学習および研究目的に限定されるものとし、それ以外の目的での利用はご遠慮ください。
- 本サイトの利用に関連して、利用者と第三者との間で紛争が生じた場合、利用者は自らの費用と責任においてこれを解決するものとし、本サイト運営者に一切の迷惑または損害を与えないものとします。
- 本サイト運営者は、いつでも予告なく本サイトの運営を中断、中止、または内容を変更できるものとし、これによって利用者に生じたいかなる損害についても責任を負いません。
第10条(規約の変更)
本サイト運営者は、必要と判断した場合、利用者の承諾を得ることなく、いつでも本規約を変更することができます。変更後の規約は、本サイト上に掲載された時点で効力を生じるものとし、利用者は変更後の規約に拘束されるものとします。
第11条(準拠法および合意管轄)
本規約の解釈にあたっては、日本法を準拠法とします。本サイトの利用および本規約に関連して生じる一切の紛争については、東京地方裁判所を第一審の専属的合意管轄裁判所とします。
For J³, may joy follow you.

