1 背景歴史

1.1 単語埋め込みの発展

自然言語処理において、単語をコンピュータが処理可能な数値表現に変換する手法は、初期のone-hotベクトルから始まり、次元削減分布仮説に基づく手法へと発展した。2000年代初頭には、潜在意味解析(LSA)や確率的潜在意味解析(pLSA)などのマトリクス分解手法が登場し、単語と文書の共起情報を低次元空間に射影する試みが行われた。2013年にはWord2Vec(CBOW、Skip-gram)が提案され、ニューラルネットワークを用いた効率的な単語埋め込み学習が可能となった。

1.2 GloVeの位置づけ

GloVe(Global Vectors for Word Representation)は、2014年スタンフォード大学のPennington, Socher, Manningによって発表された。Word2Vecがローカルな文脈窓内の単語ペアのみを利用するのに対し、GloVeはコーパス全体の大域的な共起統計を直接モデル化する点が特徴である。これにより、単語間の線形構造(アナロジー)をより明示的に捉えることができ、多くのベンチマークタスクでWord2Vecと同等以上の精度を示した。

2 理論的枠組み

2.1 共起行列の構築

GloVeの最初のステップは、コーパスから単語間の共起回数を計数した行列Xを構築することである。要素X_ijは、単語iと単語jがある共起窓(例えば前後10語)内で同時に出現した回数を表す。通常、共起回数は単語間の距離に応じて重み付けされる(遠いほど小さい重み)。この行列は疎であり、語彙サイズVに対してV×Vの巨大な行列となる。

2.2 共起確率とベクトル関係

GloVeの核となる洞察は、単語ベクトル間の内積が対数共起確率の比を近似できるという点にある。具体的には、任意の3単語i, j, kに対して、共起確率の比P_ik/P_jkが単語iとjの意味的関連性を示す。GloVeはこの比をベクトル空間の演算( w_i - w_j )·w_k ≈ log(P_ik/P_jk)として表現することを目指す。

2.2.1 重み付き最小二乗法

GloVeは上記の関係を学習するために、重み付き最小二乗法を採用する。各共起ペアに対して、ベクトルの内積と対数共起回数の差分二乗誤差として定義し、共起回数が小さいペアの影響を小さくする重み関数を導入する。これにより、稀な共起ノイズの影響を抑えつつ、頻繁に出現する単語対の情報を重視する。

2.2.2 目的関数の導出

最終的な目的関数Jは以下の形で定義される。

J = Σ_{i,j=1}^{V} f(X_ij) ( w_i^T \tilde{w}_j + b_i + \tilde{b}_j - log X_ij )^2

ここで、w_iは単語iの主ベクトル、\tilde{w}_jは文脈ベクトル、b_i,\tilde{b}_jはバイアス項である。f(X_ij)は重み関数で、通常はf(x) = (x/x_max)^α(x < x_maxのとき、αは0.75程度)、それ以上は1とする。全共起ペアについて和をとり、目的関数を最小化するようにw_iと\tilde{w}_jを学習する。最終的な単語ベクトルは主ベクトルと文脈ベクトルの和(あるいは平均)として得られることが多い。

3 アルゴリズムの詳細

3.1 モデルの訓練手順

3.1.1 初期化

単語ベクトルw_iと文脈ベクトル\tilde{w}_j、およびバイアス項b_i,\tilde{b}_jは、通常一様分布や小さなガウス分布からのランダム値で初期化される。語彙サイズが数十万単位になることから、メモリ効率を考慮して疎な共起行列を保持する必要がある。

3.1.2 学習率収束条件

最適化には確率的勾配降下法(SGD)またはAdaGradが用いられる。学習率は初期値0.05程度から徐々に減衰させる。収束条件は、全エポック数(通常50〜100)の完了または目的関数の変化が閾値以下になるまでで判定する。訓練は並列化可能であり、複数のスレッドで共起ペアを処理する。

3.2 ハイパーパラメータとその影響

3.2.1 ベクトル次元

次元dは典型的には50, 100, 200, 300などが用いられる。次元が低いほど計算効率が良いが、表現力が低下し、高いほど意味情報を豊富に捉えられるが過学習のリスクがある。300次元が標準的で、多くのタスクで良好な性能を示す。

3.2.2 共起窓サイズ

窓サイズは対称窓(前後同数)を採用することが多い。小さい窓(2〜5)は構文的関係(品詞近傍)を、大きい窓(10〜15)は意味的関係(トピック近傍)を強く反映する。タスクに応じて適切なサイズを選択する。

3.2.3 最小カウント値

共起行列で出現回数が一定以下のペアを無視することで、メモリ削減とノイズ除去を行う。最小カウント値は通常5〜10程度に設定される。これにより、稀な綴り誤りや極端に出現頻度の低い単語の影響を排除できる。

4 評価と応用

4.1 ベンチマーク評価

4.1.1 単語類似度タスク

人間が評価した単語ペアの類似度(例:WordSim-353、SimLex-999)と、GloVeベクトル間のコサイン類似度の相関(スピアマン順位相関係数)を測る。GloVeは多くのデータセットでWord2Vec(Skip-gram)と同等かやや優れた結果を示す。

4.1.2 アナロジー推論タスク

「王 - 男 + 女 = 女王」のような意味的・構文的アナロジーの正解率を評価する(Google analogy dataset)。GloVeはベクトル演算の加法性に優れ、高い正解率を達成する。

4.2 自然言語処理での利用例

4.2.1 文書分類

文書内の単語ベクトルを平均化(bag-of-vectors)またはTF-IDF重み付けで統合し、SVMやロジスティック回帰などの分類器に入力する。ニュース記事のトピック分類などで有効。

4.2.2 機械翻訳

静的埋め込みとしては、言語間の埋め込み空間を線形写像で対応づける手法(Mikolovら2013)のベースとして使われる。ただし、近年の文脈化埋め込みに比べると精度は劣る。

4.2.3 感情分析

IMDbやTwitterの感情極性分類では、GloVeベクトルをLSTMやCNNの入力層に用いる。事前学習済みベクトルを転移学習することで、小規模データでも高い性能を発揮する。

5 既存手法との比較

5.1 Word2Vecとの差異

Word2Vec(特にSkip-gram)は局所的な文脈情報のみを利用し、訓練が高速な反面、大域的な統計を暗黙的にしか考慮しない。GloVeは明示的に共起行列を構築し、全体的な統計をモデル化するため、稀な単語に対する頑健性やアナロジー性能で利点がある。一方、Word2Vecは負例サンプリングによりメモリ消費が少なく、大規模コーパスでのスケーラビリティに優れる。

5.2 静的埋め込みの限界

GloVeやWord2Vecに代表される静的埋め込みは、単語ごとに一つのベクトルを持つため、多義語を区別できない。例えば「bank」が「銀行」と「河岸」のどちらの意味か文脈に応じて変化する表現は不可能である。この問題はELMoやBERTなどの文脈化埋め込みにより解決された。

6 派生バリエーション

6.1 学習済みモデル(GloVe 840B etc.)

スタンフォード大学の公式サイトでは、Common Crawl(840Bトークン、2.2M語彙)やWikipedia+Gigaword(6Bトークン)など、あらかじめ訓練されたGloVeベクトルが公開されている。次元は50, 100, 200, 300が用意され、多くの研究者がそのまま利用している。

6.2 マルチ言語GloVe

複数言語の並列コーパスを用いて、各言語の共起行列を同時に学習し、言語横断的な埋め込み空間を構築する手法も提案されている。これにより、翻訳やクロスリンガル情報検索が可能となる。ただし、対応する言語ペアに大規模なパラレルデータが必要である。

7 実装とツール

7.1 公式実装

GloVeの公式コードはC言語で書かれており、単純なMakefileでコンパイルできる。共起行列の計数とモデル訓練が分離されており、マルチスレッド対応である。出力はテキスト形式のベクトルファイルである。

7.2 主要フレームワークでの利用(gensim, spaCy)

Python環境では、gensimライブラリがGloVeベクトルの読み込みと、Word2Vecとの統一的な操作を提供する(KeyedVectorsクラス)。spaCyでもGloVeベクトルをロード可能で、パイプラインに組み込める。また、PyTorchやTensorFlowでも事前学習ベクトルを埋め込み層の初期値として利用する例が多い。

8 批判と議論

8.1 バイアスの問題

GloVeベクトルは訓練コーパスに含まれる社会的バイアス(性別、人種、職業など)を内包する。例えば「男-王:女-女王」のようなアナロジーは成立するが、「男-医者:女-看護師」のようなステレオタイプを強化する傾向がある。研究者はこのバイアスを軽減するための後処理手法(例えばベクトル空間からバイアス方向を除去する)を提案している。

8.2 計算リソースの要求

大規模語彙(数百万語)に対して共起行列を構築するには、主記憶に相当な容量が必要となる。公式実装ではメモリ使用量を抑えるために共起の計数をファイルベースで行うが、それでも数十GBのRAMを要する場合がある。また、訓練時間もWord2Vecと比較して長く、GPU非対応であるため、大規模データでは計算コストが課題となる。