こんにちは、Pythonエンジニア育成推進協会 顧問理事の寺田です。私は試験の問題策定とコミュニティ連携を行う立場です。
このところ大きな話題となっているChatGPT。これはOpenAIという組織が作ったGPTという技術を利用して開発されたツールです。
せっかくなので今回はこのChatGPTの技術から見える、ディープラーニングによる自然言語処理とPythonの関係についてお話したいと思います。
ChatGPTとはどんなものか
バージョン2までのGPTはモデルが公開されており、一般のユーザーでも自由に試すことができましたが、バージョン3以降、現在の最新バージョン4もクローズドなプロジェクトとされているため、以前よりも自由に利用できる範囲が限定されています。その理由は様々ですが、分析や文字の生成に家庭用のPCでは試すことができないほどには膨大なリソースが必要などの問題があるためで、現在はモデルが公開されず、サービスとして使われるのみとなりました。
ChatGPTは、ニュースで報じられているようにいろんな危険性や悪用を心配されているようなことも可能な技術ですし、中には間違った回答が出ることもあります。そういった本来的にはよくない点も抱えているのは確かですが、自然な文章をコンピューターが簡単に生成できてしまうこのツールは、これからのいろんな物事を変える、非常に優れた新しい技術だと評価できます。
コンピューターと自然言語処理
コンピューターが使う言語をプログラミング言語と言いますが、人間が使う言葉のことを自然言語と言います。
ChatGPTのように人が書く文字を理解させ、生成するという技術は「自然言語処理(NPL/Natural Language Processing)」と呼ばれています。
この自然言語処理はなかなか難しい技術ではありますが、実は古くあるもので、色々な場所で利用されています。
例えば、入力された単語が含まれた文章や、それに近いものを大量の文書から探してくる検索や、DeepL翻訳やGoogle翻訳などの翻訳ツール、長文から文章の概要を短文にしてまとめる(サマリー)ツール、人の代わりに相手と対話し、自動で返答するチャットボットなども自然言語処理によって行われています。
この中でも特に進化が目覚ましいものは翻訳ツールで、対訳した文字を生成するという技術を向上させてきた結果、近年、その精度は非常に上がっています。
こうした技術が今後もより発展していくことで、未来では他言語を学ばずとも翻訳してくれる世界が近くなっていくのではないかと言われており、それを実現するには今後も継続して向上させていく必要があります。
自然言語処理はたくさんの応用ができますし、いろんなことができるため、非常に魅力的で楽しみが多い世界です。私自身も検索エンジン技術の理解から入って自然言語処理の世界に入りましたが、とても好きな分野です。
自然言語処理研究の難しさと、Attention機構による発展
人間の世界では基本的に複数の要素・意味を、周辺の状況によって「これ」に関係することだと判断し、会話を行います。それはそこで話をしていることが前提となるため、人には理解できてもコンピューターには理解しにくいものですが、研究者からすればそれで諦められるものではありません。
研究を深めた結果、ある一定の文法を覚えれば理解できること、単語を覚えれば文字が生成できるということが、かつて明らかにされました。最近はそれに加えて、含まれている感情がポジティブなものか、ネガティブなものかといった研究が進められています。
このように多くの研究者が様々な言語において自然言語研究の分野で活躍してきたことで、翻訳ツールや検索などの自然言語処理技術の性能が向上してきました。
そんな中、2018年にGoogleから発表された論文によって非常に驚くべきことがわかりました。
2014年に提案されていたAttention機構を用いた「BERT」という技術が公開されたことです。これはディープラーニングによる自然言語処理の仕組みで、この新しい技術が自然言語処理の性能を格段に向上させました。
これはいままでにない進化を遂げ、現在も「BERT」をベースとしたさまざまな自然言語処理の実装と研究が進められています。
Hugging Faceでの学習済みモデルの共有と、Pythonでの活用
ディープラーニングによる自然言語処理には学習させる膨大なデータが必要です。
よくあるケースはWikipediaの記事を読み込ませてモデルを作るというものですが、これにはやり直しや調整が必要で、政府や大企業が行うようなコスト感と時間が必要となってしまうため、個人や小規模な企業で行うには非常に難しい内容です。
ただ、学習済みモデルが公開されている場合、それを自分専用の言葉や機能を持たせるといったファインチューニングができるため、もとのモデルが持つ特性を生かしつつ、自身のやりたいことや別の要素を入れていくことができる世界になっています。
もちろん、ファインチューニングであってもそれなりのリソースと時間が必要になりますが、調整のみであるため、一晩や数時間ほどでもそれなりの効果が出ると言われています。
さて、そのモデルですが、最近、モデルを共有するHugging Faceと呼ばれる、学習されたモデルが多くの人によって登録されているサービスがあります。
Pythonでこのデータを活用するにはHugging Face Transformersというライブラリをインストールする必要がありますが、そこにあるモデルを使えれば時間を掛けずに、Pythonのコード数行で作り出すことができます。
もちろん、そのモデルのレベル感の確認や新しい言葉の学習も必要になりますので、すぐにできるものでもありませんが、Pythonで書かれたサンプルなどがありますので、Pythonの基礎があり、理解できる人であればカスタマイズは容易なのではないかと思います。
AI分野への挑戦とPythonの学習
Transformers自体にAttention機構を含んだ自然言語に非常に向いているというディープラーニングのアルゴリズムがありますが、その中の一つにGPT系があります。
基本的にGPT系はAttention機構を使って作られていますが、その特徴は文字の生成が得意という点です。ChatGPTはその特徴を上手く使ってインターフェースが作られたというものになります。
Transformersの他の応用例として個人的に注目しているのは、同じくOpenAIが開発したWhisperという文字起こしAIです。
Whisperは、TransformersとPyTorchが使われています。Transformersの世界に入っているもののため、大量の学習済みモデルが用意されているのはもちろんですが、必要に応じてファインチューニングもできることが公式にアナウンスされています。技術的には複雑ですし難しいものですが、基本的にはPyTorchを使えばいろんなことができるようになっているはずです。
将来的にこういったAI分野に挑戦をしたいと考えているのであれば、Pythonで書かれたサンプルを使用するか、カスタマイズすることになります。これはPythonの技術があればできますし、むしろないとできないとも言えます。Pythonを知っているからこそ様々な可能性が広がっていくということになりますので、Pythonの学習を続けるモチベーションの一つとして考えてもらえればと思います。
Transformersをより深く使う時に考えたいリソースのこと
Transformersは調べたからすぐ理解できるというような類のものではないと思いますし、最初からすべてを理解する必要はないと考えています。というのも深堀しなくても、それを上手く利用できるだけのものがすでに用意されているからです。
もちろん、深い部分に入っていけばカスタマイズやファインチューニングが必要な場面に出くわすと思いますので、そうなったときに論文を読むなどして中身がどうなっているのかを調べていくのでも問題はありません。
ただ、ファインチューニングをしたり、モデルを動かしたり、という時にはそれなりにマシンリソースが必要になりますので、どうすればいいかについて少しだけお話したいと思います。
まず、これらのAIツールを使うには基本的にNVIDIAのGPU(グラフィックボード)を使う方が圧倒的に早いのでおすすめしています。
GPUはもともとグラフィックの試算やグラフィックを出力するための高速演算ができるように作られたものです。通常、皆さんが使っているPCに搭載されているインテルのCorei5などのCPUとは別に、GPUを後付けするという事はよく行われてきました。
GPUは、AI系の行列計算が速く行うことが可能です。CPUのみで学習するのは時間がかかりすぎるため、基本的にディープラーニングの世界では圧倒的にスピードが速いGPUが使われています。
GPUの容量に関していえば、8GBでも足りないという事から12GBや16GBを使わざるを得ないケースがよくありますが、それでも動かないというケースも現実にはよくあります。
先ほど挙げたWhisperにはモデルがいくつか存在しますが、最も大きなモデルを動かすには少なくとも12GB程度のGPUが必要です。
ただ、Appleシリコン(M1やM2)の場合、Whisperは現状、Appleシリコン向けのチューニングがまださほど行われていないため、NVIDIAのGPUを使うよりも多少遅いものの現実的な時間で、ある一定のレベルまでのものを動かすことは可能です。とはいえ、メモリ容量の問題なども関わってきますので、それなりに性能が高いものが必要です。
ということで、モデルの学習ではなく、音声をテキストに変換するということですらそれだけのメモリが必要だということ、ディープラーニングをオフィス用のノートパソコンですべて行おうとするのはできなくはないけれども難しいということは知っておいてください。
GPUやハイスペックマシンを用意できない時の解決策
とはいえ、高価なものはそう簡単に用意できるものではありませんので、解決策を2つご紹介したいと思います。
1.Google Colaboratory
これならGoogleのリソースを使い、Google専用の行列演算に特化した演算機であるTPUを使用することができますので、ノートパソコンでもそれなりに早い動作で結果を出すことができます。もちろんメモリに限界があるため万能ではありませんが、現実的な速度で学習できるため、推論に使うには十分です。
ただ、クラウド上のサービスであるため、データをクラウドに上げなくてはいけないこと、無料利用に制限がありますので、どこまで利用するかは要検討ではあります。
もちろん資金に余裕があるのであればAWSやAzureなどの有料のクラウドサービスを利用するでもかまいませんが、結構な金額に跳ね上がる可能性ありますのでご注意ください。
2.APIを利用する
最近、APIを提供してくれるサービスが増えていますが、ChatGPTにも有料のAPIがあります。そして、つい先日、WhisperのAPIが発表されました。
APIを使えばいろんなことが試せます。サービスを使うか、APIを使うかで言えば、APIの方が生のデータがそのまま返ってきやすいため、反応を調べたいならAPIの方が便利です。ただ、APIにはUIがないため、何かしらのプログラミング言語でアプリを作ることになりますが、大抵はたった数行のプログラミングで終わると思います。
ちなみにこういったアプリを作る場合や、使い方の説明の際にはPythonで書かれていることが非常に多いのですが、なんにせよ、いずれかのプログラミング言語で書くことになりますので、Pythonが使えればその幅が広がりますし、入りやすいPythonから入ると進めやすいのではないかと思っています。
さいごに
昨今、AIが人の仕事を助けてくれる世界が非常に近づいてきたなと感じています。ただその反面、まだ完全ではないため、人の能力の方が圧倒的に高いものもあります。もちろん今後、AIが加速的に進化していく可能性はありますが、だからといって人が何かを失い、あきらめなくてはならないという事にはならないと考えています。むしろ共同で便利な世の中を作っていくようなものになっていくと思います。
こうしたツールが出てきて、いろいろなことが試せる機会ですので、ぜひ試してみてください。
その中で、自分でインターフェースを作ってみたり、APIで自動化してみたり、さらに一歩進んでディープラーニングの世界でファインチューニングにチャレンジしてみたり、どんどん飛び込んでいってもらえればと思います。
その入り口としてまず、Pythonの基本的な使い方を学んでもらえれば、ネット上に公開されているサンプルコードが読めるようになりますし、カスタマイズもできるようになるはずです。また、ディープラーニングの世界はPython周辺のエコシステムと共同で伸びていますので、環境を作って自分で試すときにはPythonができればより便利にディープラーニングを行うことが可能です。
今回のお話が調べるきっかけとなり、チャレンジする良い機会になれば嬉しいです。