🔰 初心者
BoWやTF-IDFで単語を数値にできるって学びましたが、もっと良い方法はないんですか?
🎓 上級者
BoWやTF-IDFは単語の「出現回数」だけで表現するから、単語同士の意味の関係がわからないんだ。「犬」と「猫」が似た意味だと表現できない。そこで登場するのが分散表現だよ。まずは2つの表現方法の違いから見ていこう。
🔄 局所表現 vs 分散表現
局所表現(Local Representation)
1つの要素だけで単語を表す
- 代表例:ワンホットベクトル
- 単語ごとに1つの次元を割り当て
- 該当する次元だけ1、他は全部0
- 単語間の類似度を表現できない
- 語彙数が増えると次元が爆発的に増加
分散表現(Distributed Representation)
複数の要素の組み合わせで単語を表す
- 代表例:Word2Vec
- 低次元(50〜300次元程度)の密なベクトル
- 各次元が「何らかの意味的特徴」を表す
- 似た意味の単語が近いベクトルになる
- 単語間の演算が可能
1️⃣ ワンホットベクトル(One-Hot Vector)
🔰 初心者
ワンホットベクトルって具体的にどういうものですか?
🎓 上級者
語彙の数だけ次元を持つベクトルで、その単語に対応する位置だけ1、残りは全部0にする表現だよ。
🧮 分散表現と単語埋め込み
🔰 初心者
分散表現と単語埋め込みって同じものですか?
🎓 上級者
ほぼ同じ意味で使われるよ。分散表現は「単語を低次元の密なベクトルで表す」という概念、単語埋め込み(Word Embedding)はその具体的な手法を指すことが多いんだ。NNの中で使う場合は埋め込み層(Embedding Layer)と呼ぶよ。
| 用語 | 意味 | 関係 |
| 分散表現 | 複数の次元に意味を分散させて単語を表現する概念 | 上位概念 |
| 単語埋め込み(Word Embedding) | 分散表現を得るための具体的な手法群 | Word2Vec等の総称 |
| 埋め込み層(Embedding Layer) | NN内でワンホット→分散表現に変換する層 | NNの部品として使う場合の名前 |
分散表現の有名な性質
「王」 − 「男」 + 「女」 ≒ 「女王」
単語ベクトルの演算で意味的な関係を表現できる。これが分散表現の最大の特徴。
📚 コーパス
🔰 初心者
分散表現を作るにはどんなデータが必要なんですか?
🎓 上級者
コーパス(Corpus)が必要だよ。コーパスとは、自然言語処理のために収集・整理された大規模なテキストデータのことだ。Wikipedia全文、新聞記事、書籍などが使われるよ。
分布仮説
分散表現の背景にある考え方:「ある単語の意味は、その周辺に出現する単語によって決まる」
例:「〇〇を飲む」の〇〇には「水」「コーヒー」「ジュース」が入る → これらは似た意味の単語
大量のコーパスから周辺語の共起パターンを学習することで、分散表現を獲得する。
⚖️ カウントベース手法 vs 推論ベース手法
🔰 初心者
分散表現を作る方法にはどんな種類がありますか?
🎓 上級者
大きく2つに分かれるよ。コーパス全体の統計情報を使うカウントベースと、NNで学習する推論ベースだ。
カウントベース手法
コーパス全体の統計情報から一括で求める
- 共起行列を作成: 単語ペアが近くに出現した回数を集計
- SVD(特異値分解)で次元削減し、低次元の分散表現を得る
- コーパス全体を一度に処理(バッチ処理)
- 大規模コーパスでは計算コストが高い
推論ベース手法
NNで周辺語を予測しながら学習する
- 代表例:Word2Vec
- コーパスからミニバッチで少しずつ学習
- 新しいデータが追加されても再学習が容易
- 大規模コーパスにも対応しやすい
SVD(Singular Value Decomposition / 特異値分解)
行列を3つの行列の積に分解して次元削減する数学的手法
共起行列は語彙数 × 語彙数の巨大な行列になる。SVDはこれを分解して重要な情報だけを残すことで、低次元の分散表現を得る。
主成分分析(PCA)と似た考え方で、「最も情報を多く含む軸」から順に取り出す。
弱点: 語彙数が大きいと計算コストが非常に高い → 大規模コーパスには推論ベース手法(Word2Vec)が有利
GloVe(Global Vectors for Word Representation)
カウントベースと推論ベースの「いいとこ取り」をした手法(Stanford, 2014年)
仕組み:コーパス全体の共起行列の統計情報を活用しつつ、その情報をNNの学習(最適化)で効率よく分散表現に変換する。カウントベースのグローバルな統計情報と、推論ベースの学習効率の両方を兼ね備えている。
Word2Vecとの違い:Word2Vecは局所的な文脈窓(周辺語)から学習するのに対し、GloVeはコーパス全体の共起統計を直接モデル化する。Word2Vecと同等以上の性能を発揮し、特に大規模コーパスでの学習に強い。
名前の由来:Global Vectors = コーパス全体(グローバル)の統計を使ったベクトル表現
🎯 Word2Vec
🔰 初心者
Word2Vecって具体的にどうやって分散表現を学習するんですか?
🎓 上級者
Word2Vecは推論ベース手法の代表で、2つのモデルがあるんだ。CBOWとスキップグラム。どちらもNNを使って「ある単語の周辺にどんな単語が出るか」を予測しながら、分散表現を学習するよ。
CBOW(Continuous Bag of Words)
周辺語から中心語を予測する
- 入力: 前後の周辺語(文脈)
- 出力: 中心にある単語を予測
- 例:「猫 が _____ を 食べた」→「魚」を予測
- 学習が速い
- 頻出語に強い
スキップグラム(Skip-gram)
中心語から周辺語を予測する
- 入力: 中心の単語
- 出力: 前後の周辺語を予測
- 例:「魚」→「猫」「が」「を」「食べた」を予測
- CBOWより精度が高い傾向
- 低頻出語にも強い
Word2Vecの覚え方
CBOW:周辺語 → 中心語(Context → Wordの順)
スキップグラム:中心語 → 周辺語(中心語から周辺に「スキップ」するイメージ)
G検定ではスキップグラムの方が精度が高いと覚えておこう。
🔧 埋め込み層(Embedding Layer)
🔰 初心者
埋め込み層ってNNの中でどう使うんですか?
🎓 上級者
埋め込み層は、ワンホットベクトルを入力として受け取り、対応する分散表現のベクトルを出力する層だよ。実質的にはルックアップテーブル(辞書引き)として機能するんだ。
📊 単語表現手法の全体比較
| 手法 | 種別 | 特徴 | 弱点 |
| ワンホットベクトル | 局所表現 | シンプル。1つの次元で1単語を表す | 次元爆発、類似度計算不可 |
| BoW / TF-IDF | 局所表現 | 出現回数 / 重要度でベクトル化 | 語順を無視、次元が大きい |
| SVD(カウントベース) | 分散表現 | 共起行列を次元削減して分散表現を得る | 大規模コーパスで計算コスト大 |
| Word2Vec(推論ベース) | 分散表現 | NNで周辺語を予測しながら学習 | 多義語を1つのベクトルで表現 |
📂 トピックモデル(文書のクラスタリング)
🔰 初心者
ここまでは「単語」をベクトルにする話でしたが、「文書」をグループ分けする方法はありますか?
🎓 上級者
それがトピックモデルだよ。文書の集まりから「どんな話題(トピック)が含まれているか」を自動で発見する教師なし学習の手法だ。文書のクラスタリング(グループ分け)に使われるよ。
トピックモデルの基本的な考え方
1つの文書は複数のトピックが混ざってできている。
例:あるニュース記事は「政治 60%」+「経済 30%」+「外交 10%」のように、複数の話題が混合している。
トピックモデルは、大量の文書からトピック(話題)を自動的に発見し、各文書がどのトピックをどの程度含んでいるかを推定する。
LSA(Latent Semantic Analysis / 潜在的意味解析)
単語と文書の関係からSVDで潜在的な意味構造を発見する手法
仕組み:単語×文書の行列を作り、SVD(特異値分解)で次元を圧縮して隠れた意味構造を見つける。
前のセクションで学んだ「カウントベース手法 → SVD」の流れを文書レベルに適用したもの。
特徴:確率的なモデルではなく、純粋に行列分解で意味構造を捉える。LSI(Latent Semantic Indexing)とも呼ばれる。
pLSA(Probabilistic LSA / 確率的潜在意味解析)
LSAを確率モデルに拡張し、トピックの混合を確率で表現する手法
改良点:LSAの行列分解を確率モデルに置き換えた。「各文書はいくつかのトピックを確率的に持っていて、各トピックは単語の出現確率で表される」と考える。
弱点:学習データの文書にしか適用できない(新しい文書が来ると対応しにくい=過学習しやすい)。これを解決したのがLDA。
LDA(Latent Dirichlet Allocation / 潜在的ディリクレ配分法)
ディリクレ分布を事前分布として加え、新しい文書にも対応できる最も代表的なトピックモデル
改良点:pLSAにディリクレ分布という事前分布を追加した。これにより、学習データにない新しい文書にも対応できる(汎化性能が高い)。
生成モデル:「文書がどう生成されるか」の確率的プロセスを定義し、それを逆算してトピックを推定する。
現在最もよく使われるトピックモデル。
ディリクレ分布とは?
「確率の分布」を生成する確率分布(メタ的な分布)。
LDAでは2つの場面で使われる:
① 各文書のトピック混合比率の事前分布(「この文書はどのトピックをどの割合で含むか」)
② 各トピックの単語出現確率の事前分布(「このトピックではどの単語が出やすいか」)
パラメータ(α)が小さいと → 1つのトピックに偏りやすい(スパース)
パラメータが大きいと → 複数のトピックが均等に混ざりやすい
| 手法 | アプローチ | 特徴 | 弱点 |
| LSA | 行列分解(SVD) | シンプル。SVDで潜在意味を抽出 | 確率的な解釈ができない |
| pLSA | 確率モデル | トピック混合を確率で表現 | 新しい文書に対応しにくい(過学習) |
| LDA | ベイズモデル | ディリクレ事前分布で汎化性能向上 | パラメータ調整が必要 |
📝 まとめ
G検定で押さえるべきポイント
- 局所表現(ワンホット)は1つの次元で1語を表す。分散表現は複数次元に意味を分散させて表現
- ワンホットベクトルは該当箇所だけ1、残り0。単語の類似度が計算できない
- 分散表現は低次元の密なベクトルで、似た意味の単語が近くに配置される
- 埋め込み層はNN内でワンホット→分散表現に変換する層
- コーパスは分散表現の学習に使う大規模テキストデータ
- カウントベース:共起行列 → SVDで次元削減 / 推論ベース:NNで学習(Word2Vec)
- GloVe(Stanford, 2014)はカウントベースと推論ベースの「いいとこ取り」。共起行列の統計をNNで最適化
- Word2Vecの2つのモデル:CBOW(周辺→中心)とスキップグラム(中心→周辺)
- スキップグラムの方が精度が高い傾向がある
- 「王 − 男 + 女 ≒ 女王」のようなベクトル演算が可能
- トピックモデルは文書から潜在的なトピックを自動発見する教師なし学習
- LSA → pLSA → LDAの進化の流れ:行列分解 → 確率化 → ベイズ化
- LDAはディリクレ分布を事前分布として使う、最もよく使われるトピックモデル