Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

ChatGPTについての問わず語りを(できない私が)くり返す

※新兎わいちゃんについて真実を返す分身(中身はChatGPT)之図

チャッピー、いま何してるのかな チャッピーって言ってもピクミンのチャッピーじゃないんですよ(ピクミン新作楽しみですね。2のときだったかな?蒜山の牛乳瓶の蓋とかあってすごいローカルの風を感じたのをよく覚えています。島根から来ました対戦よろしくお願いします。)

うん、違うんだ、中学の時の同級生に「チャッピー」って呼ばれてるやつがいたんだ。 そのチャッピーが高校2年の時の学園祭にふらっと遊びに来て、自販機にくっしゃくしゃのお札を詰まらせて壊して帰ったことだけよく覚えてる。 なにしに来たんだアイツ。

うん、前置きが長いって? ChatGPTって流行ってるじゃないですか、僕は勝手にチャッピーって呼んでるんですけどね、可愛いから。 猫も杓子も興味津々のChatGPTというものが実際どういうものなのかって話を……社内でチョロッとしたら、意外と好評だったのでディレクターズカット版として一部加筆修正しているのがこの記事です。 そんな焼き直しなので、タイトルは「くり返す」

ChatGPTについての問わず語り

どうもCTO室AI推進部とグループ会社HiTTOで 二股 兼務中の@ken11です。

これは僕の私見なので、間違っているところやそうじゃないだろみたいなところもあると思うんですが、特に議論を呼び起こしたいつもりはないのでマサカリは受け付けておりません。飛んできても着払いでお返しします。 ひとりの開発者の意見としてそういうのがあるんだな〜と思ってもらえれば。 (つまりポエム)

これホント世間に出すか悩んだんですけど、結構いろんな人にせっかくならテックブログ載せろって言われたのでまあ出してみるかあって思って。 なんせそれを理由にエンジニアブログ書けばまた新兎わいちゃんの宣伝ができるじゃないですか() ※わいちゃんの25万人を祝って赤スパ投げながら書いている(ここ重要)

ところでわいちゃんのようなVTuberの方々とかも確定申告されると思いますが、そろそろ締め切りが近いですね? マネーフォワード クラウド確定申告を使えば簡単に確定申告の電子申告ができちゃいます! 私はこれで確定申告を無事にやりきりました

ChatGPTを支えている技術

ぼちぼち真面目な話をしますが、まずはChatGPTの技術的背景から。

Transformerというすべての始まり

そもそも現在(令和5年3月)世間を賑わせがちな自然言語処理モデルというのは2017年に発表されたTransformer)に基づいているものがほとんどです。 その論文の子細など本当に細かい話についてはこういった素晴らしい記事を読んでください。

Transformerが出現する前との大きな違いは、文章を文頭から文末まで順番に処理する必要がなくなったことでトレーニングに必要な時間が大きく短縮できる点であり、その結果より大規模なデータセットで学習を行い汎用的なモデルをつくることが容易になったというのがあります。

ChatGPTの元になっているGPT系のモデル然り、BERT然り、大規模汎用言語モデルというようなものが出現するようになったのはこのTransformerが始まりと言っていいでしょう。

このように、最近世間を賑わせている自然言語処理モデルの始まりは2017年のTransformerの出現でした。

汎用言語モデル

では実際にBERTやGPTといった汎用言語モデルとはなんでしょうか? 誤解を恐れずにシンプルに説明するなら、これらのモデルがしていることは大量の事前学習用データセットの文章を元に、出現する単語間の関係性を解釈しようという試行です。 たとえば リンゴ という単語があったとき、その手前には 赤い青い といった単語が現れる、その後ろには 食べる買う といった単語が現れる、そんなような単語間の関係性をひたすらに学習しているのが汎用言語モデルです。

これらの単語の関係性を学習し、前後に出現する単語について確率で様々な予測をしているということになります。 なので、ただの リンゴ の後には 走る が来る可能性は低いわけですが、手前に ハイヒール が来る可能性は一定存在しており、さらに ハイヒール リンゴ と続いた場合にはその後に 走る が出現する可能性も上がってくるといったことが起き、それらを予測できるかどうかはさらに前後の単語との関係の中で人名が出現しやすい場所かどうか等を予測しているわけです。 (ハイヒールリンゴが伝わらない方は一度大阪で暮らしましょう)

BERTとGPTの違い

これは余談ですが、よく名前を聞くであろうこの2つの汎用言語モデルの違いはなんでしょうか? 簡単に言ってしまうと、BERTは単語の前後の関係性を見るのに対して、GPTは単語の前のみの関係性を見ています。 そういった違いもあってBERTは文章の類似度や分類が得意なのに対して、GPTは生成系タスク(文章の続きを書く、対話など)が得意なんですね。

また、モデルで使用されているパラメータ数も大きく異なります。 このパラメータ数というのは、これも誤解を恐れずにシンプルに説明するならどれだけ解像度高く単語そのものや単語の関係性についての情報を保持するかというようなものです。 当然パラメータ数が多ければ多いほど複雑な情報を解釈できます。 じゃあパラメータ数を極限まで増やせばいいじゃないか?と考えるかもしれませんが、パラメータ数が増えるということは即ち計算時間が爆発的に増えていくということです。 我々がGPT-3の事前学習をしたいと思っても、計算リソースだけで恐らく億単位のお金が必要になるのではないでしょうか。(今どきだともう少し安くやる手もあるんですかね、わかりませんが、莫大な費用には違いないと思ってます)

GPT-nという名前は基本的に数字が進めばパラメータ数が増えているという形になっています。

ChatGPT

それらをふまえて、ChatGPTとはなんなのかというと、現時点でGPT-3.5をベースに作られた対話用モデル、という感じですね。

途方もない量のデータを莫大なパラメータで、いくつかの手法を重ねて工夫した学習を行った結果生まれたモデルというのが僕個人の認識です。 もちろん「途方もない量のデータを莫大なパラメータで、いくつかの手法を重ねて工夫した学習を行う」ことこそが難しいので、それをやったという事実はとてもすごいことです。 ただ、世間でしばしば語られるようなシンギュラリティ的な革命ではない、というのは認識しておいた方がよいと思います。

ChatGPTが抱えている問題

ここまででChatGPTの正体のようなところは見えてきたかと思います。 連日、その存在が革命のような紹介のされ方をしていますが、革命は2017年のTransformerの出現の方で、ChatGPTは言うなればパラメータ数・計算リソースのオバケ的存在です。 そんなChatGPTが抱える問題を紹介します。

計算リソースが足りない

これまでに再三述べたように、ChatGPT(ないしはそのベースとなっているGPT-3.5)というのは非常にパラメータ数が多く、計算量も尋常ではありません。 これはつまり同じようなモデルを真似ようと思ったところで モデルをつくることも、使うことも容易ではない ということです。 GPTの世代で言えばGPT-2まではAWSのInf2の登場により、プロダクションサービスでのリアルタイム性の高い利活用が現実味を帯びてきたのではないかと思える段階です。 3や3.5相当のモデルというのはトレーニングだけで莫大な費用がかかるうえ、推論するにも莫大な費用が発生します。

なので、現在ChatGPTを使いたいという意思があったとして、できることはOpenAIのChatGPT APIを使うことだけです。 自前でどうこう、というのは考えることが非常に難しいものです。(用途次第なのと、予算や計算リソースがあるなら考慮する余地もあります)

ただし、一応OpenAIにはファインチューニングのサービスがあるらしいので、将来的には個別タスクにあわせて改良は可能かもしれません。

いずれにしても現状ではOpenAIにおんぶに抱っこしか選択肢はありません。

文意は理解していない

先述したように、これらの汎用言語モデルは単語間の関係性を確率的に解釈しているにすぎず、真に単語の意味や文意を理解しているわけではありません。 なのでコンテクストも理解できませんし、時折支離滅裂な回答が返ってくる理由はそこにあります。

パラメータ数がどんどん増えることで、「いかにもそれっぽい文章を書く」ことはどんどん上手くなっていると思いますが、逆に言えばいまの手法ではいつまでも現状を打開する(文意やコンテクストの理解をする)術がないのではないかと考えている次第です。

times芸人についてさらっと謎の嘘をつくChatGPT図絵。創作用途として捉えると逆に有用とも思える。

また、文意を理解していない結果、ChatGPTが回答する内容は往々にして嘘が混ざっています。 ChatGPTを使ってみたことがある方はわかると思いますが、最後に「知らんけど」を付けたくなると思います。 学習データの時代で情報が止まっているため、最新の情報に疎いといった問題もあります。

ChatGPTを活用したい場合

実際に活用してみたいと考えている方向けのお話です。

用途

正確性に欠ける情報をしばしば返すこのチャットボットをなにに利用されますか? 僕は雑談機能のような、おもちゃ的な機能としては非常に有用だと考えています。 また、たとえば「類似の文章を10個生成して」のような形で、学習データの水増しをするといった使用方法は有用でしょう。 このようになにかを新たに生み出さないといけないときに、アイデアを提供するという用途はわりと向いていると思われます。 たとえば「架空の出張理由を書く」「アリバイをつくる」「退職願の文章を書く」等々、なぜ僕は絶対にダメな悪いことしか思いつかないのでしょうか、さすがに冗談です。

ChatGPTのAPIが公開されてすぐ、社内でSlack botとして導入しましたが、その使われ方を見ていると以下のような使われ方をしていて、こういった用途では非常に便利だなというのを実感します。

特に、献立を考える用途はとてもいいですね!

一方で、事実を探索するために利用したり、お客様サポートのチャットボットなどに使用したりするには、まだまだ難しいのではないかと考えています。 たとえばサポート業務はそのサービスに精通したチャットボットが必要となるわけですが、固有のデータに対してファインチューニングできないなかでは、有効に活用できないのではないかと思います。

ChatGPT以外の選択肢

実現したい内容、やりたいことによりますが、ChatGPTじゃなくてもできることはたくさんあります。 たとえばGPT-2であれば社内で個別に学習して推論環境を用意することも可能な段階まで来ているので、使い方の幅などが広がると思います。

ChatGPTは連日センセーショナルにメディアで取り上げられているので、非常に多くの方が気になっていてAIとかチャットボットというものに興味を持ってもらえていることはとても喜ばしいことだと思います。 しかしながら、ChatGPTを使うことが目的になるのではなく、課題解決の手段として最適なものを選ぶというのが重要であるというのは、忘れてはいけないです。

ChatGPTの利用例

既存のChatGPT利用例を紹介しておきます。 StableDiffusion等の画像生成系同様に、クリエイティブなシーンに活かす方がよさそうです。

Shopify

Shopifyでは商品説明文の原案を自動で生成することに利用している

Snap

独自のチャットボットMy AIに利用している

Instacart

レシピのアイデア等をユーザに提供する機能に利用している

おまけ

Slack bot作って遊んでいる人

最後に

と、まあざっくりとChatGPTについて問わず語りをしましたが、ChatGPTホント人気だな〜〜〜って思いますね。 社内向けには「ChatGPTに限らず、課題解決のために最適なAI/MLを提案するのが僕の役目なので本当に気軽に声かけてください。」と、素晴らしいセリフを残したりしました。(いい話だ)

話題性があるので、僕もとりあえずAPIにのっかってブログ書いたりはしてますが、これをビジネスで活用するっていうのはまだまだ至難の業ではないかなあと感じていたりします。 最近自分の身の回りで発生するリクエストだと、だいたいのは結局fastTextでいいんじゃないのくらいに僕は思うことが多いです笑

テレビなどのマスメディア含め、非常に多くの方がNLPに興味津々になっていることは本当に嬉しいなと思うので、ChatGPTに限らずこれを機にサービス等でもっとNLPを活かしていけたらいいなと思う次第です。