前の章では、BERTによって、機械が文脈を前後から読み取る力を大きく伸ばした話を見てきました。
BERTは、ひとことで言えば文章を深く読むモデルでした。
それに対して、この章で見るGPTの流れは、ひとことで言えば、文章を書き進めるモデルです。
ここが、BERTとGPTの大きな違いです。
自然言語処理の歴史の中で、機械はまず「読めるように」なっていった。
そして次に、「自然に書けるように」なっていった。
その転換点にいるのが、GPTです。
GPT
GPTは、OpenAIから登場したモデルです。
名前は Generative Pre-trained Transformer の略で、ざっくり言えば、事前学習によって、文章を生成できるようにしたTransformerモデルという意味になります。
ここでまず大事なのは、BERTとGPTでは得意な仕事の向きが違う、ということです。
BERT→ 文脈を前後から見て、文章を読むのが得意
GPT→ これまでの流れを見て、次の言葉をつないで書くのが得意
BERTが読書家に近いなら、GPTは語り手、あるいは書き手に近い存在です。
GPTと事前学習
この違いは、事前学習のしかたにも表れています。
BERTでは、前の章で見たように、
Masked Language Model→ 文の一部を隠して、その単語を当てる
Next Sentence Prediction→ 二つの文が自然につながるかを考える
という学習が使われていました。
つまりBERTは、前後の文脈を見ながら、この単語は何か、この文の次にこの文は自然か、を考えることで、文章を深く読む力を育てていたのです。
それに対してGPTは、もっとシンプルで、でもとても強力な学び方をします。
それが、次単語予測です。
たとえば、
今日は雨が降っているので、私は__
という文があったら、その続きに来そうな言葉を予測します。
これをひたすら大量の文章で繰り返すことで、GPTは
・文の流れ
・言い回しのパターン
・話のつながり
・知識の断片
を学んでいきます。
つまりBERTが穴あき問題や文どうしの関係問題を解くように学ぶモデルだとすれば、GPTは文章の続きを書く練習をひたすら続けることで学ぶモデルなのです。
Transformerのデコーダ
ここで、BERTとGPTの構造の違いも大事です。
BERTは、Transformerのエンコーダ部分を使ったモデルでした。
だから、入力された文章を深く読むことに向いていました。
一方でGPTは、Transformerのデコーダ部分を使うモデルです。
デコーダは、前に出てきた情報を見ながら、次に何を出すかを決める役割に向いています。
だからGPTは、ここまでの言葉の流れを見て、その先を続けるという仕事にぴったりなのです。
たとえるなら、BERTは文章に赤線を引きながら意味を読み取る読者、GPTは書きかけの原稿を前から読み返しながら次の一文を綴っていく書き手に近いでしょう。
同じTransformerの流れにありながら、BERTとGPTは役割の向きが違うのです。
GPT-n
ここで「GPT-n」と書かれるのは、GPT-2、GPT-3、GPT-4のように、GPT系モデルが世代を重ねながら発展してきた流れをまとめて指す言い方です。
最初のGPTも大事でしたが、モデルが大きくなり、学習データが増えるにつれて、GPT系はただ短い文を続けるだけでなく、
・より自然な文章を書く
・長い流れを保つ
・指示に沿って答える
・要約や説明を書く
・対話らしい返答をする
といったことまで、だんだん上手になっていきました。
たとえるなら、最初は短い作文しか書けなかった書き手が、たくさんの本を読み、たくさんの文章を学び、やがて手紙も説明文も物語も綴れるようになっていく感じです。
つまりGPT-nとは、次の言葉を予測する学びを積み重ねることで、文章を書く力を大きく伸ばしてきたモデルの流れなのです。
大規模言語モデル(LLM)
ここで出てくる大きな考え方が、大規模言語モデル(LLM)です。
LLMは、Large Language Modelの略で、ひとことで言えば、非常に大きな規模で学習された言語モデルのことです。
ここでいう「大規模」とは、
・パラメータ数が多い
・学習データが膨大
・計算量も大きい
という意味です。
つまりLLMは、少しの例文だけで学ぶのではなく、膨大な量の文章を読み込むことで、言葉の世界を広く身につけたモデルだと言えます。
だからLLMは、
・翻訳
・要約
・質問応答
・文章生成
・説明
・対話
など、さまざまな言葉の仕事に対応しやすくなっていきました。
つまりLLMとは、たくさんの言葉を学ぶことで、いろいろな場面で言葉を返せるようになったモデルなのです。
PaLM
PaLMも、LLMの流れの中にある代表的なモデルの一つです。
ここで大事なのは、PaLMを一つの固有名詞としてだけ覚えるより、LLMの時代には、モデルがさらに大きくなり、より広い言語能力を目指す方向へ進んだという流れをつかむことです。
PaLMは、そうした大規模化・高性能化の流れの中で生まれた代表例の一つです。
GPTという名前が「OpenAI側の大きな流れ」を代表しているなら、PaLMは「Google側の大きな流れ」を代表する名前のひとつです。
どちらも大規模言語モデルですが、PaLMはGoogleの研究の中で育ってきた言語モデルの節目として見るとわかりやすくなります。
つまりPaLMは、LLMという大きな森の中にある一本の太い幹であり、その先にPaLM 2やMed-PaLMのような枝が伸びていった、と考えると整理しやすいでしょう。
ChatGPT
そして、私たちにとっていちばん身近なのが、ChatGPTです。
ChatGPTのおもしろいところは、GPT系の「文章を続けて書く力」が、対話の形で現れていることです。
人は日常で、
・質問する
・相談する
・言い換えを頼む
・アイデアをもらう
・文章を書き直してもらう
というふうに、言葉を会話の流れの中で使っていますよね。
ChatGPTは、そうしたやりとりの流れの中で、返答を自然な文章として返せるように整えられたモデルです。
つまりChatGPTは、突然まったく新しい魔法として現れたのではなく、GPT系の「書く力」と、LLMの「広く学んだ力」が、対話しやすい形になったものだと考えるとわかりやすいです。
だから今では、
・調べもの
・要約
・リライト
・勉強の補助
・雑談
・企画の相談
など、ふつうの人の日常の中でも広く使われるようになりました。
まとめ
ここまでを振り返ると、流れはかなりはっきりしています。
BERTは、文脈を前後から読んだ
GPTは、流れを見ながら次の言葉を書いた
LLMは、膨大な言葉を学ぶことで多くの仕事に対応しやすくなった
ChatGPTは、その力を対話の形で私たちが使いやすくした
つまり、自然言語処理モデルの発展は、
読む → 書く → 対話する
という広がりを見せているのです。
これは、機械がただ言葉を分析するだけの存在から、言葉を返せる存在へ近づいてきた流れでもあります。
GPT
→ OpenAIから登場したモデル
→ BERTの「読む」に対して、「書く」ことに強い
→ Transformerのデコーダ部分を使う
→ 次単語予測で事前学習する
GPT-n
→ GPT系モデルの発展の流れ
→ 世代を重ねるごとに、より自然で柔軟な文章生成ができるようになった
大規模言語モデル(LLM)
→ 膨大なテキストを学習した大規模な言語モデル
→ 翻訳、要約、質問応答、生成など幅広い仕事に対応しやすい
PaLM
→ LLMの流れの中にある代表的な大規模モデル
→ より大きく、より広い言語能力を目指した例の一つ
ChatGPT
→ GPT系とLLMの流れの上にある、対話しやすい形のモデル
→ 文章生成の力を会話として使いやすくした存在
自然言語処理やディープラーニングを勉強していると、「デコーダ」という言葉が何度も出てきます。
オートエンコーダにも出てくる。Seq2Seqにも出てくる。Transformerにも出てくる。
そしてGPTの説明でも、「Transformerのデコーダ部分を使っている」と言われる。
そうなると、ふと疑問がわいてきます。
そのデコーダって、みんな同じものなのだろうか……。
結論から言えば、似ているけれど、まったく同じではありません。
ただし、どれもまるで無関係というわけでもありません。
この言葉には、ちゃんと共通する芯があります。
まず、「デコーダ」という名前の中に共通しているのは、受け取った表現をもとに、何かを出力する側という役割です。
エンコーダが「受け取って、まとめる」側だとすれば、デコーダは「そこから、外へ返す」側です。
たとえるなら、エンコーダが荷物を整理して小さな箱に詰める人だとしたら、デコーダはその箱を開けて、中身を取り出したり、別の形にして返したりする人に近いです。
だから「デコーダ」という言葉は、いつもなんとなく、内側でまとめられたものを、外へひらく役を指しているのです。
でも、その「ひらき方」はモデルごとに少しずつ違います。
■ オートエンコーダのデコーダ
オートエンコーダでは、エンコーダが入力を圧縮し、デコーダがそこから元の入力を再現する、という流れになっていました。
だから、オートエンコーダのデコーダは、圧縮された情報から、もとの姿をできるだけ復元する人です。
たとえば旅の荷物を小さなスーツケースに詰めたあとで、旅先でそれを開いて、服や本や小物をできるだけ元の形に取り出すようなものです。
ここでのデコーダは、「戻す」仕事をしています。
■ Seq2Seqのデコーダ
Seq2Seqでは、少し役割が変わります。
以前見たように、Seq2Seqには
・読む塔(Encoder)
・書く塔(Decoder)
がありました。
ここではエンコーダが文を読み、その意味を受け取り、デコーダがその意味をもとに別の文を書いていきます。
つまり、Seq2Seqのデコーダは、読み取った意味を、別の系列として書き直す人です。
オートエンコーダのように「同じものを元通りに戻す」わけではありません。
英語の文を日本語の文にするように、別の形で返すのです。
たとえるなら、外国語の手紙を読んで、その内容を日本語の手紙としてあらためて書き直す翻訳者に近いです。
ここでのデコーダは、「言い換えて返す」仕事をしています。
■ Transformerのデコーダ
Transformerに来ると、デコーダはさらに現代的な顔になります。
Transformer全体では、
・エンコーダが入力を読む
・デコーダが出力を作る
というSeq2Seqの流れを受け継ぎつつ、その中身のしくみが変わっています。
デコーダは、それまでに出てきた出力や、必要ならエンコーダ側の情報を見ながら、次に何を出すかを決めていきます。
ここで活躍するのが、
・Self-Attention
・Source-Target Attention
でしたね。
つまりTransformerのデコーダは、ただ復元するのでも、ただ機械的に置き換えるのでもなく、流れを見ながら、次の言葉を組み立てていく人なのです。
たとえるなら、すでに書いた原稿を何度も見返しながら、その続きに自然な一文を綴っていく書き手に近いです。
■ GPTのデコーダ
ここで、ようやくGPTです。
GPTは、よくTransformerのデコーダ部分を使ったモデルと言われます。
でも、この説明だけを聞くと、「じゃあSeq2Seqのデコーダと同じなのかな?」と思ってしまうかもしれません。
ここが少しややこしいところです。
GPTのデコーダは、たしかにTransformerデコーダ型のしくみを使っています。
でもGPTには、Seq2Seqのように、別に大きなエンコーダがいて、その意味を受け取っているわけではありません。
GPTがしているのは、ここまでに与えられた言葉の流れを見ながら、その続きを自然に書くことです。
つまりGPTのデコーダは、オートエンコーダのように「元の入力を復元する人」でもなく、Seq2Seqのように「読んだ文を別の文に変換する人」でもなく、書きかけの原稿を見ながら、続きを綴る人なのです。
ここがGPTらしさです。
■ デコーダたちはこう違う
ここまでの違いを、物語っぽく並べるとこんな感じです。
オートエンコーダのデコーダ→ 小さな箱から荷物を元通りに出す人
Seq2Seqのデコーダ→ 読んだ手紙の意味を、別の言葉で書き直す人
Transformerのデコーダ→ これまでの流れを見ながら、次の言葉を組み立てる人
GPTのデコーダ→ 原稿の続きを自然に書いていく語り手
どれも「受け取ったものを外へ返す側」という意味では同じです。
でも、
・何を受け取るのか
・何を返すのか
・復元なのか、変換なのか、生成なのか
が違います。
だからデコーダたちは、同じ名字を持っているけれど、仕事は少しずつ違う家族みたいなものだと言えるかもしれません。
next ▶ 自然言語処理の活用例