1. テキスト処理の課題と埋め込みの重要性
なぜコンピュータはテキストを理解できないのか?
コンピュータは数値しか理解できません。私たちが日常的に使う「猫」「犬」といった言葉は、そのままではコンピュータが処理できません。このギャップを埋めるために、テキストを「数値ベクトル」に変換する必要があります。これを「テキスト埋め込み」と呼びます。
テキスト埋め込みで何ができるの?
テキストを数値ベクトルに変換すると、以下のことが可能になります:
- 機械学習モデルの入力として使える
- 単語や文章の「意味的な近さ」を計算できる
- 大量のテキストを効率的に表現できる
簡単に言えば、人間の言葉をコンピュータが理解できる形に翻訳するための技術です。
2. 単語の数値化と One-hot エンコーディングの限界
単語を数値に変える最も単純な方法
単語を数値に変える最も簡単な方法は、各単語に番号を振ることです。例えば:
- "猫" → 1
- "犬" → 2
- "家" → 3
しかし、この方法では問題があります。コンピュータは数値の大小関係に意味を見出してしまうため、「犬」が「猫」の2倍の意味を持つと誤解します。例えば、'犬'に2、'猫'に1という番号を振ると、数値の大小で意味に優劣があると誤解される恐れがありますが、これは単なる便宜上の番号付けにすぎません。
One-hot エンコーディング
この問題を解決する一つの方法が「One-hot エンコーディング」です。これは、語彙数と同じ長さのベクトルを用意し、該当する単語の位置だけ1、他はすべて0にする方法です。
例えば、語彙が["猫", "犬", "家"]の場合:
- "猫" → [1, 0, 0]
- "犬" → [0, 1, 0]
- "家" → [0, 0, 1]
これなら数値の大小関係に意味はなくなります。しかし、新たな問題が生じます:
One-hot エンコーディングの限界
- 次元の爆発:語彙が増えるとベクトルの長さも増加します。日本語の語彙は数万〜数十万あるため、非常に長いベクトルになります。
- 意味の関係を表現できない:「猫」と「犬」は動物という共通点がありますが、One-hotベクトルではその関係性を表現できません。すべての単語が等距離に配置されます。
- 未知語に対応できない:事前に知らない単語が出てきた場合、表現できません。
3. 分散表現(Distributed Representation)の基本
分散表現とは何か?
分散表現は、単語の意味を数百次元程度の密なベクトルで表現する方法です。このベクトルの各次元は明確な意味を持ちませんが、単語の意味的特徴を複数の次元に「分散」して表します。
重要なのは、意味的に似ている単語は似たベクトルになるという性質です。
分散表現はどう学習するのか?
「似た文脈に現れる単語は似た意味を持つ」という言語学的仮説に基づき、大量のテキストから統計的に学習します。代表的な手法は「Word2Vec」です:
- 大量のテキストを用意する
- 「ある単語の周りにどんな単語が出現するか」のパターンを学習
- この関係性を元に各単語の最適なベクトル表現を求める
例えば、「犬は〇〇を食べる」「猫は〇〇を食べる」のように似た文脈に現れる単語は、似たベクトルになります。
分散表現のメリット
- コンパクト:語彙数に関わらず、ベクトルの次元数は固定(通常100〜300次元程度)
-
意味関係の表現:意味的に近い単語は、ベクトル空間でも近くに配置されます
- 「犬」と「猫」のベクトルは近くなる
- 「銀行」と「金融」のベクトルは近くなる
-
ベクトル演算で関係性を表現:有名な例として
- 「王様 - 男性 + 女性 ≈ 女王」
- つまり、ベクトル演算で意味的な関係を表現できます
- 未知語への対応:部分単語レベルの情報を活用することで、学習時に見たことのない単語にも対応できる手法もあります
分散表現の発展
単語レベルの埋め込みから、文や段落レベルの埋め込みへと発展してきました:
- Word2Vec/GloVe/fastText:単語レベルの埋め込み
- Doc2Vec:文書レベルの埋め込み
- BERT/GPTなど:文脈を考慮した高度な埋め込み
まとめ:テキスト埋め込みの本質
テキスト埋め込みの本質は、「人間の言葉の意味や関係性を、コンピュータが理解できる数値ベクトルで表現する」ことです。
- One-hot表現:単純だが、意味の関係を表現できない
- 分散表現:意味の関係を低次元の密なベクトルで効率的に表現
良い埋め込みほど、似た意味の単語が似たベクトルとなり、自然言語処理タスクの性能向上につながります。テキスト埋め込みは、自然言語処理の基盤となる重要な技術なのです。