ITと哲学と

IT系エンジニアによる技術と哲学のお話。

Natural Language Processing & Word Embeddings

Introduction to Word Embeddings

CouseraのDeepLearningのコースの学習メモ. 今回は言語処理のためのモデルについて.

Word Representaion

Word Embeddingの方法は色々ある. 前週ではOne-hotなベクトル表現をみてきた.

One-hotな表現は,シンプルだが,有用性は低い.

例えば'I want a glass of orange juice.'というセンテンスを学習した上で,'I want a glass of apple ?.'の?を予測したい.

orangeとappleは似たような概念であり,文脈からもjuiceがきて欲しいが,単なるone-hotな表現ではorangeとappleが似た概念であることを表現できないため,難しい.

これを改良して,図1のように,特徴群に対する当てはまり度合いのようなものを定義してそのベクトルを扱うようにすると,似た者は似たようなベクトルになり,似ている概念を扱うことができるようになる.

f:id:masamasah:20181009220451j:plain

特徴は高次元であり,可視化に向かないが,2次元(もしくは3次元)に圧縮できる技術であるt-SNEを活用して可視化すると,図2のように似た者が近くに集まるようになる.

f:id:masamasah:20181009220540j:plain

Using word embeddings

どのように学習するかは後ほど学ぶが,Word Embeddingを活用する際には,転移学習の考え方が使える.

すでに大量のデータで学習された各単語のベクトル群がネット上にたくさんあるので,それを使って単語をベクトルにして,所望のタスクを解くといった方法が有用である.

Properties of word embeddings

One-hotな表現ではなく,前述のような表現方法を使うと,単語のアナロジーを解くことができる. どういうことかというと「Man->Womanの時,King->?」の?を予測することができる. 今,いくつかの特徴でベクトル化した各単語が図3のように与えられたとする.

f:id:masamasah:20181009220554j:plain

この時,[tex: e{man} - e{woman}]を求めると [-2, 0, 0, 0]となる. これが左辺の関係性となる.

[tex: e{king}-e{?}]がこれと等しくなるものを求めると, e_{queen}が一番確からしいことがわかる.

このようにしてアナロジーを解くことができるわけである.

定式化すると,図4で表せる.

f:id:masamasah:20181009220609j:plain

ここで Sim(u,v)は色々な種類があるが,コサイン距離やユークリッド距離が用いられる.

コサイン距離は図5のような値である.

f:id:masamasah:20181009220620j:plain

Embedding matrix

ボキャブラリーVに含まれる単語全てを,特徴次元Dでベクトル化したセットをEmbedding matrix(E)と呼ぶ(図6).

f:id:masamasah:20181009220630j:plain

Embedding matrixに単語αのOne-hotベクトルをかけると,単語αに対応するベクトル e_{\alpha}を取り出すことができる.

Learning Word Embeddings:Word2vec & GloVe

Learning word embeddings

Embedding matrixの学習の方法について.

いろんなアルゴリズムがあるが,近年はかなりこれがシンプルになってきている. シンプルすぎて,なぜそれがうまく動作するのかが直感的にわかりにくかったりもするので,まずはある程度の複雑さのあるアルゴリズムから始めて,よりシンプルなアルゴリズムでもうまく行くことを説明する.

(若干奇妙に思えるかもしれないが)Ebmedding matrixを学習するために,「単語を予測するタスク」を考える.

"I want a glass of orange ?."の?を予測する.

適当に初期化されたEを用いて図7のようなニューラルネットを構築する.

f:id:masamasah:20181009220643j:plain

出力層はボキャブラリー数分のsoftmaxになっており,?が正解データであるjuiceになるように w^{1} , b^{1}, w^{2}, b^{2},  Eを学習して更新する.

大量のテキストデータに対して同様の学習を行うことで,所望のEを得ることができるわけである.

ここで,予測したい位置(?の位置)に対して,入力とする部分のことをContextと呼ぶ.図7の例では,Contextは文全てだった.

このContextを,直近4単語とか,前後の4単語,直近1単語や,直近ではなくとも近くにある1単語とするようなスタイルがある.

最後の,直近ではなくとも近くにある1単語とする手法が,Skip-gramと呼ばれるものであり,次章で説明する.

Word2Vec

skip-gram

まず,skip-gramのタスクを説明する. skip-gramは,Contextからtargetを求めるタスクである.

教師データとして'I want a glass of orange juice to go along with my cereal.'というセンテンスが得られたとする.

まず,教師データからランダムにContextを1つピックアップする(例えばorangeとしよう).

次に,targetを選ぶが,targetはcontextから見て,N単語以内にある単語のうちの1つである.

このcontextとtargetを1組として扱い,contextの単語が得られた際にtargetの単語を推定するタスクがskip-gramである.

Model

モデルを図8に示す.

f:id:masamasah:20181009220658j:plain

contextの単語ベクトルをsoftmaxして,出てきた結果のなかでtargetとして出てきてほしい部分の値が大きくなるように学習する. この時,softmax関数は図9のように表せる.

f:id:masamasah:20181009220711j:plain

図9の通り,分母でボキャブラリー数だけ足し算する必要があり,計算コストがかなり高いという問題がある.これを解決するために次の賞ではNegative Samplingを説明する.

Negative Sampling

Negative Samplingでは,contextの単語と,wordが1つ与えられて,さらにwordがtargetかどうかを表すフラグが与えられる.

これら3つの情報をもとに学習を行う.

例えば,教師データとして'I want a glass of orange juice to go along with my cereal.'が与えられたとする.Contextとして適当に単語が選ばれる(orangeとする). この時,targetとして,contextに近い中からランダムに1つをピックアップする(juiceとする). これらを1ペアとして[context:orange, word:juice, isTarget:True]として扱う.

さらに,isTarget:Falseのデータを作り出す. Falseのデータは,contextは固定にして,ボキャブラリーの中から適当にピックアップする.例えばsmallがピックアップされれば[context:orange, word:small, isaTarget:False]となる. ランダムにピックアップすると例えば,教師データに含まれる単語が選ばれるケース(例えばglassとする)もある. この場合での気にせずにFlaseのサンプルとして扱う.

さらにcontextを変えて教師データ群を作り出す.

これらのデータを使って,図10のモデルを学習する.

f:id:masamasah:20181009220725j:plain

この時,ボキャブラリーから適当に作成されるFalseのデータは,contextのデータ1つに対して,教師データが十分に多ければ2~5個,少なければ5~20個程度にする.

Flaseのサンプルを適当に作って教師データとして学習を進めるのでNegative samplingと呼ぶ.

ボキャブラリー分のロジスティック回帰を計算することになるが,ボキャブラリー分のデータを使って毎回softmaxを計算するよりははるかに計算コストが低い.

GloVe word vectors

あまり多くは使われないがGloVeという手法もある. Global vectors for word representationの略.

 X_{ij} (単語iがコンテキストjのもとで出てきた回数)を考えるモデル.

図11を最小化するように学習を行う.

f:id:masamasah:20181009220740j:plain

この時の[tex: \theta{i}, e{j}]はシンメトリックな値であり同様の働きをする. なので,GloVeを行う際には,まず,それぞれをランダムに初期化し,学習を進めて最終的に[tex: e{w} = (e{w} + \theta_{w})/2]として平均値を用いる必要がある.

Applications using Word Embeggings

Word embeddingsを活用する例を紹介する.

Sentiment Classification

テキストからお気に入り度合いを5段階で分析するタスク.星の数を推測するようなもの. Word Embeddingを使うと,教師データが少なくても良い結果が得られる.

"The desert is excellent"で星4つの教師データが得られたとする. この時,図12のようにモデルを構築し,学習することができる.

f:id:masamasah:20181009220750j:plain

なお,ここで,Eは大量のコーパスで学習されたwordEmbeddingである.

各単語ベクトルを平均して扱う方法であり,これは単語の出現順序を考慮しないことによる問題がある. "Completely lacking in good taste, good service and good ambience."という酷評であっても,平均すると"good"が多いので,かなりポジティブに解釈されてしまう.

これを防ぐためにRNNのモデルを使った方法がある(図13).

f:id:masamasah:20181009220801j:plain

このようなモデルによって,かなり良い精度で星の数を推定することが可能になる.

Debiasing word embeddings

Embedding matrixは,当たり前だが,その学習に使ったコーパスのバイアスに含まれるバイアスを持ったまま学習される. 現状の様々な理由によって例えば"Engineer"という単語は"woman"よりも"man"に近いように学習されがち.

このような望まれないバイアスを是正する仕組みについて解説されている.