GloVe (Gloval Vectors) 【Glovalな共起性も加味した単語埋め込み】

0

1.概要

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

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

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

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

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

2. 従来手法の問題点

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

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

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

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

そこで,Penningtonら[1]は2つの手法を合体したGloVeモデルを提案した.

3. GloVeのモデル

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

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

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

ここで,以下の「共起行列の各要素の対数の値を,単語ベクトルと共起ベクトルから線形回帰する」という,計算効率性を重視した単純な予測モデルを仮定する(※右辺の回帰関数にはバイアス項も設定するが,この記事では省略):

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

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

学習データから得られた(1)式の左辺の共起行列をSVDで行列分解することで,低次元の$\bm{U}$と$\bm{V}$の積で近似できるようになり,コンテキストベクトル空間$\bm{U}$と単語ベクトル空間$\bm{V}$を得ることができる.しかし,単純にSVDするだけでは頻出の共起やレアな共起の影響を受けた,微妙な埋め込みになりやすい.

そこで,GloVeでは予測モデルのパラメータ$\bm{U},\bm{V}$を,以下の「重み付き」の線形回帰の最小二乗コスト関数を用いて学習を行う(※式(1)と同様にバイアス項は省略):

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

式(2)の関数$f$が重み付けの担当をする関数である.$f$は,頻出の共起単語ペアの影響を下げ,レアな共起単語ペアの影響は少なめにしてくれる重み付け関数としたいので,[1]では閾値(たとえば$X_max=100$回)以上共起している単語ペアは重み付けにより値をクリップするような,以下の累乗関数を使用する:

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

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

4 まとめ

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

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

関連記事:単語埋め込み(word embedding)

関連書籍

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.
0