2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
GPTの利用について(全1記事)
リンクをコピー
記事をブックマーク
丸山拓己氏:大規模言語モデルの応用についてお話しします。AISC(AI Strategy Center)の丸山です。よろしくお願いします。
本日の目次です。まず、Prompt Engineeringについてお話しします。その後、大規模言語モデルの使用上の注意、主にプロダクトを使う時にどういう点に注意したほうがいいかについてお話しします。最後に、関連リソースやツールにフォーカスしてお話ししたいと思います。
簡単に自己紹介をさせてください。丸山拓己です。よろしくお願いします。青山学院の大学院を卒業後、2021年にGA technologiesに新卒で入社しています。現在は主に、新しく始めたM&A仲介の業務支援ツールの開発を行っています。
これ以降の発表について何点か、僕の感覚で一般ユース向けとプロダクト向けに分けてラベル付けしているところがあります。ただ、このラベルはどちらか一方にしか使えないというものではなく、「どちらにも使えるけど、強いて言えばこっち」という感覚で付けているので、絶対こっちにしか使えないというわけではないことをご承知おきください。
それでは、Prompt Engineeringについて本題に入らせていただきます。そもそもPrompt Engineeringとは何かというと、大規模言語モデルです。これから「LLM」という単語がいっぱい出てくると思うのですが、大規模言語モデルは、質問文(Prompt)の書き方によって質問文に対する精度が大きく変わります。与える質問文によって大規模言語モデルの出力を制御しようという試みをPrompt Engineeringと呼んでいます。
では、どんな時に役に立つのか。例えばChatGPTを使っていて、「タスクを与えたのにぜんぜんうまくいかない」または「出力自体はいいんだけど、出力のフォーマットをもうちょっと統一したい」、「自分好みの出力にチューニングしたい」という時に、Prompt Engineeringを使用するとこういう課題を解決できるかもしれないのがPrompt Engineeringの良いところです。
では、どんな手法があるのかをお話しします。まず一番有名な「Few-shot Prompting」と呼ばれる手法ですね。これは、いくつかの例を質問文に埋め込むことで出力をコントロールする手法です。
(スライドを示して)スライドのグラフの青色が例を入れなかった時、オレンジ色が例を入れた時のQ&Aの性能になるのですが、ある程度例を入れた出力のほうが精度が上であることを示しています。
具体的にどういうことなのか。この例であれば、英語からフランス語に変換してください、翻訳してくださいというタスクなのですが、英語の例の後にフランス語を入れる。例をいくつか入れて、その後に実際に聞きたい内容について質問する。これによって精度を上げているのがFew-shot Promptingです。
では、このFew-shot Promptingがなんにでも使えるかというと、ある程度苦手なタスクが存在しています。その1つが、数値計算を含むタスクです。例えば「契約書中の契約開始日と契約期間だけ書いてあるところから、契約終了日を算出してください」みたいなことはあまり得意ではありません。
もう1つは論理的な思考を含むタスク。「文書中の内容で、矛盾したことを言ってませんか?」という、ある程度論理的思考が必要なタスクはあまり得意ではないことが研究でわかっています。
では、こういう課題をどうやって解決するか。ここで出てくるのが「Chain-of-Thought Prompting(CoT)」と呼ばれる手法です。これは、推論過程を含めた例をPromptに追加することで、モデルにも推論過程を出力させ、より性能の良い出力を得ようという試みです。
具体的に、どういうことなのか。(スライドを示して)これがCoTを使っていないPrompting、つまり普通の聞き方です。Few-shotと同じように、まずは例を提示します。
ここではロジャーが持っているテニスボールの数を数えていて、「答えは11個」としか書いていません。そうすると、次のタスクの「カフェにいくつのりんごがありますか?」という質問に対しては、めちゃくちゃな答えを返してきます。
では、CoTはこれをどうやって解決したのか。(スライドを示して)この青色で書いてあるところ、先ほどとの差分がこの答えのところです。この答えを、段階的にどう計算していけばいいかをまず例示します。そうすると、モデルも同じように段階的に考えてくれます。これによって精度を上げるのがChain-of-Thoughtの仕組みです。
このChain-of-Thoughtの発展形が、Zero-shot CoTと呼ばれる手法です。今までChain-of-Thoughtでは例を入れる必要があったのですが、例を入れないで、文の最後に「Let’s think step by step」、日本語で「段階的に考えていきましょう」という文章を追加することで、モデルに推論過程を出力させて、より精度の良い回答を得ようという試みです。これによってCoTでは必要だった例が不要になります。
この手法は、CoTをやるところまでは同じなのですが、その出力を複数個受け取ります。そして、その得た答え……(スライドを示して)ここでは18ドルとか26ドルとか、いろいろな答えがあるのですが、簡単に言うと、これを多数決で決めるという手法です。本当はもう少しこのへんにいろいろな工夫があるのですが、今回は簡単にするために多数決を取っていると理解してもらえればと思います。
ここまで、Chain-of-Thoughtとその発展形のお話をしてきましたが、それでもまだ解決できない課題が存在しています。それは何かというと、そもそも構造上、最新の情報や外部のデータソースを使用できないようになっています。
大規模言語モデルは、基本的に学習時までの知識しか持っていないので、ChatGPTであれば2021年9月までの情報しか知らないことになります。なので、日本がWBCで優勝したことは知らないわけです。
また、外部のデータソースも使用できません。例えばWikipediaやGoogleで検索、もしくは自社のデータベースを参照できないというデメリットがあります。
プロダクトに組み込む時には、こういうものも使いたいと思うと思います。それを解決するのが次のReActという手法です。
これは、大規模言語モデルがどうやって答えを導き出すかを考える過程で、外部のデータソースを参照できる手法です。思考と行動の2つのプロセスに分けて大規模言語モデルに考えさせて、行動の際に外部のデータソースを触りにいける仕組みになっています。
具体的に、論文中に出されている例を紹介します。「シルク・ドゥ・ソレイユのショー『ミステール』が行われているホテルは、部屋は何室ありますか?」という質問ですね。これは、(スライドを示して)正解ラベルが付いているのですが、実はもうこの正解ラベルも古くなっているみたいです。
これに対して、大規模言語モデルがReActを使用してどう答えを導き出すかというプロセスを追っていきます。
まず、この入力が与えられた時に大規模言語モデルはどうやって解けばいいかを考えた時に、「ミステールという単語を検索して、開催されているホテルの部屋数を調べればいい」という出力をします。その上で「『Cirque du Soleil show Mystere』で検索する」ということをします。
ただ、外部のデータソースを探しにいった結果、この「『Cirque du Soleil show Mystere』は見つかりませんでした」という結果が得られました。
この結果を加味して別の検索をしましょう。大規模言語モデルは「ホテルは『Mystere(Cirque du Soleil)』で調べれば出てくるんじゃないか」と判断して、実際に「Mystere(Cirque du Soleil)」で検索をします。
そうすると、開催されているホテルが外部のデータソースから得られました。開催されているホテルの名前は「Treasure Island Hotel and Casino」だとわかりました。
大規模言語モデルはその結果を踏まえて、「次は『Treasure Island Hotel and Casino』というホテルについて調べて部屋数を確認すればいい」と思いつき、それを行動に移します。
検索した結果、2,884室の部屋と220室のスイートルームがあることがわかったので、これを足して3,104室という答えが得られます。これがReActと呼ばれる手法です。以上でPrompt Engineeringの話は終わりです。
続いて、プロダクト使用時の注意点についてお話しします。いろいろな注意点がありますが、今回の発表ではスライドの3点について説明します。
ご存じかもしれませんが、ChatGPTや大規模言語モデルは間違った出力をすることがあります。
(スライドを示して)これは「ITANDI」について聞いた結果です。それらしいことを言っているように見えますが、「自動車メーカーや製薬会社などの大手企業からの受託開発を手がけています」。こんな事実はないので、これは事実ではなく嘘の出力です。
こういう間違った出力をすることが、大規模言語モデルにはよくあります。英語で「Hallucination」と言います。
この問題を完全に解決するのは難しいのですが、緩和する方法はいくつか提案されています。1つは、わからないことや自信のないことは、Promptの時点で「わからない」と出力させてしまう方法です。
これをさらに強化するために、Few-shot Promptingを使う際には、わからない時の例を追加します。例えば「原子とは何ですか?」には答えられるけれど、「アルバン・ムンツとは誰ですか?」と言ったら「?」、わかりませんと返すというPromptingを追加する。
また少し違う解決の方法として、与えるPromptの中に「この情報をもとに以下の質問に答えてください」という、もとになる情報を特定できる時はそれを与えるのも、1つの解決策です。
続いて、バイアスや攻撃的な出力をすることがあるという話です。前半で説明したように、InstructGPTによってAlignmentチューニングが施されました。これによって攻撃的な出力はある程度抑制されたのですが、まだまだ好ましくない出力をすることがあります。例えば価値観の偏った出力や、暴力的や性的な出力をするケースが存在します。
これをどう解決するか。出力をそのままユーザーへ提供するのではなく、チェックを入れます。例えば大規模言語自体を言語モデルに判定させるという方法もありますし、Hugging FaceやOpenAIが出しているAPI、EvaluateモジュールやModeration APIと呼ばれるようなものを使用してチェックを入れるのも、解決策の1つとしてあると思います。
最後に悪意のあるユーザーの操作についてです。これは、2つ例を挙げます。
1つは「Prompt Injection」と呼ばれる手法です。これは、ユーザーが事前に与えられているPromptを無視させる指示を与える手法です。そうすると、大規模言語モデルは時々そのプロンプトを無視してしまいます。これによって、本来プロンプトで制御していたはずの出力を超えたなにかを出してしまうことがあります。
次は、「Prompt Leaking」と呼ばれるものです。これは、事前に与えられているプロンプトを出力させるというものです。これの何がまずいか。ユーザーが、サーバーサイドで持っているプロンプトなどを、「プロンプトやサーバーサイドで持っているから大丈夫」と思って安易に機密情報、個人情報など大事な情報を与えてしまうと、これによって抜かれてしまうことがあります。
この対策もいろいろ提案されています。例えば、ユーザーの指示を無視するプロンプトを与えたり、引用符などで囲むことも効果があると言われています。また、モデルにユーザーのプロンプトを実行していいかを一度評価させて、その結果を出力させる。その結果で、良い・悪いを判断する方法も提案されています。
最後に関連リソースやツールについて紹介します。時間がなくなったので、駆け足で紹介します。
1つは、「LangChain」と呼ばれるものです。これは大規模言語モデルを使用したアプリ開発の支援ツールです。Python版とTypeScript版があるのですが、いろいろな便利機能が入っています。また、更新自体がかなり頻繁に行われているので、今は機能がないと思っても後で機能が追加されるという点で注目のツールだと思っています。
もう1つは、「Prompt Engineering Guide」と呼ばれるものです。Prompt Engineeringについて、Web上で論文や実例と一緒にさまざまなテクニックがまとめられています。今回の資料も参照しているところが多いのですが、最近日本語版が公開されたので、ぜひ見てみてください。
今回話したのは、Prompt Engineeringとその注意点、関連ツールなどです。いろいろ話しましたが、この分野は今、本当に流れがめちゃくちゃ速いので、常にいろいろな情報ソースをウォッチしていくことが大事だと思います。ぜひおすすめの資料があれば教えてください。
私からは以上です。ありがとうございました。
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05