登壇者の自己紹介

蒲生弘郷氏:「ChatGPTの10ヶ月と開発トレンドの現在地」というタイトルで、蒲生から発表します。よろしくお願いいたします。

ちょっと私の自己紹介です。Azure OpenAI Champという立場で、外部発信などをやっています。いっぱい自己紹介をしていきたいところですが、本日はあまり時間もないので省略して、次にいきたいと思います。

今回は、けっこう開発者向けの発展的な内容を扱っていきますが、もし基本的な内容から確認していきたいという場合には、「Azure OpenAI 大全」というものを公開していて、リンクを貼っておくので、そちらの資料を併せてご確認いただければと思います。

「ChatGPT」の登場から今までを振り返る

では、本日のテーマとして「ChatGPT」の登場から10ヶ月(※登壇当時)ということで、2022年11月から登場したChatGPTに関する技術について少し振り返った上で、それぞれの観点について少し語っていければなと思います。

まずは、最初に登場したChatGPT。これの前も画像生成系のAIなどで流行っていたところはありますが、高度な文章生成ができるということで、よりモメンタムが巻き起こることにより、プロンプトエンジニアリングが各所で話題になってきたというところがGPTの始まりでした。

そこからほどなくして、「Bing Chat」と呼ばれる、検索エンジンとWeb検索を組み合わせて、情報の精度を高めたチャットサービスが弊社から登場しました。

Groundingという技術を使って情報を取得してきて、それをGPTに付与して答えさせるという、いわゆるRAGアーキテクチャを採用した作りで、このBing Chatが現れると同時に、GPTに足りない知識を外部から付与していくという考え方が浸透しました。

それから、こうした検索エンジンだけではなく、外部のAPIなどと連携させていくPluginという考え方が2023年3月頃に登場しました。これと同時に「GPT-4」も登場しました。

その後に、そのPluginとの連携を、より高度にしていく、Function CallingとFine tuningといった追加機能が出てきました。

つい先日(※登壇当時)、新しいUIがChatGPTのOpenAI社から発表がされました。「GPT-4V」という、画像を取り込んだ上でその記述や説明ができるといった新たな機能や、「Whisper」などを組み込んだ、画像だけではなく音声などを文字として取り込んだり、逆に、それを返答する時に音声として返していったりなど、このような機能が登場してきたのが、この10ヶ月の流れです。

プロンプトエンジニアリングの基本概念と現在地

それぞれの観点を少し見ていきます。プロンプトエンジニアリングについて。プロンプトエンジニアリングは、もともとプロンプトを、きちんと具体的に簡潔に書く、Prompt Processing……これは私が作った独自の名称ではありますが、いわゆるユーザー側でのTipsみたいなもがどんどん流行していったというのは、先ほどお伝えしたとおりです。

そこに加えて、いくつかの基本概念があります。1つは、Few-shot Learning。プロンプトに対する質問と答えの例を付与してあげると、その形式に合わせて答えられるよ、という例です。

あとは、Chain of Thought。これは、名前は難しいのですが、段階的に考えて回答しなさいと。要は、中間生成物を出した上で回答しなさいとGPTに指示をすることにより、より精度のいい回答が得られるという考え方です。

それから、RCIという、GPTの出力をGPT自身に吟味させて修正して、再帰的に修正をかけていくことによって、いい回答が得られるという考え方。

ほかに、AIのAgentみたいなものを実装していきたい場合に、ReActと呼ばれるテクニックを使っていくというところが大きな基本概念として、以前、CTO協会さまのイベントの中でお伝えしたようなものになります。

これの現在地なのですが、それぞれの基本概念がアップデートされてきています。

CoTは、CoT-SC、Self-Consistencyなんて言いますが、中間生成みたいなところを並列化させてアンサンブルしていくことによって、より精度を高めていくというものであったり。

あるいは、ToT(Tree of Thoughts)と呼ばれる、並列化した後に、思考プロセスが適切かどうかを自己評価させていくアルゴリズムが出てきたり。

あるいは、この問題解決の過程をどう吟味していくのか。アルゴリズムを指定させて、効率化させていこうという考え方であるAoTというものが出てきたり、さまざまな発展を見せています。

加えて、RCI。再帰的な修正をして精度を高めていく方法については、つい先日(※登壇当時)Metaから論文が出ていますが、CoVeというように、回答を直接出すのではなく、その検証方法みたいなところをGPTに1度検討させて、その答えを出させてから、最終的にすべてを総合して答えを出していくという手順を踏むことによって精度が向上する。

CoTとRCIを軽く組み合わせたようなものが出てきていて、それぞれのアルゴリズムをベースにしながらも、新たなプロンプトエンジニアリングの手法が、学術的にも評価をされつつ、新しいものが出てきているというのが現在の状況です。

あと、ReAct、Agent周りにおいても、ReActは相変わらずの主流ではありますが、弊社のライブラリである「Semantic Kernel」の中のPlannerという、実行計画を立てていくようなものについては、ReActのような動きではなく、いったん実行計画をGPTに一通り出させた上で、実行をかけていくという違うアプローチが取られていたりなど、そういうちょっと派生が出てきているというところがプロンプトエンジニアリングの現状です。

複数GPTの連携。こういったGPTの出力、プロンプトエンジニアリングのテクニックが複雑化してくると、どこでプロンプトを処理して、どこでWeb検索を走らせて、どこで回答を作らせて、それぞれのプロンプトはなんなのか、というところの管理が非常に重要になります。

こういった、AIのワークフローを管理していく機能として、「Azure Machine Learning」の中にPrompt flowという機能が出てきています。

単にAPIとして使っていくだけではなく、やはり補助機能も充実してきているというところが、現状の開発トレンドになってきています。

特にこのPrompt flowにおいては、Azure Machine Learningの特徴である「VS Code」との連携も基本利用が可能になっていて、VS Codeとの連携ができると「GitHub Copilot」と組み合わせた開発ができるので、これも非常に効率化に寄与してくるものになっています。

知識の獲得の手法は依然としてRAGが優先

GPTの知識を獲得していくというところの現在地についてお話しします。

GPTの知識獲得においては、RAGアーキテクチャを先ほどご紹介したように、非常に重要になってきています。

このRAGアーキテクチャですが、簡単に申し上げると、正しい知識が入っているドキュメントをストレージから分割した上で、それぞれ格納していって、この分割したデータの中には、本文のテキスト文やメタ情報、ファイルの格納先みたいなところを入れた上で、検索できるような状態にして持っておきます。

ユーザーから質問があって、もともとのGPTには入っていない知識が必要な場合には、検索エンジンを調べさせて、その結果を踏まえた上で回答させるように持っていくというところがRAGアーキテクチャの、ざっくりとしたイメージになっています。

この知識の獲得。LLM登場以前のマシンラーニングにおいては、知識と言われると、やはりFine tuningのイメージが強かったのですが、少なくとも、GPTのAPIで提供されたFine tuningは、「Azure OpenAI」ではもう少しだけお時間いただきますが、知識を獲得していくという手法においては、依然検索エンジンと組み合わせて、知識獲得を優先していくのがいいというところで、今回、簡単な比較表を出しました。

データセットに当然依存するところはあるので、そ状況によって変化するところはあるかと思いますが、1つ指標として、Fine tuningがどういうものか、RAGがどういうものか住み分けをした上で、どっちを使っていくのか、あるいは両方使っていくのかを判断いただければと思います。

ベクトル検索から検索の精度もどんどん上がっている

それから、この検索を組み合わせていくということにおいては、当初はやはりベクトル検索が非常に話題になったのですが、この検索方法がパワーアップしてきています。

Azureの「Cognitive Search」においては、このベクトルサーチだけではなく、キーワード検索とのハイブリッド検索。

あるいは、ハイブリッド検索をした上で、さらにMicrosoft独自のRerankの仕組みを使って並び替えをしてあげるというやり方によって、ぐんぐん精度が上がっていくということが弊社の検証でわかってきています。

なので、単純にこういったベクトル検索というところから、検索の精度もどんどん上がってきているというところを踏まえた上で、どういうエンジンを選んでいくのかも含めて検討していくのがいいのかなと思います。

ここはあまり時間がないので、そこまで詳しくはお伝えしませんが、先ほどドキュメントの分割をしていく必要があると申し上げました。その分割をどれくらいの幅にしていくのか、あるいはデータ形式、中に入っている表や画像をどう組み込んでいくのかというところも精度に影響してくることがわかってきています。

こういったところの検証がされているリンクがあるので、ぜひご確認ください。もしくは開発の過程においてアーキテクトと相談していただければと思います。

Plugin開発の現在地

そして、Plugin開発の現在地を見ていきます。出力形式の限定。今まで、ChatGPTにおいては、なにかPluginを呼び出していく場合、もともとGPTに入力されたユーザーからの内容に沿って、必要なパラメーターを抽出していくみたいな作業が必要だったんですけれども。

これを、やらせるために左側に、システムプロンプトとFew-shotを書いてみました。

実際、これをGPTに出力させようとしてみると、本当はパラメーター抽出だけしてほしいのに、実際にはこのパラメーター抽出をしていくJSONで括弧を最後入れ忘れたり、JSONだけ出してほしいのに、その後に要らない会話文を出してきたりすることによって、なかなか、こことの連携がうまくいかなかったというところで。

システムプロンプトの中で、「余計な出力をすると世界が滅亡します」とか、けっこう強めな言葉を書いて、出力を固定化しようとしてもうまくいかないみたいな課題感がありました。

今現在どういう機能が増えてきているのかというと、この出力形式限定でいろいろな機能が出てきています。

Function Callingと呼ばれるAPIの機能として提供されているのですが、呼び出したい関数の定義を一緒に投げ込むと、JSONだけを返してくれるという機能とか、先ほどもあったような、出力結果の安定のためにFine tuningがけっこう有効になってきたり。

あるいは、Azure OpenAI Serviceでつい先日(※登壇当時)またリリースされましたが、「gpt-3.5-turbo-instruct」という、会話に特化しておらず、指示だけをきちんと聞いて答えてくれるという、いわゆる、しゃべりすぎず、指示に従ってくれる回答形式として出してくれるgpt-3.5-turbo-instructというモデルが出ました。

こういった技術が新しく出てきているので、よりPluginとの連携がしやすくなったというのが現状です。

テキスト入力UIを覆す新しいスタイルに変わっていく

ここから最後は、個人的な予測がかなり含まれるのですが、先日(※登壇当時)リリースされたGPT-4Vや、新しい今後の動きについて、個人的な見解を少し話して終わりにさせていただければと思います。

GPT-4Vの登場で見えてきたもの。GPT-4Vは、非常に強力な技術であるにもかかわらず、実はOpenAIはこれを前面に出してアピールしていないんですね。

(OpenAIが)どういう言い方をしているかというと、「ChatGPTは、見るようになりました、聞くようになりました、そしてしゃべれるようになりました」といったように、see、hear、speakという表現を使っています。

単純に技術を紹介したいというわけではなく、このAGIというものがどういうふうに、未来で動作していくのかというところ、UXのコンセプトを今回示したものなのかなと私は理解をしました。

これがどういうことかというと、私たちは、たぶんもう慣れきってしまってその自覚もないと思いますが、従来、テキストの入力を前提にしたUI、OSであったりデバイスであったりアプリであったりというものを使っています。

なので、当たり前のように電車の中で、デバイスやアプリをいじったりしています。

今何が起こっているのかというと、このテキスト入力を前提としたUIの中にGPTを組み込むと、いわゆるCopilotになったり、AIの新しい機能が追加されたりという感じで、これはこれですごく便利ではあるものの、一方で、やはりずっとテキスト入力で、AIと対話するのは、けっこう大変だよねというところも、やはりみなさん気づいているところかなと思います。

そういうことを踏まえて、私の予測ですが、いずれ、AIというものは、この文字入力の前提を覆して、画像、音声を中心に、やり取りができるような新しいUI(が登場し)、今までのテキスト入力UIを覆していく新しいスタイルに変わっていくと思っています。

テキスト入力は、補助的に使うというところで、基本はAIとの対話をベースにして人の行動は変わってくると。

なので、ハンズフリーで「どこか行きたいんだけど」とか「目的地はどこなの? 場所教えてよ」みたいなかたちで、(AIと)しゃべっていくだけで、AIが裏で勝手にアプリを起動して人の案内をしてくれるというのが、わりと現実味を帯びてくるんじゃないかなと思います。

といったように、AIというものは単純に、補助的に入っていくだけではなく、私たちが持っているデバイス、OS、アプリそのものの作りを大幅に変えていってしまう力があるのかなと、私は、この発表を見てちょっと思いました。

ということで、今後音声サービスも非常に重要になってきて、Microsoftにおいても、Whisperのモデルが「Azure AI Speech」の中に入ってきて、話者識別とタイムスタンプを出してくれるという機能を追加した上で提供しています。

こちらは、まだサービスとして提供されていませんが、「VALL-E」のモデル。これは、音声合成の技術ですね。非常に高度なText to Speechのモデルで、これがOSS版が出てきて、実際ネット上でもけっこう話題にはなっていました。

音声系のサービスは、今後注目されていくので、新しくUIを作っていく、UXを変えていくというところを前提に、世界が変わっていくんだなみたいなイメージしていきながらここを進めていくと、より可能性を感じられるんじゃないかと個人的には思っています。

ということで、こういった新しい技術が出てきているところを、今日はたくさんお話ししましたが、マイクロソフトのエンジニアがですね、直接、私も含めてご支援させていただくサービスが出てきているので、もしお困りなようでしたら、お近くのマイクロソフトのスタッフにご連絡をいただければと思います。

ということで、本日、少し長くなりましたが、お聞きいただきましてありがとうございました。