単語ベクトル入門:word2vec・GloVe・fastTextから文脈化埋め込み(BERT/ELMo)までを実務で使いこなす完全ガイド

単語ベクトルとは — 概要と背景

単語ベクトル(word vector、単語埋め込み)は、自然言語処理(NLP)において単語を数値ベクトルで表現する技術です。従来の「one-hot 表現」(語彙サイズ次元のベクトルで当該語のみ1、それ以外0)と異なり、単語ベクトルは低次元で密な(dense)実数ベクトルであり、意味的・文法的な類似性をベクトル空間上の距離や角度で表現できる点が特徴です。

なぜ単語ベクトルが必要か — 単語分布仮説

単語ベクトルの思想的根拠は「単語分布仮説(distributional hypothesis)」にあります。これは「同じような文脈で現れる単語は似た意味を持つ」という考え方で、L. Saussure や Firth の言語学的な観察に基づいています。実装面では、ある語の周辺語(コンテキスト)の出現統計からその語の意味を数値化します。

代表的な手法

  • カウントベース(例:LSA)
    文書-単語行列(出現頻度やTF-IDF)を作り、特異値分解(SVD)などで低次元に圧縮します。潜在的意味解析(LSA)はこの代表例で、グローバルな共起情報を扱います。

  • 予測ベース(例:word2vec)
    ニューラルネットワークを使って単語の出現を予測することでベクトルを学習します。代表的なアルゴリズムは CBOW(周辺語から中心語を予測)と Skip-gram(中心語から周辺語を予測)です。Mikolovらの研究で広まり、実用的に効率のよい negative sampling(負例サンプリング)や階層ソフトマックスが使われます。

  • GloVe(Global Vectors)
    Stanford の GloVe は局所的な予測視点とグローバルな共起行列の両方の利点を組み合わせます。共起比に基づく損失関数を最適化してベクトルを得ます。

  • fastText(サブワード情報)
    単語を文字 n-gram の和として表現することで、語幹や接尾辞など形態素情報を取り込み、未登録語(OOV)や形態が変化する語にも強くなります。

技術的なポイント(設計と学習)

  • 次元数 — 実務では 50〜300 次元が一般的。次元が大きいほど表現力は上がるが過学習や計算コストが増える。

  • ウィンドウ幅 — コンテキストの幅(例:左右2単語)をどう設定するか。広いウィンドウはトピック的類似、狭いウィンドウは構文的類似を捉えやすい。

  • 負例サンプリング — Skip-gram の負例サンプリングは計算効率を大幅に改善し、実用上ほぼ標準的に用いられます。

  • 正規化・後処理 — 学習後に L2 正規化や平均ベクトルの除去(mean centering)などを行うと性能が改善する場合があります。

ベクトルの利用と評価

単語ベクトルは以下のような形で利用・評価されます。

  • 類似度計算
    コサイン類似度(cosine similarity)が最も一般的です。2つのベクトル a, b に対して cos(a,b) = (a・b) / (||a|| ||b||)。値が高いほど語義が近いと判断されます。

  • アナロジー
    「king - man + woman ≈ queen」のようなベクトル演算で意味的関係を表現できることが多く、これが単語埋め込みの直感的な魅力の一つです。ただし万能ではありません。

  • 評価方法
    - 内部評価(intrinsic): 単語類似度データセット(WordSim-353、SimLex-999 など)やアナロジー課題での性能。
    - 外部評価(extrinsic): 分類、固有表現抽出、機械翻訳など下流タスクに埋め込みを導入して性能が向上するかで評価します。

限界と注意点

  • 多義語(polysemy)と語義曖昧性
    従来の単語ベクトル(静的埋め込み)は単語ごとに1つのベクトルしか持たないため、複数の語義を持つ語を適切に表せないことがあります。これを解消するために、多義語ごとに複数ベクトルを学習する手法や「文脈化埋め込み」が開発されました。

  • バイアス
    学習データに含まれる社会的バイアスがベクトルに反映されることが分かっています(例:性別ステレオタイプ)。研究者はバイアス検出・緩和の手法を提案していますが、注意が必要です。

  • 語彙外(OOV)問題
    学習時に出現しなかった単語は通常ベクトルを持ちません。fastText のようなサブワードベースや文脈化埋め込みでこれを緩和できます。

文脈化埋め込みとの違い(ELMo、BERT など)

近年は ELMo、BERT のような「文脈化(contextualized)埋め込み」が主流になっています。これらは単語が現れる文脈ごとに異なるベクトルを返すため、多義語問題に強く、下流タスクで大きく性能を伸ばしました。静的埋め込み(word2vec/GloVe)は単語ごとに固定ベクトルを持つ点で異なります。ただし、計算コストやモデルのサイズ、リアルタイム性の制約から静的埋め込みが有効な場面も依然存在します。

実務での運用ポイント

  • 事前学習済みベクトルの利用
    大規模コーパスで学習済みの GloVe、word2vec、fastText のベクトルはすぐに使え、少ないデータでも効果を発揮します。日本語向けにも国語研や企業が公開しているモデルがあります。

  • ファインチューニング
    下流タスクに合わせて埋め込みを微調整(fine-tune)することで性能向上が期待できます。ただしデータが少ないと過学習に注意。

  • 正規化と保持
    ベクトルを保存する際は float32 での格納、検索時は高速化のために近似最近傍(Annoy, FAISS など)を利用することが多いです。

可視化と解釈

高次元ベクトルは t-SNE や UMAP などで 2 次元に落とし込んで可視化すると、トピックや品詞でクラスタが現れることが分かります。ただし次元削減は情報を歪めるため、解釈は慎重に行う必要があります。

まとめ

単語ベクトルは NLP の基盤技術であり、語の意味を連続空間に写像することで多くのタスクの性能を向上させてきました。word2vec や GloVe のような静的埋め込みは計算効率に優れ、fastText により形態素変化や OOV に強くなりました。一方で多義性やバイアスの問題、文脈依存性への対応という課題があり、ELMo や BERT といった文脈化モデルがこれらを補っています。実務では目的・計算資源・データ量に応じて静的埋め込みと文脈化埋め込みを使い分けるのが現実的です。

参考文献