清水亮 / Ryo Shimizu[経営者、研究者、プログラマー]
Feb 27, 2023, 9:00 AM
ChatGPTに世間が沸いている。
長年この分野を見てきた者としては「ちょっと沸きすぎ」のようにも見える。深層学習を使った会話ロボットは、何もChatGPTが初めてというわけではない。
ところが、世界中が驚かざるを得ないゲームチェンジャーが現れた。
その名も「FlexGen」と言う。2月15日に公開された。
特筆すべきは、FlexGenが、ChatGPTなどの大規模言語モデルを「従来の100倍高速に動かせる」上に、NVIDIA Tesla T4という、わずか16GBのメモリーしかないGPUでその性能を使えるということだ。
つまり、大規模言語モデルを秋葉原で売っているパソコン程度で動かせる新しいフレームワークが登場したことになる。
このインパクトがどれほどすごいのかを解説してみよう。
目次:
冒頭に書いたとおり、深層学習を使った会話ロボットは、何もChatGPTが初めてというわけではない。
Facebook AI Research改めFoundamental AI Researchは対話モデルの「ParlAI」を2017年から出していた。また、Wikipediaの情報をもとに人間が教師役と生徒役に分かれて擬似的な質問に答える、「Wizard of Wikipedia」というデータセットおよび教師役をする会話ロボットも2018年には公開されている。
筆者も2020年頃に「Wizard of Wikipedia」のデータセットを日本語訳にして整形するプロジェクト(非公開)をやっていた。大規模言語モデルと「適切な」データセットさえあれば、ChatGPTのようなことができるものは相当昔からあったのだ。
そもそもChatGPTまでいかなくても、GPTシリーズに会話風の言葉を投げ掛ければ、ちゃんと会話っぽく返してくれる。また、グーグルも言語モデルのかなり初期の段階(Transformer技術の発明以前)で、2015年前後にはseq2seq(シーケンス・ツー・シーケンス、文字列から文字列に変換する/自動翻訳の原理でもある)を使った会話エンジンの論文を発表している。
ここで、最近になって大規模言語モデル(LLM)による会話エンジンを知った読者のために説明しておくと、「現在の会話AIは、自動翻訳の技術が拡張されたもの」だ。
自動翻訳は今や多くの人にとってかなり身近なものになった。新宿ゴールデン街では毎日のようにGoogle翻訳を使って外国人観光客と会話する人たちで溢れているし、AIの研究者の多くも、英語の論文を直接読むのをやめ、一度DeepLやGoogle翻訳を通してから、よく分からないところだけ原文を参照するといった使い方が普通となった。
翻訳という行為は、本質的に二次創作の側面がある。ただ、機械翻訳は品詞同士の関係性から機械的な翻訳ができたとしても、二次創作的な仕事は最初から考慮されていない。
1995年頃、コンピューター好きの10代だった筆者はアルバイトでマイクロソフトのマルチメディアAPI「DirectX」の公式マニュアルを翻訳したことがある。辞書みたいに分厚い本で、出版社からは鈍器のような書類の束が送られてきて驚いたが、それらはすべて機械翻訳された「下訳」だった。
その「下訳」をベースに原文を見比べながら、日本語らしくする作業は、単純作業とは程遠く、完全に創作に近い作業だった。マニュアルのようなかなり人工的な文章でさえそうなのだから、小説などの文学作品を適切に翻訳することが圧倒的に難しいことが分かる。
そういうわけで、長らく自然言語処理の世界は(二次創作的には振る舞えないという)「越えられない壁」にぶち当たって停滞していた。
それを打ち壊したのが、グーグルの「統計的機械翻訳」だった。
誤解を恐れずに言えば、「統計的機械翻訳」は、それまでの自然言語処理とは真逆の発想で作られている。
それまでの自然言語処理では、「人間の言葉は機械的に分解可能である」という仮説に基づいていた。だから、品詞まで分解して、組み合わせればうまく翻訳できると考えられていた。
一方、統計的機械翻訳は、「意味の理解は不可能である」という前提に立っている。
意味を構造的に解釈するのではなく、前後の文脈のみに注目して、「次に来そうな単語」を確率的に予測することに集中した。
「適切な単語の選択」や「日本語としては長すぎる文章の適切な長さへの分割」なども、確率的な予測をすれば自動的に学習し、再現できる。
この考え方が、現在の大規模言語モデルの基になっている。
細かい手法は変化しているが、基本はシーケンスからシーケンスを確率的・連鎖的に生成するものであることに変わりはない。
大規模言語モデルによる機械翻訳の学習は、例えばこんな感じで行われる。
こんな形で予測するように学習する。
学習のために与えるデータに注目すると、日本語と対応する英文がセットになって「/」で区切られている。
だから、こうして学習したAIに対して、日本語の文章の後に「/(スラッシュ)」をつければ英文を返してくる。
こんな感じで使う。
「私は東京に住んでいます/」
すると、以下のように予測される
「私は東京に住んでいます/」→「I」
「私は東京に住んでいます/I 」→「live」
「私は東京に住んでいます/I live」→「in」
「私は東京に住んでいます/I live in」→「Tokyo」
「私は東京に住んでいます/I live in Tokyo」→ 終わり
ここで重要なのは、この場合、AIは「日本語を英語に翻訳している」とは全く意識していないところだ。
単に「ある文字列が与えられたら別の文字列に変換される」だけであり、プログラマーは全く、「日本語を英語にしたい」と思っているわけではない。
中国語から英語でも、スワヒリ語からヒンズー語でも全く同じプログラムで学習できる。
さて、これがどうして「会話プログラム」になるのか、そろそろお分かりいただけただろうか?
例えば同じような仕組みで、要約するAIも作ることができる。
「長い本文/短い要約」
のようなデータセットを用意すればいい。
ということは、会話エンジンの場合はこうなる。
「会話文/会話文に対する返答」
しかも、誰も「一問一答で答える」と決めているわけではない。さきほどの翻訳の例では単語単位で予測されていた。
だから、まとまった会話文を学習させれば、その文脈を考慮した会話文が出てくることになる。
「会話文1/返答1/返答1への返答/返答1への返答の返答」
これが、会話AIの正体だ。
最近、ChatGPTを「調教」する記事がいくつか話題になった。なぜそんなことができるかといえば、現在の一般的な大規模言語モデルは全て、こうしたプロセスで学習されているからだ。
大規模言語モデルはネット上にある会話文や、プログラミング言語のサンプルコード、チュートリアルを全て学習している。
それらの「辻褄が合うように」単語を確率的に選択するのだ。
ただし、大規模言語モデルには大きな問題がある。
それは、名前の通り「大規模すぎる」ことだ。
GPT3(GPT-3とも表記)は「1750億パラメータ」という膨大なデータ量を持っている……と言われても、ほとんどの人にはその規模は想像もつかないかもしれない。
1750億がどのくらい大きいかというと、簡単に言えば、1台のパソコンには到底収まりきらないようなサイズだ。OpenAIの説明によれば、「28万5000個以上のCPUコア」と、「1万個以上のGPU」で構成された環境で学習された。
こんな巨大なシステムは、仮にAI本体が公開されても、同じ規模の計算機を用意すること自体が難しい。
参考までにGPT3のサイズを類推してみよう。まず、200億パラメータのGPT3と同等の構造のモデル「GPT-NeoX-20B」が、「推論」部だけで39GB、「学習」まで含めた全体で268GBとされている。
1750億パラメータはそのざっくり8.75倍なので、単純計算で推論部だけで341GB、全体で2.3TB(テラバイト)になる。
現在、最も大きなGPUメモリーを持っているNVIDIA H100でも最大80GBなので、推論するだけで H100が5基必要で、学習するには30基必要ということになる。H100は一枚475万円だから、推論だけで最低2300万円、学習するとなれば1億4千万円の機材が必要になる。到底、個人が手を出せる代物ではない。
さらに、言語モデルはどんどん大規模になっていくはずだ。2023年の今、ギリギリGPT3が動いたとしても、次のGPT、そのまた次のGPTはもっと巨額の設備が必要ということになる。電気代も膨大だ。
GPT3およびChatGPTが、(絵ではなく)テキストを生成する「だけ」なのに、非常に割高な料金設定に見えるのも当然だ。設備だけでこれだけの投資が必要なのだから。
最近「ChatGPTのAPIは公開されていないのに、ChatGPTを使っている」とうたうさまざまなサービスが国内外で登場してきた。もちろんAPIが既に公開されている「GPT3」を使ったサービスもある。が、それらは全てOpenAI(またはそのスポンサーであるマイクロソフト)に少なくない費用を払う必要がある。(サービス設計にもよるが)ビジネスモデル的には厳しい側面がある。
2022年夏に登場した無料の作画AI「Stable Diffusion」によって、私たちは秋葉原でゲーミングPCを買ったその日のうちに、自宅で作画AIが使えるようになった。それに比べて、大規模言語モデルがどれほど「大規模」か想像いただけただろうか。
ところが先週、この状況を一変させるゲームチェンジャーが現れた。
大規模言語モデルをパソコンで動かせる新しいフレームワーク「FlexGen」が、2月15日に公開されたのだ。
特筆すべきは、FlexGenが1750億パラメータの大規模言語モデルを「従来の100倍高速に動かせる」ということだ。しかも、NVIDIA T4という、わずか16GBのメモリーのGPUを使用して、だ。
ただしトリックがある。GPUのメモリーは確かに16GBだが、CPU(PC本体)のメモリーを256GBも搭載しているマシンの話だ。GPUのメモリを増やすよりはCPUのメモリを増やす方が安く上がる。
FlexGenの基本原理は、「メモリーオフロード」という考え方で設計されている。
GPUに搭載するメモリーはとても高価なため、CPUが使うメモリーほど気軽に増やすことはできない。
そこで、GPUにはAIの頭脳にあたるニューラルネットのごく一部だけを載せ、大部分をCPUのメモリーに置いて高速化するというのが一つ。
もう一つは、計算の順序を変えることで効率的な推論を実現したということ。これは、そもそも大規模言語モデルが並列計算を前提に設計されているからできるのだが、言われてみればその通りだという、コロンブスの卵的な発想だ。
FlexGenは、CPUメモリーだけでなく高速ストレージ(一般的なPCに採用される、NVMeなど)にオフロードする選択肢も提供してくれる。
これによって、近い将来は「Appleシリコンでも動作するようになる」そうだ。
現在対応している大規模言語モデルはMetaが開発した「OPT」だけだが、OPTは1750億パラメータのモデルについては配布に制限がかけられている。
FlexGenのロードマップ上には、より制限の少ない「Bloom」(オープン化されている大規模言語モデルLLMのなかで最も大規模で、複数言語に対応している)への対応が表明されており、世界中から注目を集めている。
特にFlexGenの開発者コミュニティのDiscord(注:誰でも参加できるチャットコミュニティ)は盛り上がっており、通知が鳴り止まない状態だ。
有力なオープンソースフレームワークのコア開発者たちも、FlexGenの成果を自分のフレームワークに積極的に取り込もうとしている。
FlexGenはオープンソースライセンスの中ではもっとも制約が緩いライセンスの一つ「Apache2.0ライセンス」で配布されており、まさにオープンソースコミュニティの底力を見せつけられている格好だ。
GPT3級の大規模言語モデルが、パソコンで動くようになると何が起きるだろうか。
まず、今GPT3やChatGPTで遊んでいるようなことが、もっと本格的に使われるようになると考えられる。例えば、以下のようなサービスは十分あり得る。
・会議の前に議事録を作るAI:
議論のタネを与えるだけで勝手に議論してくれるようなロールプレイ機能を備えたAIを作れれば、会議を開催するより「前に」、議事録ができるようなAIが普及するだろう。
・ユーザーサポートの高性能チャットボット:
現在使われているユーザーサポート用のチャットボットの多くは非常に無残な内容だが、これがより自然に、融通が利くように振る舞うようにもできるだろう。
・大企業の社内文書AI(検索・自動要約):
また、社内文書の検索システムは未だ需要のある分野だ。が、今後は社内文書の検索だけでなく、「自動要約」も簡単になるだろう。
こうしたもののうち、3つ目の社内文書AIは、日本企業には特にインパクトがある。日本企業は、いまだにクラウドにアップロードしてはいけないデータの宝庫だから、APIベースの大規模言語モデルで、社内文書の要約をするのはハードルが高かった。
だが、社内のパソコンでGPT3に近いAIが動くとなれば話は別だ。この分野での利用はもっと進んでいくと考えられる。
社内文書を全て学習した会話AIに、自然言語で質問する「社内文書専用会話ロボット」も手軽に作れるようになる。これは新人教育や社内のノウハウ継承などで非常に重要になるだろう。
仕事の話ばかりではつまらないが、当然、これはゲームにも入っていくことになる。
Unityのようなゲームエンジンがサポートするのは時間の問題だろうし、そうなれば、ゲーム内の村人と永遠に雑談できるロールプレイングゲームも作ることができる。
Minecraftのようなゲームでは、地形が自動生成されるが、村人とは会話できない。しかし、いずれMinecraftのようなゲームでも、生物が自動生成されたり村人と会話したり村人同士が喧嘩したりするのを仲裁したりできるようになるかもしれない。箱庭型ゲームでのAIの活用は非常に夢がある分野だと思う。
とにかく、とんでもない時代がやってきた。
最後に補足として、人工知能と自動翻訳が、非常に近い関係の中で生まれてきたものであることを書いておきたい。
というより、自動翻訳の歴史を紐解くと、これは「人工知能の歴史そのもの」なのだ。
もともと、「自動翻訳」の起源はプログラミングのコードをコンピューターが解釈できるように変換する「コンパイラ」にある —— こう言うとびっくりするかもしれないが、歴史的事実を指摘しているにすぎない。
1956年にマービン・ミンスキーの呼びかけで始まった「ダートマス会議」に招へいされたのは、チェスゲームの開発者、情報学者、そしてコンパイラの開発者であり、ミンスキーは彼らを人類史上初めて「人工知能研究者」と呼んだ。ここから人工知能の研究は始まった。
最古のプログラミング言語の一つは、FORTRAN(フォートラン)であり、これは「FORmula TRANslator(数式翻訳機)」の略だ。
当時、プログラミングは全て、コンピューターが直接理解できる二進数の羅列、いわゆる「マシン語」で記述されていた。しかしこれでは専門家以外の人が手軽に使うことはできない。そこで欲されたのが、「A+B*C」のような「数式」を入れると、二進数の機械語に翻訳してくれるようなソフトだった。
FORTRANは、BASICやC言語の直系の祖先であり、今も普通にFORTRAN由来のプログラミング概念が使われている。
同時期に生まれたLISPは、「LISt Processor」の略で、その名の通り「リスト」を処理することを目的として、プログラミング言語としてではなく、アルゴリズムを記述する人工言語として設計された。
LISPの思想は現代のモダンなプログラミング言語に大きな影響を与えている。
FORTRANにしろLISPにしろ、開発者の思いは「人間が考えていることをいかに機械が理解できるように“翻訳”するか」というもので、初期のプログラミング言語の開発者たちにとって、最も理想的なプログラミング言語は自然言語、つまりごく普通に話されている英語や日本語といった言葉でプログラミングしたい、という思いが根底にあった。
しかし、当時のコンピューターの処理能力、そして研究者たちの認識では、自然言語は曖昧すぎるのでプログラムを厳密に記述するのは不向きであると考えられていた。そこで、しかたなく文法的に厳密な人工言語として「プログラミング言語」が開発された。
プログラミング言語を機械語に翻訳するのは、「コンパイラ」か「インタプリタ」であり、どちらも翻訳を意味しているのは興味深い。
自然言語処理の研究はコンパイラ(およびプログラミング言語)の研究の中で始まり、「人間が自然に話す言葉」にプログラムで処理できる普遍的な法則性があるのではないかと考えられていた。
古典的な自然言語処理では、文章を文節や品詞に分解し、それぞれの品詞の関係性をもとに「構文木」という構造を構築することで文章の「意味」を理解しようとする。このやり方はある程度まで上手くいったのだが、どうしても越えられない壁にぶち当たることになる。
例えば、英語から日本語に翻訳するとき、英語では一文で表現されていても、日本語では一文として表現するには長すぎるというケースがある。この場合、人間の翻訳者はもとの英文の意味を汲み取って、別の言い回しで日本語にするか、それとも文章そのものを分けてしまうといった処理をする。
しかし、こんな人間ならではの「高度な」処理は、品詞分解して品詞同士の関係性をベースに翻訳するという機械的なやり方では難しい。また、英単語一つに対して対応する日本語の単語は一つではないのが普通だ。
さきほどの「コンパイラ」という言葉は、「集約者」や「編集者」「業績を残した人」などの意味がある。複数の解釈の幅のある単語を文脈に沿って適切に選択しなければならない。これを機械的に処理するのはかなり難しいのだ。
あわせて読みたい