はじめに
『トピックモデル』(MLPシリーズ)の勉強会資料のまとめです。各種モデルやアルゴリズムを「数式」と「プログラム」を用いて解説します。
本の補助として読んでください。
この記事では、ユニグラムモデルで登場する数式の行間を埋めます。
【前節の内容】
【他の節一覧】
【この節の内容】
2.2 ユニグラムモデルの生成モデルの導出
ユニグラムモデル(unigram model)の定義(仮定)を確認する。
bag-of-words表現の文書データについては「2.1:トピックモデルの文書表現【青トピックモデルのノート】 - からっぽのしょこ」を参照のこと。
生成過程の設定
まずは、ユニグラムモデルの生成過程(generative process)を数式で確認する。アルゴリズムについては図2.2を参照のこと。
語彙数を 、語彙番号(インデックス)を とする。
文書中に語彙 が生成される(出現する)確率を で表す。
各語彙に対応する 個(全て)の生成確率まとめて、 次元ベクトル で表す。
の各要素は確率なので、それぞれ非負の値であり、総和(全ての語彙に関する和)が1になる条件を満たす必要がある。
を単語分布のパラメータと呼び、カテゴリ分布のパラメータとして用いる。(語意的には語彙分布と呼ぶ方が分かりやすいのかもしれない。)
ある単語 として出現した語彙の生成(出現)確率を と書くこともある。例えば、文書1の6番目の単語として語彙3が観測された(出現した) のとき、対応するパラメータ(確率)は である。
また、カテゴリ分布のパラメータ は、 をパラメータとするディリクレ分布に従って生成されると仮定する。
ディリクレ分布の確率変数は、カテゴリ分布のパラメータの条件(非負の値で総和が1になる値)を満たす。
は 次元ベクトルである。
パラメータのパラメータをハイパーパラメータ(超パラメータ)と言い、 を単語分布のハイパーパラメータと呼ぶ。
の各要素は、非負の値の条件を満たす必要がある。
は、 に影響する。
各単語 の語彙は、 をパラメータとするカテゴリ分布に従って独立に生成されると仮定する。
トピックモデル(を含む各種モデル)では、各単語はカテゴリ分布の確率変数として扱い、単語の語彙(確率変数の実現値)は文脈を考慮せずに 面の歪んだサイコロを振った出目のように決まる(生成される)とする。
以上で、ユニグラムモデルの生成過程(の仮定)を確認した。続いて、生成過程に従う生成確率や生成モデルを定義して、以降の節で利用する。
数式での表記
ユニグラムモデル(2章)で用いる記号類を表にまとめる。
記号 | 意味 | 制約・関係性 |
---|---|---|
文書数 | ||
文書インデックス | ||
語彙数(単語の種類数) | ||
語彙インデックス | ||
全文書の単語数 | ||
文書 の単語数 | ||
全文書の語彙 の単語数 | ||
文書 における語彙 の単語数 | ||
文書 の単語インデックス | ||
文書集合 | ||
文書 の単語集合 | ||
文書 の 番目の単語 | ||
単語分布のパラメータ | ||
語彙 の生成確率 | ||
単語分布のハイパーパラメータ | ||
に影響する値 |
ハイパーパラメータ が一様(全ての値が同じ)な場合 はスカラ で表す。
以上の記号を用いて、ユニグラムモデルやその推論アルゴリズムを定義する。
尤度関数の導出
次は、ユニグラムモデルにおける尤度関数(likelihood function)を数式で確認する。パラメータが与えられたときのデータの生成確率(観測された全ての単語の同時確率)を尤度と呼ぶ。尤度については2.3節、事前分布(事前確率)については2.4節を参照のこと。
事前分布なしの場合
最尤推定(2.3節)では、事前分布を導入せずに、尤度関数のみを扱う。
単語分布のパラメータ が与えられたときの文書集合 の生成確率 を具体的な式に変形する。
途中式の途中式(クリックで展開)
- 1: 個の文書は独立(互いに影響せず)に生成されることから、文書集合の生成確率は、各文書の生成確率の積に分解できる。
- 2: 各文書(単語集合)の 個の単語は独立(前後の文脈などを考慮せず)に生成されることから、単語集合の生成確率は、各単語の生成確率の積に分解できる。
- 3: 各単語 はカテゴリ分布に従い生成されることから、 の語彙に関するパラメータが生成確率に対応する。
- 4: 各単語の語彙 と全文書での各語彙の出現回数 を用いて、文書番号 と単語番号 を用いた式(表現)から、語彙番号 を用いた式(表現)に変換する。
添字に具体的な値を入れると の区別ができなくなるので、 を 、 を としている。
各単語の語彙 に対応する 個の を、文書番号 と単語番号 の順番に並んだ状態から、語彙番号 の順番に並べ替えて語彙ごとにまとめている。
単語は、重複を許す表現であり、同じ語彙でも別の語として扱う。そのため、 個(全ての単語)の確率値 の添字が全て異なり、文書ごとに 個の積を で表せる。同じ語彙の確率であれば値は同じである。
一方で語彙は、重複を許さない表現であり、同じ語彙(同じ文字列の語)を同じ語として扱う。そのため、 個の確率値 について同じ語彙であれば添字が同じであり、語彙ごとに 個の積を で表せる。
例えば、文書1の1番目と8番目の単語 と文書3の5番目の単語 が同じ語彙 だったとする。これは、1番目の語彙 が 回出現した言える。このとき、(他の単語は除いた)3単語の生成確率は
で表せる。
単語分布のパラメータと語彙頻度を用いた式が得られた。
事前分布ありの場合
ハイパーパラメータ推定(2.7節)では、事前分布を導入して、尤度関数のパラメータを周辺化した周辺尤度関数(marginal likelihood function)として扱う。
単語分布のパラメータ とハイパーパラメータ が与えられたときの を周辺化した文書集合 の生成確率 を具体的な式に変形する。
途中式の途中式(クリックで展開)
- 1: 周辺化されたパラメータ を明示する。
- 2: の依存関係(生成過程)に従い、条件付きの乗法定理 により項を分割する。
は依存関係がないので条件から取り除け、 である。
- 3-6: 「事前分布なしの場合」と同様にして、尤度を分解し変形する。
- 5-6: 単語分布のパラメータの事前分布をディリクレ分布の式に置き替えて、 と無関係な正規化項を の外に出す。
- 7-8: 指数法則 より、 の項をまとめる。
- 9: ディリクレ分布の正規化項(1.2.4項)より、積分の項全体を正規化項の逆数に置き替える。
- 10: 分母を入れ替えて の項をそれぞれまとめる。
- 10: 各語彙の出現回数 と総単語数 の関係より、 である。
事前分布を導入した場合は、ポリヤ分布の式が得られた。
生成モデルの導出
続いて、ユニグラムモデルの生成モデル(generative model)を数式で確認する。文書集合やパラメータを全て確率変数とみなした同時分布(結合分布)を生成モデルと呼ぶ。
事前分布なしの場合
先に、事前分布を含めない場合を考える。ただし以降の節では、こちらの式は使わない。
変数 とパラメータ をそれぞれ確率変数として、同時分布を依存関係(生成過程)に従って分割する。
途中式の途中式(クリックで展開)
- 1: の依存関係に従い、乗法定理 により項を分割する。
- 2: 「尤度関数の導出」のときと同様にして、尤度を分解する。
単語レベルに項を分解した。
事前分布ありの場合
最大事後確率推定(2.4節)とベイズ推定(2.5節)では、事前分布を導入する。
変数 とパラメータ 、ハイパーパラメータ をそれぞれ確率変数として、同時分布を依存関係(生成過程)に従って分割する。
途中式の途中式(クリックで展開)
- 1: 依存関係に従い項を分割する。
乗法定理によりハイパーパラメータを分割する。
さらに、条件付きの乗法定理によりパラメータを分割する。
は依存関係がないので条件から取り除ける。
- 2: 「尤度関数の導出」のときと同様にして、尤度を分解する。
この式自体が変数やパラメータ間の依存関係を表している。
グラフィカルモデルの確認
最後は、ユニグラムモデルの生成モデルをグラフィカルモデル表現(graphical model representation)で確認する。グラフィカルモデルについては4.2節(図4.3)を参照のこと。
事前分布なしの場合
最尤推定(2.3節)では、こちらのモデルが対応する。
ユニグラムモデルにおける生成モデルは、次の式に分解できた。
ユニグラムモデルのグラフィカルモデルを作成する。
作図コード(クリックで展開)
# ユニグラムモデルのグラフィカルモデルを作図:(事前分布なし) graph <- DiagrammeR::grViz(" digraph dot{ graph [rankdir = LR] node [shape = circle] phi [label = <<B>φ</B>>] subgraph cluster_D{ label = D subgraph cluster_N{ label = 'N@_{d}' w [label = 'w@_{dn}', style = filled, filledcolor = 'gray'] } } edge [] phi -> w; } ") # グラフを書出 DiagrammeRsvg::export_svg(gv = graph) |> # svgファイルに変換 charToRaw() |> rsvg::rsvg(height = 500) |> # ビットマップに変換 png::writePNG(target = "unigram_model.png", dpi = 100) # pngファイルに変換
「 」が、単語分布(の1つの項) に対応し、単語分布のパラメータ に従って各単語(の語彙) が生成されることを示している。
「 ] 」が、 に対応し、 個の単語 が繰り返し生成されることを示している。
「 ] 」が、 に対応し、 個の文書 が繰り返し生成されることを示している。
事前分布ありの場合
最大事後確率推定(2.4節)とベイズ推定(2.5節)では、こちらのモデルが対応する。
事前分布を含める場合は、次の式になった。
ユニグラムモデルのグラフィカルモデルを作成する。
作図コード(クリックで展開)
# ユニグラムモデルのグラフィカルモデルを作図:(事前分布あり) graph <- DiagrammeR::grViz(" digraph dot{ graph [rankdir = LR] node [shape = circle] beta [label = <<B>β</B>>] phi [label = <<B>φ</B>>] subgraph cluster_D{ label = D subgraph cluster_N{ label = 'N@_{d}' w [label = 'w@_{dn}', style = filled, filledcolor = 'gray'] } } edge [] beta -> phi -> w } ") # グラフを書出 DiagrammeRsvg::export_svg(gv = graph) |> # svgファイルに変換 charToRaw() |> rsvg::rsvg(height = 500) |> # ビットマップに変換 png::writePNG(target = "unigram_model_prior.png", dpi = 100) # pngファイルに変換
「 」が、単語分布のパラメータの事前分布 に対応し、ハイパーパラメータ に従ってパラメータ が生成されることを示している。
この節では、ユニグラムモデルの定義を確認した。次の節からは、文書集合(観測データ)を得たときの未知のパラメータを推定する3つの手法を確認していく。
参考書籍
- 岩田具治(2015)『トピックモデル』(機械学習プロフェッショナルシリーズ)講談社
おわりに
2020/07/01:加筆修正の際に「ユニグラムモデルの最尤推定」記事を分割しました。
この一連の記事は、勉強会の中で作った資料を1節ずつくらいの目安で転載したものです。なので何となく1章から順番に読まれることを想定していました(というか、数学分からーんってめちゃくちゃ困ってる人(1年ちょっと前の私)がこのブログに流れ付いて攻略本的に使ってもらうイメージでした)。なので例えばこの表記やモデルの説明の節だと、それを使った具体例として次節の最尤法とセットにしてユニグラムモデルの最尤推定というタイトルにしていました。
しかし(いや当然)、何らかのキーワードで検索に引っかかったその記事だけ読む(あるいは読まない)わけです。となると、次々節のMAP法やその次のベイズ推定の節を読むときにモデルを確認したくなったら、最尤推定の記事の前半だけ読むことになるわけです。これは分かり辛いよなーと分割した次第です。
あと関係ないですが、箇条書きの数字を2とか3から始めても1からにしちゃうのははてなさんの仕様ですか?何とかする方法はありませんかね?
- 2024.04.26:加筆修正の際に記事から「トピックモデルの文書表現」を分割しました。
1つ前の記事(分割した記事)のあとがきに(作業的には数分前に)一歩ずつ段階を踏んで着実に進めましょうと書いたのですが、この記事では筆がノって色々書き足しました。文量がとても増えました。
面白そうだから事前分布あり版の尤度の数式も見てみよう、とノリで書いたところほぼ同じ式展開を2.7節にてn年前に書いてました。
あとがきに書くのもアレですが、事前分布の話などは本編で登場した段階で必要な分だけを辞書的に読んでもらい、2章を読み終えた段階で3手法のモデル(事前分布の有り無し)の比較のために読み返してもらい、さらに4章まで読み終わったらモデル(混合化や階層化)の比較のために各モデルの記事(この記事に相当する記事)を読み比べてもらえば分かりやすいだろうという意図で再構成しました。
他の記事の修正状況は、終わってたり途中だったりメンドそうで飛ばしてたりします。
数字付きの箇条書きを使うのは諦めて(ダサいけど)数字付き風に書くことにしました。
現在は表を横スクロールできるようにしようと思ったら、markdown記法と併用できないらしく悩み中です。
【次節の内容】