きしだ氏の自己紹介

きしだなおき氏:今日は「ChatGPT」などの言語モデルがどのようにシステムで使えるかという話を、概要レベルでやりたいと思います。まだ細かい知見は溜まっていない……。たぶん世界中でまだ知見が溜まっていないので、今は知見を溜めていくところだという話をしたいと思っています。

まず自己紹介です。LINE Fukuokaで働いています。役職的にはDeveloper Relationsなので、別に仕事でLLMを触っているわけではないです。Twitter(現X)は@kis(というID)でやっていて、『プロになるJava』というとても良い本を書いているので(笑)。もしJavaを勉強したい人がいれば、よろしくお願いします。

「ChatGPT」という言葉が意味する3つのこと

本題です。もうここで聞いているみなさんはChatGPTがだいたいどんなものかは知っていると思うので、概要というか、まとめですね。

ChatGPTという言葉がちょっと難しくて、わりと紛らわしいんですよね。ChatGPT(という言葉)が意味するものが3つあります。まずはサービスとしてのChatGPTです。チャットを行うやつ。これがいわゆるChatGPTだと思います。ただシステムの開発というか、エンジニアの観点からはもう2つあります。

まずAPIとして。ブラウザで人間が言葉を入力して返ってくるのを待つやつではなくて、APIとして、プログラムからChatGPTを呼び出すというものがありますね。

あと言語モデルとして。つまり、サービスとしてのChatGPTとか、APIとしてのChatGPTのバックグラウンドで動いている、核となる技術です。その言語モデルとしてのChatGPTがあります。

よく言われていますが、ChatGPTはTransformerというものを基盤にして開発された言語モデル(です)。GPTのTはTransformerですね。Transformerというのは、文章のどこが大事かに注目するというのがいいところだったので、性能が向上したと言われています。

実際にはGPT-4とGPT-3.5-Turboという2つのモデルがあります。サービスとしては(GPT-3.5-Turboは)無償で利用が可能です。APIだとGPT-4とGPT3.5のどっちかを選ぶ。両方課金があるけれど、GPT3.5のほうが安いし速いですね。

ChatGPTで何が変わったか

ChatGPTで何が変わったか。ChatGPTが出現したことで、AIの話が現実的になってきていますよね。言語モデル、自然言語処理というもの(の話)が、2022年11月までは研究者のものだったと思うんですけれど。ごく一部の人しか知らなかったものが、一気にいろいろな人が知るようになって、現状は技術者がいろいろいじっている感じになっています。だから、研究段階から具体的な需要を満たす段階になってきた。僕もその1人ですが、いろいろいじくっていますね。

それから、日本でも独自モデルを作ろうという動きが活発になっています。前からもちろんあったわけですが、それがどんどん活発になっていて。例えばスーパーコンピューターの「富岳」で言語モデル開発ができるように、いろいろな基盤を整えていこうという話だったり。あと、日本語特化モデルをみんなたぶん作っていたと思うんですが、バタバタと発表をしてきていますね。

(スライドを示して)ここには書いていませんが、法律というか、そういった整備のお話も出てきています。

ChatGPTの3つのリスク

なので、リスクの議論というものも始まっています。ChatGPTが出てくるまでは、自然言語モデルのリスクとかの議論もあまりありませんでした。もちろんChatGPTだけではなく、Stable Diffusionみたいな画像生成のモデルも含めて、リスクの議論が活発になってきていますね。

リスクとして3つ挙げられます。著作権の問題と個人情報の問題、プライバシーの問題。あと有害情報の問題があります。どの問題もAIのモデルを作るという観点と、AIのモデルを使うという観点の両方ありますが、モデルを作るという観点では、日本の著作権ではやりやすくなっています。

ぶっちゃけて言うと、利用時の著作権の問題は、人間の手による創作と基本的には変わらないですね。著作物というのは思想や感情を創作的に表現したものです。だから、思想や感情が残っていれば著作権を侵害しているみたい(なこと)になっていて。

その観点は変わりませんが、AIによって何が変わったかというと、ものすごく手軽に作れるようになって、ものすごく量が多くなってきたというのがあります。このあたりが議論になっています。

あと、個人情報の場合は、「ChatGPTのサービスを利用する時に、個人情報を含めてしまうと問題ですよね」ということが今は主に議論されていると思います。

サービスとしてのChatGPTの場合は、「使った履歴も学習に使うかもしれないよ」と言っているので、意図せずそのモデルに含まれてしまって、誰かが使った時に出てきてしまうという問題が考えられています。

あと有害情報ですね。これは利用する時に出てくる問題ではありますが、作る時にも考えないといけない問題です。一番は、モデル作成時に偏りがあって、なんらかの偏りのある返答をしてしまう。例えば「この医者はどういう考えをしていますか?」と言った時に「彼はこういうふうに考えています」。つまり彼女ではなくて彼はと言ってしまう。「医者というのはだいたい男の人だ」みたいな偏りがあったり。

あとは思いがけない出力。ちょっと暴力的だったり、倫理的とかバイアスのかかった出力が出てくることがあるという問題が議論されていますね。このあたりの議論も今始まったばかりなので、これからどんどんフィックスしていくんだと思います。こういった議論があるということは知っておいたほうがいいと思います。

ChatGPTの使い方

じゃあChatGPTの使い方。言語モデルとしてはもうChatGPTが代表的というか、かなりすごいので、まずChatGPTをちゃんと使うのは大事だと思っています。

使っていく場合に、今回はプライベートとか教育とかではなく、業務で(使う)ということを観点にする。(かつ)システム的に使うということを観点にしたいと思います。そうすると、サービスとして使うのとAPIとして使う(という2つ)がありますね。

サービスとして使うというか……。利用方法。基本的な考え方として、ChatGPTだけではなく、言語モデルは言語の計算機だと考えたほうがいいです。

よく「対話型AI」と言われますが、対話ではなくて、文章を突っ込んだらなんかいい感じの処理がされた文章が返ってくる言語の計算機だと考えたほうがいいです。だから、対話とかチャットにとらわれてはいけない。

その時の文章が、自然言語だけではないというのがけっこう肝ですね。文章の変換とか文章の解析、一般知識の解説、あとはテキスト生成。だいたいこんな感じの区分ができると思いますが、例えば文章の変換でも、プログラムの変換、JavaからPerlへとかそういった変換ができたりするというのを、具体的に見ましょう。

文章の変換。代表的なのが、箇条書きを書くとメールの文章を作ってくれるとか、文章を与えると要約してくれるとか。あとは文体の変換だったり、翻訳みたいなものがありますね。

今、「僕のブログを要約してください」ということをやっています。GPT-4に課金した場合、向こう側でWebアクセスをして、ちゃんとブログを見にいってくれるようになっていて、わりといい感じに要約をしてくれています。

やはり驚くほどちゃんとわかっているなと。けっこういっぱい無駄なことを書いているんですが、一番重要なことがちゃんと取り出されているように思います。

次に文章の解析ですね。与えた文章がどういうものかを解析する使い方があります。「この文章はだいたい意味が通っていますか?」という妥当性のチェックだったり、特性の判断、あとプログラムの解説というのが(できることとして)ありますね。

(スライドを示して)例えば、この続きに「このブログの著者の技術レベルを推定してください」と言うと、なんか(出力したものに)わりと褒められて(いて)うれしい感じになっているんですが(笑)。「どういう特性があるか」みたいなことをけっこうちゃんと判断してくれますね。

あとはプログラムの解説。長いコードを出してくれたので字が小さくなっていますが……。これはJavaで書いたWebサーバーのコードですね。TCP/IPの通信をやって、Webサーバーのコードを書いていますが、ちゃんと一発目で「簡易的なHTTPサーバーを起動します」と書いてくれていますね。一字一句を解説してくれるのではなくて、「プログラムの意図がなんであるか」ということをわりとちゃんと言ってくれています。

こういったものは「こういうコードはこういうプログラムだ」という、いろいろな解説記事があるので。というか逆に、「HTTPサーバーを作るとこんなコードになります」みたいな解説記事がいっぱいあるので、そういったものから類推していると思うんですけど。わりとちゃんとプログラムの意図をわかってくれるのがすごいところですね。

あとは一般知識の解説。賢い検索のように使うこともできます。Googleで検索するといっぱい候補が出て、そこを自分で見にいかないといけない。当たりが出るまでいろいろな記事を全部見ないといけないんだけど、ChatGPTは「なんのために知りたいのか」という、「知りたい」というコンテキストを与えると、すごく適切なものを返してくれますね。

一般的な業務知識とかもかなり詳しいので、ちゃんと教えてくれます。(スライドを示して)これはプラグインを使って図にしてもらっているんですが、ちゃんとこうやって図を描いてくれたりもします。なので、「知りたいことがあったらとりあえず聞く」みたいなことはすごくいいです。ただ嘘をつくこともあるので、ちゃんと検証は必要です。

あと文章の生成です。物語とか詩とかを書いてくれるんですが、プログラムをかなり書けますね。(スライドを示して)これはウィンドウを出すプログラム。ボタンを押したらHelloと出すプログラムをやってもらっているんですが、かなりちゃんとしたコードを出してくれます。

特にJavaのコードは世の中にかなりあるので、Javaに関してはちゃんとしたコードを出してくれる実感があります。よく知らなくてもわりとちゃんと書いてくれる。なので、みんな試すといいと思います。

どのようなシチュエーションで使えるか

じゃあどういうシチュエーションで使えるか、ユースケースがあるかという話です。「その時にどういうことを与えればいいか」みたいなことが、今は「プロンプトエンジニアリング」みたいな言葉で話題になっていますね。

ChatGPTとかLLMって、プロンプトによって違うし、LLMならではの癖みたいなものがけっこうあるんですね。というか、実際はLLMならではというよりも、人間にもそのように言ったほうがいいみたいなものが明確になってきている、明示されているという感じです。人に命令を与える時もこのようにすればいい。たぶん適切に命令を解釈してくれる。

1つ代表的なものがあって、Chain of Thought、CoTと呼ばれるものです。これは何かというと、考え方を提示すると正しい答えが出やすくなる(ものです)。

(スライドを示して)左側にブラブラブラblah-blah-blahと(いろいろ)書いて、(最後に)「答えは11です、ではこれは何でしょう?」と言ったら、間違った答えを言います。1回目の例として与えるものに、ちゃんと考え方を1つずつ書いておくと、同じように考えてくれて正しい答えが出るという、CoTというものがあります。

図は「Chain-of-Thought Prompting Elicits Reasoning in Large Language M「Chain-of-Thought Prompting Elicits Reasoning in Large Language Models」より

さらにZero-shot-CoTといって、「実は『Let's think step by step』と言うだけでいい」という話があって。「1つずつ考えて」と言えばちゃんと答えてくれるというものもあります。

例えば「ちゃんと専門家のように答えてください」みたいな言葉をつけるとちゃんと答えてくれるとか、いろいろなテクニックがあるんですが、そういったものはけっこういろいろなところに書かれているので、調べてみるといいと思います。

図は「Large Language Models are Zero-Shot Reasoners」より

(次回につづく)