Chapter 3

第3章: 文脈で意味が変わる — 静的から動的へ

英語の bank という単語を眺める。

① I deposited money at the bank.(銀行に預けた) ② We had lunch on the bank of the river.(川の土手で昼食をとった)

人間にとっては、瞬時に区別がつく。前者は銀行、後者は土手だ。 ところが前章の Word2Vec は、bank というトークンに 唯一のベクトル を割り振っていた。 だから両者を 同じ点 として扱うしかなかった。

これは明らかに、言葉の現実と合っていない。 意味は、文脈の中で動く生き物 だ。

本章は、その「動く意味」を機械にどう扱わせるか ── 静的な埋め込みから動的な埋め込みへの転換の話だ。 ここを乗り越えると、その先に Transformer が待っている。

3.1 同じ単語でも、文脈で別物になる

「言葉の意味が文脈で動く」という現象は、英語でも日本語でも至るところに転がっている。 代表例をいくつか並べてみる。

英語:同じ綴り、別の意味

単語文脈①文脈②
bank銀行に預けた川の土手で休んだ
batバットでボールを打つ洞窟のコウモリ
light部屋の明かり軽い荷物
bassベース(低音楽器)スズキ(魚)

英語ではこの現象を 多義語 (polysemy)、または別語源だが綴りが同じものを 同形異義語 (homonym) という。

日本語:もっと厄介

日本語は表記と意味の対応がさらに緩い。

表記文脈①文脈②
はし橋を渡る箸で食べる
かける走りかけるお湯をかける
あつい暑い夏厚い本
Apple新型 iPhone を発売した Appleリンゴ(果物)

文脈次第で、ベクトルは違う場所にあってほしい

前章で「埋め込み空間内で、意味の近いトークンは近くに住む」と書いた。 ところが、bank を 1 つのベクトルに固定すると、「銀行」の意味と「土手」の意味の両方の中間 という、どっちつかずの位置に居座ってしまう。

理想は、こうだ:

同じ単語でも、文脈次第でベクトルが動く。 これが本章のテーマ ── 文脈埋め込み (contextual embedding) だ。

静的埋め込み(前章): 1 トークン = 1 ベクトル。文脈に関係なく不変。 文脈埋め込み(本章): 同じトークンでも、周囲の単語次第で別のベクトル を返す。

「意味は文脈で動く」という言語の本質を、ベクトル表現側で初めて受け止めた発想だ。

3.2 「文脈で動く」を、機械が実現するには

「ベクトルが文脈次第で変わる」と言うのは簡単だが、機械はどうやってそれを計算するのか。

カギは、「単語単独」ではなく「単語 + 周囲の単語列」を見て、その場でベクトルを作る という発想だ。

従来:  bank             → vec(bank)            (いつも同じ)

新方式: I deposited money at the bank   → vec(bank | 文脈①)
       lunch on the bank of the river  → vec(bank | 文脈②)

つまり、ベクトルは 「単語 × 文脈」 の関数として計算される。 同じ単語 bank でも、周りの語並び(context)が変われば、出てくるベクトルも変わる。

このアイデアを実現するには、機械が 文を頭から順に読み、各位置で「ここでのこの単語は、何という意味か」を計算する 仕組みが要る。

そのための仕組みが ── まさに本書の主舞台、ニューラルな系列モデル だ。

3.3 文脈埋め込みの夜明け ── ELMo

文脈埋め込みを実用レベルで初めて示したのは、2018 年の ELMo(Embeddings from Language Models) という手法だった。

ELMo の発想を、本書なりに乱暴に要約するとこうなる:

ELMo のレシピ(雰囲気だけ)

  1. 「次の単語を当てる」という単純な予測タスクを設定する
  2. 機械(ニューラルネット)に、大量のテキストでこのタスクを延々と練習させる
  3. 練習を通じて、機械の内部は「文を読みながら各位置で生まれる中間状態」を持つようになる
  4. その中間状態を その単語の文脈埋め込み として取り出す

つまり、機械が「次の単語を当てるために頭の中で組み立てた表現」を、副産物として埋め込みとして使う。

ELMo の重要なポイント:

ELMo は文脈埋め込みという発想を 「論文の夢」から「実用ツール」に変えた 記念碑的存在だ。

補足

ELMo は LSTM というニューラルネット構造(第5章で扱う)を使っている。本書では深入りしないが、「前から読み進めながら、各位置で中間状態を保つ」という性質が文脈埋め込みの核になっている、という点だけ押さえておきたい。

3.4 文脈埋め込みが扱える、もう一段深い現象

文脈埋め込みは、多義語の区別だけでなく、もっと繊細な現象も扱えるようになる。

例①: 代名詞の解決

を追いかけた。それ はとても速かった。」

それ は犬か猫か。 人間は文脈から犬と判定する。文脈埋め込みは、同じ それ でも、前文の構成次第で 犬寄りのベクトル にも 猫寄りのベクトル にもなれる。

例②: 言外の感情・極性

「映画は 良かった ね(皮肉)」
「映画は 良かった ね(素直な称賛)」

同じ 良かった というトークンでも、文脈や前後文によって、皮肉のニュアンスを帯びるか純粋な肯定かが変わる。 文脈埋め込みはこの差を、ベクトルの位置のわずかなずれとして表現できる。

例③: 専門用語の文脈依存

Python で書いたスクリプト」(プログラミング言語)
Python はジャングルに住む」(ニシキヘビ)

同じ Python というトークンでも、スクリプト 関数 import の隣にいるときと、ジャングル の隣にいるときで、まったく別の領域にベクトルが置かれる。

こうした例は、人間にとっては「言われてみればそうだね」程度の自明さだ。
だが機械にとって、「同じ文字列だが、別の意味で扱う」 ことは、文脈埋め込みの登場まで途方もなく難しい問題だった。

3.5 でも、ELMo にもまだ限界があった

ELMo は革命的だったが、まだ 2 つの大きな制約があった。

制約①: 「前から順に」しか読めない

ELMo は文を 左から右に(と右から左に)読みながら埋め込みを作る。 これは人間の読み方に近いが、機械的には不便な制約になる。

たとえば「それ はとても速かった。 を追いかけた」(順序を入れ替えた文)のように、後ろの情報 が前の単語の意味を確定する場合、左→右の処理だけでは扱いにくい。 「全文を一度に眺めて、どこと どこを関連付けるか自由に決める」ような仕組みがあれば、もっと柔軟になる。

制約②: 長距離の関係が苦手

作家ヘミングウェイ は若い頃にパリで多くの作品を書き、その後アメリカへ戻り、晩年はキューバの海辺で釣りを楽しんだ。彼の文章 は今も世界中で読まれている。」

彼の文章 は冒頭の 作家ヘミングウェイ を指す。 こうした 長距離の依存関係 を捉えるのは、ELMo(および後章で出る RNN/LSTM)が苦手としていた領域だ。

この 2 つの制約を、ガツンと一気に解いた のが、第6〜7章で登場する Attention と Transformer だ。 そして Transformer ベースの文脈埋め込みを、超大規模に学習したものが、第8章の BERT であり、第9章の GPT だ。

つまり、ここまでの本書の物語は、こう繋がっている:

トークン化(第1章)

静的埋め込み(第2章)── 単語に固定ベクトル

文脈埋め込み(第3章)── 文脈で動くベクトル ← イマココ

系列モデル(第4-5章)── 文を順に読む

Attention と Transformer(第6-7章)── 並列に全文を見る

BERT / GPT(第8-9章)── 大規模文脈埋め込みの完成形

現代の LLM は、巨大な「文脈埋め込み機械」だと言っていい。

ChatGPT が単語の意味を文脈に応じて正確に解釈できるのは、本章で扱った「文脈埋め込み」の発想を、超大規模に拡張した結果に過ぎない。

逆に言えば、文脈埋め込みの動機と限界を理解した時点で、現代 LLM の半分を理解したことになる。

3.6 「言葉を数にする」編、ここまでの整理

第1〜3章で、本書の最初のグループ「言葉を数にする」を走り切った。 この 3 章でやったことを、もう一度地図にしておく。

解いた問題残った課題
第1章 トークン化文字列を機械が扱える単位に切る(次の表現方法が必要)
第2章 埋め込みトークンを意味のある空間に置く文脈で動かない
第3章 文脈埋め込み文脈次第でベクトルを動かすどうやって計算するか

最後の「どうやって文脈に応じてベクトルを計算するか」が、次のグループ「系列を扱う」(第4〜5章)と「注意機構と Transformer」(第6〜7章)の主題になる。

3.7 この章の振り返り

次章からは、文脈を扱う 系列モデル の世界に入る。 まずは第4章で、もっとも素朴な「頻度から考える」言語モデル ── n-gram の発想を見にいく。 これが現代 LLM のもっとも遠い祖先だ。