Upload
takahiro-kubo
View
21.409
Download
0
Embed Size (px)
Citation preview
Copyright © 2017 TIS Inc. All rights reserved.
言葉のもつ広がりを、モデルの学習に活かそう
戦略技術センター久保隆宏
one-hot to distribution in language modeling
自己紹介
言葉のもつ広がりを、モデルの学習に活かす
論文の主張
one hotの問題点
one hotからdistributionへ
定式化
実験結果
実装と検証
おわりに
目次
久保隆宏TIS株式会社 戦略技術センター
化学系メーカーの業務コンサルタント出身
既存の技術では業務改善を行える範囲に限界があるとの実感から、戦略技術センターへと異動
現在は機械学習や自然言語処理の研究・それらを用いたシステムのプロトタイピングを行う
自己紹介
OpenAI Gymを利用した、強化学習に関する講演(@PyConJP 2016)
kintoneアプリ内にたまったデータを簡単に学習・活用(@Cybozu Days 2016)
機械学習のビジネスへの適用/音楽生成で同人誌ダブル出展(@技術書典2 2017)
所属するチームのミッション
chakki
すべての人が、ティータイムに帰れるようにする
すべての人が、ティータイム(15:00)に帰れる(茶帰)社会の実現を目指します。
この実現には、既存の仕事を効率化するのでなく、根本的に「仕事の仕方」を変える必要があります。
しかし、慣れた仕事の仕方というのは簡単には変わりません。だからこそ、実際に「体験」をし、効果を「実感」してもらうことが重要になります。
そのため、私たちは先進的技術を用い、仕事の仕方が変わる体験を提供していきます。
chakki
まずは自分たち(システム開発者)が帰れるように
自然言語処理/機械学習を活用する
Elephant Sense
「質の高い」文章を検索するための試み。ビュー数やいいね数だけでなく、コンテンツの品質の評価も行う。
karura
業務に機械学習をさくっと組み込むための試み。kintone/Slackのプラグインとなり、予測したい項目/予測に使う項目の指定のみでモデルを自動作成する。
chazutsu NEW!
自然言語で使うデータを簡単に手に入れるための仕組み。
データのダウンロードからpandasまでを一行で。
Copyright © 2016 TIS Inc. All rights reserved. 6
言葉の持つ広がりを、モデルの学習に活かす
Tying Word Vectors and Word Classifiers: A Loss Framework for Language Modeling
言葉の広がりを反映した学習を行うために、「one hotではなくdistribution」レベルでの比較を行おう
この手法を適用すると、同時に「input embeddingとoutput projectionの間に等価性が生じる」。これによりパラメーター数を大幅に削減することができる。
もちろん、精度もよくなる
論文の主張
機械学習において単語を表現する際、「one hotベクトル」という形式が良く用いられる。
one hotベクトルとは、その名前の通り表現したい単語の箇所のみに「1」が立っているようなベクトル(この際、ベクトルのサイズは辞書のサイズと等しくなる) 。
one hotによる学習の問題点(1/4)
0 1 0 0 0 0・・・
apple
banana
cherry zoid
zoo
ベクトルのサイズ=単語の数(辞書のサイズ)
ただ、one hotは非常にサイズが大きく、また情報が疎になっている。
そのためモデルに対して入力を行う際は、通常埋め込み表現という形式をを用いる。
one hotによる学習の問題点(2/4)
banana
is
delicious
2
9
5
単語 辞書上の番号 埋め込みベクトル(embedding)
単語の数(辞書のサイズ)
出力
ベクトルサイズfruit ・・・
「ベクトルの辞書」を引いているような形になるため、この操作をembedding lookupと呼んだりもします
ここで具体的なモデルの例として、3つ前までの単語から次の単語を予測するようなモデルを示す。
one hotによる学習の問題点(3/4)
0
0
1
0
0
0
・・・
banana
is
delicious
inputembedding
outputprojection
softm
ax
ベクトルを辞書サイズに戻す(projection)
出力を合計が1になる値(確率)に変換
fruit
単語を予測するケースの場合、教師データはone hotの形で与えられる。これに対しモデルからの出力は確率分布となり、この二つの差異が最適化すべき誤差となる(図右)。
この状況の問題点としては、教師データとして唯一の正解しか与えられないという点。本当なら別に(同じ意味の)他の単語でも良かったりする場合でも、回答は常にひとつ(oneがhotな箇所)だけ。
one hotによる学習の問題点(4/4)
つまり、one hotの世界では正解に近い単語でも遠い単語でもすべからく「外れは外れ」として処理されることになる。これでは、「意味の広さ」を表現することができない。
これが、one hotによる学習の問題点となる。
fruit
sweets
food
crop
iron
zoid
割とどれでもいい
正解以外は、意味が近しかろうがNG。例外はない(キリッ
この問題が解決された姿として、以下のような感じだとうれしい。
one hotからdistributionへ(1/5)
0.1
0.3
1
0.8
0.6
0.2
・・・
fruit
予測分布vs真の分布で差異を取る
sweets
food
iron
animal
これを行うため、以下のような操作を行う。
one hotからdistributionへ(2/5)
fruit 4
単語(正解) 辞書上の番号 埋め込みベクトル(embedding)
単語の数(辞書のサイズ)
ベクトル
ベクトルサイズ
内積->softmax
正解のベクトルに似ている単語が高く評価された分布が手に入る
全体像としては、以下のような形となる。
one hotからdistributionへ(3/5)
banana
is
delicious
inputembedding
outputprojection
softm
ax
fruit
このモデルにおいて誤差がない場合、以下の等式が成立する。
one hotからdistributionへ(4/5)
outputprojection
softm
ax
inputembedding
softm
ax
|=|とみなせるなら(双方は埋め込みベクトルサイズの単語表現なので、同一単語なら同一と考えてもよいはず)output=input が成立する。
回答予測
正解単語ベクトルから作成した分布
入力単語から作成した予測分布
パラメーターの数が半分に!(embeddingは非常に大きい行列になるので、この削減効果は大きい)。
one hotからdistributionへ(5/5)
banana
is
delicious
embedding projection
softm
ax
fruit
使いまわす使いまわせる!
Tying Word Vectors and Word Classifiers: A Loss Framework for Language Modeling
言葉の広がりを反映した学習を行うために、「one hotではなくdistribution」レベルでの比較を行おう
この手法を適用すると、同時に「input embeddingとoutput projectionの間に等価性が生じる」。これによりパラメーター数を大幅に削減することができる。
もちろん、精度もよくなる
論文の主張(再掲)
誤差の定義(one hot + distribution)
定式化
one hotの誤差
distributionの誤差(KL距離)
教師分布の得方
正解単語のベクトル取得
内積計算+softmaxで分布化
まず、分布ベースの誤差を導入することで、input embedding = output projectionとなる仮説は正しいか検証
実験結果(1/3)
β(分布ベース誤差)の係数が大きいほど、τが高い(より滑らか)なほど、input/outpuの距離が小さくなる=仮説が証明されている
分布ベースの誤差を導入した効果、また、input embedding = output projectionとすることの効果は
実験結果(2/3)
+AL:分布ベース誤差+RE:input=outputの制御言語モデルの評価で、LSTMのベースラインよりも高い効果=手法が有効
データセットのサイズが大きいとALの効果は限定的になるが(one hotでも十分な情報が取れるため)、REはいずれのケースでも高い効果がある
この他、<unk>やaなどの出現頻度が抑えられた。
特定の単語と<unk>やaが意味的に近しいことはないので、分布距離の導入により抑制されたのではないかと考えられる。
また、回答に近い単語へよりウェイトが置かれるようになった。
実験結果(3/3)
Copyright © 2016 TIS Inc. All rights reserved. 22
実装と検証
実際に実装して検証をしてみた
icoxfog417/tying-wv-and-wc
Kerasで実装
モデル・学習のパラメーターは論文準拠(論文のAppendixに詳細なパラメーターが記載されている)
次スライドの検証では、学習時間短縮のため小さいコーパスで学
※論文に倣うなら最低でも10epoch、差分を見るのに40epochは回さないといけないので。Penn Treebankでもツライ(ましてWikiTextでは・・・)
実装と検証(1/3)
実装と検証(2/3)
Temperature=10
Over-fit
Temperature=20
Over-fit
Well Done!
Well Done!
提案されたdistributionベースの誤差、またinput=outputの制約をかけることは、強い正則化作用を与えてくれる。
Penn TreeBankでの学習でも、この傾向は同様。ただ、ベースライン(LSTM)を上回れていない(データ量を削減するためスライド幅を1ではなく3にしているので、それが影響しているかも)。
実装と検証(3/3)
augmented lossの計算には(サイズの大きい)embedding matrixとの演算が必要なので、計算コストが高くなる(演算速度でハンデがある)
Temperatureを上げると学習は遅くなる(その分正則化作用が強まるか?は未検証)
予測単語における冠詞の抑制は確認できず(むしろ多いような?)
Learningnot enough
理屈としては、学習初期は学習されていないembeddingを使って教師分布を作ることになるため、学習の安定性に問題がある
そのため、distributionベースの誤差の使用率/Temperatureは基本的には学習が進むにつれてあげていったほうがより効率的なはず
Deep Q-Networkの学習のように、教師分布の作成に利用するembeddingを特定epochごとに更新する(一定期間fixする)といった方法も考えられる(Fixed Target Q-Network)
この意味では、事前学習済み分散表現(word2vec/Gloveなど)の利用が効果的な可能性がある
仮説
行列計算におけるbroadcastの重要性
学習データは通常のデータの次元にbatchsizeが加わるため、単純な行列演算に持ち込んで計算を効率化することが難しい。かといってfor(map)なんて使った日には・・・(GPUでもキツイ)
tensordotなどの関数は、こうしたbatchsizeに沿った行列演算(broadcast)の実装を助けてくれる(現時点ではKerasのbackendに実装されていないので、Theano/TensorFlowの関数を利用する)。
<unknown>なshape
Kerasでcompileにより学習用グラフを構築する際、「実際データが入ってこないとわからない」行列の次元はunknown(None)になる。そのため、この次元を利用した演算をしているとNoneとの演算はできません~というたぐいのエラーが発生する。
推定できそうなときもunknownになったりするので、その場合明示的なreshapeをかましたりする。
余談(1/2)
GPUサーバーのディスク容量
「計算するだけだから~」と思っていると足元をすくわれる。
機械学習系のライブラリ、CUDAなどは結構重く、また学習データ・epoch毎に保存するモデルファイルのサイズもばかにならない。
8Gだとぎりぎり、9~10G程度あったほうが安心できると思う。
PyTorchの言語モデルのサンプルではすでにtyingが実装されている
Word-level language modeling RNN
ソースコード中でも言及されているように、本論文以外にもinput embeddin/output projectionを等価にすることの効果を支持する研究がある("Using the Output Embedding to Improve Language Models")
積極的に使っていこう!
余談(2/2)
Copyright © 2016 TIS Inc. All rights reserved. 29
おわりに
今回は言語だったが、モデルの扱う対象をどう表現するのか、差異をどう定義するかは、モデルの構築において非常に重要なポイントとなる。
対象の表現
画像に対し潜在分布を仮定したVAE(これで書き癖などを表現できた)
差異の表現
ピクセル単位ではなく、「真か偽か」で差異を定義したGAN
Wasserstein GANなど、「距離」の定義方法だけでも精度に大きな影響を与える
自然言語という多義的な世界で、単語や文、ひいては文章をどのように表現し、どう差異を定義するのかはまだまだ開拓の余地がある!
おわりに
最近の研究では、単語をベクトルではなく分布で表現しようという試みがある。
Multimodal Word Distributions
単語をword2vecのように単一点(ベクトル)ではなく、広がりを持った分布で表現しようという試み(複数の意味を表現するため、分布を複合した多峰分布で表現する)。
おわりに
おわりに
arXivTimesという、論文のまとめを共有するリポジトリを運営しています(Twitterアカウントも有り)。
GitHubらしく、投稿だけでなくディスカッションもオープンに行えればと思っていますので、ご参加お待ちしております!
THANK YOU