Slide 1

Slide 1 text

数式抜きでWord2vecを話す 2019.08 Yoshiyuki Ishida

Slide 2

Slide 2 text

突然ですが、これは何色? 2

Slide 3

Slide 3 text

深緋(こけあき)色 3 RGB=(194, 0, 36) 3次元ベクトル

Slide 4

Slide 4 text

ベクトル表現には、色々とメリットがある • 定量化/細かいニュアンスの表現 • 同質性/異質性の把握 4 (0, 189, 255) (0, 103, 255) (0, 19, 255) (65, 0, 255) 全部青やんけ!

Slide 5

Slide 5 text

ところで、ベクトル表現は 色の世界だけでなく、自然言語処理の世界にも適用可能。 5 Word2vec = Word to vector = 単語のベクトル表現 のアルゴリズムの1つ

Slide 6

Slide 6 text

自然言語(Natural Language) • 日本語とか英語とか。私たちが普段利用している言語。 • 我々の言語をコンピュータに理解させたい、させるといいことがたくさんある。 • 自然言語処理(Natural Language Processing:NLP) チャットボット 翻訳 自動要約

Slide 7

Slide 7 text

「リンゴ」と意味が似ている単語はどれ? トマト 数学 犬 7

Slide 8

Slide 8 text

ベクトル空間表現 • 単語の意味をベクトル表現できれば、近しい意味の単語を定量的に把握 できる。 8 トマト リンゴ バナナ 数学 犬 猫 国語 英語 ※2次元で考えた場合

Slide 9

Slide 9 text

単語のベクトル表現のことを、 「単語の分散表現」「単語の埋め込み表現」と呼ぶ。 9

Slide 10

Slide 10 text

単語の分散表現には、様々なアルゴリズムが提案されている • 主なアルゴリズム • Word2vec • Glove • fastText • Word2vecは、単語の分散表現のアルゴリズムで、最も基礎的な概念。 10

Slide 11

Slide 11 text

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次元 ベクトル

Slide 12

Slide 12 text

Word2vecでこんなことが可能。 1. 単語同士の意味の近さを計算できる。 • 単語の類似性がエンコードされている。 2. 単語同士の意味を足し算、引き算を計算できる。 • 複雑な単語間の出現パターンも捉えている。 12 ニューラルネットワークで学習するからこそ可能。 従来の単語の分散表現(シソーラス/カウントベース)の方法では捉えらえない。

Slide 13

Slide 13 text

男⇔女間のベクトルの向きは一緒。 13 「おじ - 男 + 女 = おば」 「王 - 男 + 女 = 女王」 みたいなベクトル演算が可能。 ※簡易的に2次元で表現。本当は、20次元~の話。 参考:https://deepage.net/bigdata/machine_learning/2016/09/02/word2vec_power_of_word_vector.html

Slide 14

Slide 14 text

ここでクイズ。Word2vecで計算させると・・・(後で。) •「松本人志」 - 「ボケ」 + 「ツッコミ」 = •「イチロー」 – 「野球」 + 「サッカー」 = •「結婚生活」 - 「楽しさ」 = •「人生」とは、 14 ※前提:日本語Wikipediaをコーパスとする。

Slide 15

Slide 15 text

「単語の意味」をコンピュータに認識させる3つの方法 1. シソーラスによる手法 2. カウントベースによる手法 3. 推論ベースによる手法 15 Word2vec, Glove, fastText 付録に記載 時 代 • Word2vecは推論問題を解くことで得られる情報。

Slide 16

Slide 16 text

Word2vecの準備: 情報源には、コーパスを利用する。 • コーパス • NLPの研究やアプリケーションのために目的をもって収集されたテキストデータ。 • 利用データ • Wikipedia • Google news • シェイクスピア/夏目漱石など、作家の作品群 等 • 特徴 • コーパスに含まれる文章は「人の手によって書かれたもの」。 • 自然言語に関する人の「知識」が大量に含まれている。 • 文章の書き方 • 単語の選び方 • 単語の意味 16

Slide 17

Slide 17 text

Word2vecのアイデア①: 分布仮説 • 単語の意味は、周囲の単語によって形成される 17 I drink beer. We drink wine. I guzzle beer. We guzzle wine. beerやwineは飲み物? guzzleとdrinkとは 近い意味を持つ?

Slide 18

Slide 18 text

Word2vecのアイデア② : 推論問題 • 推論問題を解く過程で、単語間のパターンや意味を学んでいく。 18 You say goodby and I say hello. you goodby 入力 (前後の単語) 複雑な計算式 正解 単語 say 予測 (確率が高い単語) are 複雑な計算式 goodby goodby goodby I 複雑な計算式 and or ① 比較 ③ ② フィードバック フィードバック say I

Slide 19

Slide 19 text

Word2vec(推論ベース)のアイデア • 「周囲の単語」が与えられたときに、どのような単語が出現するかを推測する。 1. 大規模なコーパスを用意する。 2. コーパスを利用して、推論問題を解きまくる。 3. 結果を、「複雑な計算式」にフィードバックしまくる。 4. 「複雑な計算式」は段々と頭がよくなる。予測精度が上がる。 • 「複雑な計算式」が、単語の複雑なパターンを学んだ結果、単語の分散表現が得られる。 19 you goodby you say goodbye and I hello . 単語の出現確率 周囲の単語 複雑な計算式 単語の分散表現

Slide 20

Slide 20 text

Word2Vecは2つのモデルがある • CBOWモデル(Continuous bag-of-words) • Skip-gramモデル 20 You ? goodby and I say hello. ? say ? and I say hello. 今、話したモデル こっちの方が、推論問題としては難しい。

Slide 21

Slide 21 text

参考: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 )の更新

Slide 22

Slide 22 text

参考:入力データはone-hotベクトル化 • ニューラルネットワークで単語の処理を行うために、固定長にデータを変換する。 • one-hotベクトル 22 (1, 0, 0, 0, 0, 0, 0) (0, 0, 1, 0, 0, 0, 0) you goodby

Slide 23

Slide 23 text

重みが、欲しかった「単語の分散表現」 • 一般的には、Encode側の重みWinのみを利用する。 • 各行には、単語の分散表現が格納されている。 • 「音楽」「スポーツ」など、コーパスが違えば単語の分散表現も異なる。 • 単語の出現パターンを捉えたベクトル • 得られたベクトルは、「単語の意味」も内包している。 23

Slide 24

Slide 24 text

学習済みモデルWord2vecをいじってみる。

Slide 25

Slide 25 text

学習済みモデル • 東北大学 乾・岡崎研究室で作られたモデル • 日本語Wikipediaの本文全文をもとに学習したもの • ベクトル:200次元 • http://www.cl.ecei.tohoku.ac.jp/~m-suzuki/jawiki_vector/ • ファイル:20170201.tar.bz2 (2017年2月1日版, 1.3GB, 解凍後 2.6GB)をDLする。

Slide 26

Slide 26 text

モデルのインポート (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、モデルオブジェクトの作成

Slide 27

Slide 27 text

好きな単語のベクトルを表示する。 $ model[u'浦和レッズ'] # 「浦和レッズ」のベクトル出力 200次元ベクトル (= 1×200行列)

Slide 28

Slide 28 text

類似性が高い単語を表示する。 $ model.most_similar([u'人生']) # 「人生」の類似性が高い上位単語の出力 曖昧な単語についても、 ベクトル化されている。

Slide 29

Slide 29 text

「松本人志」 - 「ボケ」 + 「ツッコミ」

Slide 30

Slide 30 text

「イチロー」 – 「野球」 + 「サッカー」 30

Slide 31

Slide 31 text

「結婚生活」 - 「楽しさ」 31

Slide 32

Slide 32 text

Word2vecの利用シーン • 予測モデルの特徴量として利用することで、精度向上するかも。 • 既存の学習データだけだと、未知語が多い/過学習する場合。 • Kaggleなどでも利用されている。 • 学習済みの分散表現を外部からimportし利用する。 • 転移学習 32

Slide 33

Slide 33 text

ネタ:色々なコーパスでWord2vecを作った例: B’zの歌詞 • データサイエンティスト見習いの日常 • B'zの歌詞をPythonと機械学習で分析してみた 〜Word 2 Vec編〜 • https://pira-nino.hatenablog.com/entry/bz_w2v 33

Slide 34

Slide 34 text

ネタ:色々なコーパスでWord2vecを作った例: 発言小町 • AINOW • どうしたら「彼女」から「奥さん」になれるかを『Word2Vec』に聞いてみた • https://ainow.ai/2017/10/31/124408/ 34

Slide 35

Slide 35 text

ネタ:色々なコーパスでWord2vecを作った例:Twitter • パソコン工房NEXMAG • Word2Vecで「おじさん」と「お兄さん」を比較してみた • https://www.pc-koubou.jp/magazine/9905 35

Slide 36

Slide 36 text

まとめ • Word2vecについて、数式を使わずに説明した。 • ニューラルネットワークや実際の計算式に興味がある人は、調べてみてくだ さい。 • より効率的に計算できる方法があるが割愛した。 • Embeddingレイヤの導入 • Negative Sampling 36

Slide 37

Slide 37 text

付録 37

Slide 38

Slide 38 text

1.シソーラスによる手法 人が作った類語辞書を利用する方法 38

Slide 39

Slide 39 text

シソーラス(thesaurus) • =「単語の意味を人手で定義する類似辞書」のこと。 • 同じ意味の単語(同義語)や意味の似た単語(類義語)が同じグループに分類される。 • 単語の間で、「上位と下位」「全体と部分」など、より細かい定義もされる。 • コンピュータに単語間の関連性を教えることができる。 39 Car auto automobile machine motorcar = Carの同義語 object car motor vehicle go-kart Carの上位・下位概念 truck SUV compact hatch-back

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

シソーラスの問題点 • 時代で言葉の意味は変わっていく。 • 人の作業コスト。 • 単語の細かいニュアンスの違いを表現できない。 41

Slide 42

Slide 42 text

2.カウントベースによる手法 統計情報(単語の出現頻度)から、単語の意味を表現する方法 42

Slide 43

Slide 43 text

共起行列:一番素直な方法 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

Slide 44

Slide 44 text

ベクトル間の類似度(コサイン類似度) • コサイン類似度(Cosine similarity) • 単語のベクトル表現の類似度によく利用される。 • 他には、ベクトルの内積計算/ユークリッド距離等 44 = 1 1 + ⋯ + 1 2 + ⋯ + 2 1 2 + ⋯ + 2 Similarity(X, Y) = ∙ ※コーパスが小さいので解釈できる結果にはならない。 大規模なコーパスを利用するといい感じになるはず。

Slide 45

Slide 45 text

他にもカウントベースの分散表現にかかわるテクニック • N-gram • 今話したのと、ほぼほぼ一緒。 • 文書N-gramと単語N-gramがある。 • TF-IDF • Term Frequency(TF)と、Inverse Document Frequency(IDF)のこと。 • 普通にやると、andとかIとかisとかareとかが頻度高くなるのは当然。 • 文書の中から、その文書の特徴語を抽出する時に使う。 • 次元圧縮(SVDとか) • 単語が大きくなればなるほど、巨大でスパースな行列になる。 • 特異値分解とかを利用して、別の行列に情報を集約する。 45

Slide 46

Slide 46 text

カウントベースの問題点 • コーパス全体の統計データを利用する。 • 毎回、全てのデータを利用して一度に計算し直す。つらい。 • 巨大な行列に次元圧縮をかけるのは現実的ではない。 • 100万語の単語を扱う場合、100万×100万の行列計算が必要になる。 46

Slide 47

Slide 47 text

Word2vecの従来手法との比較 • 推論ベースの方法は、ミニバッチで学習可能。(データを小分けして学習可能) • 複数マシンでの並列計算もできる。 • カウントベースは、毎回ゼロから計算を行う必要があり。 • 推論ベースは、パラメータの更新が可能。 • カウントベースでは、複雑な単語間のパターンは表現できない。 47