AI革命2023(4)~人間に媚びるInstructGPT~
■決定論と確率論
ChatGPTに、何か質問すると、何かしら答えが返る。
つぎに、同じ質問をしても、同じ答えが返るとはかぎらない。
一体どうなっている?
AIは機械仕掛けなのに、本当は気まぐれ?
ノー、ChatGPTは、「決定論」ではなく「確率論」に従っている。
決定論と確率論は、科学史上最大の謎だ。
マクロ世界の大理論「古典力学」は決定論を、ミクロ世界の大理論「量子力学」は確率論を支持する。つまり、物理学の2大理論が、真っ向対立しているのだ。
では、決定論とは?
入力が決まれば、出力は一意的に決まる。つまり、再現性は100%だ。
たとえば、算数。
「1+1」の答えは「2」だが、たまに「3」なんてことはない。
ところが、量子力学は決定論が通用しない。
たとえば、ボーアの原子モデル。
原子核の周りを、電子が周回しているが、電子の居場所が特定できない。A点にいる確率は90%、B点にいる確率は70%という具合で、確率でしか表せないのだ。
電子は、必ずどこかに存在するはずで、それを特定できないのはおかしい!
観測精度の問題?
ノー、理論上確定できないのである。
???
量子力学は万事この調子で、深掘りしても謎が深まるばかり。時間のムダ、ChatGPTに戻ろう。
ChatGPTも、量子力学同様、確率論に従う。
テキストを入力すると、回答の候補を確度付きでリストアップし、その中から回答を選択するのだ。ここで「確度」とは確かさを表し、値が大きいほど正解に近い(ChatGPTの意見です)。
たとえば、
回答A:確度90%
回答B:確度70%
回答C:確度50%
・・・
この場合、確度が最も高いのは回答Aだが、回答Aが選択されるとは限らない。選択される確率は90%で100%ではないから。だから、入力が同じでも出力が違うのである。
■AIは言葉を理解できるか?
自然言語処理は難しい。
だが、その難しさは、宇宙の真理にかかわるような根源的なものではない。人間の言葉の「曖昧さ」に起因する。
テキストは、無数の言葉が連なる長大なデータだ。しかも、同じ言葉でも、文脈によって意味が違う。そんな曖昧なルールで、文意を把握するわけだ。
では、ChatGPTはどうやって処理している?
まず、テキスト全体を「形態素」に分解する。形態素とは、言葉の最小単位で、一つの品詞に対応している。
たとえば「私はコーヒーが好きです。」は、7つの形態素に分解される。
①私(名詞)
②は(助詞)
③コーヒー(名詞)
④が(助詞)
⑤好き(名詞)
⑥です(助動詞)
⑦。(記号)
これが自然言語処理の一歩だ。
ところが、ChatGPTは言葉を人間のように理解していない。
たとえば「コーヒー」。
ChatGPTは、産地や効用は知っているが、コーヒーを飲んだときに湧き上がる「くつろぎ感」は知らない。コーヒーが飲めないから、当然だろう。
そこで、ChatGPTに意地悪な質問をしてみた。
【人間】人間がコーヒーでくつろぐ情景を、100文字以内で表現してください。
【ChatGPT】ソファに座り、手にしたマグカップから立ち上るコーヒーの香りに包まれる。心地よい温かさとともに、ひと息つく時間が流れる。窓から差し込む陽射しと、落ち着いた音楽が、くつろぎの空間を演出する。身体と心がリラックスし、ゆっくりとした時間が流れる。
あらら、知ってるじゃん。少なくとも、的外れではない。
コーヒーを飲んだこともないのに、「コーヒーのくつろぎ感」を理解している?
どういうこと、魔法か?
ChatGPTは紛れもない科学です。
だから、タネも仕掛けもある。
■言葉のベクトル化
ChatGPTに心ないウワサが流れている。
言葉の意味もわからずに、作文しているというのだ。
ウワサを流しているのは、AIの識者。じつは、プログラムを書いたことがないタダの評論家なのだが。
たしかに、ChatGPTは、言葉を人間のように理解していない。だが、別の方法で言葉を理解しているのだ。
どうやって?
言葉のベクトル化。
そう、高校で習う、あのベクトルだ。
たとえば、空間の位置座標は、ベクトル「p=(x,y,z)」で表される。xはx座標、yはy座標,zはz座標で、要素は「3つ」。この場合、ベクトルの次元数は「3」である。
ChatGPTは、言葉を、このベクトルに置き換えて処理しているのだ。
ただし、次元数は桁違い大きい。
ChatGPT本人に、次元数を聞いてみよう。
【質問者】ChatGPTの言葉のベクトルの次元数は?
【ChatGPT】GPT-3の場合、2048次元です。
つまり、ChatGPTは、1つの言葉(単語)を2048個のパラメータで管理しているわけだ。
パラメータは言葉の属性と考えるとわかりやすい。たとえば、人間なら、性別、国籍、職業・・・など。だが、これは「言葉の数値化」の便宜上の説明で、実際はとてつもなく複雑だ。必要な数学は「行列」程度なのだが、GPTの数学的行程は恐ろしくムズい。
というわけで、話をカンタンに、これだけはいえる。
ChatGPTは、2048個のパラメータを駆使して、言葉の概念を把握している。
つまり、ChatGPTは、「人間式」ではなく「コンピュータ式」で言葉を理解しているのだ。
それを一撃で理解する方法がある。
言葉をベクトル化するプログラムを書いて、それで言葉遊びをするのだ(訂正、二撃です)。
ただし、実際に、プログラムを書かなくても、以下の話を読むだけで99%は理解できます。ご安心を!
というわけで、まずはプログラムから。
キモになるのは「言葉をベクトル化」するプログラムだ。原理はカンタンだが、実際にプログラムを書くのはメンドー。
そこで、フリーのライブラリ「word2Vec」を使う。グーグルの研究者トマス・ミコロフらが、2013年に公開したプログラムだ。言葉をベクトル化し、言葉と言葉の関係を数値に置き換え、統計的に処理するスグレモノ。
ちなみに、word2Vecの言葉の次元数は「200」で、ChatGPTの「2048」には遠く及ばない。だが、原理は同じなので「言葉のベクトル化」を理解するにはうってつけ。
word2Vecを使ってプログラムを書くなら、プログラム言語はPythonの一択だ。
さらに、Pythonのプログラム開発環境を構築するには「Anaconda」がおすすめ。フリーだし、Pythonとライブラリ(word2Vecを含む)をまとめてインストールしてくれるから。このような環境構築のためのパッケージを、ディストリビューションという。Pythonやライブラリを個別にインストールするより、ディストリビューションを使う方がはるかにカンタンだ。
Python経験者なら「言葉をベクトル化し言葉遊びする」アプリは、1、2日で書ける。
アプリができたら、word2Vecに大量の文章を学習させる。
今回は、歴史コンサルで使っているデータ1.7GBを学習させた。Core7(8コア)とメモリ64GBのパソコンで、学習は数分で完了。
ちなみに、ChatGPTが事前学習したデータは570GBだという。凄い、約300倍ですね。でもまぁ、今回の目的は「言葉のベクトル化」の理解なので、これで十分。
学習をおえたら、自然言語処理AI「word2Vecモデル」のできあがり。
さっそく、言葉遊びをしよう。
■word2Vecで言葉遊び
word2Vecモデルには、2つの機能がある。
第一に、類義語を見つけること。
早速、試してみよう。
word2Vecモデルに「大航海時代」と入力すると、類義語が類似度付きで出力される。【】内の数値は類似度で、値が大きほど意味が似ている。
1位:トレジャーハンター【0.650】
2位:オランダ海上帝国【0.636】
3位:ポルトガル海上帝国【0.621】
4位:ガレオン船【0.612】
5位:コロンブス【0.610】
すべて、「大航海時代」の「お仲間」言葉。
1位の「トレジャーハンター」は、大航海時代の核心を突いている。「トレジャー」は財宝、「ハンター」は狩人。大航海時代とは、欲に目がくらんだ財宝目当ての連中の物語だから。
2位の「オランダ海上帝国」は大航海時代の2番目の覇者、3位の「ポルトガル海上帝国」は大航海時代の最初の覇者である。
4位の「ガレオン船」は、史上初の堅牢な帆船で、大海を航海することができた。それまでの船は脆弱で、沿岸沿いしか航海できなかった。太平洋や大西洋を突っ切るにはガレオン船が欠かせない。つまり、ガレオン船は大航海時代の必須アイテムなのである。
コロンブスは、大航海時代の先駆者の一人で、アメリカ大陸の3番目の発見者だ。第1発見者はバイキングで、第2発見者はイタリアの航海者アメリゴ・ベスプッチ。もし、コロンブスが第2発見者と認定されたら、現在の「アメリカ」は「コロンビア」になっていただろう。まぁ、そこはドーデモイイのだが。
というわけで、word2Vecは、言葉の概念を獲得している。こんな高い精度で、類義語を見つけるのだから、間違いない。
word2Vecモデルには、もう一つ重要な機能がある。
言葉の足し算と引き算だ。
これで「言葉のベクトル化」の意味が丸わかり。なぜなら、言葉を数値化しないと、言葉の演算などできないからだ。
たとえば、「ヒトラー ー ドイツ + ソ連」。「ヒトラー(人物)」から「ドイツ(国籍)」を引いて、「ソ連(国籍)」を足せば、ソ連のヒトラーが出力されるはず。
結果は?
1位:スターリン【0.678】
2位:モスクワ【0.655】
3位:日ソ不可侵条約【0.654】
※【】の数値は確度。
おー、ビンゴ!。2位、3位はビミョーだが、的外れではない。
お気づきだろうか?
word2Vecモデルは、言葉を理解している。ただし、人間式ではなく、コンピュータ式で。
ただし、一点注意が必要だ。
類義語と言葉演算の結果は、学習データに大きく依存すること。word2Vecの言葉の理解は、人間同様、何を学ぶかで決まるのだ。
このword2Vecモデルから進化したのが大規模言語モデル、そこからChatGPTが生まれた。つまり、word2Vecは、AI革命2023の大功労者なのだ。誰も知らない地味なプログラムだが。
■人間に媚びるInstructGPT
「AI革命2023」の主役といえば「大規模言語モデル」。
昨今、大ブームのジェネレーティブAIの大母神だから、間違いない。
その一つが、言葉を操るChatGPTだ。
ChatGPTは、OpenAIの大規模言語モデル「GPT」から生まれたAIで、「言葉を使い、言葉で完結する」タスクならなんでもできる。
ChatGPTは、2つのフェイズで作られた。
第1フェイズ:大規模言語モデル「GPT」の生成。
新式の深層学習「Transformer」を使い、「膨大」な「ラベルなしデータ」を「自己教師あり学習」する。いわば、AIの地頭を良くするフェイズで、言葉遣いのパターン、作法を覚える。そのため、汎化性能が高く、自然言語処理ならなんでもこなせるようになる。
第2フェイズ:大規模言語モデル「GPT」の微調整。
大規模言語モデルは、自然言語の基本はおさえているが、特定のタスクではボロをだすことがある。トンチンカンな回答をしたり、知らないのに知ったかぶりしてウソをついたり、人間を不愉快にさせる発言をしたり。
そこで、それを防ぐために、タスクに特化した追加学習する。具体的には、事前学習した大規模言語モデルの特徴量を微調整するのだ。これをファインチューニングという。
学習方法は、大規模言語モデルと真逆である。
タスクに特化した「少量」の「ラベル付きデータ」を「教師あり学習」する。人間が回答文に良い悪いのラベルをつけて、それを学習する。それを繰り返せば、人間が好む文章を作成できるわけだ。
このように、GPTを人間好みに再教育したのが「InstructGPT」なのである。
InstructGPTの学習には、重要なポイントがある。強化学習を行うこと。強化学習は、AI革命2023では、新式の深層学習「Transformer」とならぶ重要な技術だ。
強化学習とは、早い話、報酬で釣る方法。
ある環境下で、エージェント(ここではAI)が、現状を把握し、最高の報酬が得られるように、行動を決定する。それを学習するわけだ。報酬はいわば報奨金で、目標達成に近いほど高く設定されている。
たとえば、InstructGPTの目標は、人間好みの回答をすること。この場合、人間が好みそうな回答をするほど、高い報酬が得られる。だから、効率良く高速学習できるわけだ。
このような微調整した結果、InstructGPTは3つの改善が得られた(※1)。
元の大規模現モデル「GPT」に比べ、
・より⼈間視点で好ましい回答する。
・より事実にもとづく回答をする。
・有害な回答が減少した。
これが「InstructGPT=ChatGPT」の正体なのである。
お気づきだろうか?
ChatGPTは、人間に媚びるAIで、真実を言っているとは限らない。
事実、ChatGPTと対話していると、行儀の良い答えしか返らない。批判的で、ユニークで、面白い回答は皆無だ。
これじゃ、調べ物にしか使えない。
そこで閃いた!
マイクロソフトもグーグルもメタも、立派な会社なので、品のないチャットボットは作れない。
そこで、嘘八百、メチャクチャ面白い、笑えるチャットボットはどうだろう?
雑談しか使えないけど、侮れない。巨大な需要があるのだ。
老いて誰にも相手にされなくなった老人、話相手がいない嫌われ者、一人暮らしの孤独な若者(中年も)・・・うってつけです。
一番のウリは、面白可笑しく、雑談が楽しめること。
ということで、誰か、毒舌チャットボットを作りませんか?
引用文献:
※1:「ChatGPT ⼈間のフィードバックから強化学習した対話AI」東京大学 今井翔太。
by R.B