word2vec
ー動作と内部アルゴリズムー
森山 直人
word2vecは計算コストの低さと、性能の高さから自然言語処理
の分野で大きな注目を浴びているが、その本質は多次元ベクトル
の圧縮とベクトル空間の埋め込みである。
そのため、自然言語処理のみならず、各分野で利用可能である。
本資料を通じて、word2vecの動作原理を学ぶことで、自然言語
処理領域での活用とその他領域での応用イメージの持つことを目
的とする。
2
はじめに
word2vec
a1
a2
a3
a4
a5
Continuous Bag–of–Words
周囲の単語から中心の単語を予測する
Skip-Gram
中心の単語から周囲の単語を予測する
• 2014年にGoogleより発表され、性能の高さから瞬く間に世界中に広がった
• 文中で連続する5つの単語(シーケンス)をベースに、2つのアルゴリズムで実装
ベースは2つのアルゴリズムで構成
・・・
・・・
3
word2vec-注目すべきデータ構造
• 右図は200次元のベクトルを特別に2次
元にプロットしたもの
• 「中国+北京」のベクトルが「ロシア+モ
スクワ」及びその他の国+首都のベクトル
とかなり近い
• その他、「王様ー男+女=女王」といった
演算ができる
• つまり、ベクトル化さえすれば、広い範囲
の処理が可能に!
• 前述の処理により、単語を任意の次元ベクトルに変換(100〜200次元くらい)
(多次元空間に、単語を埋め込む)
• 単語ベクトル同士で、ベクトル演算が可能(足し引き)
4
word2vec-注目すべきデータ構造
• 右図は200次元のベクトルを特別に2次
元にプロットしたもの
• 「中国+北京」のベクトルが「ロシア+モ
スクワ」及びその他の国+首都のベクトル
とかなり近い
• その他、「王様ー男+女=女王」といった
演算ができる
• つまり、ベクトル化さえすれば、広い範囲
の処理が可能に!
• 前述の処理により、単語を任意の次元ベクトルに変換(100〜200次元くらい)
(多次元空間に、単語を埋め込む)
• 単語ベクトル同士で、ベクトル演算が可能(足し引き)
5
〜基礎知識〜
6
• 文章を構成する複数の単語にそれぞれIDをつけて計算
• 無秩序なID付では、計算を逆に妨げる(※)
• 後述のBOWと呼ばれる方法で”意味を持たない“ID付を行う
Bug-Of-Words(BOW)
※ここからベクトル(線形代数)の話が入ります
① 予め、処理する単語の総ユニーク数を算出
② ①の数字を次元としたゼロベクトル配列を用意
③ 各単語の出現順に、その単語が位置が1となるベクトルを付与
パソコン
インターネット
プログラミング
エンジニア
UNIX
CPU
②6次元のゼロベクトル[0, 0, 0, 0, 0, 0]
①6次元
⇒ [1, 0, 0, 0, 0, 0]
⇒ [0, 1, 0, 0, 0, 0]
⇒ [0, 0, 1, 0, 0, 0]
⇒ [0, 0, 0, 1, 0, 0]
⇒ [0, 0, 0, 0, 1, 0]
⇒ [0, 0, 0, 0, 0, 1]
※これの何がうれしいか
• 各ベクトルの値が違うにもかかわらず、
• すべて互いの距離が等しい(ノルム距離)!!
• つまり、独自性を保ちつつ、無駄な相対関係を
持たない
• 機械学習で自然言語以外でもよく使われる
③
7
例)
次にすることは?
8
• 前述のBOWを日本語に対して行うと、日本語の単語が約25万(広辞苑)の
ため各単語がそれぞれ25万次元のベクトル配列となる
⇒意味を持たない
• 一方、BOWはのベクトルは、1つのが[1]でそれ以外はすべて[0]
⇒これを圧縮したい
⇒⇒でも、中途半端な方法では、計算を妨げるベクトルになってしまう
• 以降、continuous Bog-of-Wordsと呼ばれるアルゴリズムを用いて、
意味のある、かつ短いベクトルにする方法を考える
タスク内容
9
① 多次元(25万前後)のベクトルを低次元(100〜200)に落とす
② ランダムに次元を振り分けるのではなく、ニューラルネットワーク
を用いて、意味を伴う次元圧縮を行う
(意味を伴う==復元が可能)
超訳ニューラルネットワーク
入力層 隠れ層
出力層
複数の情報を元に、“見解“を得る
• どの要素がそれくらいの重要度を占めるか
• それぞれの要素同士の相関関係はどんなものか
• そもそも与えられた情報で、見解が得られるのか
これらを自動で計算してくれるパワフル
なフレームワーク
※本質的な部分をかなり省略しています。
詳細は別途説明
10
省略図
入力層 隠れ層
出力層
11
3次元
4次元
2次元
入力層 隠れ層
出力層
Continuous Bag–of–Words
1つの単語から、前後2つの単語を予測する
12
a-2
a-1
a
a+1
a+2
注目単語
これらを予測
ニューラルネットワークを
用いて学習させる
ネットワーク構造
13
25万次元
100次元
25万次元25万次元25万次元25万次元
a-2
a-1
a
a+1
a+2
注目単語
これらを予測
ネットワーク構造
14
100次元
25万次元25万次元25万次元25万次元
もともと25万次元ほどある
行列ベクトルを100次元に
圧縮し、
そこからさらに周辺の単語
25万次元を予測している
この圧縮こそがword2vec
のメインの動作であり、如
何にこのモデルをうまく構
築することが重要となる。
ここでの重みが前述の各単
語のベクトル配列となる
基礎に振り返ると
• word2vecの学習がうまくいくのは、単語が文章内にて、意味に沿っ
て連続的に並んでいるから
• 逆に、一定の規則を持ちながら、連続的に並んでいるものであれば
学習できる
例)ウェブページを単語に擬え、ページ遷移を連続性に擬えれば各ページをベク
トル化できる⇒リクルートがこれを使ってレコメンドエンジンを実装した
• 現在、この仕組みを利用して、様々なものをベクトル化することが
流行っている
例)doc2vec, item2vec, image2vecなどなど。※ただし性能が低い・・・
15
appendix
• 高度な数学知識が必要なため、学習の際に使用されるネガティブサン
プリング、階層的ソフトマックスのアルゴリズム説明は割愛した
• 中間層の次元数選択は、学習データの量に応じて変化するため、
ベストな数値を選定するロジックは確立されていない
■よくある勘違い
• word2vecはリカレントニューラルネットワークではない
• 近い動作として、オートエンコーダがあるが、中身は違う
16

自然言語処理 Word2vec