Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DSIRNLP06 Nested Pitman-Yor Language Model

実装のためのNPYLMの解説

  • Login to see the comments

DSIRNLP06 Nested Pitman-Yor Language Model

  1. 1. 理理論論はどうでもいいから作ってみた い⼈人のためのNPYLM デンソーアイティーラボラトリ @uchumik
  2. 2. ⾃自⼰己紹介 ¤  @uchumik ¤  DSIRNLPでの発表は2回⽬目 ¤  初めてはDSIRNLP02でのLT ¤  ラグナロクオンラインのAIを機械学習でやろうという話 ¤  Lua⾔言語でランキング学習とロジスティック回帰の実装をして, それをROのAIに組み込んで⾒見見たよという⼀一発ネタ ¤  今回はちゃんと時間をもらって⼈人の役に⽴立立つ話をする...つもり
  3. 3. みんな⼤大好き形態素解析 ¤  皆さんMeCabは使っていますか? ¤  ひょっとしたらChaSen,Jumanを使っているかもしれません. ¤  最近だとKyTeaを使っている⼈人もいるでしょう. ¤  Web業界の⼈人なら,ヤフー形態素解析APIの⼈人もいるかもしれない. 通常,形態素解析器を作るには学習コーパスが必要となります. これは例例えば,単語境界,品詞,読み,等の情報が付与された⽂文書集合を 指します.
  4. 4. 皆さんが楽しく利利⽤用している裏裏側には… マネージャー Yesマン アノテーター
  5. 5. そしてやってくる辞書の保守
  6. 6. そんなアノテーターの強い味⽅方 ¤  それが教師無し形態素解析! ¤  単語境界の情報の無い⽂文章のみから最適な単語分割を推定してしまう ¤  コーパスを⼿手で作るにしても(少なくとも)最初のたたき台にはなる
  7. 7. 分かち書きが必要な(ほぼ全ての) ⾔言語に対応可能 読めなくても(たぶん)⼤大丈夫!
  8. 8. Nested Pitman-Yor Langauge Model [Daichi Mochihashi, ACL2009] ¤  今⽇日紹介する教師無し形態素解析⼿手法 ¤  2009年年に発表された個⼈人的にだいぶ衝撃を受けた論論⽂文 ¤  理理解するためにはベイズ⾔言語モデル(HPYLM,VPYLM)等の知 識識がいるうえ,実装難度度が⾼高い...と個⼈人的に思っている ¤  作りたい,でも良良く分からない,Tehの論論⽂文は無理理・読みたくな いという⼈人もきっといるはず ¤  そんな⼈人たちのための資料料がこれです. ¤  アノテーターは前振りなのでもう忘れてくれてかまいません ¤  が,エンジニアが楽しく実装すると,未知の分野の形態素解析を 作る時にアノテーターの負担も軽くできるかもしれない.
  9. 9. 今⽇日のお話 ¤  NPYLM ¤  ngramモデル ¤  単語分割のサンプリング ¤  分かち書きの作り⽅方 ¤  サンプリング ¤  ラティス構築 ¤  前向き確率率率の計算 ¤  NPYLMの学習の流流れ ¤  スムージング ¤  CRP ¤  PYP ¤  階層PYP ¤  HPYLM ¤  VPYLM
  10. 10. NPYLMってそもそも何してるの? ¤  Nested Pitman-Yor Language Model ¤  つまるところ⾔言語モデルを学習する⼿手法 ¤  単語ngramと⽂文字ngramをテキストから同時に学習する
  11. 11. ngram ⾔言語モデル ¤  ⽂文 s = {a b c d e},単語集合 {a, b, c, d, e} ¤  P(s) を以下で表す ¤  ngram モデルは,単語の確率率率は直前のn単語にのみ依存する と近似したもの ¤  e.g. n=2(bigram model) P(s) = P(a)P(b|a)P(c|a, b)P(d|a, b, c)P(e|a, b, c, d) P(s) = lY i P(wi|w1, . . . , wi 1) ⇡ lY i P(wi|wi 1) 単語のngramモデルを   単語ngramモデル ⽂文字の場合を   ⽂文字ngramモデル と⾔言う
  12. 12. 条件付き確率率率 ¤  尤も単純には以下の式でP(w_i|w_{i-1})は与えられる ¤  訓練データのbigramに最⼤大の確率率率を与える(最尤推定) ¤  テキストのみから単語ngram確率率率を推定しようとすると,単 語分割がされていないのでできない ¤  そこで,今のパラメータを使って単語分割を獲得して,単語 ngram確率率率も推定してしまおうというのがNPYLMの特徴 ¤  単語分割のための⼿手法ではなく⾔言語モデルの学習⼿手法であり,単 語分割は単語ngramの学習のための過程 P(wi|wi 1) = c(wi 1wi) P wi c(wi 1wi)
  13. 13. 分かち書きの作り⽅方 ¤  単語の最⼤大⻑⾧長を2⽂文字とした時に可能な分かち書きの表現 ⽂文字列列:1杯で3度度の⾹香り B 1 1杯 杯 杯で で で3 3 3度度 度度 度度の の の⾹香 ⾹香 ⾹香り り E ⾹香り り E α[り]P(E|り) α[⾹香り]P(E|⾹香り) に従って1つ前の単語をサンプルする これをBに到達するまで繰り返す α[・]:前向き確率率率(その単語に到達するまでの経路路の)確率率率の総和
  14. 14. サンプルする? ⾹香り り E に従って1つ前の単語をサンプルする 仮に, α[り]P(E|り)=0.2 α[⾹香り]P(E|⾹香り)=0.8 とする ↑1.0=0.2+0.8 0 1 サンプリングの⼿手続き 1.  0〜~1.0の間で乱数rを⽣生成 2.  Σt[i]がrを超えた時のiに対応する単語を選ぶ 確率率率を⾜足し合わせたテーブルtを作る α[り]P(E|り) α[⾹香り]P(E|⾹香り)
  15. 15. ラティスを組む ¤  プログラムを書く時には,次のように⾏行行列列で表現する 0 1 2 3 4 5 6 7 1 2 8 9 単語候補の終了了位置 ⽂文字列列:1杯で3度度の⾹香り(8⽂文字) 単語候補の⻑⾧長さ “⾹香り”は⻑⾧長さが2なので, ⾃自分の終了了位置-⻑⾧長さ(8-2)の位置で 終了了する各ノードと接続可能
  16. 16. 前向き確率率率の計算 ¤  各ノード毎にαを割り当てる 0 1 2 3 4 5 6 7 1 2 8 9 単語候補の終了了位置 ⽂文字列列:1杯で3度度の⾹香り(8⽂文字) 単語候補の⻑⾧長さ α[t][k]= P( t−k+1 t c | t−k−j+1 t−k c )α[t − k][ j] j ∑ 終了了位置t, ⻑⾧長さk の単語への到達確率率率 α[8][2]=P(⾹香り|度度の)α[6][2]+P(⾹香り|の)α[6][1]
  17. 17. ⼩小ネタ ¤  紹介した前向き確率率率の計算をForward-filteringと呼ぶ ¤  ⽂文末Eから後ろ向きに単語を⽂文頭Bまでサンプリングする処理理 を,Backward-samplingと呼ぶ
  18. 18. NPYLMのパラメータ学習の流流れ 1.  初期化 ¤  コーパスの各⽂文を1単語と⾒見見なして単語ngramモデル,⽂文字ngramモデル を更更新 2.  コーパスから1⽂文を取り出す 3.  取り出した⽂文に含まれる単語ngramをモデルのパラメータから削除 ¤  確率率率的に⽂文字ngramも削除される 4.  今のパラメータを使って⽂文を分かち書きする 5.  分かち書き結果を使ってNPYLMのパラメータを更更新する
  19. 19. 作れそうな気がしてきたでしょう? 意外と簡単じゃんと思えてきたでしょう?
  20. 20. P(wi|wi 1) の推定はどうやるのか. 後は,具体的に だけ分かれば作れそう
  21. 21. この辺から⾟辛くなります HPYLM, VPYLM の話が出てきます
  22. 22. NPYLMの構成 ¤  2つの⾔言語モデルのNestedになっている ¤  単語ngram → HPYLM: Hierarchical Pitman-Yor Language Model ¤  ⽂文字ngram → VPYLM: Variable-order Pitman-Yor Language Model ¤  スムージングについて知る必要がある ¤  何故Nestedが必要になっているのか? ¤  何故階層Pitman-Yor過程を事前分布に使うのか?
  23. 23. スムージング ¤  訓練データに出てこなかったngramの確率率率は,最尤推定では 0になってしまう(ゼロ頻度度問題) ¤  訓練データに含まれない⽂文が与えられた時に,その⽂文の確率率率 がゼロになってしまう P(私 は 本 を 読む)=0P(は | 私) = c(私, は) w c(私, w) = 0 1 P(本 | は)P(を | 本)P(読む | を) の確率率率が⾼高くても0になる 上記の⽂文に0では無い適切切な確率率率を与えたい! そこでスムージング
  24. 24. 適切切な確率率率とは何か ¤  単語の出現頻度度の分布はどのような形をしているのか? ¤  分布の形が分かっているのなら,それに従うように確率率率を与えれ ば良良い.
  25. 25. 単語の頻度度分布 ¤  べき乗則に従う ¤  次数が上がるとより急峻な形になる ngramの分布 (両対数グラフ) 尤度度 単語ID bigram:⽂文脈”武⽥田”が与えられた時の分布 trigram:”武⽥田  軍”が⽂文脈 4-gram:”武⽥田  軍  別働隊” が⽂文脈 単語の出現確率率率はべき乗則に従い, ⽂文脈が⻑⾧長くなると後に続く単語の バリエーションは少なくなる. 現実に沿うようにスムージングをしたい.
  26. 26. Chinese Restaurant Process 3 + c 2 + c 1 + c + c 新しいテーブルに 客が着席する確率率率 P(w| ) = cw + c + + c G0(w) CRP ⾔言語モデルのスムージングに利利⽤用 未知の単語にも確率率率を与えられる 基底測度度から単語が⽣生成される確率率率 ¤  訓練データに出てこない単語にも確率率率を与えたい ¤  とりあえずCRPとはこういうもんだと納得すると幸せになれる
  27. 27. Pitman-Yor Process ¤  ディスカウントパラメータdが追加されたCRP(Chinese Restaurant Process) ¤  dを0にすればCRPと⼀一致 ¤  べき乗則に従う単語の事前分布を作れる 1 d + c 2 d + c 3 d + c + 3d + c 3d= 既存のテーブル数 × ディスカウント数 新しいテーブルに 客が着く確率率率
  28. 28. 階層Pitman-Yor Process ¤ PYPを階層化するってどういうことなのか?
  29. 29. 階層化の考え⽅方 ¤  ngramを扱うために階層的な⽣生成過程を仮定 G0 = 1 V 最初は⼀一様分布 unigram は G_0から ⽣生成される bigram は unigram から ⽣生成される trigram は  bigram から ⽣生成される G1 G2
  30. 30. P(家 |context) = c家 |context d + c. + + 3d + c. G2(家) 階層化PYPによるスムージング ¤  単語ngramの確率率率 G1 G2 G0 = 1 V 1 d + c 2 d + c 3 d + c + 3d + c 新しいテーブルに客(頻度度)が着席する確率率率 =基底測度(親の文脈)から単語が⽣生成される確率率率 ⽂文脈におけるテーブルの数=親の⽂文脈から単語が⽣生成された回数(この例例では3個) 家という料料理理を出しているテーブルは1個=c(家)のディスカウントは1*d 階層PYPによるスムージング
  31. 31. 何が変わったのか ¤  新しいテーブルに客が着く確率率率 → 親の⽂文脈からngramが⽣生成される確率率率という考え⽅方になっている 親の⽂文脈=基底測度度 G_0に到達するまで再帰的にスムージングされる P(w|context) = cw dtw ✓ + c. + ✓ + dt. ✓ + c. P(w|⇡(context)) πは1つ短くした⽂文脈 HPYLMにおける予測確率率率
  32. 32. 何故Nested? ¤  G_0 = 1/V とすると,データに出てこない単語は全て等確率率率 ¤  ⽂文字ngram⾔言語モデルがあれば単語らしさが計算可能 ¤  → 単語 HPYLM の G_0 に⽂文字 HPYLM の予測確率率率を使おう ¤  初めて観測した単語にも適切切な確率率率を与えられる
  33. 33. ここから学習の話になります
  34. 34. HPYLMで予測するためには ¤  各⽂文脈毎にテーブルと客の配置が決まっている必要がある ¤  → HPYLMの学習(ハイパーパラメータはひとまず置いとく) ¤  ⽂文脈⽊木を使って⽂文脈毎のテーブルと客の配置を管理理する
  35. 35. 彼⼥女女 家 Context Tree Context Tree ε 彼 が の ⽝犬 の レストラン ⽝犬 服 家 テーブル 料料理理 (単語) 客(頻度度) 私 友達 ⽊木の各ノードがレストラン 観測されたngramに 対応するレストランに 客を追加する “彼⼥女女  の  家”という trigram は3回観測 されていることになる
  36. 36. ちょっと待て,親のお店に客が来ない ¤  n=3としてHPYLMの⽂文脈⽊木に観測したtrigramを追加していくと親 のレストランは常に閑古⿃鳥になる ¤  階層的なスムージングができないじゃんと思うかもしれない 確率率率的にスムージングのための客を親に再帰的に送る 家 レストラン ⽝犬 服 家 テーブル 料料理理 (単語) 客(頻度度) “彼⼥女女  の”に対応するレストラン c家 k d : に比例する確率で k 番目の家のテーブルに着席 ( + dt.)P (u)(家) に比例する確率で新しいテーブルに着席 “彼女 の 家” というtrigramを観測した時 → 新しいテーブルが⽣生成された時に, 親レストランにもコピー客を送る
  37. 37. HPYLMの学習 ¤  ⽂文脈⽊木の構築と,各レストランの適切切な客の配置を決定する ¤  学習アルゴリズム ¤  Text = {w_1, w_2, …, W_T} ¤  for i = 1 to Convergence ¤  for t = 1 to T ¤  read {context:u_t, word:w_t} ※ u_t = w_{i-1},…,w_{i-n+1} ¤  if i > 0 then ¤  remove_customer(u_t,w_t) ¤  add_customer(u_t,w_t) ¤  add_customer: ⽂文脈u_tに対応するレストランにw_tを追加 ¤  remove_customer: ⽂文脈u_tに対応するレストランからw_tを削除
  38. 38. ⽂文脈⽊木のデータ構造 ⼊入⼒力力⽂文: 単語はあらかじめIDにしておく ※しておかないと遅くて死ぬ w_tcontext:u_t typedef vector<int> tables; class node { map<int,node*> restaurants; // ⽂文脈⽊木 map<int,tables> arrangement; // 客の配置 int T; // テーブル数 int C; // 客の数 node *p; // 親 }; root 5: 0 単語5をサーブしている テーブルのリスト ※これまでの説明と違う形になっているが, 単語ID毎でテーブルの管理理を分けないと遅くて死ぬ
  39. 39. AddCustomer ¤  addCust(context u, word w) ¤  1つ前の単語3に対応する⽂文脈をrootから探す ¤  無いので単語3に対応するノードを作る ¤  単語3の前に単語1が来る⽂文脈を探す ¤  無いので単語3の下に単語1のノードを作る root ⼊入⼒力力⽂文: w_tcontext:u_t Context Tree root root
  40. 40. AddCustomer ¤  addCust(context u, word w) ¤  wをサーブしてるテーブルリストを得る(無ければ作る) ¤  単語w,テーブルのインデックスをk,テーブルkに着いている客をc_{wk}として, を⾏行行う                                                                        root (cwk  -‐‑‒  d|u|)に⽐比例例する確率率率:  cwk++ (θ|u|+d|u|t.)Pπ(u)(w)に⽐比例例する確率率率:   cwk new=1,  tw++,add_̲customer(π(u),  w) root 5: 0 root 5: 0 コピー客
  41. 41. AddCustomer ¤  addCust(context u, word w)   uに対応するレストランを探す   (無ければ作る)   レストランのwをサーブしてるテーブルリストを得る   (無ければ作る)   単語w,テーブルのインデックスをk,テーブルkに着いている客をc_{wk}とする root 5: 0 ⼊入⼒力力⽂文: w_tcontext:u_t (cwk  -‐‑‒  d|u|)に⽐比例例する確率率率:  cwk++ (θ|u|+d|u|t.)Pπ(u)(w)に⽐比例例する確率率率:   cwk new=1,  tw++,add_̲customer(π(u),  w)
  42. 42. RemoveCustomer ⼊入⼒力力⽂文: w_tcontext:u_t root 5: 0 ¤  remCust(context u, word w) ¤  ⽂文脈uのレストランを探す ¤  wをサーブするテーブルkから,cwkに ⽐比例例する確率率率で客を減らす ¤  テーブルから客がいなくなった場合 ¤  テーブルを無くし,親からコピー客を削除 1 0: 2 1: 1 客の数に ⽐比例例する 確率率率で客 を減らす root 5: 0 1 root 5: 0 remCust(π(u),w)
  43. 43. これでNPYLMは作れる! ¤  基底測度度G_0に⽂文字ngramのHPYLMを使えば全ては終わり! …と思うじゃん?
  44. 44. ⽂文字ngram⾔言語モデル ¤  単語ngramはせいぜい2〜~3gramで良良い ¤  NPYLMでは3つより前の単語を⾒見見ると計算量量的に厳しい ¤  ⽂文字ngramはカタカナの単語等だと⼤大きくnを取る必要がある ¤  意味のある⽂文字の並びをなるべくカバーしたい ¤  極端な話,あり得る単語の⻑⾧長さ全てをカバーする程度度のnにしたい → 無限  ngram ¤  HPYLMだと,必ず⽂文脈⽊木の末端に客が⼊入るため,nを⼤大きくすると メモリを使い尽くす
  45. 45. Variable-order PYLM ¤  ngram の n もまた確率率率変数にしてしまって,データから n も サンプリングしてしまう ¤  データに合わせて最適な  ngram が作れる ¤  → 可変⻑⾧長  ngram モデル
  46. 46. ⽂文脈を辿る際に停⽌止確率率率を導⼊入 q_i: 停⽌止確率率率 1-q_i: 通過確率率率 客はどのレストランに⾏行行くか root root root q_0 1-q_0 q_1*(1-q_0) root root q_2(1-q_0)(1-q_1) rootで客が停⽌止(追加) rootを通過 (⽂文脈ができる) 3で客が停⽌止(追加) 客が l 次に 到達(追加) P(n = l|context) = ql l 1 i=0 (1 qi) 深さ l に客が到達 する時の確率率率
  47. 47. 停⽌止確率率率 ¤  共通のベータ事前分布から⽣生成されていると仮定 qi ⇠ Be(↵, ) Be( , ) = ( + ) ( ( ) + ( ))q 1 E[q] = ( + ) (期待値)
  48. 48. ⽂文脈の各ノードに通過/停⽌止回数を⼊入れる typedef vector<int> tables; class node { map<int,node*> restaurants; // ⽂文脈⽊木 map<int,tables> arrangement; // 客の配置 int T; // テーブル数 int C; // 客の数 node *p; // 親 int a; //停⽌止回数 int b; // 通過回数 }; ai : bi : ノード  i にカスタマが停⽌止した回数 ノード  i をカスタマが通過した回数 E[qi] = ai + ↵ ai + bi + ↵ + ノードiで停⽌止する期待値 ノード毎に停⽌止回数と通過回数を ⼊入れる事で,ノード毎に停⽌止確率率率 を計算できる
  49. 49. オーダーnのサンプリング 停⽌止する⽂文脈の深さ 確率率率 0 0次の⽂文脈|u|=0でwが⽣生成される確率率率*0次で停⽌止する確率率率 1 1次の⽂文脈|u|=1でwが⽣生成される確率率率*1次で停⽌止する確率率率 2 2次の⽂文脈|u|=2でwが⽣生成される確率率率*2次で停⽌止する確率率率 単語wと⽂文脈uが観測された時,その単語は⽂文脈のどの深さから⽣生成されたんだろう? ⽂文脈の深さを固定 した時の予測確率率率 P(n = l|¬ ) = al + al + bl + + l 1 i=0 bi + ai + bi + + ¬ : wt, ntを除去した VPYLM のパラメータ 深さ l の⽂文脈に到達す る事前確率率率 P(w|u, ¬ , n) = ¬ cw dn ¬ tw n + ¬c· + n + dn ¬ t· n + ¬c· P(w| (u))
  50. 50. VPYLMの学習 ¤  ⽂文脈⽊木の構築と,各レストランの適切切な客の配置を決定する ¤  学習アルゴリズム ¤  Text = {w_1, w_2, …, W_T, n_1, n_2, …, n_T} ¤  for i = 1 to Convergence ¤  for t = 1 to T ¤  read {context:u_t, word:w_t, order:n_t} ¤  if i > 0 then ¤  remove_customer(u_t,w_t,n_t) ¤  n_t = sample_order(u_t,w_t) ¤  add_customer(u_t,w_t,n_t)
  51. 51. sample_order(u_t, w_t) ¤  オーダーのサンプリングテーブルを以下の式で作る ¬ :remove_cusomerを呼んだ後のVPYLMのパラメータと思っておけば良良い P(n = l|¬ ) = al + al + bl + + l 1 i=0 bi + ai + bi + + 0 1 2 z = Σ t[i] サンプリングの⼿手続き 1.  0〜~zの間で乱数rを⽣生成 2.  Σt[i]がrを超えた時のiに対応する次数を選ぶ P(n|w, ¬ ) P(w|u, ¬ ) P(n = l|¬ ) P(w|u, ¬ , n) = ¬ cw dn ¬ tw n + ¬c· + n + dn ¬ t· n + ¬c· P(w| (u))
  52. 52. AddCustomer ¤  addCust(context u, word w, order n_t) ¤  深さn_tに到達するまで,以下を⾏行行う ¤  1つ前の単語に対応する⽂文脈をrootから探す ¤  無い場合,1つ前の単語に対応するノードを作る ⼊入⼒力力⽂文: w_tcontext:u_t root Context Tree root n_t=1 の例例
  53. 53. AddCustomer ¤  addCust(context u, word w, order n_t) ¤  深さn_tに到達するまで,以下を⾏行行う ¤  1つ前の単語に対応するノードの通過回数bをインクリメント ¤  深さn_tのノードの停⽌止回数aをインクリメント ⼊入⼒力力⽂文: w_tcontext:u_t root Context Tree root n_t=1 の例例 b_0++ a_1++
  54. 54. AddCustomer ¤  addCust(context u, word w, order n_t) ¤  wをサーブしてるテーブルリストを得る(無ければ作る) ¤  単語w,テーブルのインデックスをk,テーブルkに着いている客をc_{wk}として, を⾏行行う                                                                       root (cwk  -‐‑‒  d|u|)に⽐比例例する確率率率:  cwk++ (θ|u|+d|u|t.)Pπ(u)(w)に⽐比例例する確率率率:   cwk new=1,  tw++,add_̲customer(π(u),  w,  n_̲t-‐‑‒1) root 5: 0 root 5: 0 コピー客
  55. 55. RemoveCustomer ⼊入⼒力力⽂文: w_tcontext:u_t root 5: 0 ¤  remCust(context u, word w, order n_t) ¤  ⽂文脈u,深さn_tのレストランを探す ¤  通過した⽂文脈の通過回数bをデクリメント ¤  深さn_tの⽂文脈の停⽌止回数aをデクリメント ¤  wをサーブするテーブルkから,cwkに ⽐比例例する確率率率で客を減らす ¤  テーブルから客がいなくなった場合 ¤  テーブルを無くし,親からコピー客を削除 1 0: 2 1: 1 客の数に ⽐比例例する 確率率率で客 を減らす root root remCust(π(u),w, n_t-1) 5: 0 1 5: 0
  56. 56. 予測確率率率の計算 ¤  ⽂文脈uと単語wを受け取る ¤  オーダーnの積分消去 1.  n について確率率率  を計算する 2.  オーダーを n とした時の  ngram 確率率率を計算する 3.  1,2を掛け合わせた物を全てのnについて⾜足し合わせる P(n|context) = al + al + bn + + l 1 i=0 bi + ai + bi + + P(w|context, n) = cw dntw n + c· n + dnt· n + c· P(w| (context), n 1) ×
  57. 57. 特徴 ¤  データから⽂文脈に応じた適切切なオーダーが選ばれる ¤  メモリ効率率率が⾮非常に良良い ¤  最初に⾼高次ngramモデルを作ってからカットオフするよりも⾼高精度度
  58. 58. ⼩小ネタ2 ¤  1単語/⽂文字についての情報をパラメータから除去し,再推定した結果 で⾔言語モデルのパラメータを更更新していくHPYLM/VPYLMの学習⽅方法 → GibbsSampling ¤  パラメータは各単語毎にサンプルされた⽂文脈⽊木の中での客の配置 ¤  ある事例例の影響を除いた他のサンプル全てを使った条件付き確率率率 から,再度度⽂文脈⽊木の中での配置をサンプルしている
  59. 59. さて,これで武器は揃った ¤  ⻑⾧長い道のりだったけど,NPYLMはこれでやっと作れます ¤  ※ハイパーパラメータ d, θ の推定や,ポアソン分布を使った基底測度度の 補正は今回は省省略略しました. ¤  NPYLMのポイント ¤  単語HPYLMの unigram の基底測度度として,⽂文字VPYLMを⽤用いる ¤  今の⾔言語モデルを⽤用いて⽂文の単語分割を⾏行行い,単語,⽂文字ngram を更更新
  60. 60. (再掲)NPYLMのパラメータ学習の流流れ 1.  初期化 ¤  コーパスの各⽂文を1単語と⾒見見なして単語ngramモデル,⽂文字ngramモデルを更更新 (addCustomer) 2.  コーパスから1⽂文を取り出す 3.  取り出した⽂文に含まれる単語ngramをモデルのパラメータから削除 ¤  確率率率的に⽂文字ngramも削除される (removeCustomer) 4.  今のパラメータを使って⽂文を分かち書きする (forward-filtering/backward-sampling) 5.  分かち書き結果を使ってNPYLMのパラメータを更更新する(addCustomer)
  61. 61. ⼩小ネタ3 ¤  HPYLM/VPYLMの学習と違って1単語毎でパラメータを更更新せず, まとめて複数単語をサンプリングしている ¤  サンプリング時にはパラメータΘを固定してまとめてサンプリング ¤  → ⽂文をサンプルする間は確率率率分布は変わらない ¤  → Blocked Gibbs Sampling
  62. 62. 今⽇日の話は以上です ¤  ⾯面⽩白そうと思ったら皆さん作ってみてください. ¤  ちなみにNPYLMは特許が取られているため,公開される場合 には注意が必要です.

×