いまさら聞けない	
  “モデル”	
  の話	
DSIRNLP	
  #5	
  (ゆるふわ枠)	
  
2014/01/11	
  @スマートニュース株式会社	
  
Koji	
  Matsuda	
  a.k.a	
  @condiAonal	
※発表スライドは後ほどslideshareに公開します	
1
自己紹介タイム	
•  学生でも教員でも無いですが,大学にお世話になっています	
  
•  すずかけ論文読み会という勉強会で月イチくらいで発表して
ます	
  
–  多摩川以西(?)の機械学習屋さん(ファン)で小規模に	
  
–  現在のところクローズド.発表資料の多くは参加者により公開されて
います.	
  

•  求職中です!!!!	

2
ことの始まり	
2013年初夏:研究室(自然言語処理メイン)の	
  
メンバーと草津温泉に行きました.その車中にて.	
学生	
  
さん	

先生から「モデルを考えよう」というアドバイスを頂くのです
が,具体的に何をしたらいいのでしょう?	
  
とりあえず,「問題の性質」を考えるのがいいんじゃない?	
  

学生	
  
さん	

私	

うーん問題の性質,と言われても,ただの分類問題のように思え
ます.「こういう特徴量が効く」というだけでは,研究としてちょっと
つまらないですよね?	
  

ぐぬぬ〜(気持ちはたいへん分かるが,うまいアドバイスが
思いつかない)	
  

私	
3
わきみちです	

4
 “Unsupervised	
  TranscripAon	
  of	
  Historical	
  Documents”	
  	
  
[Kirkpatrick+,	
  ACL	
  2013]	

解読	

「さまざまな要因を考慮しながら確率モデルを組み上げる」	
  
という意味で,お手本のような論文なのでおすすめです	
5
言われてみれば	
•  「モデルを考える」といわれても,具体的な方法
論を教わったことはあまり無いように思えます	
  
–  そもそも「モデル」って何でしょう???	
  

•  そこそこ長く研究に携わっている方なら,自然に
理解している概念も,研究を始めたばかりの学
生さんにはなかなか難しい	
  
–  これは「モデル」の話に限りませんが・・・	
  

•  この問題意識を共有したい!!	
  
–  そうだ 勉強会で話してみよう!	
  
6
このトークの主旨	
•  「モデル」とは何か,をいくつかの例から帰納
的に明らかにすることを試みます	
  
•  同時に,「モデルを考える」とはどのような営
みかを考えてみます	
  
研究者の皆様にはあまりにも自明な話であり,退屈
かもしれません	
  
「自分だったらどう説明するか」ということを考えなが
らお聞き頂ければ幸いです	
  
※フィードバック歓迎です!	
  
願わくば,悩める大学院生/新入社員のための幽かな希望の光とならんことを	
7
「モデル」という言葉の意味	
•  人によってさまざま.	
  
–  アプリケーション屋さんが使う「モデル」	
  
–  数理屋さんが使う「モデル」	
  
•  これほど多義な言葉もそうそう無い	
  
•  この多義性が,「つかめなさ」を生んでいる一因	
  

•  天下り的に「モデル」とはこういう意味だ!と定義
するのは難しい(というか,議論が終わらない)	
  
•  そこで今回は,自然言語処理においてよく用いら
れる幾つかのモデルから共通の特徴を抜き出す
ことができないか考えてみます	
  
8
NLP	
  まわりの色々なモデル	
•  言語モデル:単語列に確率を割り当てるため
のモデル	
  
–  n-­‐gram言語モデル,	
  RNN言語モデル,…	
  

•  言語の背後にある「構造」のためのモデル	
  
–  隠れマルコフモデル(HMM),マルコフ確率場
(MRF/CRF),…	
  

•  	
  分類モデル	
  
–  ナイーブベイズ,SVM,	
  …	
9
言語モデルの例	
  
(n-­‐gram言語モデル)	
•  ある文(単語列)の確率を求めたい	
  
–  P(	
  I	
  can	
  fly	
  )	
  

•  ある単語の出現確率は,直前n-­‐1個の単語に
しか依存しない,と仮定	
  
–  2-­‐gramモデルなら,,,	
  
–  P(I	
  can	
  fly)	
  =	
  P(I|<S>)P(can|I)P(fly|can)	
  

•  それ以前の文脈や,統語的な特徴は全て捨
象	
  
10
構造モデルの例	
  
(隠れマルコフモデル)	
•  ある文の確率を求めたい/文のそれぞれの単語に
品詞を付与したい	
  
–  品詞: 名詞,形容詞,副詞等	
  

•  単語の出現確率は品詞(隠れ変数)にのみ依存,品
詞は一つ前の語の品詞にのみ依存と仮定	
  
–  離れた位置にある語についての情報は捨象	
  

11
文書分類モデルの例	
  
(ナイーブベイズモデル)	
•  ある文書が予め決められたどのカテゴリーに
属するかを判定したい	
  
–  ポジティブ/ネガティブ	
  etc…	
  
–  スポーツ/政治/芸能/経済	
  etc…	
  

•  すべての単語は(カテゴリーが決まった条件
のもとで)お互いに独立に生起する,と仮定	
  
–  ある単語が出現すると,他の単語も出現しやすく
なる,といった現象は捨象	
12
「モデル」の本質/仮定・捨象	
•  三つのモデルを駆け足で眺めてみましたが,以上に
共通する要素は何だったでしょうか	
  
–  n-­‐gramモデル:単語の生起確率は直前の単語にしか依
存しないと <仮定>	
  
–  隠れマルコフモデル:単語の生起確率は品詞と一つ前の
語の品詞にしか依存しないと <仮定>	
  
–  ナイーブベイズモデル:単語の生起確率はカテゴリが決
まったもとでお互いに独立であると <仮定>	
  

•  	
  <仮定>	
  を行い,大勢に影響しない要素を <捨象>	
  
することこそ,「モデル」の本質(キリッ	
  
–  言い切って進めます	
13
「モデル」の本質/パラメータ	
•  <仮定>(ストーリーの骨組み) を決めた上で,そ
の詳細はデータに「語らせる」	
  
–  n-­‐gramモデル: ある語が出現したもとでの,直後の
語の出現確率	
  
•  回数をカウントするだけ	
  

–  隠れマルコフモデル: ある品詞から他の品詞への遷
移確率,ある品詞がある語を出力する確率	
  
•  複数の変数(品詞,語の出現回数)が絡み合っているので
ちょっと複雑	
  

–  ナイーブベイズモデル:あるカテゴリのもとでの,ある
語の出現確率	
  
•  回数をカウントするだけ	
  
14
(脇道)複雑さと信頼性のトレードオフ	
•  しかし,その	
  <仮定>/<捨象>	
  は,正しいですか?	
  
•  できることなら,捨象をできるだけ行わず,用い
ることのできる情報をすべて使いたい	
  
–  しかし,モデルが複雑性を増せば増すほど,「稀な」
事象に対応するパラメータが増えていきます	
  
•  n-­‐gramモデルにおいて	
  n	
  を大きくした場合	
  
•  サイコロを一度だけふって「このサイコロは6しか出ない」と
言っているようなもの	
  

•  何を用い何を捨てるか,というのは腕の見せ所	
  
–  ただし,比較的ロバストな学習モデルもあります	
15
(脇道)複雑さへの対処	
•  複雑なモデルにおいても,できるだけ信頼性
の高いパラメータを求めたい,という要求	
  
–  それに対する一つの答えとして,たとえばモデル
の「階層化」があります	
  
–  例)	
  LDA	
文書集合全体
のパラメータ	

α	

θ	

単語レベルの
確率変数	

β	

z	

文書レベル
のパラメータ	

w	

単語	
文書	
※他にも,正則化(MAP推定),スムージングなど,いくつものアプローチがあります	

16
モデル?アルゴリズム?	
•  「モデル」と同様にさまざまな使われ方をする言
葉として「アルゴリズム」があります	
  
•  モデルとアルゴリズムは,異なるものであると考
えたほうが良いように思えます	
  
–  ただし,境界線はあいまい	
  

•  私の理解	
  
–  「モデル」はあくまで,<目的>の数理的な表現	
  
–  その<目的>にいかに到達するか,が「アルゴリズム」
の領分	
  
•  匠の技	
17
ここまでのまとめ	
•  「モデル」とは何か	
  
–  ある現象をとらえるために(大胆な)仮定を置くこと	
  
仮定	
  
問題がどのような構造をしているのか	
  
枠組みだけ残し不要な要素を捨象	
  

データ	

アルゴリズム	
  
<仮定>	
  のもとで,データから	
  
パラメータを導きだす方法	
  

パラメータ	
  
<仮定>では定まっていない,モデルの詳
細な状態を表す変数	
  
18
モデルを考えよう/	
  
Playing	
  with	
  your	
  Problem	
•  	
  問題の性質を考えましょう	
  
–  その問題は「分類」で表すのが本当に適切ですか?	
  
•  じつは「選好関係」ではないか?「回帰」ではないか?	
  

–  ある事例に対するラベルが,他の事例のラベルに影
響を与える場合,構造を扱えるモデルを検討	
  
•  例)品詞ラベルは,周囲の語の品詞に依存する	
  

–  モデルの内部の状態を他のモデルへ渡すようなこと
を考えているなら,確率モデルが有用かもしれません	
  
•  全体を一つの確率モデルとして記述することができれば,
見通しが良くなるかも	
  
19
(脇道)確率モデルを組み上げる時は	
•  推論が効率的にできる構造になっているか	
  
–  鎖状(クリークの数え上げが楽)	
  
•  ループがあると,ちょっと難しくなる	
  

–  仮定する分布が共役ペアになっているか	
  
•  Dirichlet	
  /	
  MulAnomialなど	
  	
  

•  条件付き確率のモデル化で十分ではないか	
  
–  同時確率より表現能力は劣るが,リッチな素性を
入れ込める	
  
–  HMM(同時確率)に対するCRF(条件付き確率)	
  
20
「モデル」を中心に据えた論文を	
  
いっぱい読みましょう	
•  結局のところ,自分の中に「モデルのモデル/モ
デルの索引」をつくり上げることが必要になる	
  
•  確率モデルを扱った論文は難しい,と言われま
すが,コツさえつかめば何とかなる	
  
–  その論文は「何をモデル化しているか」	
  
–  それぞれの変数について	
  
•  何を表しているか:現実世界の何と対応しているか	
  
•  ドメインはなにか:スカラーか,ベクトルか,確率分布か	
  

–  どういう	
  <仮定>	
  を置いているか	
  
•  	
  何を	
  <捨象>	
  しているか,それは重要ではないのか	
  
背景のグラフィカルモデルは	
  	
  
21	
“Joint	
  Modeling	
  of	
  a	
  Matrix	
  with	
  Associated	
  Text	
  via	
  Latent	
  Binary	
  Features”	
  [Zhang	
  and	
  Carin,	
  NIPS	
  2012]	
  より
モデルを「実装」する	
•  「仮定」「データ」「アルゴリズム」の三本柱のうち,最も
実装がたいへんなのは「アルゴリズム」の部分	
  
•  多くの場合は	
  <目的関数>	
  に対する	
  <最適化問題>	
  に
落とすことができます	
  
–  非常に研究が進んでいる分野	
  

•  この部分をある程度サボるためのツールキットが出て
きています	
  
–  確率モデル	
  :	
  infer.net,BUGS/Stan,	
  HBC,	
  …	
  
–  ニューラルネット	
  :	
  Pylearn2,	
  Torch,	
  …	
  
–  組み合わせ最適化:CPLEXなどのLPソルバー	
  
–  連続最適化: libLBFGS(準ニュートン法のパッケージ)など	
22
モデルを「実装」する	
  
(確率モデルの例)	
•  ProbabilisAc	
  Programming	
  
–  確率モデルの	
  <仮定>	
  を記述して,データを与えるとよし
なに推論してくれる枠組み	
  
–  See	
  also	
  :	
  hpp://probabilisAc-­‐programming.org/	
  
–  例) HBC:	
  Hierarchical	
  Bayes	
  Compiler	
  による	
  LDA	
alpha
eta
beta_{k}
theta_{d}
z_{d,n}
w_{d,n}

~
~
~
~
~
~

Gam(0.1,1)!
Gam(0.1,1)!
DirSym(eta, V)
,
DirSym(alpha, K)
,
Mult(theta_{d})
,
Mult(beta_{z_{d,n}}),

k
d
d
d

in
in
in
in

[1,K]!
[1,D]!
[1,D] , n in [1,N_{d}]!
[1,D] , n in [1,N_{d}]	

HBCは現在メンテナンスされていないので,あまりおすすめはできません	
  
実際に使うなら,	
  BUGS,	
  Stan,	
  infer.net(非商用のみ)がホットなようです	
  
BUGS/Stan	
  は勉強会があるそうです	
  [検索]	
23
モデルを「実装」する	
  
(HBCによるLDAの例)	
η	

α	

z	

θ	

β	

w	

単語	
文書	

alpha
eta
beta_{k}
theta_{d}
z_{d,n}
w_{d,n}

~
~
~
~
~
~

Gam(0.1,1)!
Gam(0.1,1)!
DirSym(eta, V)
,
DirSym(alpha, K)
,
Mult(theta_{d})
,
Mult(beta_{z_{d,n}}),

k
d
d
d

in
in
in
in

[1,K]!
[1,D]!
[1,D] , n in [1,N_{d}]!
[1,D] , n in [1,N_{d}]	
24
モデルを「実装」する	
  
(ニューラルネットの例)	
•  Torch7	
  (	
  hpp://torch.ch/	
  )	
  の例	

100U	

25U	

50U	

require "nn”!
mlp = nn.Sequential()
-- 多層のネットワーク!
mlp:add( nn.Linear(100, 25) ) – 入力100ユニット -> 中間25ユニット!
mlp:add( nn.Tanh() ) – 活性化関数は tanh!
mlp:add( nn.Linear(25, 50) ) – 出力層は50クラス!
mlp:add( nn.SoftMax() )!
criterion = nn.ClassNLLCriterion()!
trainer
= nn.StochasticGradient(mlp, criterion) – 最適化はSGD!
trainer:train(dataset)	
25
まとめ(前半) モデルとは何か	
•  ある現象をとらえるために(大胆な)仮定を置く
こと	
  
•  モデルを構成する四要素	
仮定	
  
問題がどのような構造をしているのか	
  
枠組みだけ残し不要な要素を捨象	
  

データ	

アルゴリズム	
  
<仮定>	
  のもとで,データから	
  
パラメータを導きだす方法	
  

パラメータ	
  
<仮定>では定まっていない,モデルの詳
細な状態を表す変数	
  
26
まとめ(後半)	
  Playing	
  with	
  your	
  Model	
•  「モデルを考える」ときには,	
  
–  直面している問題の性質を考えましょう	
  
•  分類で表すことが適切な問題なのか	
  
•  構造(他の変数との絡み)を考慮する必要があるのか	
  

–  「アルゴリズム」については先人の知恵を借りるこ
とが可能か,時間を割いて調べてみる価値があ
りそうです	
  
というようなことを,研究を始めたばかり(始めるつもり)	
  
の人に伝えたいです	
27

いまさら聞けない “モデル” の話 @DSIRNLP#5