前回はPromptにLLMの訓練あるいは生成の指示があることを確認し、Promptを用いたLLMの訓練方法をLLMの構成するネットワークやEmbeddingの更新の有無で整理しました。これまでに数多くのLLMが登場し、そして最近はSmall Language Model (SLM)がデビューするなど、新規モデルだけでなく既存モデルのバージョンアップも続くでしょう。以下、モデルといえば特に断りがない限りLLMとSLMを含みます。
これらのモデルはアーキテクチャよりも内部パラメータ(Embeddingやネットワークの重みなど)の違いの方が大きそうです。これらの違いの原因は、主にモデルの訓練データと訓練方法にあります。LLMに加えて、Visual Language Model(VLM)やMultimodal Language Model(MLM)なども同様のアーキテクチャに基づいており、これらのモデルも含めてモデルと呼びます。
モデルもTransformer decoderアーキテクチャを用いていてもデータだけでなくRemixというか訓練の方針が違えば、それらの得意分野や性能も違っています。訓練方法にInstruction tuning、訓練データとしてData Augmentation、訓練したモデルのOutputを人間の価値観に合わせる(Alignment)ためにRLHFなど強化学習(RL)を用いるHuman-in-the-loop(HITL)などのアプローチがあり、それらをどのタイミングで適用するかによって、モデルの訓練における費用対効果やモデルの性能や柔軟性だけでなく適用可能なタスクが変わります。最初にモデルを訓練し、次にこの訓練済みのモデルを適用ドメイン向けにFine tuning、モデルのInputであるPromptを設計します。更にモデル側では入力されたPromptに対して推論/変換/最適化などの処理を経てOutputを出力します。
モデル訓練の対象がLLMであれば、訓練目的はモデルの生成テキストを期待するOutputに近づけることです。「訓練用データがInputとそれに対応するOutputで構成され、訓練の目的関数がCross entropyでは、訓練したLLMは訓練データを再生産するモデルじゃないの?」と思われる方がいるかもしれません。この懸念に対する回答が訓練データの設計(Inputとそれに対応するOutput)の工夫及びモデルの推論性能の向上であり、その実現手段がモデルの巨大化と訓練方法及びPromptです。モデルの巨大化は、雑に言うとメモリの拡張であり、InputからOutputの簡単な対応関係だけでなく、Multi step reasoningなどの推論の実行やマルチモーダルへの対応も可能にします。今回は推論性能の向上のためにPromptを用いた推論性能の向上にむけたアプローチを見てゆきましょう。訓練方法は別途扱う予定です。
モデルの訓練効果は利用する訓練データと密接な関係があります。最初は準備が容易かつそのコストも低いデータで訓練し、後になり準備が困難かつコストが高いデータを適用することを想定すると、Tuning、Prompt design、Prompt learningにおいて工夫が出来そうです。Tuningは更新パラメタあるいは訓練目的により名称が変わります。またAdapter tuningとInstruction tuningという組み合わせで利用することもあります。Prompt learningではモデルが推論で利用するデータと推論過程毎に分類しています。こちらもIn-context learning(ICL)を用いたChain-of-Thought (CoT)という組み合わせもあります。この分類を以下の図に示します。
「一体いくつの型があるんだ?」と思われる方もいるでしょう。ご安心ください。これらはアプローチの種類や観点なので、それぞれに具体的な方法があり、しかもその種類や方法も日々提案及び開発されています。訓練に必要なデータの整理や作成などのコストや効果を考慮すると、この順序以外で適用することになるでしょう。利用可能なデータの質やタスクとの適合などから効果的な順序が変わります。併用できる技術や訓練方法もあり、やり直すこともあるため、かならずしもこの順序通りに適用するとは限りません。キングダークもRS装置が無くても立ち上がっています。
類似した用語あるいは同じ用語が共通して使われていますが、個々の名称を覚えるよりその違い、例えばTraining、Tuning、Learningは「何」が「何」を目的に「どうやって」実行するかを意識することで必要な方法を選択することが出来ると思います。Tuningは訓練済みのモデルのパラメタ(ネットワークの重みなど)の一部を更新するプロセス、Learningはモデルを新しいタスクへ適合させるプロセスを指します。Tuning/Learningを含めた訓練についての詳細は別の機会に眺める予定で、今回はPromptとInstructionについて触れます。InstructionもPromptの一種であり、どちらもLLMなどの生成モデルへの入力であり指示であるところは同じです。Prompt内部で生成モデルへのタスク(要約、翻訳、推論など)の具体的な指示、そのための手順や事例(Few-shot)、アウトプットを明確にするためのガイドラインや方向性(Diversity、 Flexibility、Constraintsなど)を一緒に与えると、Instructionと呼ばれることが多いようです。最初から難しい訓練データを使わずに徐々に難易度を上げていくCurriculum learningもあります。
PromptにTuningが付くと何をしているのかが分かり易くなります。Prompt tuningの目的はPrompt(モデル訓練用の学習可能パラメタ、Soft prompt)の最適化であり、モデルを固定させたままPromptを最適化する方法です。Instruction tuningの目的はモデルが指示に従いタスクを実行できるよう、モデルのパラメタを訓練する方法です。Prompt learningは、与えられたPromptからモデルが学習を行います。モデルのパラメタも更新する場合は、Prompt + Model tuningとなります。出力に応じてPromptをTuningするとPrompt refinementとなります。最近はPromptの自動生成もあります。いずれもモデルのTuningにFull fine tuningあるいはPEFTに代表されるPartial fine tuningを選択することができます。
最近のLLM/SLMにはInstruction tuning実施済みのモデルも多いので、TuningはせずにPrompt learningから始まることも多いと思われます。PromptのSearchだけでなく自動生成やそのテンプレートの共有もあるので、Tuningの手間も軽減されてきています。それでも、モデルの「推論過程」にお任せせずに、明示的あるいは非明示的にPromptとしてモデルに与えて訓練したい場合にはInstruction tuningを実行することになります。例えば、LLM/SLMを(ロールを設定して)DJのように音楽をレコメンドすることを想定してみましょう。その際に「盛り上がる曲を繋いでプレイして」とだけ指示というか依頼する場合が非明示的で、「今日は90年代から通っているお客さんが多いです。なので当時のヒット曲が盛り上がると思います。Hey Ya! → Get Lucky → Everybody Have Fun Tonight → Hello Mr. Monkey → Tell The World → …という繋ぎはどうでしょう?合間にGo Go Carlitoも忘れずに。」という依頼が明示的と言えるかもしれません。前者であればDJはBlinding LightsとTake On MeのMix、後者であればNew York City Boyをプレイし、その曲のPV同様にフロアは盛り上がるでしょう。
Instruction tuningに必要なデータは、通常、Input(モデルのInput)-Output(Inputに対して期待するモデルのOutput)のペアとして構成されますが、その作成には専門的な知識や、正確にラベル付けされた大量かつ高品質のデータが必要です。このデータ作成は専門家の協力や作業を要するため、コストが高くなります。データ作成にコストをかけられない場合には、Input-Outputを拡張するData Augmentationやモデルに自身の訓練用データを生成させるSelf instruction、あるいは他モデルへのInput(Instruction)とそのOutputのペアであるInstruction-outputを使う方法もあります。Data Augmentationは元のInput-Outputに対し、異なる指示や異なる形式の出力を用意してモデルを訓練することで、モデルは表現や指示の揺らぎに頑健になりかつ違いを意識し、多様なタスクに対する柔軟性や適応性を高めます。また訓練の効果を高めるためにRLを活用することで、モデルの出力に応じて報酬を与えモデルを訓練し、生成タスクにおける品質向上を図ります。HITLでは報酬に代わり、人間によるフィードバックを通じ、品質向上を図ります。さらにReinforcement learning from human feedback (RLHF)では、モデルが人間の意図や評価に沿う(Alignmentとも言われます)結果を出力させる訓練が強化されます。最近は人間の代わりにLLMを用いたLLM-as-a-judgeなどの自動化も進んでいます。Instruction tuningはコストの高い訓練方法です。その訓練によりNext token prediction以外にもモデルが実行可能なタスクの種類を広げることができます。
Autoregressive型のTransformerモデルは訓練によりNext token predictionを実行できますが、Instruction tuningを適用することでモデルの推論性能は向上し、その結果、要約、翻訳、推論といったタスクの指示を実行性能も向上するように訓練されます。既存コンテンツや方法をリスペクトし、それらの流れやつなぎを意識し、世間を熱狂させるのはDJだけでなくモデルの訓練やTuningにも当てはまるかもしれません。そうそう、Mixしたり、サンプラーを使ったり、ディスクを回転させることも共通していますね。
モデルの訓練が進めば、モデルの出力の良し悪しはモデルと我々の架け橋であるPrompt designに左右されます。この理想的なPromptと探求は、青い彼岸花の捜索と通じるものがあるかもしれません。ここではモデルへの指示であり、Instruction向けのPrompt engineeringについて見てみます。
ちょっと時間がたったので、まずはモデルを動かしてみましょう。今回はMeta-Llama-3-8B-Instruct(利用に際してはMeta(Download Llama)及びライセンスをご確認ください)を使ってみます。
最初は
カレーとは何ぞや?
この質問に対する答えは
Arrrr, ye be askin' about curry, eh? Well, matey, curry be a tasty dish made with a mix o' spices, usually includin' turmeric, cumin, coriander, and a bit o' heat from chili peppers or ginger. It be a popular condiment fer many a landlubber's plate, especially in the East Indies and other parts o' the seven seas! So, hoist the sails and set course fer a bowl o' curry, savvy?
なかなか力強い答えが返ってきました。カレーを食べに航海するのも悪くありません。文法で気になる箇所がありますが、口語と思えばご愛敬でしょうか。「海原はん、これでええどすか?」
では本題
美味しいチキンカレーの作り方を予算は一人分一万円以上とそれ以下の二通りで教えてください。それらが美味しい理由を含め、材料と作り方を教えてください。
必要な材料は分量や入手先も教えてください。スパイスはカルダモン、フェンネル、シルフィウムは可能な限り使い、ホール、シード、パウダーかも明記してください。
この質問に対する答えは
Arrrr, ye landlubbers! I be teachin' ye how to make a scrumptious chicken curry, fit fer a swashbucklin' pirate like yerself! I'll give ye two recipes, one fer under ¥10,000 and one fer over. So hoist the sails and set course fer a culinary adventure!
**Recipe 1: Budget-Friendly Chicken Curry (¥5,000 - ¥7,000)**
Yer gonna need:
* 500g boneless, skinless chicken thighs (¥800)
Instructions:
**Recipe 2: Luxury Chicken Curry (¥10,000 - ¥15,000)**
Yer gonna need:
Instructions:
So, me hearties, which recipe will ye choose? The budget-friendly option, or the luxury version? Either way, ye'll be gettin' a delicious chicken curry that'll make ye feel like ye've found yer treasure!
先ほどと口調が同じです。どこから海賊が出てきたのか分かりませんが、美味しそうです。このレシピに従ってカレーをつくってご馳走すれば、「川前はん、なんちゅうカレーを食わせてくれたんや」と言われるでしょうか?
ここで確認できたようにPromptは「人とのコミュニケーション」と同じように「モデルとのコミュニケーション」であることを意識した方がモデルも活躍できそうです。そこで、モデルが指示を理解し、その性能を発揮するために、「人とのコミュニケーション」と同じように「指示、目的、情報、具体例」などの観点でPromptを設計すると次のようになります。
指示:モデルが実行するタスク(例えば、要約、翻訳、質問応答など)とそのための行動指針。指針にはモデルの役割(Role)や前提条件(Assumptions)が含まれます。モデルは、この指示を形式意味論や語用論に基づいて解釈し、推論し、タスクを実行します。Roleの設定によっては同じモデルを複数の異なるモデルとして訓練及び実行させる事が出来ます。
「人とのコミュニケーション」を意識すると、指示をモデルに反復(言い換えや再読)させたり、感情的な共感を示すように促したり、Promptを通してモデルを激励することはよく見られます。ソクラテス的質問法と呼ばれる質問を通じて思考を促す方法があります。アナクシマンドロス、プラトンやアリストテレス的方法もInstructionとして有効かもしれません。
目的:モデルがタスクを実行する際に達成すべき目標や成果物を定義します。この定義により、モデルは出力が正確かつ適切であることを保証する指針を得ます。Meta Prompt, Goal Seekなどと言われることもあり、モデルのアウトプットを明確にする役割を果たします。Meta Promptはタスク実行のメタ的な指針です。例えば、「どのように回答すべきか」「どの視点で回答すべきか」という形で指示することで、モデルは適切な推論戦略を選択できるようになります。Goal Seekはタスク実行のアプローチや手順を示します。例えば、「この問題解決に最も効果的な方法を教えてください」という形で示すことで、モデルは目標達成の方向性を理解できるようになります。さらに、出力形式(箇条書き、JSON形式など)や構造・定義・制約に関する要件、トーンおよびスタイル、テンプレートの使用、並びに認知バイアスの認識に関する制約も設けることが可能です。Promptの形式は利用するモデルが訓練時に利用したPrompt形式(訓練のフォーマット)を調べてそれに一致させると我々だけでなくモデルも安心できます。これはFine tuning (Instruction tuning)についても当てはまります。
情報提供:タスクを実行するためにモデルに提供される入力データやContextがあります。入力データはタスクの実行対象となるデータ(タスクが翻訳であれば翻訳対象のテキスト)です。入力はPromptの中に事前に記載するだけでなくPromptを使う際に動的に提供することもあります。後者の提供方式であればこのPromptを再利用しやすくなります。Contextはモデルがタスク実行に必要な背景情報や追加データがあり、モデルの状況理解を助けます。モデルの出力を調整するために特定の語彙や話題を提供する手法をPrimingということがあります。
具体例(Examples):モデルがタスクを実行する方法を学ぶために提供する具体例(問題とその回答のペアや入力データとそれに対する望ましいデータのInput-Outputのペアなど)です。具体例からモデルはパターンを学習し、出力の精度を高めます。具体例を1つ与えればOne-shot、それより多く与えればFew-shotと呼び、モデルはこの具体例からタスク実行のパターンを学ばせます。全く与えなければZero-shotとなり、モデルは新たにパターンを学ばず提供された指示のみでタスクを実行します。
具体例からパターンでなく方法を学ばせる場合はDemonstrationと呼ばれることもあります。事例も有効ですが、その事例に推論のステップも一緒に与えると、Promptの実行時にCoTやChain of augmentation, Feedback, Models, Verification などを含むChain of X、それらの探索的な方法であるTree of Thoughts (ToT)が生かせるでしょう。ここでCoTのThoughtが単数形でToTではThoughtsとなっているのは前者が一つの思考、後者が複数の思考の存在を表しています。
Promptの推論/変換は訓練が終わり内部パラメタを凍結(更新されない)したモデルが与えられたPromptを理解、推論し、それに合わせてタスクを実行します。
推論過程には、Zero-shot Learning、One-shot Learning、Few-shot Learning(これらをまとめて*-shot Learningとここから呼びます)、及びIn-Context Learning (ICL)があります。いずれの方法もLearningが付いていますが、モデルは凍結しているため、そのパラメタは更新せずにモデルは与えられた情報を基にその場で推論を行います。*-shot Learningはモデルが与えられた少数の事例からパターンを学び、その後のタスクにおいて適切な推論を実行します。Zero-shotでは例が与えられず、モデルはタスクを推論のみで解決しなければなりません。One-shotやFew-shotでは、モデルは与えられた少数の例(1つまたは数個)からパターンを推論し、同様のタスクに対応します。例えば、質問応答タスクでは、モデルは事例として与えられたQAペアからそのパターンを推論し、入力データである質問に回答します。
ICLはモデルが提供されたコンテキスト(過去の事例だけでなくContext)に基づいて推論を行う方法です。Contextとして過去の入力やPromptを参照すれば、その情報を出力に反映するようになります。更にChain-of-Thought (CoT)に代表されるChain-of-XやTree of Thoughts (ToT)はモデルの推論過程を線形あるいは探索的に分けて実施します。モデルにCoTやToTなどMulti-step Reasoningを確実に実行して欲しい場合はPromptに推論の事例として明示的に与えることで、推論せよと指示するよりもモデルのOutputを期待する出力に近づけることができるでしょう。推論の前、訓練の時点でこれらを明示的に訓練データに与えることで、Instruction tuningはIn-context tuning, In context tuningやMulti-step Reasoning tuningとなるでしょう。
LLM/SLMは言語のモデル化だけでなく、統計解析や分析にも使えます。ジャン=フランソワ・シャンポリオンがロゼッタストーンを用いてヒエログリフを解読したように、ロゼッタストーンのようなバイリンガルテキストの事例があれば、LLMにFew shot learning + Reasoningでクレタ線文字Aなどの未解明の言語を解読できるかもしれません。バイリンガルテキストの入力が難しければ、例えば未知言語の碑文を写真に撮影し、LLMを内包したVLMのインプットとして使うことでどこまで解明できるか興味があります。
これら以外にもPromptの推論の論理的アプローチとして、タスクの分割、多言語への翻訳、過去のPromptの再利用、モデルへの自己認識の促進などが知られています。このように最近のモデルはPromptの行間を読んだり、モデル間で多数決をとったり、自己学習をしたり目に見えないところで頑張っています。
Promptはどこまで詳細に記述すればいいのだろう?
長ければトークンの制限にも引っ掛かりますし。モデル、LLMの基本構造であるEncoder型とDecoder型を思い出してみましょう。それぞれの構造でトークンの役割を曲に例えるなら、前者はStarshipのWe Built This Cityで、後者はHot GossipのBreak Me into Little Pieces、日本の曲なら一番星ブルースでしょうか。前者はサビ?のDJトークをラジオ局や地域によりカスタマイズすることでデジタル化されたご当地ソング、後者はイントロだけでフロアの方向性を一つにしてしまう曲だと思っています。どちらも古い曲でなかなか聞く機会が無いと思いますが、特に前者は市販化されていない音源が流れる場合もありますのでリクエストするのも一つの手です。California Loveのようにイントロがタイトルコールになっていて、しかも曲全体の要約になっていそうなものがPromptの理想形かもしれません。
どうしても長いPrompt、具体的にはトークン制限を超えた情報提供や具体例を与えて設計したいこともあるでしょう。その場合はPromptを多段階、例えば複数のPromptを要約する処理を入れるか、入力のPromptでなくSoft promptに埋め込んでモデルに指示を与えるアプローチがあります。またモデルをPromptの要約やマージ等々、役割分担する方法も考えられます。
ここで前回の質問をここまでのPrompt設計やその推論を用いて再度聞いてみよう。
役割として
あなたは地球物理学者で海洋生物学者です
指示に具体例と推論を含めて
アンモナイトがP-T境界の大量絶滅を乗り越え、K-Pg境界の大量絶滅を乗り越えられなかった理由を海水準、海水の温度や酸素濃度やPHや水域などの状態、生息域や生態が似た生物及び以下の情報や事例を参考に類推してください。
これに対するモデルの回答は以下の通り
A fascinating question! As a geophysicist and marine biologist, I'll attempt to infer the reasons behind the inability of ammonites to survive the K-Pg boundary mass extinction, despite their success in overcoming the P-T boundary mass extinction.
First, let's consider the similarities between ammonites and other marine organisms that survived the P-T boundary mass extinction, such as sea lilies (sea cucumbers) and nautiluses. These organisms were adapted to living in a warm, low-oxygen environment with high levels of CO2. They likely had slower metabolisms and were less sensitive to changes in ocean chemistry.
In contrast, the K-Pg boundary mass extinction occurred in a very different environment. The oceans were likely much colder and more oxygenated than during the P-T boundary event. The rapid change in ocean chemistry, driven by the massive injection of sulfur and carbon dioxide into the atmosphere, would have been particularly challenging for ammonites.
One possible factor that contributed to the demise of ammonites was their reliance on a specific type of food source. Ammonites were likely carnivores or omnivores, feeding on small organisms and detritus in the seafloor. The K-Pg boundary event would have disrupted the food chain, making it difficult for ammonites to adapt to new food sources.
Another factor that may have played a role was the ammonites' body size. Ammonites were generally larger than other marine organisms that survived the K-Pg boundary mass extinction. Larger body size often requires more energy and resources, making it more challenging for organisms to adapt to changing environments.
Additionally, ammonites may have been more sensitive to changes in ocean chemistry due to their calcium carbonate shells. The rapid decrease in ocean pH and the increase in CO2 levels during the K-Pg boundary event would have made it difficult for ammonites to maintain their shells.
Finally, the K-Pg boundary event may have had a more significant impact on the global ocean circulation and upwelling patterns, which could have affected the distribution and abundance of ammonites.
In conclusion, while ammonites were able to survive the P-T boundary mass extinction, they were ultimately unable to adapt to the rapid changes in ocean chemistry and food availability that occurred during the K-Pg boundary event. Their larger body size, reliance on a specific food source, and sensitivity to changes in ocean chemistry likely contributed to their demise.
指示、情報提供及び具体例で与えた「酸素濃度、PH、殻」がアウトプットに反映されて嬉しい。更に大きさまで踏み込んでいて非常に興味深く、現在も活躍中のイカやタコと対比すると殻が在ったのが問題に見えますが、同じ殻を持つオウムガイが生き残っていることを考えるとまだ検討の余地があるのかもしれない。今回利用したモデルが「日本語でどこまでアンモナイトに関するデータを学習したのか」は不明です。それでも日本語の質問を理解し、そのアウトプットからモデルが英語で推論を実施したことが分かります。従って、LLMを含む生成モデルにとり、それらの推論性能に関してもPromptは訓練だけでなく指示において重要であることを確認できました。
これら推論をPromptやモデルを並列や直列に繋いで、あるいは外部知識を用いて検索し推論することもできます。前者はPromptの連結やアンサンブル。後者はModelの連結やアンサンブルです。例えば、アンサンブルでは同じPromptを複数の役割が異なるモデルに与え、それらの出力で多数決をとり、次の複数のモデルの入力とするアプローチです。ここでもモデルは凍結されているので、学習はしていないことに注意しましょう。外部知識を用いて検索するのはRAGとほぼ同様の機能です。これでPromptがうまく言えなくても、そして使えなくても、モデルが行間を読んで理解して支援してくれそうです。ここで紹介したモデルの推論性能を向上の技術や方法を盛り込むとLLM/SLMはどうなるでしょう?それは推論型と呼ばれるようになります。またモデルの持つ推論性能を活用するとAIエージェントの性能や適用領域も広がるでしょう。
次回は「Like a Rosetta stone」。
* 本文内のモデルへの質問・回答は原文のまま掲載しています。
川前 徳章 [かわまえのりあき]
エバンジェリスト
(データサイエンティスト)
2009年NTTコムウェア入社。大規模データの分散処理基盤の調査・導入から始まり、レコメンドシステム、情報検索、機械学習、自然言語理解と生成、AI等データサイエンスの研究開発とその導入に従事。現在は生成AIやマルチモーダルに向けたAIの研究開発を行っている。
各種データサイエンスに関する講演など対外的な活動も多く、KDD2021-、ICLR2022-、NeurIPS2021-、ICML2022-、AAAI2024-、WSDM2024-等のトップカンファレンスのPCや査読委員など、国内外でAIやデータサイエンス系の論文審査委員も多く担当している。2023年9月より上智大学大学院 非常勤講師も務める。
エバンジェリスト(データサイエンティスト)
コラム一覧