テキストを数にする — 言葉をベクトルに変える
コンピュータは文章そのものを計算できません。まず言葉を数の並び(ベクトル)に変換して、はじめて足したり比べたりできるようになります。文を単語に切り、数え、重み付けし、似ているかを角度で測る——自然言語処理の第一歩を、4つの動くデモでたどります。
1. 文を単語に切る — トークン化
最初の一歩は、文をこれ以上分けられない意味の単位=トークン(おおむね単語)に切り分けることです。英語は空白で切れますが、日本語は空白がないので形態素解析という技術で境界を見つけます。下のデモで文を選ぶと、切れ目が入ってトークンがパラパラと分かれます。
トークン化 — 一続きの文を単語の列にほどく
上=元の文、下=切り出されたトークン。空白があればそこで、なければ文字の種類(漢字・ひらがな…)の変わり目で区切ります。自由入力欄に打ち込むと、その場でトークン化されます(実際の形態素解析はもっと賢い辞書を使います)。
POINT — トークンが全ての土台
この後の「数える・重み付け・似ているか測る」は、すべてトークンの列を出発点にする。どう区切るかで結果が変わるので、トークン化は地味だが最重要の前処理。
2. 単語を数える — Bag of Words
トークンに分けたら、次は「どの単語が何回出たか」だけを数えます。語順は捨てて、単語を袋(bag)に放り込んで数える——これがBag of Words(BoW)。数えた回数を語彙の順に並べれば、文が1本のベクトル(数の列)になります。単語が箱に落ちて積み上がる様子を見てください。
Bag of Words — 単語を箱に落として数える
上を流れる単語が、語彙ごとの箱へ落ちていきます。箱の高さ=出現回数。落とし終わると、下にカウントベクトルが並びます。語順は消え、「何がいくつ」だけが残るのがポイント。
「猫 が 好き 猫 は かわいい」 → [猫:2, が:1, 好き:1, は:1, かわいい:1, …]
語彙(全文書に出る単語の一覧)を固定し、その順に回数を並べる。ここでは猫が2回なので、猫の成分が2になる
3. ありふれた語を割り引く — TF-IDF
ただ数えるだけだと、「は」「が」「です」のようなどの文にも出る語ばかり大きくなり、文の中身を表しません。そこで「多くの文書に出る語ほど値打ちを下げる」という重みを掛けます。これがTF-IDF。ボタンで生のカウント(TF)と重み付け後(TF-IDF)を切り替えて、棒の高さがどう変わるか見てください。
TF-IDF — ありふれた語は下げ、珍しい語を上げる
青=各語の重み。TFでは全部の語が回数どおり。TF-IDFに切り替えると、5文すべてに出る「です」はほぼゼロまで縮み、珍しい内容語(犬・かわいい・楽しい など)が伸びます。棒がなめらかに変化します。
tf-idf(語) = tf(その文での回数) × idf, idf = log( 全文書数 ÷ その語が出る文書数 )
全文書に出る語は idf = log(1) = 0 になり、重みが消える。珍しい語ほど idf が大きく、文の個性を表す
注意 — 数えるだけでは意味は分からない
BoW も TF-IDF も「単語が同じかどうか」しか見ていない。「医者」と「ドクター」は別物扱いで、語順も無視する。意味の近さまで測るには、後のレッスンで学ぶ埋め込み(ベクトル表現)が必要になる。
4. 似ているかを角度で測る — コサイン類似度
文がベクトルになったので、2つの文が似ているかを数で言えます。使うのは長さではなく向き(角度)。同じ単語をたくさん共有するほど2本のベクトルは同じ方を向き、なす角が小さくなります。スライダーで文Bを文Aに近づけると、角度が縮んでコサイン類似度が1に近づきます。
コサイン類似度 — 共有する語が多いほど角が縮む
左=2文のカウントベクトル、右=それを矢印にしたときのなす角。スライダーを上げると文Bの単語構成が文Aに寄っていき、2本の矢印の角が縮み、cos が 1 に近づきます。cos=1 は「まったく同じ向き=同じ話題」。
一歩先へ — なぜ長さでなく角度なのか
文書の長さ(総単語数)が違っても、話題が同じなら「似ている」と言いたい。長いレビューも短い感想も、同じ映画の話なら向きは揃う。だからベクトルの長さで割って、向きだけを比べるのがコサイン類似度。この「向きで意味を測る」発想は、検索・推薦・RAG(検索拡張生成)まで一貫して使われる、NLPの背骨です。次のレッスンでは、この数値化した文を使った文書分類に進みます。
5. まとめ
- トークン化:文を単語(トークン)の列にほどく。すべての土台。
- Bag of Words:語順を捨て、単語の出現回数を並べて文をベクトルにする。
- TF-IDF:多くの文書に出るありふれた語の重みを下げ、珍しい内容語を上げる。
- コサイン類似度:ベクトルの向き(なす角)で文書どうしの似ている度合いを測る。
- これらは「単語が一致するか」しか見ない。意味の近さは、次段の埋め込みで扱う。