文章の分散表現を獲得!Word2VecとDoc2Vec!

こんにちは!
IT企業に勤めて、約2年間でデータサイエンティストになったごぼちゃん(@XB37q)です!

このコラムでは、Word2VecとDoc2Vecに対する記事を紹介しています。

カウントベースと推論ベースの2種類が存在し、このコラムでは、推論ベースをメインに紹介します。
カウントベースを知りたい方は、他コラム「テキストマイニングでも使う!文章の単語変換方法と文章同士の類似度」をご覧ください。

カウントベースの問題点

学習方法の違い
学習方法の違い

カウントベースの手法では、周囲の単語の頻度により、単語を表現します。
具体的には、単語の共起行列を作成し、その行列に対してSVDを使用することにより、単語の分散表現を獲得します。

しかし、カウントベースの手法は、語彙数が非常に多くなるにつれて、SVDを行う計算量が多くなる問題点があります。

カウントベースの手法は、1回の処理で単語の分散表現を獲得しますが、推論ベースの手法では、複数回の処理で分散表現を獲得します。例えば、ニューラルネットワークの場合、ミニバッチと呼ばれる学習データの一部を使って繰り返し学習します。

また、単語の出現順序が考慮されず、意味的な表現を学習することがありません。

このコラムでは、推論ベースの手法であるWord2Vecを紹介します!

Word2Vec

Word2Vecの学習の流れ
Word2Vecの学習の流れ

Word2Vecは学習データである文章から、コンテキストとターゲットを区別し、学習を行っていくニューラルネットワークです。
学習後は、各単語それぞれの分散表現を獲得することが可能です。

コンテキストとは、ターゲット周りの単語を表し、ターゲットは注目する単語を表します。

Word2Vecには、CBOWモデルとSkip-gramモデルの2種類が存在し、それぞれ学習方法が違います。

CBOW(Continuous Bag-of-Words Model)

CBOWの学習イメージ
CBOWの学習イメージ

CBOWモデルとは、コンテキストからターゲットを推測することを目的とするニューラルネットワークです。
CBOWモデルを使用して、正確な推測が可能なように学習を行うことにより、単語の分散表現を獲得することが可能です。
違う解釈をすると、多クラス分類を行うニューラルネットワークになります。

CBOWモデルの入力はコンテキストであり、[“you”,”say”]のような単語のリストで表されます。
コンテキストをone-hot表現へ変換することにより、CBOWモデルの学習が可能です。

入力層の数は、コンテキストの数と等しくなります。
例えば、コンテキストを2つに設定した場合、入力層は2つになります。
入力層から中間層への変換は、重みWinを使用した全結合層によって行われます。
中間層では、各入力層からの全結合による変換後の値の平均値になります。
例えば、全結合により、1つ目の入力層がh1に、 2つ目の入力層がh2になる場合、中間層では、(h1+h2)/2 となります。

中間層から出力層への変換は、重みWoutを使用した全結合層によって行われます。
出力層のニューロン数は、各単語に対応し、出力層のニューロンが各単語のスコアになります。
スコアが高ければ高いほど、スコアに対応する単語の出現確率が高くなります。
このスコアにSoftmax関数を適用することにより、各単語の出現確率を表す値になります。

重みWin が単語の分散表現を表します。
各行にそれぞれの単語の分散表現が格納されており、学習を重ねることにより、各単語の分散表現が更新されていきます。
また、重み Wout にも単語の分散表現が格納されていますが、 Win を使用することが一般的です。

Word2Vecは、学習データにおける単語の出現パターンを学習し、単語の分散表現を獲得します。
そのため、学習データが変われば、単語の分散表現も変化します。

損失関数は、多クラス分類の場合と同じように、交差エントロピー誤差が使われることが多いです。

Skip-Gram(Continuous Skip-Gram Model)

CBOWモデルとskip-gramモデルの違い
CBOWモデルとskip-gramモデルの違い

Skip-gramは、CBOWで扱うコンテキストとターゲットを逆転させたモデルです。

CBOWモデルは複数のコンテキストから中央のターゲットを推測します。
Skip-gramモデルは中央のターゲットから、複数のコンテキストを推測します。

skip-gramの学習イメージ
skip-gramの学習イメージ

Skip-gramの入力層は1つであり、出力層はコンテキストの数だけ存在します
CBOWと同様に、重みWin が単語の分散表現を表し、損失関数は交差エントロピー誤差が使われることが多いです。
Skip-gramはコンテキストの数だけ損失を求める必要があり、CBOWは1つのターゲットの損失を求めます。

CBOWとskip-gramのどちらを使うか

単語の分散表現の精度は、CBOW モデル と比較して、Skip-gramモデルのほうが高いと言われています。
そのため、制約条件があまりない場合、Skip-gramモデルを使うべきと言われています。

学習速度は、Skip-gramモデルと比較して、CBOWモデルのほうが高速です。
Skip-gramモデルは、コンテキストの数だけ損失を求める必要があるため、計算コストが大きくなることが原因です。

カウントベースと推論ベースの比較

カウントベースと推論ベースの比較
カウントベースと推論ベースの比較

3つの比較項目を例に、カウントベースの手法と推論ベースの手法を比較します。

1つ目に、新しい単語が追加され、単語の分散表現の更新が発生した場合を比較します。
この場合、カウントベースの手法ではゼロから計算を行う必要があり、共起行列を再構築し、SVDを行う作業が必要です。
推論ベースの手法では、これまでに学習した重みを初期値として再学習し、学習した経験を損なわずに単語の分散表現の更新が効率的に行えます。
そのため、推論ベースの手法のほうが効率的だと思われます。

2つ目に、単語の分散表現が持つ性質を比較します。
カウントベースの手法では、単語の類似性が得られることが分かっています。
推論ベースの手法では、単語の類似性に加えて、さらに複雑な単語間の関係性も得ることが分かっています。
例えば、「king – man + woman = queen」のような計算が可能になることが有名です。
このような性質から、推論ベースの手法のほうが、使用可能な場面が多いと思われます。

3つ目に、分散表現の精度を比較します。
単語の類似性に関する定量評価に関しては、カウントベースと推論ベースの手法は、優劣がつけられないと言われています。
推論ベースの手法では、ハイパーパラメータを変更することにより、精度が向上したり、低下するため、一概には優劣がつけられません。

Word2Vecの改良

これまで紹介したWord2Vecは基本的なモデルです。
基本的なWord2Vecには、語彙数増加に応じて、計算量が増加するという欠点があります。

ここからは、計算量の増加を2つに段階に分けて、それぞれに対する解決策を紹介します!

  • メモリサイズと計算リソースを節約
  • 中間層以降での計算量増加を防ぐ

語彙数増加に応じたメモリサイズと計算リソースの増加を防ぐ

入力層と重みの計算
入力層と重みの計算

入力層では、単語をone-hot表現で表しているため、語彙数が増加するにつれて、one-hot表現のベクトルサイズが増加します。
そのため、メモリサイズと計算リソースの増加が膨大になり、学習を円滑に進めることが難しくなります。

この問題はEmbeddingレイヤを導入することで解決します。

Embeddingレイヤとは、入力層と重み行列 Win の計算を簡単にするためのものです。
入力層と 重み行列 Win を計算することによって、行列からある特定の行を抽出しています。
「単語IDに該当する行」を抜き出すことができれば、入力層と重み行列 Win を計算する必要はありません。

Embeddingレイヤは、「単語IDに該当する行を抜き出す」 ための工夫であり、メモリの使用量を減らし、無駄な計算を省くことができるようになります。

語彙数増加に応じた中間層以降での計算量増加を防ぐ

中間層と重み行列Woutの積では多くの計算が必要になります。
また、Softmaxレイヤに関わる箇所でも、扱う語彙数が増えるにつれて、計算量が増加します。

この問題は、Negative Sampling(負例サンプリング)という新しい損失関数を導入することにより、解決します。
Negative Sampling(負例サンプリング) を使用することにより、「多値分類」を「2値分類」へ近似することが可能です。
2値分類とは、yes/noのようにで答えることが可能な問題です。

具体的には、多値分類では、「コンテキストが”you” と “say” の場合、ターゲットとなる単語は何ですか?」という問題を、「コンテキストが”you” と “say” の場合、ターゲットとなる単語は “hello” ですか?」 という2値分類へ変換します。

2値分類へ変換することにより、出力層にはニューロンをひとつだけ用意すればよくなるため、計算の負荷が減ります。
中間層と重み行列 Woutの積は、ある1つの単語に対する計算を行うだけでよく、Softmaxの計算も1回で行うことが可能です。

Doc2Vec

Doc2Vecは任意の長さの文章を、固定長のベクトルに変換するアルゴリズムです。
Word2Vecが単語の分散表現を獲得するアルゴリズムに対し、Doc2Vecは文章や文書の分散表現を獲得します。

PV-DM(Distributed Memory Model of Paragraph Vectors)

PV-DMの学習イメージ
PV-DMの学習イメージ

PV-DMはWord2VecのCBOWに類似するアルゴリズムです。
複数のコンテキストだけでなく、文章のidから、ターゲットを推測します。

PV-DBOW(Distributed Bag of Words version of Paragraph Vector)

PV-DBOWの学習イメージ
PV-DBOWの学習イメージ

PV-DBOWは、Word2Vecのskip-gramに類似するアルゴリズムです。
Skip-gramと違う点は、文書IDのみを入力としている点です。
単語の順序が考慮されないBag-of-wordsと同じような性質のため、「Distributed Bag-of-words」と呼ばれています。

まとめ

  • 推論ベースの手法
    • 語彙数が多い場合、カウントベースの手法と比較して、学習が早い
    • 複数回の処理で分散表現を獲得する
    • 単語の出現順序を考慮できる
    • 分散表現を新しく学習する場合、既に学習した値を初期値へ使用することができるため、カウントベースの手法より効率的
    • 単語の類似性だけでなく、複雑な単語の関係性を学習することができるため、表現できる幅が広い
    • 分散表現の精度はハイパーパラメータに依存するため、一概には言えない
  • Word2Vec
    • ニューラルネットワークを用いた推論ベースの手法
    • CBOWモデルとSkip-gramモデルが存在する
    • 損失関数は交差エントロピー、出力関数はSoftmax関数を使うことが一般的
  • CBOWモデル
    • 複数のコンテキストからターゲットを推測するニューラルネットワーク
    • Skip-gramモデルと比較し、分散表現の精度が高く、学習速度が遅い
  • Skip-gramモデル
    • ターゲットから複数のコンテキストを推測するニューラルネットワーク
    • CBOWモデルと比較し、分散表現の精度が高く、学習速度が遅い
  • Word2Vecの欠点に対する解決策
    • Embeddingレイヤを使用して、メモリサイズと計算リソースを節約
    • Embeddingレイヤは、「単語IDに該当する行を抜き出す」
    • Negative Sampringを使用して、中間層以降での計算量増加を防ぐ
    • Negative Sampringは、多値分類を2値分類へ変換する
  • Doc2Vec
    • 単語だけでなく、文章の分散表現も獲得する
    • PV-DBOWとPV-DMが存在
  • PV-DM
    • Word2VecのCBOWに類似するアルゴリズム
    • 複数のコンテキストに加えて、文章IDを入力とする
  • PV-DBOW
    • Word2VecのSkip-gramに類似するアルゴリズム
    • 文書IDのみを入力とする
    • 単語の順序を考慮しない

参考書籍

文章の分散表現を獲得!Word2VecとDoc2Vec!” に対して1件のコメントがあります。

コメントは受け付けていません。