LLM のテキスト 入門

ここまでの primer はすべて「整然とした固定長の数値データ」を扱ってきた —— 画像のピクセル、CSV のいくつかの列、線形代数 primer の 2D / 3D ベクトル。 だが現実の ML、特に LLM が扱うのはテキストだ。 テキストは ML が扱うデータの中でもとりわけ難しいもので、理由が 3 つある:長さが可変順序が重要、そして各トークンの意味が文脈に依存する。 この 3 つの組み合わせが、2017 年以前のあらゆるアプローチを打ち負かした。 Transformer はその 3 つを一気に解いた最初のアーキテクチャだ。 この primer は「なぜ Transformer が必要なのか」の地ならし;次の primer は Transformer そのもの。

01

テキストは可変長

「OK」は 2 トークン、Wikipedia 記事は数百万トークン。両方が同じモデルに入る必要がある。

これまでの primer に出てきた神経網の原語 —— 行列積、畳み込み、正規化 —— はほぼ全部「形状が固定」のテンソルを前提にする。画像分類器は 224 × 224 ピクセル。住宅価格の回帰は 4 次元の特徴ベクトル。ニューラルネットは 「固定形状の入力と出力をもつ関数」であり、その仮定は行列代数のあらゆる場所に 埋め込まれている。

だがテキストは協力しない。同じモデルが「OK。」(2 トークン)も処理し、 Wikipedia 記事(数百万トークン)も処理し、その間のあらゆる長さも処理しなければ ならない。自然な上限も下限もない。

深層学習以前の時代には、3 つの不器用な対処法があった —— 今もたまに使われている:

  • Pad(パディング)。最大長 L を決め、L より 短い入力には特別な [PAD] トークンを末尾に追加し、L まで 引き伸ばす。すべての入力が同じ形状になる —— が、バッチに Wikipedia 記事 1 本と 短いツイート 100 本が混じれば、計算の 99% がパディングに費やされる。
  • Truncate(切り詰め)。最大長 L を決め、それ以降は 切り捨てる。すると長い文書の末尾はモデルには見えない。翻訳なら文の半分が 翻訳されない、要約なら本当のオチが消える、コード補完なら関数シグネチャが 見えない。
  • Bag of features(特徴袋)。系列構造をそもそも捨てる。各文書を 単語頻度(または TF-IDF スコア)の袋として扱う —— 語彙サイズで決まる固定長 ベクトルで、入力長には依存しない。速いが、§2 と §3 の中身が全部消える。
3 つの文、必要なのは 1 つの固定形状生の文(長さがバラバラ)L=2OK.L=6Themodesawacat.L=13Thedeepmodesawthecatandbarkloudinthegard.3 つの文。長さ 2、6、13。ニューラルネットは統一された形状を望む。
1 / 3
ML モデルは固定形状を求めるが、文は協力してくれない。パディングは計算の無駄、トランケートは情報損失。

現代の Transformer ベースのシステムは、これらの工夫を「端で」組み合わせて使う(GPU は矩形テンソルが欲しいので、mini-batch 内では 依然パディングが必要)が、コアアーキテクチャは入力の各トークンを、総数に 関わらず同じやり方で処理する。Transformer に「固定の入力サイズ」は 埋め込まれていない。長さ 10 でも 10,000 でも動く。位置あたりの計算は同じで、 総計算量とメモリだけが長さに従って伸びる(悪名高い「2 乗」だが、それは後の話)。

可変長は昔は珍しかった。今やすべて。「コンテキストウィンドウ」が 1k → 4k → 32k → 128k → 1M トークンと拡大してきた歴史は、すべて 「この原語を 10 年前には誰も想像しなかった規模で動かす」物語だ。

02

順序が重要

「犬が猫を追った」と「猫が犬を追った」—— 同じ語、逆の意味。

可変長テキストを取り込む方法ができたら、次の楽な発想は:順序を捨てて、どの単語が 出たかだけ数える。これが Bag of Words(BoW)。可変長を扱いつつ固定長出力を 与える最も簡単な表現。タスクによっては(スパム判定、トピック分類)これでほぼ十分。 だが言語モデルに期待することの大半においては、致命的だ。

語順は「誰が誰に何をしたか」を符号化する。古典例:

A 文:The dog chased the cat.
B 文:The cat chased the dog.

BoW(A)  =  { the:2, dog:1, chased:1, cat:1, .:1 }
BoW(B)  =  { the:2, dog:1, chased:1, cat:1, .:1 }   ← 同一

同じ単語集合、まったく同じ BoW 表現。だが両文は逆の出来事を述べる。 BoW しか見ないモデルには区別がつかない。同じ問題の大きな版が至るところにある:

  • 「人が犬を噛む」(Man bites dog)—— ニュース性があるのは、 まさに「噛む側」と「噛まれる側」の順序が異例だから。
  • 「彼女が金を盗んだとは言ってない」—— どの語を強調するかで 7 通りの意味になる。 語順がなければそもそも話が始まらない。
  • 翻訳。英語の SVO、日本語の SOV、アラビア語の VSO。語順は文法の半分だ。
  • コード。x = a / bx = b / a はトークンが同じ。 順序だけが「どちらでどちらを割るか」を決める。
同じ多重集合、違う文A 文:dog → catThedogchasedthecat.「dog」が追いかけるThecatchasedthedog.A 文 —— 「The dog chased the cat.」 dog が主語。
1 / 3
語順は「誰が誰に何をしたか」を決める。語順を無視するモデルは、この 2 文を同じものと見なす。

Transformer 以前の妥協:

  • n-grams。単語を 1 つずつ数えるのではなく、隣接 n 個の 組を数える。バイグラムは 2 語、トライグラムは 3 語の順序を捉える。局所的には 機能する —— バイグラムは「chased the cat」と「the cat chased」を区別できる —— が、特徴空間が指数的に膨らみ(語彙の n 乗)、長距離の順序は依然捉えられない。 A と B の間に段落が挟まる「if A then B」は、現実的な n ではすべて 見えなくなる。
  • RNN。左から右へトークンを読み、これまで見たものを要約する 隠れ状態を持ち回る。順序は構造上尊重される。素晴らしい —— だが逐次なので訓練が 遅く、隠れ状態の容量は有限で、遠いトークンは押し出される。
  • テキストへの 1D CNN。畳み込みカーネルをトークン列上に滑らせる。 受容野の中の局所順序を捉える。並列化しやすい。だが受容野は有界 —— 層を積めば 線形に広がるが、段落級の依存は非現実的な深さなしには届かない。

Transformer の答え:位置エンコーディング(positional encodings)。各トークンの 埋め込みに、アテンションや FFN が動く前に「自分が系列のどこに居るか」の情報が 押される —— 位置 1 のトークンは「位置 47 にいる同じトークン」とは別物に見える。 これがなければ Transformer のアテンション自体は順序不変だが、これがあれば アーキテクチャは各トークンの居場所を知る。具体的な方式(sinusoidal、学習可能、 RoPE、ALiBi)は「どう位置を注入するか」を競うが、走らせる価値のある Transformer はみな何らかの形でこれを行う。

03

各トークンは文脈に依存する

「bank」は「deposit」の隣では金融機関、「river」の隣では川岸。

可変長と順序を完璧に扱えても、まだ 3 つ目の問題が残る:1 つのトークンには 1 つの意味しかないわけではない。意味は周りのトークンが決める。

  • 多義語。「bank」= 金融機関 or 川岸。「bat」= 夜行性哺乳類 or スポーツ用具。「Apple」= 企業 or 果物。英語だけでこの種の語が数千ある。
  • 代名詞・指示。「Alice が Bob に質問した。彼は答えを知らなかった。」 「彼」とは誰? 英語を読む人なら「Bob」と答える —— だがモデルは文脈から 推論する必要があり、その文脈は何トークンも離れていることが多い。
  • 省略。「私は店に行った。Bob も。」Bob は何をした? 店に行った。 2 つ目の文では動詞「行った」が省略されている;前の文から引っ張ってこねばならない。
  • 口調・皮肉。「ああ、最高。」は「素晴らしい」とも「人生最悪の日だ」 とも取れる、周りの全てが決める。

Transformer 以前の「単語の意味は何か」への答えは embedding だった: 単語ごとに固定長ベクトルを学習する。Word2Vec(2013)と GloVe(2014)は 語彙の各トークンに 1 つの密ベクトルを学習した。「king」は「queen」に近く、 「Paris」は「France」に近い。one-hot からは巨大な飛躍で、現代の NLP パイプラインの 多くは今でも「埋め込みテーブル参照」のようなものから始まる。

だが Word2Vec は「bank」のあらゆる出現に同じベクトルを与える。 「she sat on the river bank」でも「she walked into the bank」でも、開始時点での bank トークンの表現は同一。意味の差は埋め込みの上に乗る何かが下流で取り戻す 必要がある —— RNN は読みながら文脈を混ぜることで、ゆっくりとそれをやれる。 しかし埋め込みそのものは文脈非依存だ。

「bank」—— 1 つの単語、2 つの意味川岸の文脈(水の縁)Shesatbytheriverbank.= 水の縁Shewalkedintothemoneybank.「She sat by the river bank.」 隣が告げる:水の縁。
1 / 3
単語の意味は隣の語に依存する。静的埋め込みは 1 単語 1 点、文脈埋め込みは文ごとに別の点。

後知恵では当たり前の修正:固定埋め込みではなく文脈化された(contextualized)埋め込みを計算する —— ベクトル自身が周囲のトークンに依存する。 ELMo(2018)は双方向 LSTM でこれをやった。BERT と GPT(2018)は Transformer で やり、いまやほぼ全員がそれを使う。現代のモデルでは、「river bank」の 「bank」と「money bank」の「bank」は、最初の Transformer 層を出た時点で まったく異なるベクトルになる。Transformer はそのためにある。

文脈依存は多義語に限らない —— 言語のいたるところにある。各トークンの意味は 「系列内の他の任意のトークン部分集合」の関数だ。関連する文脈は 2 トークン先 (「not good」)のこともあれば、200 トークン先(段落前に紹介されたキャラクターを 指す「彼」)のことも、それ以前の会話全体ということもある。距離可変な依存関係が 普通であって、例外ではない。アーキテクチャはどのトークンもどのトークンにも 注目でき、しかも各層で行えるほど安価でなければならない。それがアテンションだ。

04

Transformer 以前の景色

どの先行手法も、3 つの性質のうち一部しか扱えない。

3 つの要件 —— 可変長、順序、文脈 —— が揃ったところで、当然の問いは「Transformer以前はどうしていたか」だ。答えは「一連の部分解で、それぞれが何かを得る 代わりに別の何かを失う」。おおまかな時系列で:

  • Bag of words / TF-IDF —— 可変長を扱う(出力サイズは語彙で決まり 固定)が、順序も文脈も丸ごと捨てる。それでも浅い分類(スパム、感情、トピック) では今でも意外と健闘する。
  • n-grams —— 連続 n 個の組を数えることで局所順序を 捉える。特徴空間が爆発し(語彙の n 乗)、長距離の順序は見えない。
  • RNN / LSTM / GRU —— 左から右(双方向 RNN なら両方)へ読み、 隠れ状態を持ち回る。可変長と順序はネイティブに扱える。文脈は原則扱えるが、 隠れ状態の容量は有限で、長系列での勾配流は脆弱(誤差逆伝播 primer §3 —— 勾配消失)、訓練も逐次で並列化できない。
  • テキストへの 1D CNN —— 系列軸に沿って畳み込み。並列化しやすい。 受容野内の局所順序と局所文脈は捉えるが、外側は捉えない。層を積めば受容野は 深さに従って線形に広がるが、文書級の推論には遠く及ばない。
  • RNN にアテンションを足す —— 橋。Bahdanau et al.(2014)と Luong et al.(2015)は encoder-decoder RNN にアテンション機構を足し、デコーダが 最後の隠れ状態だけでなく任意のエンコーダ隠れ状態を参照できるようにした。 翻訳品質が劇的に向上。同時に伏線が生まれた:RNN そのものは要らないのでは?

Vaswani et al. の 2017 年の論文、タイトルは 「Attention Is All You Need」がその伏線への直接の答えだった。RNN を丸ごと捨てる。アテンションだけを、すべての 位置で並列に、層に積み重ね、位置エンコーディングの上に置く。

どの方法も 3 つの一部しかカバーできないアプローチ可変長順序文脈Bag of words / TF-IDFn-grams~RNN / LSTM~1D CNN(テキスト)~~TransformerBag of words:安価で拡張容易、だが順序も文脈も捨てる。
1 / 5
Transformer 以前のレシピは必ず何かを犠牲にする。Transformer は初めて 3 つすべてに ✓ —— 代償は「長さの 2 乗」の注意ブロックだ。

Transformer は 3 つすべてに ✓:

  • 可変長 —— OK。位置あたりの計算は系列長に依らず同じ。メモリと 計算量だけが長さに比例する。現代の 128k や 1M トークンの文脈窓は、この性質の 延長であって新しいアーキテクチャではない。
  • 順序 —— OK、明示的な位置エンコーディングで(原論文では sinusoidal、新しいモデルでは learned / RoPE / ALiBi)。アテンション自体は順序 不変だが、位置エンコーディングが各トークンに「自分の位置」を押す。
  • 文脈 —— OK、しかも完全に。各トークンが各層で他の全トークンに 注目する。L 層後、各トークンの表現はすべての他トークンの関数で、 どこを強く、どこを弱くするかをモデル自身が学習する。

代償:アテンションは系列長に対して2 乗のコスト —— すべてのトークンが すべての他トークンに注目するには、n × n の対類似度を計算する必要がある。 n = 1024 なら問題ない;n = 1,000,000 では層あたり「100 万 × 100 万」演算。 効率的アテンション研究の業界全体(sparse、linear、flash、ring など)はこのコストを 削るためにある。だが中程度の長さでは、この 2 乗コストが「ようやく 3 つすべて」の 対価だ。

これで地ならしは終わり。可変長、順序、文脈 —— Transformer はこれを解くために 生まれた。次の primer はそれを 1 層ずつほどいていく。