シリーズのコンセプト
本シリーズのコンセプトは、自然言語処理の最先端の技術をわかりやすく解説することである。初心者でも理解できるように数式を使わずに自然言語処理の概念と用途のみ紹介する。
GPT3モデルが誕生した背景
自然言語処理でタスクを解決する手段としては3段階的に進化してきている。GPT3は既に未来の第一歩を踏み出してきた。
GPT3モデルの概要
GPT3は2020年5月にOpen AIから発表されたテキストを生成するモデルである。以前に出したGPTやGPT2と比べて、モデルの構造が同じく、単純にデータを増やして、モデルのサイズを大きくしている。
モデルはTransformerのDecoderで構成されている。学習方法としては、テキストをインプットし、次の単語を予測させて、間違っていればモデルにペナルティ与えるやり方。
モデルのサイズがとにかく大きい。1,750億のパラメータ数で、人間の脳にあるニューロンの総数の2倍にもなる。また、学習に利用したデータのサイズも大きくて、570GBのテキストデータを利用した。データセットの中で、Wikipediaや、インタネットでクロールしたウェブページが多い。
Zero-shotとは
GPT3のサイズが約45TBほどあり、大きすぎて普通のコンピューターであればそもそもメモリすら乗らない。よって、通常のモデルのようにFine-tuning(パラメータの再調整)するのではなく、学習済みのモデルをそのまま使う。このやり方はZero-shotと呼ぶ。
具体的なやり方としては、まずタスクの説明と具体的な質問をインプットする。その後、モデルにその質問に対する答えを出力させる。このとき、モデルは学習済みのパラメータをそのまま使う。
例えば、図にある例で、「Translate English to Frrench:」はタスクの説明、その後の「Cheese =>」は質問である。質問の中にある「=>」の記号は、モデルに答えを出力させるための記号である。
以上はインプットとなる。それに対して、モデルに文書を出力させ、[EOS](End of Sentence)のTokenが出力されたら終了する。
Zero-shotにある「Zero」の意味は、モデルに見せるデータがないという意味である。同じく考え方で、One-shotとFew-shotという言葉もある。One-shotは、モデルに1つのデータを見せて、Few-shotは、モデルに少数のデータを見せて、そのデータに対するタスクを解決することである。
教師あり学習となる「Fine-tuning」と同じようにデータを見せているが、Fine-tuningとは異なり、One-shotとFew-shotのほうはタスクの例としてモデルに見せているに過ぎない。モデルのパラメータを再調整しないことは「Fine-tuning」と根本的な違うところである。
Zero-shotをどうやって他のタスクに適用するか
GPT3は言語生成のモデルになっているため、すべての自然言語処理のタスクを質問応答の形式に変換しで対応できる。
論文の中で数十個のタスクのやり方を示したが、ここでいくつかを紹介する。
常識に関する質問応答
Context → Organisms require energy in order to do what? =>
Correct Answer → mature and develop
文脈→生物は何をするためにエネルギーを必要とするのか =>
正解→成熟・発達
類比推論
Context → medicine is to illness as law to =>
Correct Answer → anarchy
文脈→医学と病気 法律と⇒
正解→アナーキー(無政府状態)
英文字の並び替え
Context → Please unscramble the letters into a word, and write that word: asinoc = =>
Target Completion → casino
文脈→文字を単語に分解し、その単語を書いてください:asinoc=⇒
正解→ casino(カジノ)
数学の問題
Context → Q: What is (2 * 4) * 6? =>
A:Target Completion → 48
Zero-shotの精度
GPT3はZero-shotだけでタスクを解決できる。また、複数のタスクにおいてFine-tuningで学習したモデルよりも精度が高い。
これからいくつかのタスクで精度を比較する。
TriviaQA
まずは、TriviaQAという質問応答のデータセットで比較する。このデータセットは事実に関する質問を出す。
以下はデータのサンプル
Q:Miami Beach in Florida borders which ocean?
A:Atlantic Ocean
日本語訳:
Q:マイアミビーチはどの海に面しているか?
A:大西洋
通常はモデルのほうで情報検索をして回答するが、GPT3は多くのデータを学習したため、外部情報を使わずに回答できる。
(余談だが、本文はVscodeのMarkdownで書いた。コード自動補完のPlugin、Github Copilotを利用している。CopilotはGPT3の後でデータOpen AI Codexをベースとしていて、下図のグレーの斜体のように、書いている最中に正解となる予測が出てきた。)
代名詞当て
代名詞当てとは、文中の代名詞を当てるタスクである。例えば、以下のような文があるとする。
Robert woke up at 9:00am while Samuel woke up at 6:00am, so he had less time to get ready for school. Options: Robert, Samuel
日本語訳: ロバートは9時に起きたが、サムエルは6時に起きた。彼は学校に行く時間が少なかった。
この文中の「he」は誰を指しているのかを2択の中で当てることがタスクである。この「he」は文法上曖昧性を持ち、構文解析のみで解決不能だが、文脈から推測できる。よって、モデルの文脈理解能力を評価するタスクとなる。
評価するデータセットはWinogradというものである。ランダム選択すると50%の正解率になるが、GPT3は80%近くの正解率を出すことができた。人間や、Fine-tuningした最先端のモデルよりは精度が低いが、すでにRoBERTaとほぼ同等の精度を出している。
読解
ここの読解は、文書を与えて、文書にある内容に基づいて質問に答えるタスクである。例の文書が長いため割愛する。
評価したデータセットはCoQA。こちらも人間に違い精度を示している。
数学計算
数学計算は、普通に数式を与えて、その答えを求めるタスクである。例えば、
Q: What is 48 plus 76?
A: 124
この図にある線は違うパターンの計算の精度を示している。175Bのモデルでも苦手な計算があることがわかる。面白いのは、3桁以内の足し算、引き算についてパラメータは6.7Bのモデルまでは全然だめだが、その後精度が急に上がった。
新語理解と利用
新語理解と利用は、学習に見せたことがない新しい語を理解して、それを使って文を作るタスクである。
このタスクについて評価用なデータセットがないため、モデルが生成したいくつの例を上げる。
例えば、以下のように「Gigamaru」という捏造した単語を説明し、それを使って文を作らせる。
Q: A "Gigamuru" is a type of Japanese musical instrument. An example of a sentence that uses the word Gigamuru is
A: I have a Gigamuru that my uncle gave me as a gift. I love to play it at home.
また、新しい車の名前を与えて、それを使って文を作らせる。
A "Burringo" is a car with very fast acceleration. An example of a sentence that uses the
word Burringo is:
In our garage we have a Burringo that my father drives to work every day.
なぜGPT3がFine-tuningしないのに様々なタスクをこなせるのか
一言で解釈すると、学習データにタスクの解決に寄与するテキストが含まれているためである。 例えば、機械翻訳をするには、普通の場合は対訳データが必要である。一方、GPT3に学習させたデータの中で、対訳データが無いが、対訳データと似たような内容が含まれている。以下は学習データの中で抽出した例である。
「〜〜を言い換えると〜〜」のようなパターンからモデルが対訳を学習していることと思われる。
GPT3の利用方法と利用事例
残念ながら、GPT3はモデルが大きいため、現在はOpenAIのAPIを通じないと利用できない。かつ、APIの利用は処理するTokenごとに料金が発生するため、大量のテキストを処理するには高額な料金がかかる。
コードの説明:stenography
stenographyはGPT3のAPIを利用して、コードの説明を生成するツールである。
自動営業メール生成:reply.io
reply.ioは営業メールを自動生成し、かつ返信をもらえる確率を可視化するツールである。
コードの自動補完
コードの自動補完もできるが、今の世の中によく使われているのはGPT3と似た構造で、Githubにあるコードを学習したGithub Copilot。
本文を書く際にもGithub Copilotを利用している。
Latexと英語の対訳を行うツール
これもできるが、ツールとしてはない。試しにGithub Copilotでやってみた。
緑の字はを入力した後、Copilotがグレーの字を生成した。
終わりに
本文は自然言語処理への興味を惹く目的で主にGPT3の良いところを紹介した。
GPT3は単純にラベリングなしのテキストデータでモデルを学習し、Fine-Tuningモデル並みの精度を上げた。それにより、人工知能を人工が多いほど知能的になる現状から脱却させた。
パラメータ数の変化による精度の変化を見ると、その上がり勢いが鈍っていない。これからモデルのパラメータの有効活用方法と計算スピードの向上により、GPT3のような大量なテキストから学習した生成型モデルが最終的に汎用化AIとしての役割を果たすのではないかと思う。
次回の予告:
なぜTransformerモデルは自然言語処理業界を救う神か ー Transformerの解説