Upgrade to Pro — share decks privately, control downloads, hide ads and more …

数式抜きでWord2vecを話す

 数式抜きでWord2vecを話す

社内勉強用の資料です。
フォローお願いします。https://twitter.com/Ishitonton

Yoshiyuki Ishida

August 30, 2019
Tweet

More Decks by Yoshiyuki Ishida

Other Decks in Technology

Transcript

  1. Word2vec • ニューラルネットワークを利用して、単語の複雑な出現パターンを学習す ることで、単語の意味をベクトル化し、少ない次元で表現したもの。 11 array([ 1.7441803e-01, 5.5022329e-01, -1.5351723e+00, 2.3066516e+00,

    -2.3487081e-01, 1.7224085e-01, 1.0707989e+00, 3.7454587e-01, -1.7149467e+00, 4.6234414e-01, -7.2002047e-01, -1.2101789e-01, -1.3974689e+00, -4.9059436e-01, 1.3345706e+00, -5.8065295e-01, 8.8916004e-01, 4.4929271e+00, -1.4097267e+00, -5.0225359e-01, … 3.5694275e-02, 8.0919385e-01, -2.8557727e+00, 3.0286400e+00, -2.1482782e+00, 6.0337013e-01, -7.5518543e-01, 1.5582509e-01, 2.1217930e+00, 2.4696269e+00, -1.9842325e-01, 1.2560833e-01, -8.6570635e-02, 5.3070253e-01, 1.0623057e+00, 8.1694938e-02, 6.1838251e-01, 3.1581829e+00, -5.0594652e-01, -1.1081424e+00, -1.5923131e+00, -2.4171481e-02, 2.5128777e+00, 2.2384043e+00, -1.6228848e+00, -6.4785779e-01, 1.7091165e-01, 3.1226902e+00], dtype=float32) 「日本」 = 200次元 ベクトル
  2. 男⇔女間のベクトルの向きは一緒。 13 「おじ - 男 + 女 = おば」 「王

    - 男 + 女 = 女王」 みたいなベクトル演算が可能。 ※簡易的に2次元で表現。本当は、20次元~の話。 参考:https://deepage.net/bigdata/machine_learning/2016/09/02/word2vec_power_of_word_vector.html
  3. ここでクイズ。Word2vecで計算させると・・・(後で。) •「松本人志」 - 「ボケ」 + 「ツッコミ」 = •「イチロー」 – 「野球」

    + 「サッカー」 = •「結婚生活」 - 「楽しさ」 = •「人生」とは、 14 ※前提:日本語Wikipediaをコーパスとする。
  4. Word2vecの準備: 情報源には、コーパスを利用する。 • コーパス • NLPの研究やアプリケーションのために目的をもって収集されたテキストデータ。 • 利用データ • Wikipedia

    • Google news • シェイクスピア/夏目漱石など、作家の作品群 等 • 特徴 • コーパスに含まれる文章は「人の手によって書かれたもの」。 • 自然言語に関する人の「知識」が大量に含まれている。 • 文章の書き方 • 単語の選び方 • 単語の意味 16
  5. Word2vecのアイデア①: 分布仮説 • 単語の意味は、周囲の単語によって形成される 17 I drink beer. We drink

    wine. I guzzle beer. We guzzle wine. beerやwineは飲み物? guzzleとdrinkとは 近い意味を持つ?
  6. Word2vecのアイデア② : 推論問題 • 推論問題を解く過程で、単語間のパターンや意味を学んでいく。 18 You say goodby and

    I say hello. you goodby 入力 (前後の単語) 複雑な計算式 正解 単語 say 予測 (確率が高い単語) are 複雑な計算式 goodby goodby goodby I 複雑な計算式 and or ① 比較 ③ ② フィードバック フィードバック say I
  7. Word2vec(推論ベース)のアイデア • 「周囲の単語」が与えられたときに、どのような単語が出現するかを推測する。 1. 大規模なコーパスを用意する。 2. コーパスを利用して、推論問題を解きまくる。 3. 結果を、「複雑な計算式」にフィードバックしまくる。 4.

    「複雑な計算式」は段々と頭がよくなる。予測精度が上がる。 • 「複雑な計算式」が、単語の複雑なパターンを学んだ結果、単語の分散表現が得られる。 19 you goodby you say goodbye and I hello . 単語の出現確率 周囲の単語 複雑な計算式 単語の分散表現
  8. Word2Vecは2つのモデルがある • CBOWモデル(Continuous bag-of-words) • Skip-gramモデル 20 You ? goodby

    and I say hello. ? say ? and I say hello. 今、話したモデル こっちの方が、推論問題としては難しい。
  9. 参考:CBOWモデルのニューラルネットワーク構造 21 入力層 中間層 出力層 Softmax() スコア 出現確率 you say

    goodbye and I hello . you say goodbye and I hello . you say goodbye and I hello . 0 1 0 0 0 0 0 正解ラベル 比較 1 0 0 0 0 0 0 0 0 1 0 0 0 0 重み (7×3) 重み (3×7) 重み (7×3) (1×7) (1×7) (1×7) 1. 入力層は、targetの周囲の2つの単語ベクトルが入る。 2. 中間層は、2つの入力層と重みWinの積を計算し、その出力の平均となる。 3. 出力層のニューロンはスコア。Softmax関数で出現確率に変換。 4. 正解ラベルと差分(損失)を計算し、損失を減らす方向に重みを更新する。 5. 上記を繰り返す。 CrossEntropyError =損失 Back Propagation/重み(Win /Wout )の更新
  10. モデルのインポート (python) $ tar -jxvf 20170201.tar.bz2 $ from genism.models import

    KeyedVector $ model = KeyedVectors.load_word2vec_format('./entity_vector/entity_vector.model.bin', binary=True) # コンソール上でファイルの解凍 # pythonでのライブラリのimport、モデルオブジェクトの作成
  11. WordNet • 最も有名なシソーラス • 1985年に開発がスタートした伝統あるシソーラスで、多くの研究で利用されてきた。 • 20万語を超える単語が登録済み。 • 単語ネットワークを利用して、単語間の類似度を算出できる。 •

    PythonのNLTKというライブラリを利用すると、WordNetが利用できる。 • Github: https://github.com/ronasama/nlp_sample/blob/master/nltk_sample.py 40 # tokyoの定義を確認する $ tokyo.definition() # -> 'the capital and largest city of Japan; the economic and cultural center of Japan' # tokyoの同義語を確認する $ tokyo.lemma_names() # -> ['Tokyo', 'Tokio', 'Yeddo', 'Yedo', 'Edo', 'Japanese_capital', 'capital_of_Japan'] # osakaやkyotoとの類似度を確認する $ print(tokyo.path_similarity(osaka)) # -> 0.25 $ print(tokyo.path_similarity(kyoto)) # -> 0.25 $ print(kyoto.path_similarity(osaka)) # -> 0.3333333
  12. 共起行列:一番素直な方法 43 You say goodby and I say hello. •

    全ての単語に対して、共起する単語をテーブルにまとめたもの • 周囲の単語をカウントする。(window size =1) you say goodby and I hello . you 0 1 0 0 0 0 0 say 1 0 1 0 1 1 0 goodby 0 1 0 1 0 0 0 and 0 0 1 0 1 0 0 I 0 1 0 1 0 0 0 hello 0 1 0 0 0 0 1 . 0 0 0 0 0 1 0
  13. ベクトル間の類似度(コサイン類似度) • コサイン類似度(Cosine similarity) • 単語のベクトル表現の類似度によく利用される。 • 他には、ベクトルの内積計算/ユークリッド距離等 44 =

    1 1 + ⋯ + 1 2 + ⋯ + 2 1 2 + ⋯ + 2 Similarity(X, Y) = ∙ ※コーパスが小さいので解釈できる結果にはならない。 大規模なコーパスを利用するといい感じになるはず。
  14. 他にもカウントベースの分散表現にかかわるテクニック • N-gram • 今話したのと、ほぼほぼ一緒。 • 文書N-gramと単語N-gramがある。 • TF-IDF •

    Term Frequency(TF)と、Inverse Document Frequency(IDF)のこと。 • 普通にやると、andとかIとかisとかareとかが頻度高くなるのは当然。 • 文書の中から、その文書の特徴語を抽出する時に使う。 • 次元圧縮(SVDとか) • 単語が大きくなればなるほど、巨大でスパースな行列になる。 • 特異値分解とかを利用して、別の行列に情報を集約する。 45