GloVe(Gloval Vectors)

1.概要

Glove (Gloval Vectors)[1] は,スタンフォード大のManning先生の研究室から提案された,単語分散表現の教師なし学習手法である (第2著者は,ImageNetやScene Graph論文などに共著で関わった Richard Sotcher 氏).

https://nlp.stanford.edu/projects/glove/

GloVeは,単語ペア2ベクトル間の対数共起度を予測する「Globalな対数バイリニア回帰モデル」を用いた線形ベクトル空間である.GloVeの学習時は,重み付き線形回帰として共起行列の行列分解を解くが,その重みに高頻度単語ペアの影響を抑える工夫もされている.モデルがシンプルであることに加えて,計算効率性も高い.

従来の単語埋め込みであるword2vec [2]の skip-gram / CBOWモデル では,局所的な窓内の単語間のコンテキストから単語埋め込みを学習する「窓内コンテキスト手法」であった.これに「単語間の大域的な(Gloval)な共起」も行列分解で圧縮して利用する旧来手法的なアプローチも加えることで,localモデルであるword2vecの弱点を改善した単語ベクトル(Vector)埋め込み学習手法である.

(第2著者のRichard Socher自身による講義動画 (2017)がアップロードされているので,そちらも参考にされたい)

以降は,2節で従来手法の問題点に触れたのち,3章でGloveの詳細を説明する.

2. 従来手法の問題点

概要で述べたとおり,Gloveは以下の2つの従来の「単語ベクトル表現の埋め込み手法」の合体版の提案である:

  1. 語彙全体のGlovalな単語間共起行列の行列分解(LSAなどを用いる手法)
  2. 窓内でのLocalな単語コンテキストの予測モデルを学習(RNN, skip-gram, CBOWなど)

これらの2手法は,片方の長所がもう片方の短所に相当しており,お互いの弱点を埋め合わせられる可能性があった:

1. 単語間共起頻度行列の行列分解(LSAなど)
(グローバルな単語間の共起)
2. 窓内の予測モデル (RNNLM, word2vecなど)
(ローカルなコンテキスト)
長所語彙全体の統計を,効率的に考慮できる.類似単語タスクに非常に強い
短所■類似単語タスクに弱めであることから,ベクトル空間が局所最適化までしか行われていないことがわかる.
■単語共起頻度行列から直接SVDを行うせいで,頻出の単語(冠詞など)の影響が大きくなりすぎる問題あり.
■局所窓内コンテキストのみ学習するので,語彙全体の統計を学習できていない.
■学習時にLocal窓をデータセット文章全ての単語周辺から収集する必要があり,計算効率が悪い.
表1 Glove以前の主な2種類の単語埋め込み手法の比較

そこでPenningtonら[1]は,2つの手法をいいところどりして,なおかつ(word2vecよりも)単純であるGloVeモデルを,グローバルも考慮した単語埋め込みとして提案した.

3. GloVeのモデル

まず問題設定を定義したい.語彙が単語$V$個から構成されるとする.また,学習用コーパス全体での「単語$i$と単語$j$が同時発生する頻度」を$X_{ij}$に格納した共起行列を$\bm{X} \in \mathbb{R}^{V \times V}$とする.この時Gloveでは$\bm{X}$の行列分解(SVD)を解くことで, 低次元の単語埋め込みベクトル空間を学習する.

具体的には,以下の2つの(潜在)埋め込みベクトル$\bm{u}_i$と$\bm{v}_i$を,全語彙の単語に対して学習したい:

  • $\bm{u}_i \in \mathbb{R}^d$:単語$i$のコンテキストベクトル
  • $\bm{v}_i \in \mathbb{R}^d$:単語$i$の単語ベクトル

3.1 共起度を線形回帰で予測.

共起行列の各要素の対数値$ \log(X_{ij})$を,単語ベクトルと共起ベクトルから線形回帰する」という単純なモデルを,GloVeの予測モデルとして採用する.

その線形回帰モデルは,以下のように表すことができる(※ 右辺の回帰関数にはバイアス項も設定するが,この記事では省略):

\begin{equation} \log(X_{ij}) \approx \bm{u}_i {}^T\bm{v}_j \tag{1}\end{equation}

つまりは式 (1) のように,コンテキスト単語$i$のベクトルと注目単語ベクトル$j$の類似度を計算するだけで,その2単語間の共起頻度を推定するための2つの空間(単語埋め込み)$\bm{U}$と$\bm{V}$が学習結果として得られる.

3.2 GloVe コスト関数 :頻出共起ペアの重みを下げる,クリップ機能付き重みの使用

学習データから得られた(1) 式の左辺の共起行列をSVDで行列分解することで,低次元の$\bm{U}$と$\bm{V}$の積で近似できて,これにより目的のコンテキストベクトル空間$\bm{U}$と単語ベクトル空間$\bm{V}$を得ることができることがわかった.

しかし,単純に共起行列をSVDするだけでは,頻出の共起やレアな共起の影響も受けた,微妙な埋め込みを学習してしまいやすい.また,全単語間の共起度を計算すると,学習時の計算コストも高くなってしまうので計算コストも下げたい.

そこで,GloVeのモデルの目的関数$J$には,以下のような重み付き線形回帰を学習するための,最小二乗誤差関数を用いる (※ 式(1)と同様,バイアス項は省略):

\begin{equation}J = \sum^V_{i=1, j=1} f(X_{ij}) ( \bm{u}_i {}^T\bm{v}_j – \log (X_{ij}))^2 \tag{2}\end{equation}

(この記事ではコスト$J$の導出手順は省略)

ここで関数$f$は,重み付けを担当する「単語間共起度の割合」を示す関数である.この重み関数$f$には,ある程度以上頻出の共起単語ペアの共起度を下げることで,共起行列の極端な凸具合を減らすような重み付け関数を使用したい.

そこで [1]では閾値(たとえば$X_{max} = 100$回 )以上に共起している単語ペアでは,共起度の値を下げて値を1にクリップするような,以下の累乗関数を$f$に使用する:

\begin{align} f(X_{ij}) = \begin{cases} (\frac{X_{ij}}{X_{max}})^{\alpha} & if & X_{ij} < X_{max} \\ 1 & otherwise \end{cases} \tag{3} \end{align}

この$X_{ij} > X_{max}$では値が全て1となる式(3)を用いて,コスト関数$J$ 式(2)によりGloVeを学習することにより,効率的な計算で共起行列分解を行うことができ,最終的に埋め込み$\bm{U}$と$\bm{V}$を得ることができる.

論文中 [1]では CoNLL2003(英語)からGloVeを教師無し学習し,その埋め込みベクトルを用いて3タスクのデータセット(固有表現抽出, 単語類似度,単語アナロジー)で実験した.これにより,SVD行列分解とword2vecから得られた埋め込みの双方よりも,GloVeの方が良い事前学習ができていることを実験的示した.

3.3 学習済み単語埋め込みの使用法

最後に,テスト時に,学習済みの2つの単語埋め込みをどのように使うかについて述べる.

$\bm{U}$と$\bm{V}$を個別に単体で使ってもよいが,[1]ではそれら2つの和$\bm{U}+\bm{V}$を,最終的な単語ベクトル表現に用いることを提案した.この「2つの埋め込みの和表現」が標準的に使われている.

4 まとめ

GloVeは,Global手法-Local手法の両方を良いとこどりをした単語埋め込みの学習手法である.単語間の共起を重み付き線形回帰で単純にモデル化したものである.小さい語彙でもskip-gramより効率的に学習できる利点がある.

著者も研究しているVision and Languageの研究界隈でも,GloVeを単語表現に用いる論文が多かった.後発の発展版単語埋め込みであるFastTextもあまり使われないまま,最近でもGloVeがファーストチョイスであることが多い (従来手法と比較する際に,公平性を保つためにGloVeがずっと使われ続けている側面もある).

References

  • [1] Jeffrey Pennington, Richard Socher, and Christopher D. Manning. 2014. GloVe: Global Vectors for Word Representation
  • [2] Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean. “Distributed representations of words and phrases and their compositionality.” Advances in neural information processing systems. 2013.

参考書籍

参照外部リンク

関連記事