CCCMKホールディングス TECH LABの Tech Blog

TECH LABのエンジニアが技術情報を発信しています

ブログタイトル

GPT-3の論文を読んでいます!

こんにちは、技術開発の三浦です。クリスマスが終わって、いよいよ2022年も終わりが近づいてきました。この記事が今年最後の投稿になりますので、最初にちょっと今年の振り返りをしたいと思います。

今年、私にとって大きなインパクトになったのが自然言語モデル"Transformer"です。

techblog.cccmk.co.jp

techblog.cccmk.co.jp

"Transformer"は以前から名前は知っていたのですが、今年初めて実際に触れることが出来ました。実際に触れてみると、その汎用性やタスク設定の柔軟さなど、これまで自分が抱いていた機械学習に対する認識が大きく改められました。

あとは"DALLE-2"や"Stable Diffusion"といったテキストから画像を生成する技術が大きな注目を集めました。この領域は進歩がとても速いように感じており、きっと来年の今頃にはもっと高性能なText-to-Imageのモデルが登場しているのでは・・・と思います。

techblog.cccmk.co.jp

私個人の話だと、今年人生初の英会話レッスンを始めました。英語を聞いたり話したりする能力はなかなか簡単には上がりませんが、ちょっとずつ英語が聞き取れるようになったり英文が書けるようになったのでこのまま続けていきたいな、と思います。

そして今年は世界中で色々なことがあり、考えさせられることが多い一年でした。来年は穏やかで、平和な一年になってほしいと願っています。

さて、今年最後のこの記事では巨大なサイズの言語モデル"GPT-3"について最近調べて知ったことをご紹介したいと思います。"GPT-3"(Generative Pre-trained Transformer3)は2020年にOpenAIによってリリースされた、人間のようにテキストを生成することが出来るTransformerをベースにしたモデルです。様々なタスクを"プロンプト"の形で"GPT-3"に与えると、それに対する回答を自然なテキストで生成することが出来ます。

"GPT-3"を使ったサービスは日本でも色々展開されており、会話の中で"GPT-3"が取り上げられることが増えてきたように感じます。なんとなく"GPT-3"はすごい!ということは知っていたものの、そのすごさや"GPT-3"の特徴はあまり理解していませんでした。そこで"GPT-3"の論文を読み、その特徴を調べてみましたので今回の記事でまとめてみたいと思います。

参考論文

  • Title: Language Models are Few-Shot Learners
  • Authors: Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, Dario Amodei
  • Submit: Submitted on 28 May 2020 (v1), last revised 22 Jul 2020
  • URL: https://arxiv.org/abs/2005.14165

GPT-3

"GPT-3"は"Transformer"をベースにしたモデルで、その特徴はその中に含まれる巨大なパラメータ数にあります。そのパラメータ数は175Billion, つまり1,750億になるそうです。"GPT"が117Million(1億1,700万)、"GPT-2"が1,542Million(15億4,200万)のパラメータで構成されていることから見ても、"GPT-3"は本当に巨大なモデルであることが分かります。これだけの大きなモデルに期待されることとして、大量の言語データを読み込んで幅広い知識をモデルのパラメータ内に保存出来るのでは、ということです。

事前学習データ

"GPT-3"を事前学習させるためのデータも大規模です。"GPT-3"の事前学習データは様々なWeb上のテキストデータで構成されています。特に大きな割合を占めているのが"Common Crawl"という世界中のWebサイトからクローリングして収集されたデータです。"Common Crawl"は大量のデータですが、データの質の面で学習用データとして不適切なものも多いそうです。そこでフィルタリングの処理を事前に施しています。具体的には高品質なデータセットからサンプルしたデータを正例、"Common Crawl"からサンプルしたデータを負例とし、テキスト分類モデルを構築します。このテキスト分類モデルの出力スコアはデータの品質を表す度合いととらえることが出来るため、このスコアが高いデータを"Common Crawl"からサンプルするようにします。また、大部分が重複しているデータも含まれているため、そういったデータは除外します。

"GPT-2"では事前学習データに"WebText"という独自に収集されたデータが使われていますが、"GPT-3"でも使用されています。"WebText"データセットは掲示板型ソーシャルニュースサイト"Reddit"の一定評価が付いた投稿に紐づいたリンクから収集されたデータセットです。

In-context learning

"GPT-3"がどうして様々な言語タスクに対応できるのか。その要因として考えられているのがこの"In-context learning"です。事前学習データに含まれるテキスト(Sequence)の中にはタスク(計算や翻訳など)とそれに対する回答が含まれているものがあり、それらを事前学習中に学ぶことでモデルが様々なタスクに対応できるようになります。これを論文では"In-context learning"と呼んでいます。理屈は分かるものの、それを本当にするためには"GPT-3"の大量のパラメータが必要・・・ということですね。

Language Models are Few-Shot Learners, Figure 1.1(https://arxiv.org/abs/2005.14165)

様々なタスクへの応用

"GPT-3"の汎用性はどのように活かすことができるのか。これが実は一番知りたかったことです。事前学習済みの"GPT-3"を活用する手法として"Few-Shot learning"があります。"GPT-3"に何かタスクを解かせたい時、入力するテキストには"タスクの説明文"と"指示(プロンプト)"を含めます。"Few-Shot learning"ではさらに解決方法を表す"例"をいくつか含めます。"GPT-3"は"Few-Shot learning"において"タスクの説明文"と"例"を読み、文脈やタスクを理解して"指示(プロンプト)"に続く最適なタスクへの回答を生成します。

面白いのはこの間モデルのパラメータの更新はしない、という点です。モデルの学習といえばパラメータの更新、というのが自分にとっては自然な流れだったため、"Few-Shot learning"の考え方は本当に新鮮でした。

Language Models are Few-Shot Learners, Figure 2.1(https://arxiv.org/abs/2005.14165)

"Few-Shot learning"で提示する例の数は多いほど精度が高くなりますが、モデルが読み込めるテキストの長さに制限があるため、10~100くらいが使われます。この"Few-Shot learning"によって、様々な言語タスクにおいて、当時の最高精度(SOTA)のアプローチよりも高い精度を"GPT-3"が出せることが論文の大部分で示されています。

まとめ

ということで、今回は以前から気になっていた"GPT-3"について、論文を読んで理解したことをまとめてみました。特に"Few-Shot learning"の考え方はとても新鮮で、刺激を受けました。"GPT-2"でやるとどうなるんだろう?などなど、色々と試してみたいなと思いました。

これで今年の私の投稿は最後になります。1年間、このブログを読んでいただきありがとうございました。また来年も色々な技術に触れ、このブログを更新していきたいと思います!それでは良いお年をお迎えください!