ベクトル空間モデル(VSM)入門:TF-IDF・コサイン類似度を活用した情報検索の基礎と応用
ベクトル空間モデルとは
ベクトル空間モデル(Vector Space Model, VSM)は、文書やクエリを多次元の数値ベクトルとして表現し、それらの類似度を距離や角度で測ることで情報検索や文書分類、クラスタリングを行うための基本的な枠組みです。情報検索の分野で古くから用いられている手法で、単語(語)を次元に対応させた「項-文書行列(term–document matrix)」を基礎に、各文書をベクトルとして扱います。
基本概念と構成要素
語彙(ボキャブラリ)と次元:全体の語彙(語の集合)の各語がベクトルの次元になります。語彙は文書集合に基づいて決定され、ストップワード除去や語幹化(ステミング)・正規化を行うことが一般的です。
重み付け(Weighting):各次元に割り当てる値(成分)をどう決めるかが重要です。代表的なのは TF(Term Frequency)や TF-IDF(Term Frequency–Inverse Document Frequency)です。TFは単語の出現頻度を表し、IDFは文書頻度に基づいて頻出語の重要度を下げることで希少語に重みを与えます。一般的なIDFの定義は IDF(t) = log(N / df(t))(Nは文書数、df(t)は語tを含む文書数)です。
類似度の測定:ベクトル間の類似度はコサイン類似度(cosine similarity)がよく使われます。コサイン類似度は内積をノルムで割ったもので、方向の類似性を測ります。
cosθ = (A · B) / (||A|| ||B||)
正規化とスケーリング:文書長(長い文書ほどTFが大きくなる問題)を補正するためにベクトル長で正規化したり、対数スケーリング(log(1+TF))や補助的な正規化を使います。
TF-IDF の実務的なバリエーション
raw TF:単純に語の出現回数を用いる。
log TF:log(1 + TF) を用いて大きな頻度の影響を抑える。
binary:出現の有無(0/1)だけを用いる。
augmented frequency:TF を文書内の最大頻度で割るなどしてスケーリングする。
IDF の定義差:IDF = log(N/df) の他に log(1 + N/df) や 1 + log(N/df) といった安定化手法が使われます。
簡単な計算例(概念説明)
例として語彙が {「猫」「犬」「魚」} のとき、文書 D1 が「猫 猫 犬」、文書 D2 が「犬 魚」の場合、素朴な TF ベクトルは D1 = [2,1,0], D2 = [0,1,1] となります。これらをコサイン類似度で比較すると、内積は 2×0 + 1×1 + 0×1 = 1、ノルムは ||D1|| = sqrt(2^2+1^2)=sqrt(5)、||D2||=sqrt(0+1+1)=sqrt(2) より cosθ = 1 / (sqrt(5) sqrt(2)) となります。実際の検索では TF を正規化したり、IDF を掛けたりしてより安定したスコアを得ます。
拡張と改良手法
潜在意味解析(LSA / LSI):項-文書行列に対して特異値分解(SVD)を行い、低次元の潜在空間に射影します。これにより同義語や語の相関を捉えられ、次元削減によるノイズ除去効果も期待できます(Deerwester et al., 1990)。
確率的手法(例:LDA):トピックモデル(Latent Dirichlet Allocation)は、文書を複数のトピック確率分布の混合として表現する確率モデルで、語同士の共出現パターンから潜在トピックを推定します。VSM の語次元を直接扱うより意味的な構造を明示できます。
分散表現(word embeddings, doc embeddings):word2vec、GloVe、FastText といった手法は語を低次元の実数ベクトルに埋め込み、語間の意味的類似性を捉えます。さらに doc2vec や sentence embedding、最近の Transformer ベースの BERT 等を用いることで文書自体を密なベクトルで表現し、従来の高次元スパース表現の限界を超えることができます。
実務上のポイント(前処理と設計上の注意)
トークナイゼーションと正規化:日本語では形態素解析(MeCab, Sudachi 等)による分かち書きが必要です。英語等では小文字化、句読点削除、数字や記号の扱いを統一します。
ストップワード除去:頻出するが意味を持たない語(助詞・冠詞など)を除くことでノイズを減らせますが、ドメインによっては除去しない方が良い場合もあります。
ステミング/レンマタイズ:語の派生形を統一することで語彙サイズを削減し、一般化性能を高めます。
語彙サイズと希薄性のトレードオフ:全語彙をそのまま使うと次元が巨大になりスパースネスが増します。頻度閾値で低頻度語を切る、あるいは特徴選択(情報利得、χ^2など)を行うことが一般的です。
n-gram の利用:フレーズや複合語を捉えるために bi-gram/tri-gram を導入するケースがあります。ただし次元がさらに増えるので注意が必要です。
実装上の工夫:疎行列を扱うデータ構造(CSR/CSC)や、近似最近傍探索(ANN)を用いた高速化、インクリメンタルなインデックス更新などが重要です。オープンソースでは scikit-learn、Gensim、Elasticsearch、Lucene などが広く使われます。
主な応用領域
情報検索(検索エンジンのランキングや文書検索)
テキスト分類(スパム判定、トピック分類)
クラスタリング(文書の自動グルーピング)
推薦(類似文書の提示)や要約の補助
類似度に基づく重複検出やプラジャリズム検出
限界と注意点
語の独立性仮定:VSM は各次元(語)が独立であることを暗に仮定しますが、語間の依存関係(語順、構文、意味論)を無視します。
同義語・多義語問題:異なる語が同じ意味を持つ(同義語)場合や、同じ語が複数の意味を持つ(多義語)場合に誤差が生じやすいです。LSA や LDA、分散表現はこれをある程度緩和しますが完全ではありません。
高次元かつスパース:語彙が増えると次元が膨張し、計算・保存コストが増加します。次元削減や疎行列処理が必須です。
語順情報の欠如:n-gram を用いない限り、語順や文構造に由来する情報は失われます。
現代の文脈での位置付け
近年は BERT 等の Transformer ベースの文埋め込みが優れた性能を示す場面が多く、文や文脈を捉える点で古典的 VSM を上回る場合が多いです。しかし、VSM と TF-IDF は計算コストが小さく解釈性が高い(どの語がスコアに寄与したかが明らか)ため、初期のプロトタイピングや大規模スケール(検索インデックス構築など)では今でも有用です。実務では、密な埋め込みとスパースな VSM を組み合わせるハイブリッド手法も有効です。
まとめ
ベクトル空間モデルは、テキストを数値ベクトルに変換して類似度を計算するという単純かつ強力な枠組みです。TF-IDF とコサイン類似度の組合せは情報検索の古典的基盤であり、実務での高速検索や解釈性の観点から現在でも広く利用されています。一方で同義語・多義語や語順の問題などの限界があり、LSA、LDA、word embeddings、Transformer といった発展手法で補完されることが多いです。用途や制約に応じて VSM とその改良手法を選択することが重要です。
参考文献
- Vector space model - Wikipedia
- Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze, "Introduction to Information Retrieval" (Stanford NLP, オンライン版)
- G. Salton, A. Wong, C. S. Yang, "A Vector Space Model for Automatic Indexing" (1975)
- S. Deerwester et al., "Indexing by Latent Semantic Analysis" (1990)
- TF–IDF - Wikipedia
- T. Mikolov et al., "Efficient Estimation of Word Representations in Vector Space" (word2vec, 2013)
- scikit-learn(実装例とドキュメント)


