Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

数式からみるWord2Vec

5,747 views

Published on

名渡山 夏子, 岡本 一志: 数式からみるWord2Vec, パーティクルフィルタ研究会1月実践セミナー, 2017.01.07

Published in: Science
  • Be the first to comment

数式からみるWord2Vec

  1. 1. パーティクルフィルタ研究会2016/1/7 / 321 数式からみるWord2Vec ○名渡山 夏子 岡本一志 電気通信大学
  2. 2. パーティクルフィルタ研究会2016/1/7 / 32 (0, …, 0, 1, 0, …, 0) はじめに 2 • 複数の次元で1つの単語を表す • 単語数が増えても,次元は固定長のまま 分散表現 局所表現 • 各概念(単語)に1つずつ次元を割り当てる(1-of-k表現など) • 単語数が増えると次元が大きくなる (0, 1, 0, …, 0, 0) 350,134番目
  3. 3. パーティクルフィルタ研究会2016/1/7 / 32 2013年、Googleが開発した単語の分散表現の手法 単語の「意味」を表現するベクトルを低次元で作れる 学習には,たくさんの文章(例えばWikipedia)を使用 2層のフィードフォワードニューラルネットワークのモデルで学習 Word2Vec とは 3 入力層 出力層 隠れ層
  4. 4. パーティクルフィルタ研究会2016/1/7 / 32 単語の「意味」を表現するベクトルを低次元で作る 1.ベクトルを使って、単語の「意味」の足し算ができた vec(Berilin) - vec(German) + vec(France) = vec(Paris) 2.フレーズ(複合語)まで対応できた New York Times(新聞社), Air Canada(カナダの航空会社) Word2Vec のすごいところ 4 計算が異常に速い なぜか精度が良い
  5. 5. パーティクルフィルタ研究会2016/1/7 / 32 学習したい単語:コーヒー コーヒーと同時に使われる単語から,コーヒーに合う単語を学習 合う単語:砂糖,ミルク,喫茶店,ブラック
 合わない単語:コンピュータ,赤ちゃん,ゲーム Word2Vec の学習概要 5 合う単語には条件付き確率が高く 合わない単語には条件付き確率が低くなるように学習する p(milk|coffee) > p(baby|coffee)
  6. 6. パーティクルフィルタ研究会2016/1/7 / 32 ネットワークアーキテクチャ ・CBOW(Continuous Bag-of-Words) ・Skip-gram 
 高速化 ・Negative Sampling ・Hierarchical Softmax 今回の説明では 6 こっち こっち
  7. 7. Skip-gram でモデル化
  8. 8. パーティクルフィルタ研究会2016/1/7 / 32 Skip-gram とは 8 普通のbigram skip-bigram Skip-gramは隣の単語だけではなく,
 周辺の単語までのペア(セット)を考える 文章 etc..
  9. 9. パーティクルフィルタ研究会2016/1/7 / 32 Skip-gram モデル 9 良い感じに I に合う単語を学習 →○ →○ →☓ V = { } の中から に合う単語とは? に合う単語は, と一緒に使われる → が出ると の出現確率が高いと学習して欲しい
  10. 10. パーティクルフィルタ研究会2016/1/7 / 32 Softmax 関数を使ってモデル化 10 結局、 が与えられた時にどんな単語が合うのか?を
 考える条件付き確率と一緒! 注目単語
 ( ) 周辺単語
 ( ) ボキャブラリーの集合
 (全単語=105 〜107 ) vp(wO|wI) = exp(v0T wO · vwI ) P wv2V exp(v0T wv · vwI ) :入力ベクトル
 :出力ベクトル p(wO|wI) = exp(v0T wOc · vwI ) X wv2V exp(v0T wv · vwI )
  11. 11. パーティクルフィルタ研究会2016/1/7 / 32 単語と単語の関係から,コンテキスト(文脈)まで拡張する 例文: 注目単語: / コンテキストサイズ=2 周辺単語: 単語からコンテキスト(文脈)に 11 注目単語
周辺単語
 単語ベクトル同士の内積 条件付き確率→同時確率の計算に拡張 p(wO,1, · · · , wO,C|wI) = CY c=1 exp(v0T wOc · vwI ) X wv2V exp(v0T wv · vwI )
  12. 12. パーティクルフィルタ研究会2016/1/7 / 32 前後のコンテキストまで含めた同時確率を考える が最大となるような単語ベクトル  = 単語の”良い表現” Skip-gramモデルの目的関数 12 vp(wO,1, · · · , wO,C|wI) = CY c=1 exp(v0T wOc · vwI ) P wv2V exp(v0T wv · vwI ) arg max W,W 0 p(wO,1, · · · , wO,C|wI) p(wO,1, · · · , wO,C|wI) = CY c=1 exp(v0T wOc · vwI ) X wv2V exp(v0T wv · vwI )
  13. 13. Word2Vec の ニューラルネットワーク
  14. 14. パーティクルフィルタ研究会2016/1/7 / 32 2層のニューラルネットワーク 14 入力層 出力層 隠れ層 いいかんじの
 WとW’を学習する W W’ 0 B B @ x1 x2 x3 x4 1 C C A 0 @ h1 h2 h3 1 AWをかけて
 圧縮 W’をかけて
 展開 0 B B @ u1 u2 u3 u4 1 C C A 106 106 200→ →dim:
  15. 15. パーティクルフィルタ研究会2016/1/7 / 32 入力層のベクトル はV次元 ある要素だけ1、それ以外は0の 1-of-k ベクトル 例: V= { }   = 入力層( ) 15 x = 0 B B B B B B @ x1 x2 x3 x4 x5 x6 1 C C C C C C A = 0 B B B B B B @ 0 · · · I 1 · · · like 0 · · · black 0 · · · coffee 0 · · · am 0 · · · cat 1 C C C C C C A x x wI
  16. 16. パーティクルフィルタ研究会2016/1/7 / 32 W はボキャブラリの全単語の単語ベクトルを横に並べた行列 隠れ層への重み( ) 16 隠 れ 層 の 次 元 W = 0 B B B @ v11 v21 v31 v41 v51 v61 v12 v22 v32 v42 v52 v62 ... ... ... ... ... ... v1N v2N v3N v4N v5N v6N 1 C C C A W = v1 v2 v3 v4 v5 v6 , の場合,W は 200 x 106 の大きさh 2 R200 x 2 R106
  17. 17. パーティクルフィルタ研究会2016/1/7 / 32 隠れ層の計算 h = Wx
 (活性化関数なし) 隠れ層( ) 17 隠れ層の出力は、複雑な計算をせずに になる ここで 1-of-k が生きてくる ( :N次元ベクトル) 各 v が単語の「意味」を表す W x = v1 v2 v3 v4 v5 v6 0 B B B B B B @ 0 1 0 0 0 0 1 C C C C C C A = v2W x = v1 v2 v3 v4 h h = W xwI = vwI vwI v
  18. 18. パーティクルフィルタ研究会2016/1/7 / 32 隠れ層から出力層への重みW′も同様に単語ベクトル v′ を並べた 出力層への重み( ) 18 W' W 0 = 0 B B B B B B B @ v0T 1 v0T 2 v0T 3 v0T 4 v0T 5 v0T 6 1 C C C C C C C A = 0 B B B B B B @ v0 11 v0 12 · · · v0 1N v0 21 v0 22 · · · v0 2N v0 31 v0 32 · · · v0 3N v0 41 v0 42 · · · v0 4N v0 51 v0 52 · · · v0 5N v0 61 v0 62 · · · v0 6N 1 C C C C C C A , の場合,W' は 106 x 200 の大きさh 2 R200 x 2 R106
  19. 19. パーティクルフィルタ研究会2016/1/7 / 32 出力層( ) 19 の各要素は,周辺単語出力ベクトルと注目単語入力ベクトルの内積 uc.i = 0 B B B B B B @ v0 11 v0 12 · · · v0 1N v0 21 v0 22 · · · v0 2N v0 31 v0 32 · · · v0 3N v0 41 v0 42 · · · v0 4N v0 51 v0 52 · · · v0 5N v0 61 v0 62 · · · v0 6N 1 C C C C C C A vwI 出力層のユニットは出力層への重み x 隠れ層 0 B B B B B B @ uc,1 uc,2 uc,3 uc,4 uc,5 uc,6 1 C C C C C C A 0 B B B B B B @ vwI 1 vwI 2 vwI 3 vwI 4 vwI 5 vwI 6 1 C C C C C C A uc = W 0 vwI uc,i = v0T i · vwI uc = W 0 vwI uc = W 0 vwI
  20. 20. パーティクルフィルタ研究会2016/1/7 / 32 出力層( ) 19 の各要素は,周辺単語出力ベクトルと注目単語入力ベクトルの内積 uc.i = 0 B B B B B B @ v0 11 v0 12 · · · v0 1N v0 21 v0 22 · · · v0 2N v0 31 v0 32 · · · v0 3N v0 41 v0 42 · · · v0 4N v0 51 v0 52 · · · v0 5N v0 61 v0 62 · · · v0 6N 1 C C C C C C A vwI 出力層のユニットは出力層への重み x 隠れ層 0 B B B B B B @ uc,1 uc,2 uc,3 uc,4 uc,5 uc,6 1 C C C C C C A 0 B B B B B B @ vwI 1 vwI 2 vwI 3 vwI 4 vwI 5 vwI 6 1 C C C C C C A uc = W 0 vwI uc,i = v0T i · vwI uc = W 0 vwI uc = W 0 vwI
  21. 21. パーティクルフィルタ研究会2016/1/7 / 32 出力層( ) 19 の各要素は,周辺単語出力ベクトルと注目単語入力ベクトルの内積 uc.i = 0 B B B B B B @ v0 11 v0 12 · · · v0 1N v0 21 v0 22 · · · v0 2N v0 31 v0 32 · · · v0 3N v0 41 v0 42 · · · v0 4N v0 51 v0 52 · · · v0 5N v0 61 v0 62 · · · v0 6N 1 C C C C C C A vwI 出力層のユニットは出力層への重み x 隠れ層 0 B B B B B B @ uc,1 uc,2 uc,3 uc,4 uc,5 uc,6 1 C C C C C C A 0 B B B B B B @ vwI 1 vwI 2 vwI 3 vwI 4 vwI 5 vwI 6 1 C C C C C C A uc = W 0 vwI uc,i = v0T i · vwI uc = W 0 vwI uc = W 0 vwI
  22. 22. パーティクルフィルタ研究会2016/1/7 / 32 はSkip-gramでモデル化したときの確率になる 最終的な出力値(softmax関数使用) 20 ニューラルネットワークの計算 skip-gram でモデル化したときの確率 x ucvwI yc,i softmax
 関数 yc,i tc,i 教師信号 uc,i xwI yc,i = exp (uc,i) PV v=1 exp (uc,v) = exp (v0T i · vwI ) PV v=1 exp (v0T v · vwI ) = p(wi|wI)
  23. 23. パーティクルフィルタ研究会2016/1/7 / 32 Word2Vecの面白いところ 21 入力層 出力層 隠れ層 入力層には注目単語の単語ベクトルをいれて,
 出力層には周辺単語の単語ベクトルを出力させる学習を行う 理想的な解 0 B B @ 0 1 0 0 1 C C A 0 B B @ 0 0 0 1 1 C C A 入力の1-of-kベクトル W’W x ucvwI
  24. 24. パーティクルフィルタ研究会2016/1/7 / 32 良い v と v’ が欲しい → 良い W と W’ が欲しい!!! 良いパラメータ(重み)を得る 22 同時確率はアンダーフローしやすいので,log をつけたものを
 目的関数とおき,SGD(確率的勾配降下法)で最適化を行う E = log p(w1, w2, · · · , wC|wI ) p(wO,1, · · · , wO,C|wI) = CY c=1 exp(v0T wOc · vwI ) X wv2V exp(v0T wv · vwI )
  25. 25. パーティクルフィルタ研究会2016/1/7 / 32 目的関数を微分して更新式を得る 23 { E = log p(w1, w2, · · · , wC|wI ) E を W,W’ の各要素で偏微分する vij := vwI i ⌘ CX c=1 VX v=1 (yc,v tc,v)v0 vi v0 ij := v0 ij ⌘ CX c=1 (yc,i tc,i)vwI j tc,i = ⇢ 1 (i = wc) 0 (otherwise) Wの更新式 W’の更新式 p(wO,1, · · · , wO,C|wI) = CY c=1 exp(v0T wOc · vwI ) X wv2V exp(v0T wv · vwI )
  26. 26. 圧倒的な高速化を行う
  27. 27. パーティクルフィルタ研究会2016/1/7 / 32 実装できそうだけど… 25 V :ボキャブラリーの集合(105 〜107 ) 計算量が爆発して学習が終わらない
 良いパラメータを得られない p(wO|wI) = exp(v0T wOc · vwI ) X wv2V exp(v0T wv · vwI )
  28. 28. パーティクルフィルタ研究会2016/1/7 / 32 実際に共起した単語と、共起しなかった単語の確率を考える 高速化:Negative Sampling 26 共起した(True) 共起しなかった(False) p(T|wI, wO) = (v 0T wo · vwI ) p(F|wI, wO) = 1 (v 0T wo · vwI ) E = log p(T|wI , wO) Y v2VNeg p(F|wI , v)
  29. 29. パーティクルフィルタ研究会2016/1/7 / 32 実際に共起した単語と、共起しなかった単語の確率を考える 高速化:Negative Sampling 26 共起した(True) 共起しなかった(False) p(T|wI, wO) = (v 0T wo · vwI ) p(F|wI, wO) = 1 (v 0T wo · vwI ) E = log p(T|wI , wO) Y v2VNeg p(F|wI , v) :シグモイド関数(x) = 1 (v0T wO · vwI ) = (v0T wO · vwI )
  30. 30. パーティクルフィルタ研究会2016/1/7 / 32 実際に共起した単語と、共起しなかった単語の確率を考える 高速化:Negative Sampling 26 共起した(True) 共起しなかった(False) p(T|wI, wO) = (v 0T wo · vwI ) p(F|wI, wO) = 1 (v 0T wo · vwI ) さっきの式の分母の役割
 Vnegからランダムにk個取る (k=5〜20) E = log p(T|wI , wO) Y v2VNeg p(F|wI , v) :シグモイド関数(x) = 1 (v0T wO · vwI ) = (v0T wO · vwI )
  31. 31. パーティクルフィルタ研究会2016/1/7 / 32 実際に共起した単語と、共起しなかった単語の確率を考える 高速化:Negative Sampling 26 共起した(True) 共起しなかった(False) p(T|wI, wO) = (v 0T wo · vwI ) p(F|wI, wO) = 1 (v 0T wo · vwI ) さっきの式の分母の役割
 Vnegからランダムにk個取る (k=5〜20) E = log p(T|wI , wO) Y v2VNeg p(F|wI , v) :シグモイド関数(x) = 1 (v0T wO · vwI ) = (v0T wO · vwI ) E = log p(T|wI, wO) Y v2VNeg p(F|wI, v)p(T|)p(T|) p(F| p(T|) p(F| p(T|) p(F| p(T|) p(F| p(T|) p(F| p(T|) E = log p(T|wI, wO) Y v2VNeg p(F|wI, v)
  32. 32. パーティクルフィルタ研究会2016/1/7 / 32 Vneg からランダムに k 個取る 27 U(w):単語の頻度 ノイズ分布Pn(w) 8 4 3 1 0.44 0.258 0.21 0.092 普通の割合 0.5 0.25 0.1875 0.0625 頻度が少ない単語も選択されやすいように補正 U(w) Pn(w)
  33. 33. パーティクルフィルタ研究会2016/1/7 / 32 高速化前後の目的関数の比較 28 ボキャブラリー数+1回の計算 VNeg(5〜15)数+1回の計算 まじめに計算しなくても問題がなかった 計算回数が圧倒的に減ったので学習ができる!! E = log p(T|wI, wO) Y v2VNeg p(F|wI, v)I) = exp(v0T wOc · vwI ) X wv2V exp(v0T wv · vwI )
  34. 34. パーティクルフィルタ研究会2016/1/7 / 32 高速化したあとの目的関数 29 Wの更新式 W’の更新式 E を W,W’ の各要素で偏微分する ti = ⇢ 1 (i = wO) 0 (otherwise) E = log (v0T wO · vwI ) X v2VNeg ( v0T v · vwI ) v0 ij := v0 ij ⌘( (v0T i · v0 wI ) ti)vwI j vij := vwI i ⌘ X v2wO[VNeg ( (v0T v · vwI ) tv)v0 vi
  35. 35. パーティクルフィルタ研究会2016/1/7 / 32 類似する単語は,ベクトル間のコサイン類似度で得る 獲得したベクトルの利用方法 30 ※学習パラメータ・データはオフィシャルサイトのチュートリアルを利用 science scientific 0.572214 sciences 0.569874 astrobiology 0.487089 pseudoscience 0.486106 physics 0.477239 pay paid 0.730617 paying 0.690467 repay 0.577326 payment 0.569318 debts 0.561721
  36. 36. パーティクルフィルタ研究会2016/1/7 / 32 2層のニューラルネットワークで、良い感じに学習したら単語の 「意味」ベクトル作れた ベクトル同士の足し算で,単語の「意味」の足し算ができた この単語と単語が共起しないだろうと考えたら高速化できた まじめに計算しなくても,意外に問題がないこともある おわりに 31
  37. 37. パーティクルフィルタ研究会2016/1/7 / 32 Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, Jeffrey Dean: Distributed Representations of Words and Phrases and their Compositionality, Neural Information Processing Systems 2013, 3111–3119, 2013. 西尾泰和: 『word2vec による自然言語処理』 株式会社オライリー・ジャパン, 2014 Yoav Goldberg and Omer Levy: word2vec Explained: Deriving Mikolov et al.’sNegative-Sampling Word-Embedding Method < https://arxiv.org/pdf/ 1402.3722v1.pdf > 2016/1/2アクセス @tkengo: 「Word2Vec のニューラルネットワーク学習過程を理解する」,
 < http://tkengo.github.io/blog/2016/05/09/understand-how-to-learn-word2vec/ > 2016/1/2アクセス 岡崎直観:「単語・句の分散表現の学習」< http://www.slideshare.net/naoakiokazaki/ ss-55494101 > 2016/1/4アクセス 参考文献 32

×