「ねえ先生、AIってどうやって言葉の意味を理解してるの?コンピューターって文字を見てるだけじゃないの?」
「いい疑問!実はコンピューターは文字をそのまま読んで意味を理解なんてできない。でもある変換を使うと、言葉に『数値』の形で意味を持たせることができるんだ。」

「数値で意味を?どういうこと!?」
「それが今回のテーマ、単語ベクトルだよ。難しそうに聞こえるけど、地図と比喩でゼロから直感的に理解できる。一緒に見ていこう。」

コンピューターは「言葉の意味」をどう扱うのか?
そもそも文字列では意味が伝わらない
「ヤモリくん、いきなり問題。コンピューターに『りんご』って入力したら何が届くと思う?」

「えっと……文字の『り』『ん』『ご』がそれぞれ文字コードの番号で届く?」
「そう!コンピューターには文字コードの数値が届くだけで、りんごが赤くて甘くて秋に採れる果物だ、という情報はゼロだ。コンピューターがテキストを処理するには、まず単語を意味と関係性を込めた数値のベクトルに変換する必要がある。この処理をベクトル化(vectorization)と呼ぶ。」

「変換するんだ。でもどんな数値にするかによって全然違いそう……。」
「その通り!昔の方法と今の方法を比べてみよう。」

昔の方法:疎ベクトルの問題
古典的なアプローチとして「one-hotエンコーディング」がある。語彙が1万語あれば、「りんご」は「りんごの番号の位置だけ1、それ以外は全部0」という1万次元のベクトルになる。

「なんか……ほとんどゼロで無駄が多そう。」
「大正解!これを疎ベクトル(sparse vector)と呼ぶ。ほとんどの要素がゼロになるからだ。おまけに、このベクトルだと『りんご』と『みかん』が意味的に近いかどうかがまったくわからない。語彙が増えるほどベクトルが膨れ上がって、計算も大変になる。」

「数値から意味の近さが読み取れないのか。」
今の方法:密ベクトルで意味を込める
「そこを解決するのが密ベクトル(dense vector)を使った単語埋め込み(word embedding / vector embedding)だ。ほとんどの要素がゼロじゃなく、意味と関係性を表す数値がぎっしり詰まってる。高次元空間(多くても1000次元程度)に表すことで、言葉の関係性まで表現できる。」

「意味を込めた数値の塊、ってイメージかな。」
「ピッタリ!そして似た意味や似た文脈で使われる単語には、似たベクトルが割り当てられる——これが単語ベクトルのいちばん大事な性質だよ。」

単語ベクトルって結局なに?地図で考えてみよう
「ベクトルって学校で習った矢印のやつ?なんか難しそうで……。」
「身構えなくていい!ここでは『数値の並び=空間上の座標』って思えばOKだよ。2次元なら (x, y) の座標で地図に点を打てるよね?」

「あ、それなら地図みたいに考えられる!」
「まさに!単語ベクトルは、それが数十〜数百次元になった超多次元の意味の地図に単語を配置したものなんだ。各単語が地図上の1点になる。」


「100次元とか300次元って、想像できないんだけど……。」
「正直、人間が視覚化するのは難しい。でも『近い点=似た意味』というルールだけ押さえれば十分だよ。次元数はとりあえず『意味を表すのに必要な情報の数』くらいに思っておいて。」

似た意味の単語は「近所」に住んでいる
「この地図で大事なのが位置関係だ。例えば `tea(紅茶)` と `coffee(コーヒー)` は意味が近くて一緒に使われることも多いから、ベクトル空間でも近くに配置される。」

「じゃあ `tea(紅茶)` と `sea(海)` は?スペルが似てるけど……」
「スペルが似てても意味も文脈も全然違う。一緒に使われることもほぼないから、空間上では遠く離れた場所に配置される。単語ベクトルは見た目じゃなくて意味のつながりで距離を決めるんだ。」

「意味の地図!なんかワクワクしてきた。」
数値の例で実感してみよう
実際、意味の近い単語は数値も似ている。photo を表すベクトルが [0.53, -0.21, 0.02]、image が [0.49, -0.35, 0.01] のように数値がよく似ている——これが「意味が近い」ということの数値的な姿だ。
「数字が似てる=意味が近い、か。直感的!」
「この仕組みを使って、データを多次元空間上の点として表現し、似たデータほど近くに集まるようにする——これがベクトル埋め込みの核心だよ。」

「王様 − 男 + 女 = 女王」はなぜ成り立つのか?
「単語ベクトルの説明でよく見るこの式、なんで引き算や足し算が意味になるの?ちょっと信じられない……。」
「これが単語ベクトルのいちばん面白い話だ。地図の例から考えよう。」

「方向ベクトル」が関係性を表す
「地図の上で `man(男)` と `woman(女)` の点を結んだ矢印を想像してほしい。この矢印が表してるのは何だと思う?」

「…『男から女への変化』?」
「そう!この矢印を方向ベクトルと呼ぼう。`king(王)` の点にこの『男→女に変換する矢印』を足すと、どこに着くと思う?」

「……`queen(女王)`!?」
「その通り!`king − man + woman` を計算すると、結果のベクトルに一番近い単語が `queen` になる。つまり同じ関係を持つペアの差ベクトルはほぼ同じ方向を向く——`man → woman` の矢印と `king → queen` の矢印がほぼ平行になってるから計算が成り立つんだ。」


「『性別を変える矢印』を足した、ってことか。」
「ベクトル化された単語には、足し算・引き算・平均などの数学的演算ができる。これによって意味を合成したり差し引いたりする計算が可能になるんだ。」

他にもできる「意味の計算」
首都と国の関係も同じように表せる。
Paris − France + Italy → Rome(ローマ)
vec(France) − vec(Paris) という方向ベクトルを vec(Germany) に足すと vec(Berlin) のすぐ近くに着く
形容詞の変化も計算できる。
bigger − big + cold → colder(より寒い)
「国と首都の対応、比較級の変化……全然違う種類の関係が、同じ足し算引き算で扱えるの?」
「そう!性別関係、国-首都の対応、職業と人名の対応、元素記号と元素名の対応……いろんな関係がベクトル空間の中でそれぞれ固有の『方向』として表されてる。そしてWord2VecやGloVeはこの類推を解くように訓練されてないのに、自然にそうなってる——それが驚きのポイントだよ。」

ちょっと待って!実際はどのくらい正確?
「なんか夢の計算機みたいだけど……完璧に動くの?」
「ここは正直に言わないといけない。重要な注意点がいくつかあるんだ。」

注意点① ピッタリ一致するわけじゃない
king − man + woman の計算結果は queen のベクトルと完全に一致するわけじゃない。「語彙40万語の中で一番近い単語が queen になる」という意味だ。
注意点② 入力語を除外するトリックがある
実は計算するとき、入力した king man woman 自身を答えの候補から除外している。除外しないと最も近いベクトルが king 自身になってしまうんだ。
「え!そこ、こっそり大事なことやってるじゃん!」
「そうなんだよ。有名な例が成り立つのはこのトリックのおかげでもある。入力語を除外しないと多くの類推は成立しないことが研究でも確認されてる。」

注意点③ 得意・苦手がある
ある研究では、単語ベクトルの類推タスクで「意味カテゴリ」の正解率が33.7%程度、「統語カテゴリ」が55.1%程度という報告もある。完璧には程遠く、カテゴリによって大きく差がある。男女・王と女王の関係は際立った例外的にうまくいくケースで、すべての意味計算がこんなにきれいに成立するわけじゃない。
「少し夢から覚めた感じがするけど……。」
「でも落ち込まなくていい!『ベクトルに意味の方向性がある』という発見自体は本物で、現代の自然言語処理の土台になってる。完璧じゃないからこそ、後継の技術が生まれて発展してきたんだよ。」

単語ベクトルはどうやって学習されるのか?
「数値の列に意味が宿るって、いったいどうやって学ぶの?誰かが全部手作業でラベルを付けるの?」
「それが面白くて、人手でラベルを付けたデータが一切いらないんだ。」

「え、どういうこと!?」
テキスト自体が「答え」になる
「テキスト自体を教科書にするイメージだよ。例えば『私は毎朝____を飲む』という文で、空欄に自然に入る単語は何だろう?」

「コーヒーとかお茶とか水とか……。」
「そう!コンピューターに大量のテキストを読ませて、こういう穴埋め問題をひたすら解かせる。正解はテキスト自体が持ってるから、人手でラベルを作る必要がない。これを自己教師あり学習(self-supervised learning)と呼ぶ。」

「『どの単語の周りにどの単語が現れるか』をひたすら学ぶわけか。」
「まさに!ウィキペディアや本や記事を大量に読ませるだけで、勝手に意味を学んでくれる。」


Skip-GramとCBOW:2つの学習スタイル
Word2Vecには代表的な2つの学習アーキテクチャがある。
| モデル |
問題の向き |
| Skip-Gram |
ある単語を入力 → 周囲に出る単語を予測 |
| CBOW |
周囲の文脈語を入力 → 中央の単語を予測 |
「Skip-Gramなら『coffee』を入力して、周りに『drink(飲む)』や『hot(熱い)』が出やすいと学習する。CBOWはその逆で、周囲の文脈語から中央の語を当てる穴埋め問題だね。」

「どちらも『一緒に使われる単語』から意味を学ぶんだ。」
「そう!『単語はその周囲の言葉によって特徴づけられる』という考え方が根っこにある。一緒に出てくる単語が似ている単語は、似た意味を持つだろうという発想だよ。だから `tea` と `coffee` は近くに、`tea` と `sea` は遠くに配置されるわけだ。」

「大量のテキストさえあれば、特別なデータ準備なしに意味を学べるんだね。なんか不思議だな……。」
単語ベクトルは実際にどんな場面で使われているのか?
「単語ベクトルって、実際どんなところで活躍してるの?」
「身近なところに溢れてるよ。」

検索・翻訳・レコメンド
検索エンジンが「犬の散歩」と検索したとき「ペットの運動」という記事も引っかけられるのは、「犬」と「ペット」、「散歩」と「運動」のベクトルが近いから。翻訳も、英語の単語ベクトル空間と日本語の単語ベクトル空間を対応付けることで成り立っている。
「言葉の地図同士を重ね合わせるイメージ?」
「ナイスな直感!その通りだよ。GloVeやWord2Vecのような手法が登場した2013年以降、この分野では2万6千本以上の論文が出ていて、それだけ幅広い応用が生まれた。」

ChatGPTのような大規模言語モデルとの違いは?
「ChatGPTも単語ベクトルを使ってるの?」
「Word2Vecのような静的な単語ベクトルは『1単語につき1つの固定されたベクトル』を使う。これが単語ベクトルの原点。でもChatGPTなどのTransformerベースのモデルは、文全体の文脈を踏まえてその都度ベクトルを計算する——文脈依存(contextual)な表現と呼ぶ。」

「どう違うの?」
「例えば英語の `bank` は『銀行』も『川岸』も同じスペルだよね。静的ベクトルだとどちらの意味か区別できないけど、文脈依存モデルは周りの文章を見て意味を変える。単語ベクトルは最新モデルの出発点であり土台なんだ。」


自分でも試せる?
「学習済みの単語ベクトルは多数公開されていて、初心者でもすぐ動かせるよ。Webの『word vector calculator』のようなツールや、Jupyterノートブック上でコサイン類似度を計算するだけで、単語ベクトルを実際に体感できる。」

「コサイン類似度って何?」
「2つのベクトルがどれだけ同じ方向を向いているか、角度のコサインで測る指標だよ。向きがそろってるほど1に近づき、無関係だと0に近くなる。ベクトルどうしの『似てる度合い』を測る定番の計算だと思えばOK。」

「特別な準備なく試せるのか、やってみたい!」
まとめ:単語ベクトルで広がる自然言語処理の世界
今日学んだことを3行で
- 単語ベクトルとは、単語を数値の列(ベクトル)で表したもので、似た意味の単語ほどベクトル空間上で近い点になる——言語に「幾何」を与える仕組みだ。
- 学習の原理は「一緒に使われる単語は似た意味を持つ」という考え方で、人手ラベルなしに大量のテキストから自動で学べる。
- ベクトルには足し算・引き算ができ、意味の関係を「方向」として計算できる——ただし万能ではなく、得意・苦手がある。
単語ベクトルの限界と課題
「なんかすごい技術だけど、弱点はないの?」
「正直に言うと、いくつかある。」

| 課題 |
内容 |
| 多義性 |
「bank(銀行/川岸)」のような単語に対して1つの平均的なベクトルしか持てず、文脈ごとの意味を区別できない |
| 未知語(OOV) |
学習コーパスになかった単語にはベクトルを与えられない |
| 希少語 |
出現頻度が低い単語は学習する文脈が少なく、精度の低いベクトルになりやすい |
| 文脈非依存 |
1単語1ベクトルで固定されているため、文脈に応じた意味の違いを表現できない |
「だいぶ限界があるね……。」
「でも大丈夫!それを解決するために後継の技術が生まれたんだ。」

- FastText:単語をサブワード(部分文字列)に分解することで、未知語や希少語のベクトルも生成できるようにした。
- ELMo・BERT:文脈依存の埋め込みを実現し、同じ綴りの単語でも文脈ごとに異なるベクトルを生成して多義性問題を解決した。
次に学ぶべきステップ

単語ベクトル(Word2Vec / GloVe)
↓ 未知語・希少語を扱いたい
FastText(サブワード分解)
↓ 文脈によって意味を変えたい
ELMo・BERT(文脈依存の埋め込み)
↓ さらに大規模に
GPT・Transformerベースの大規模言語モデル
「単語ベクトルって、今の巨大AIの土台だったんだね。」
「そう!ここで学んだ『意味を数値で表す』という発想は最新の言語モデルにも生き続けてる。単語ベクトルをしっかり押さえておけば、次のステップがぐっとわかりやすくなるよ。事前学習済みの単語ベクトルはすぐに試せるから、まずは手を動かして感覚を掴んでみて。」

「よし、Word2Vecから触ってみる!」
「その意気!どんどん試してね。」

関連記事
この記事に関連する他の記事もあわせてどうぞ。
コメント