Dance with Agents

犬と猫は、思ったほど近くなかった——意味ベクトルで測ると、犬に近いのは牛・馬・豚だった

ミディアム専門用語を名前のまま使います。初出で解説を添えるので、順に読めば追えます深掘り実践手元で測る

「犬と猫はベクトルとして近い」——ベクトルの説明として、よく持ち出される例です。理由として「どちらも四つ足の哺乳類だから」「似た動物だから」と添えられることもあります。

測ったら、そうなりませんでした。

これは、公開モデルを手元で動かして意味の座標を測るシリーズの1本です。道具の説明と最初の測定は『人間はチンパンジーよりマグロに近かった』にあります。


犬がいちばん遠かったのは、猫

これまでと同じモデル——語や文を384個の数字の組に変えるだけの公開モデル paraphrase-multilingual-MiniLM-L12-v2(以下 MiniLM)——で、「犬」から見た近さを測ります。文章を書くLLMとは別物で、文どうしが近いかを判定する側の道具です。

import { pipeline } from '@huggingface/transformers'

const ex = await pipeline('feature-extraction', 'Xenova/paraphrase-multilingual-MiniLM-L12-v2')
const emb = async w => Array.from((await ex(w, { pooling: 'mean', normalize: true })).data)
const cos = (a, b) => a.reduce((s, x, i) => s + x * b[i], 0)

const dog = await emb('犬')
for (const w of ['ペット', '牛', '馬', '豚', '猫', '四足歩行']) {
  console.log(`犬 ↔ ${w}: ${cos(await emb(w), dog).toFixed(3)}`)
}
犬 ↔ ペット:   0.869
犬 ↔ 牛:       0.538
犬 ↔ 馬:       0.527
犬 ↔ 豚:       0.523
犬 ↔ 猫:       0.338
犬 ↔ 四足歩行: 0.288

牛にも馬にも豚にも近く、猫がいちばん遠い。 そして「四足歩行」は、机や自由と変わらない圏内にありました。「四つ足の哺乳類だから」という説明は、ここでは成り立っていません。

ただし一つ割り引きが要ります。「猫」はこのモデルで、あらゆる語から遠い語でした。他15語との平均が0.385で、これは「机」の0.392とほぼ同じです。ですから0.338という数字は、猫という語の性質を含んでいます。

とはいえ、猫自身の平均0.385すら下回っています。 割り引いてもなお、「犬は猫に特別近い」とは言えません。

犬は「ペット」の語、猫は「ネコ科」の語

では、それぞれ何の近くにいたのか。

犬から見て 猫から見て
ペット 0.869 虎 0.589
動物 0.745 ペット 0.530
家畜 0.699 哺乳類 0.522

住んでいる軸が違いました。 犬は「ペット」「家畜」という人との関わり方の軸にいて、猫は「虎」というネコ科の軸にいる。我々が「犬と猫」と並べて語るほどには、モデルの中で並んでいませんでした。

分類が無いのではなく、書かれた分類だけがある

ここで、『クジラのほうが、人間より哺乳類だった』の言い方を修正します。

そこでは「意味空間に生物学的な分類は含まれていない」と書きました。ところが猫のいちばん近くにいたのは虎です。これはネコ科という、分類そのものです。

正確に言い直すと、こうなります。

分類が含まれていないのではなく、書かれた分類だけが含まれている。

「ネコ科」は繰り返し書かれます。「クジラは哺乳類」も書かれます。ところが「霊長類としての人間」は、ほとんど書かれません。その差が、そのまま距離になっています。

その考え方には、70年前から名前がある

以上をひとことで言えば「文脈がすべて」ということになりますが、この考え方は分布仮説(distributional hypothesis)として、すでに定式化されています。

1954年、言語学者のZellig Harrisが “Distributional Structure” で形式的な議論を与え、その3年後、J.R. Firthが一行に要約しました(経緯を整理した論文があります)。

You shall know a word by the company it keeps. (語は、連れている仲間で分かる)

Attention Is All You Need の60年前に、“Context is all you need” は言われていたことになります。

「文脈」という言葉は、2つの別物を指す

ここで、用語の注意を一つ。LLMの世界で「文脈(コンテキスト)」という言葉は、まったく違う2つのものを指します。

何を指すか いつの話か 何を決めるか
学習データの中の文脈 その語が、学習の素材の中でどんな語と一緒に書かれてきたか 訓練のとき 語の位置(ベクトル)
入力として渡す文脈 使うときにモデルへ渡す指示・資料・会話の履歴 使うとき その場の応答

この記事の話は、前者だけです。 犬がペットの近くにいるのは、訓練の段階で決着がついた話で、いま何を入力しようと動きません。

一方、「コンテキストウィンドウ」「コンテキストエンジニアリング」と言うときの文脈は後者です。トークンを節約する、CLAUDE.mdに何を書く、といった話は全部こちら側になります。

同じ言葉なので混ざりやすいのですが、時点も対象も別物です。 前者を指したいときは、「学習データの中で、何と一緒に書かれてきたか」と言い切ってしまうほうが誤解がありません。長くなりますが、そのぶん取り違えようがなくなります。

(専門用語では前者を「共起」と呼びます。言語学と、アンケートの自由回答などを分析するテキストマイニングで使われる語です。調べ物の手がかりにはなりますが、日常の説明で使う必要はありません。)

教えていないものが、できている

最後に、この一連で繰り返し現れた形を並べておきます。

  • 文法を教えずに次の語を当てさせたら、内部に構文木ができていた
  • 分類を教えずに「何と一緒に書かれているか」だけで訓練したら、ネコ科ができていた
  • ただしどちらも、書かれた分しかできていない

「教えたものが刻まれる」のではなく、「書かれたものが映る」。 意味論も分類学も、目標として与えられてはいません。次の語を当てようとした結果、副産物として似たものが立ち上がった——順序が逆転しているところが、この仕組みのいちばん面白い部分だと思います。

そして映っているのが書かれたものである以上、書かれ方の偏りも、そのまま映ります。

まとめ

  • 「犬と猫が近い、四つ足の哺乳類だから」は、このモデルでは成り立たなかった。 犬は牛・馬・豚のほうに近く、猫がいちばん遠い
  • 犬は「ペット」の軸、猫は「虎(ネコ科)」の軸にいた。並べて語られるほどには並んでいない
  • 分類が無いのではなく、書かれた分類だけがある。「ネコ科」はあり、「霊長類としての人間」はない
  • この考え方は分布仮説として1954年からある。“Context is all you need” は1957年に言われていた
  • 「文脈」は2つの別物を指す。 学習データの中の文脈(語の位置を決める)と、入力として渡す文脈(その場の応答を決める)
  • 文法も分類も教えられていない。次の語を当てた副産物として立ち上がり、書かれた分だけできている

LLMと自然言語の記事

LLMと自然言語のページへ →