松本氏の自己紹介

松本勇気氏:本日は基調講演の場をいただき、ありがとうございます。日本CTO協会(理事)およびLayerXという会社のCTOを務めている松本と申します。みなさま、よろしくお願いします。

何か気になることがあればチャットでワイワイしてもらえると、話している側的にはちょっと楽しくなってくるので、ぜひよろしくお願いします。

今日は「エンジニアキャリアとLLMによって変わっていく開発とその未来」。ちょっとタイトルが長かったので「ChatGPT」から「LLM」(という書き方)になっているんですが。LLM、Large Language Model(大規模言語モデル)の略ですね。それとエンジニアキャリアの話を掛け合わせてできたらなと思っています。よろしくお願いします。

簡単に自己紹介と、所属している組織の紹介をさせてもらえたらなと思っています。私は松本勇気と申します。Twitterでは「y_matsuwitter」というアカウント名で(やっていて)、GitHubなどもこういったアカウント(名)になっています。

今LayerXという会社の代表取締役およびCTOを務めていて、そのほか三井物産さんとの合弁会社で取締役をしていたり、日本CTO協会の理事をしています。ちょっと時間もアレなので、サクサクいきますね。

日本CTO協会について

今回私は日本CTO協会から来たということになっているんですが、この日本CTO協会はどういった協会かと言うと、日本中のCTOが700名ほど個人会員として在籍している、CTOの互助会……。互助会というのは、「お互いに助け合う」と書きます。(そんな)互助会のようなものだと思ってもらえればけっこうです。「CTOとは何ぞや?」というところに対して、みなさんで助け合うところが日本CTO協会のメインの活動となっています。

今(日本CTO協会では)「テクノロジーによる自己変革を、日本社会のあたりまえに」するというミッションを掲げています。

中ではいろいろな活動をしていて、例えば「DX Criteria」という、社内のITの活用度合いとかを検証するためのチェックリストを作っていたり、会社のブランディングの調査、あとは「エンジニアを育成しよう」という取り組みだったり、大きなイベントを開催したりと、さまざまな活動をしています。

こういった800名ほどのCTOが集まって、困ったらお互いに相談をし合いながら前に進めるような、そういった互助会的な取り組みをしています。

LayerXの事業について

あと、私はLayerXという会社に所属していて、共同代表を務めています。今、従業員数が170名(2023年5月時点)となっていて、もうすぐ200名(に達する)ぐらいの組織になります。

事業としては3つほど営んでいて、1つが「バクラク」というSaaS、もう1つが三井物産さんなどとの合弁会社、もう1つが「Anonify」というプライバシー保護の技術開発です。

(スライドを示して)このあたりもサクサクいきたいんですが、バクラクというのは、例えばみなさんが経費精算とか社内のクレジットカード払いとか、例えば経理の方がいればそこで扱う請求書の支払いだったり。

そういった業務プロセスを、機械学習と最高のユーザー体験で圧倒的に使いやすくしたプロダクトを届けて、わくわくする働き方を実現しようということをコンセプトにした、経理とか、先ほどお話しした経費精算とかクレジットカードとか、そういったところのプロダクトになっています。

もともとこの領域って、手作業がとても多いカテゴリーの仕事なんです。PDFで(データが)やってきてもそれを目で見て手で書き込んだりとか、手入力でいろいろなツール間にデータを反映していったりしなければいけない。そこを、我々はこのバクラクというサービスの中で、(スライドに)AI OCRとか書いてありますが、機械学習だったり(を使って)、それをうまくつなげたユーザー体験の構築をしていくことで、サクサクと半自動、自動化、いろいろなかたちで進んでいって、より仕事がしやすい、「バクラク(爆楽)」な環境を作っていくことをやっています。

※gif

現時点だと、「バクラク申請」「経費精算」「請求書」「電子帳簿保存」「ビジネスカード」という5つのプロダクト軸で開発をしています。

そのほか三井物産デジタル・アセットマネジメントという会社では、LayerXと三井物産さん、ほかにもいろいろな大企業が一緒にお金やリソースとかを出し合いながら、眠れる個人資産・個人金融資産に対して、これまでになかった投資機会を届けることで、よりお金が社会にめぐっていって、それで投資のリターンと社会の発展の両方を実現する。そういった仕組みを実現しようとしています。

その中で取り扱っているのが、2023年5月から登録が始まった「ALTERNA」というサービスです。こちらでは三井物産グループをはじめ、いろいろなパートナーのみなさまと協力して、二千数百億(件)ほどの不動産を我々が取り扱おうとしている中で、これまではプロの投資家さんしか投資できなかった都心のマンションとか、ちょっと変わった資産を個人で、しかも10万円想定の小さい金額から投資できるというようなサービスを届けしようとしています。

また、プライバシーテックという、みなさんがデータ分析をする過程で「個人情報とかを扱っていて怖いよ」というところがあると思いますが、個人情報を守りつつもデータ活用ができる、その両立を目指す新規技術の開発、R&Dをやりながら、データ活用を目指していくようなサービスを展開しています。

いろいろやっているので「なんの会社やねん?」と言われるんですが、いろいろやっている会社です。

なぜ大規模言語モデルの話をするのか

なぜその会社が今日大規模言語モデルみたいな話をしようとしているのかですが、4月から「LayerX LLM Labs」という組織を立ち上げました。これは大規模言語モデル専任チームとなっています。実は今、大規模言語モデルを使って新規事業の立ち上げもしていて、機械学習ではなくて普通のソフトウェアエンジニアの採用を絶賛しているんですけれども。

そういったチーム作りをしながら、実際に「大規模言語モデル、ChatGPTを使って新規事業を作っていこうね」というようなことで、研究開発を絶賛やっています。

LayerXのエンジニアチームで一番大きいチームはどこかというと、実は機械学習チームだったりします。そこでの知見も合わせながら、こういった取り組みをしていこうとしていたところ、今回(Qiita Conference 2023で)キャリアの話をしていただきたいと(言われました)。(なので)その中でみなさまが今たぶん気になっているであろうChatGPTとかと開発の未来の話ができたらなという背景になっています。

そもそも大規模言語モデルとは

さっそくですが、ここから本題の大規模言語モデルや開発の未来という話をしていきたいなと思います。大規模言語モデルというか、ChatGPTとかをすでに触った方はいます? 触ってみての感想とかがあったら聞いてみたいなと思っています。チャットとかが出てくるとうれしいなと思いつつ進めていきますが……。

(チャットを見て)おっ、けっこういますね。「触ってみました」「使ったことがあります」という方がたくさんいます。触った方の中で、開発で触ったことがある方。これでコード生成とかをされたりしたことがある方がもしいればぜひ(教えてください)。「使ってみました」という人も。コード生成に使っていらっしゃる方はけっこういますね。

大規模言語モデルは本当にすごいですよね。みなさん触ってみて、(すでに)いろいろなものが出来上がっているとは思います。

(今回は)「そもそもこの大規模言語モデルって何なんだ?」というところからスタートして、僕らのキャリアとの関わりをお話ししていけたらなと思います。

機械学習をやっていない方向けに非常にシンプルにお話をすると、大規模言語モデルって、言ってしまえば文章の続きを予測するエンジンでしかないんですね。例えば「『こんにちは』を英語で」という文章を入力したら、スッと「Hello」という文字が返ってくる。これはそうですよね。「こんにちは」を英語で訳すなら「Hello」だよねと。

そういう、連続した文章を予測する巨大な言語モデルなんです。Transformerという技術、今だとGPTをベースにした大規模言語モデルです。これは本当にシンプルに、もっともらしい続きを作るだけのエンジンです。もちろん、Instruction Tuningとかいろいろなチューニングは入っていますが、基盤はそういったところになっています。

ですが、これが我々の予想を明らかに超える、訳のわからない多様なタスクがこなせるようになります。大きなもので(いうと)、対話とか情報抽出とか要約とか。その1つ大きなユースケースとして、プログラミングができるようになりました。みなさんもけっこうさわっているようなので、今日は話がすっと入ってくるんじゃないかなと思います。

(大規模言語モデルは)大量のデータをおおよそ学習しているので、(そういうところをふまえると、)文章、言葉というものが我々の世の中の仕組みをうまく捉えるいいエンジンだったんだなと僕は感じています。

いろいろな言語を学習して、その続きというか、言語を生成できるようにする。その中には例えばプログラミング……。構文木なのかなんなのかわからないですが、そこにうまく抽象化されてモデルの中に組み込まれて、いろいろなロジックが解けるようになるようなことが起きている。

さまざまな問題に対する答えを生み出せるようになったというのが、この大規模言語モデル、いわゆるLLMのエンジンの大まかな概略だと思ってください。

大規模言語モデルが与えた「インターフェイスのあり方」に対するインパクト

みなさん(大規模言語モデルを)ツールとしてなんとなく使っていると思いますが、僕は「このインパクトって何なんだろう?」とずっと考えています。開発者として向き合った時に、もしかすると大きく変わってくるなと思うものの1つが、ソフトウェア開発というかUXデザインと言うんですかね。ソフトウェアを作る考え方が変わってくる可能性はあるなと思っています。

言葉を機械が認識できるようになって、以前と以後でどうなったか。これまでは、みなさんソフトウェアを書いているわけですが、ソフトウェアを書く時って、(まず)ソフトウェアで実現したい機能があります。

例えばTwitterで140文字のツイートをすると、それをみんなが閲覧できます。そういった機能があった時に、「これを満たすためのソフトウェアってどうすればいいんだっけ?」と考え出します。僕らでいうと(それを実装させる人として)デザイナーとかがUX、UIをまず考えます。「こんなUX、UIで」と。あとはプロダクトマネージャーとかが「こういうユーザーの意図があって、こういう設計があります」(と考えます)。

その中で、人間の意図を機械に伝えるためにソフトウェアエンジニアが一生懸命UIを書いて、その裏側でデータベースとつないで、いわゆる人間の意図をソフトウェアの挙動に変換しているんですね。

ですが、(スライドに)「こうなるかもしれない未来」と書いてありますが、大規模言語モデルがきたら、いきなり言葉で意図(汲み取られて、それ)がそのままソフトウェアになっちゃう。そんな時代が来ている。

例えば、与えられたメールに(対して)「『Googleカレンダー』の予定を参照して、出席・欠席の返答を作成してください」みたいなプロンプトというか指示を出したら、ソフトウェアが勝手に意図を理解して、機能を提供し始める可能性がある。

ということで、僕らががんばってUXとかUIとかソフトウェア開発とかをしていたレイヤーが、ある程度すっ飛ばされる可能性が出てくる。すべてがすっ飛ばされるわけではないが、すっ飛ばしが出てくる可能性があるんですね。

今それの端的なものが情報検索だと思っていて。「なにかを知りたいです」というと、これまでは検索エンジンを使って検索していたんですが、今はChatGPTとかを使うといきなり答えが出てきちゃう。

そういったかたちで、やはり実現したい機能をつなげるためのステップがすごく短くなっていく可能性がある。もちろんゼロになるとは僕も思っていませんが、ここで厳密な実装がどこまで必要かのボリュームがどんどん変わってきて、1人で作れる範囲がもしかしたら大きくなるかもしれないし、けっこういろいろな表現ができるようになってくるのかなと。まずこれがサービスのあり方としてすごく変わってきたところ(です)。

大規模言語モデルが与えた「作ること」に対するインパクト

一方で、作ること自体にもインパクトを与えています。(スライドを示して)これ何だっけな? 「Genie」って名前だったかな。「VSCode」のプラグインなんですが、特に僕はReactやらなんやらを書く時に、「最近のReactのコンポーネントの書き方とかを忘れたぞ」となってしまったら、すぐに(Genieに)聞いています。「Reactのコンポーネントをモッキングしたい。どうしたらいいですか?」と聞いたら、いきなり答えが出てきちゃってるんですね。

(スライドを示して)こういうスニペットがすぐ出てくるので、(Genieのレベルとして)スニペットをさっと出すことはできているし、簡単なアプリケーションを作ってみるみたいな(こともできる)。「テトリス」とか「ピンポン」とかのレベルのアプリケーションはもう一瞬で作れちゃうような感じがしています。

スニペットを作ったり、ある程度のクエリを作ったりとかのコード片を生み出すこと自体はもうだいぶできてきているんですよね。もちろん、指示次第でぜんぜん正確じゃないものも出てきてしまったりするんですが、少なくともやり方次第でできちゃっている。

まだこれぐらいしかできないとしても、今後は探索的により複雑なコードを生成する可能性もあり得る。後でAgentという話もしますが、複雑なコード、要はアプリケーション全体のコードを複雑に作っていく(ことができるようになる)可能性もあり得るなと思っています。

あとは「いや、とはいえそこまで正確じゃないじゃん」と言われた時に、「じゃあ、インフラとかアプリケーションの基盤がLLMに合わせればいいんじゃないの?」みたいな世界もあり得ると思っているんですね。

よく妄想するのが、例えば「GraphQL」のスキーマを定義しました。そこのスキーマにコードコメントで「こういう機能を実装したい」というものを与えて、裏側にもう1個データベースのスキーマを与えておいて、これをまとめてLLMを使ったシステムに食わせると、もう実行コードを勝手に組んでくれるみたいな。(さらに)テストも勝手にし始めてくれる、なんてことが起きるかもしれない。

スキーマとインターフェイス、APIとその後ろにあるデータベースが定義されていたら、勝手に実行するような基盤なんてものも出るかもしれない。そういうのを見ていると、やはり1人あたりの開発生産性が圧倒的に上がり得るなと思っています。

先ほどの複雑なコードの生成(の話)でいくと、今は「AutoGPT」とか「BabyAGI」、もしくは「AgentGPT」とか、エージェントと呼ばれる技術の研究開発が非常に進んでいます。今のLLMって中の情報が古かったり、チャットでも指摘がありましたが、古い情報をベースに判断したりするんです。

実は、AutoGPTはもうちょっとメタな仕組みになっています。例えば「Reactのこの機能を使ってテトリスを作って」と言った時に、(合わせて)お題と背景を与えておくと、まずタスク……。

どのようにコードを書いていこうかということで、例えば先にフレームワークについて調査するとかのタスクを設計して、それを順次実行していく。この実行というものが、外の知識の検索もするんですね。Google上で検索して情報を持ってきたり、その持ってきた情報をベースにコードを書いたり。

そういった処理を自分でどんどん考え、考え、考える。そうするとアウトプットができてくるので、途中途中で人にレビューをもらって、またタスク設計とサイクルをごりごり回していって、最終的にタスクを完了させる。

結果として、例えばアプリケーションができている。僕はリサーチでたまに使うんですが、例えば「この会社について直近の業績を競合と比較しながら調べて」と言うと、けっこういいレポートを作ってくるんですね。「あっ、それが競合だったんだ」みたいなものも見つかったりするので。

そういったタスクの複雑なものを解くのが、今けっこう熱い分野の1つになっていて、これによって複雑なものが作られる可能性があるなと思っています。

限界はあるけれど、今後性能が上がっていく可能性がある

もちろん限界はいろいろあって、(大規模言語モデルを使う上で)一番大事なのは、「Hallucinations」と呼ばれている、それらしい返答を作るので、嘘も平気でつくんですよね。素因数分解とかをさせると、当然解けないので適当な答えを送ってきたり、情報管理の問題があったり。

みなさんが使っていて(その中で)「ぜんぜん文字数が扱えないじゃないか」(となる)とか。プロンプトのリテラシー次第で欲しい情報を得られたり得られなかったり、あとは「そもそも処理速度が遅いよね」とか。自分たちでモデルを作ろうとしても「そんな開発コストじゃ作れないわ」という状態だったり。限界はあります。

限界はあっても、今はいろいろと研究が進んでいるので、今後どんどん変わっていく可能性もあります。今の性能で判断して「本当にこれで僕らの将来を決めていいんだっけ」というと、実はそうでもなかったりする。

1つはTransformerと呼ばれている背景のアルゴリズム自体の改善が進んでいったり、「Transformerのサイズが小さいよね」と言われても、「いやいや、複数のGPTをつなげて巨大なインプットを受け取れるようにしよう」と(改善できたりと)か。Transformer以外の手法なんかも発見されたりするわけです。今だとRNN(Recurrent Neural Network)とかを使ったRWKVとかですね。

あと、論文上ではTransformer以外の手法も提案されていたりします。あとは先ほど言った、LLMに合わせた仕組み作りをすることで、今の性能でもおもしろいユースケースが出てきたり。

もちろん今後モデルは軽量化されていくでしょうし、Fine-Tuningによって例えばコーディングにメッチャ強いとか、スキーマ設計にメッチャ強いモデルが出てくるとかは当然起き得る。

モデルもまだまだ大きいものがどんどん登場しています。そのほかAgentとか、自律的に処理をする問題が、どんどん性能が上がっていく(ことで解決する)かもしれない。あとは、食わせられる情報のサイズも大きくなるかもしれない。ということで、例えば「精度が悪い」「嘘をつく」「使えない」「できないよね」という状況が変わる可能性があります。

今日、LLMを使ったエンジニアの未来みたいな話をしたいんですが、ぶっちゃけまだ読めないフェーズだなと思っているんですね。そういう時に僕らはどう向き合うべきなんだろうということが、今日の主題なのかなと思っています。

(次回に続く)