はじめに
私たちが普段使っているLLMはすべて「言語モデル」という技術がベースになっています。この記事では、その言語モデルがどのように進化してきたのか、その歴史的な流れを追い、現在の大規模言語モデルに発展した流れをまとめます。
1. 言語モデルとは?
そもそも「言語モデル」とは何でしょうか?一般に、言語モデルの定義は以下とされています。
言語モデル (Language Model):
単語の系列(文章) $x_{1},x_{2},\cdot\cdot\cdot,x_{L}$ に対して、その生成確率 $p(x_{1},x_{2},\cdot\cdot\cdot,x_{L})$ を割り当てる確率モデルのこと。
簡単に言えば、「その文章がどれくらい "ありそうか"」を確率で示すモデルです。
例えば、以下のように、文法的に正しく意味が通る文には高い確率を、そうでない文には低い確率を割り当てます。
-
p(私 は 昨日 美味しい ラーメン を 食べた)= 0.03 (ありそう) -
p(私 は 昨日 美味しい 机 を 食べた)= 0.00002 (文法は合っているが、意味が変) -
p(私 食べた 昨日 を 美味しい ラーメン)= 0.000001 (文法が変)
なぜ確率が必要なのか?
この「生成確率」をうまく推定できると、様々なタスクが解けるようになります。
-
翻訳: (ある英語文) に続くのに、最も "ありそうな" (ふさわしい) 日本語は?
-
QA: (ある質問文) に続くのに、最も "ありそうな" 答えは?
-
コード生成: (ある指示文) に続くのに、最も "ありそうな" コードは?
このように、多くの言語タスクが「次に続く最も "ありそう" な単語(系列)を予測する」という確率の問題として扱えます。
2. 確率の計算方法:自己回帰言語モデル
では、どうやって文章全体の確率 $p(x_1, ..., x_L)$ を計算するのでしょうか。
そのために使われるのが**「確率の連鎖律 (Chain Rule)」**です。
$$
p(x_{1},x_{2},\cdot\cdot\cdot,x_{L})=p(x_{1})p(x_{2}|x_{1})\cdot\cdot\cdot p(x_{L}|x_{1},x_{2},\cdot\cdot\cdot,x_{L-1})
$$
これは、「$i$番目の単語の確率」を「$i-1$番目までの単語(文脈)が与えられたときの条件付き確率」として、すべて掛け合わせる方法です。
このモデルは、自分自身(それまでに出力した単語)を参照して次の単語を予測するため、自己回帰言語モデル (Autoregressive Language Model) と呼ばれます。
このアプローチにより、問題は「ある文脈が与えられたときに、次にどの単語が来るかの条件付き確率 $p(x_L | x_1, ..., x_{L-1})$ をどう求めるか?」という課題に絞られます。
例えば、「私 は 昨日 美味しい」という文脈が与えられたとき、辞書にあるすべての単語のうち、どれが次に来る確率が高いかを計算します。
-
p(ラーメン | 私 は 昨日 美味しい)= 0.3 -
p(パン | 私 は 昨日 美味しい)= 0.1 -
p(机 | 私 は 昨日 美味しい)= 0.0001
3. ニューラル言語モデルと「Transformer以前」の課題
この「条件付き確率」を推定するために、ニューラルネットワークを使ったモデルが「ニューラル言語モデル」です。
大量のWebデータなどを使って、正解の単語(例:「ラーメン」)の確率が最大になるように学習(訓練)させます。
初期のニューラル言語モデルには、RNN (Recurrent Neural Network) や CNN (畳み込みニューラルネットワーク) などが使われていましたが、大きな課題がありました。
課題1:長い文脈(コンテキスト)の処理が難しい
RNNやCNNは、あまりにも長い単語の系列を扱うのが苦手でした。
例えば翻訳タスクでは、入力された英語の文全体の意味をしっかり記憶して、対応する日本語を出力する必要がありますが、これが困難でした。
課題2:学習の並列化ができず、スケールしない
特にRNN系列のモデルは、データを「逐次的」(単語を一つずつ順番)に処理する必要があります。
この性質上、GPUなどを使った学習の並列化が困難で、モデルやデータを大規模化(スケール)させることができませんでした。また、勾配消失問題など、学習自体が難しいという問題も抱えていました。
4. 革命:Transformerの登場
これらの課題を解決したのが、2017年にGoogleが発表した「Transformer」です。
論文のタイトル "Attention is All You Need" は非常に有名です。
Transformerは、RNNの逐次的な処理構造を撤廃し、Self-Attention という仕組みを導入しました。
Self-Attentionの詳細は複雑なので割愛しますが、この仕組みによって、入力された文章全体を並列で一括処理できるようになったのが最大のブレイクスルーです。
これにより、RNNが抱えていた「並列化できずにスケールしない」という課題が解決され、桁違いに大規模なデータで、巨大なモデルを学習させることが可能になりました。
当初、Transformerは主に翻訳タスクなどで、その高い性能が検証されました。
5. 学習方法のパラダイムシフト:「事前学習」
Transformerの登場とほぼ同時期に、モデルの「学習方法」にも大きな変化が訪れました。それが「事前学習 (Pre-training)」という考え方です。
LLM以前
昔は、タスクごとに専用のモデルを、それぞれ個別のデータで学習させるのが一般的でした。
-
翻訳がしたければ、「翻訳モデル」を「翻訳データ」で学習
-
要約がしたければ、「翻訳モデル」を「要約データ」で学習
-
読解がしたければ、「読解モデル」を「読解データ」で学習
LLM(大規模言語モデル)の時代
LLMの登場により、タスクごとに専用のモデルの学習が容易になりました。
-
事前学習 (Pre-training):
まず、Web上のテキストなど、超大規模なコーパス(テキストデータ)を使って、「汎用的なLLM」を1つだけ作ります。このモデルは、特定のタスクに特化しておらず、ただひたすら「次の単語を予測する」ことだけを学習します。 -
事後学習 (Fine-tuningなど):
次に、この「事前学習済み」の汎用LLMをベースにして、解きたい個別のタスク(翻訳、要約など)に適応させます。これをファインチューニングや強化学習と呼びます。
この「①汎用モデルを事前学習 → ②個別タスクでファインチューニング」という流れが、現在特定のタスク特化LLMの開発の主流となっています。
まとめ
-
最初は「次の単語の確率」を求める単純な確率モデルだった。
-
ニューラルネット(RNNなど)で推定しようとしたが、長い文脈やスケール化に課題があった。
-
Transformer が登場し、並列処理が可能になりスケール化の道が開けた。
-
事前学習 という学習方法の登場により、強力な汎用LLMを作れるようになった。
言語モデルの進化は、アーキテクチャ(Transformer)と学習方法(事前学習)の両輪で進んできたことが分かりました。