からっぽのしょこ

読んだら書く!書いたら読む!同じ事は二度調べ(たく)ない

4.1-2:トピックモデル【『トピックモデル』の勉強ノート】

はじめに

 機械学習プロフェッショナルシリーズの『トピックモデル』の勉強時に自分の理解の助けになったことや勉強会資料のまとめです。トピックモデルの各種アルゴリズムを「数式」と「プログラム」から理解することを目指します。

 この記事は、4.1節「トピックモデル」と4.2節「グラフィカルモデル」の内容です。4章で用いるデータやパラメータに関する表記方法とトピックモデル(生成モデル,尤度)の定義を説明します。またDiagrammeRパッケージを使って、各モデルのグラフィカルモデルを作成します。

【前節の内容】

www.anarchive-beta.com

【他の節一覧】

www.anarchive-beta.com

【この節の内容】


4.1 トピックモデル

 3章の混合ユニグラムモデルでは、各文書が1つのトピックを持つと仮定した。トピックモデルでは、1つの文書が複数のトピックを持つと仮定する。各文書の単語ごとに1つのトピックを持ち、またそのトピックが持つ単語分布に従って確率的に単語が生成される(その単語の語彙(単語の種類)が決まる)と仮定する。

 生成モデルの定義の前に、まずは4章で追加される表記について確認する。

 トピックモデルでは、文書ごとにトピック分布を持つ。そのため、文書$d$のトピック分布を$\boldsymbol{\theta}_d = (\theta_{d1}, \theta_{d2}, \cdots, \theta_{dK})$とする。ここで$\theta_{dk}$は、文書$d$の単語がトピック$k$になる確率であり、次の定義に従う。

$$ 0 \leq \theta_{dk} \leq 1,\ \sum_{k=1}^K = \theta_{dk} $$

 文書1のトピック分布$\boldsymbol{\theta}_1$から文書$D$のトピック分布$\boldsymbol{\theta}_D$までをまとめたものを、太字の大文字を使って$\boldsymbol{\Theta} = (\boldsymbol{\theta}_1, \boldsymbol{\theta}_2, \cdots, \boldsymbol{\theta}_D)$と表記する。これもトピック分布と呼ぶ。

 トピックモデルでは、文書ごとに持つトピック分布に従い単語ごとにトピックが割り当てられる。文書$d$の$n$番目の単語$w_{dn}$のトピックを$z_{dn}$で表す。これは観測できないデータであるため、潜在変数(潜在トピック)とも呼ばれる。$z_{dn}$がトピック1から$K$の値をとることを、$z_{dn} \in \{1, 2, \cdots, K\}$で表す。
 全ての文書の全ての単語(文書集合)$\mathbf{W}$のトピックをまとめたものを、太字の大文字を使って$\mathbf{Z} = (z_{11}, \cdots, z_{1N_1}, z_{21}, \cdots, z_{DN_D})$と表記する。これをトピック集合と呼ぶ。

 その他4章で用いる記号類を次の表にまとめた。

・記号一覧

 文書$d$の単語ベクトルは「文書$d$の1番目の単語$w_{d1}$」から「文書$d$の単語数$N_d$番目の単語$w_{dN_d}$」をまとめた$\mathbf{w}_d = (w_{d1}, \cdots, w_{dn}, \cdots, w_{dN_d})$です。下の一覧は間違っている(のですがすぐには差し替えられないのでいつか直します)のでご注意ください。

f:id:anemptyarchive:20200924130443p:plain
4章で用いる記号一覧


 以上の表記を用いて、トピックモデルを定義する。

・生成モデル

 トピックモデルは、単語ごとに割り当てられたトピックが持つ単語分布に従って(BOW表現の)文書集合$\mathbf{W}$が生成されると仮定した確率モデルであった。ここでは、その具体的な生成過程(定義)を確認する。

 各トピックの単語分布$\boldsymbol{\phi}_k$が、(ハイパー)パラメータ$\beta$を持つディリクレ事前分布に従って生成される。

$$ \boldsymbol{\phi}_k \sim \mathrm{Dirichlet}(\beta) $$

 各文書のトピック分布$\boldsymbol{\theta}_d$が、(ハイパー)パラメータ$\alpha$を持つディリクレ事前分布に従って生成される。

$$ \boldsymbol{\theta}_d \sim \mathrm{Dirichlet}(\alpha) $$

 各文書の単語ごとにトピックが、その文書のトピック分布$\boldsymbol{\theta}_d$をパラメータとするカテゴリ分布に従って割り当てられる。

$$ z_{dn} \sim \mathrm{Categorial}(\boldsymbol{\theta}_d) $$

 各文書の単語(語彙)が、その単語に割り当てられたトピックの単語分布$\boldsymbol{\phi}_k$をパラメータとするカテゴリ分布に従って生成される。

$$ w_{dn} \sim \mathrm{Categorical}(\boldsymbol{\phi}_{z_{dn}}) $$


 以上の生成過程を仮定すると、パラメータ$\boldsymbol{\Theta},\ \boldsymbol{\Phi}$が与えられたときの文書集合$\mathbf{W}$の生成確率$p(\mathbf{W} | \boldsymbol{\Theta}, \boldsymbol{\Phi})$は、次のようになる。

$$ \begin{aligned} p(\mathbf{W} | \boldsymbol{\Theta}, \boldsymbol{\Phi}) &= \prod_{d=1}^D p(\mathbf{w}_d | \boldsymbol{\theta}_d, \boldsymbol{\Phi}) \\ &= \prod_{d=1}^D \prod_{n=1}^{N_d} p(w_{dn} | \boldsymbol{\theta}_d, \boldsymbol{\Phi}) \\ &= \prod_{d=1}^D \prod_{n=1}^{N_d} \sum_{k=1}^K p(w_{dn}, z_{dn} = k | \boldsymbol{\theta}_d, \boldsymbol{\phi}_k) \\ &= \prod_{d=1}^D \prod_{n=1}^{N_d} \sum_{k=1}^K p(z_{dn} = k | \boldsymbol{\theta}_d) p(w_{dn} | z_{dn} = k, \boldsymbol{\phi}_k) \\ &= \prod_{d=1}^D \prod_{n=1}^{N_d} \sum_{k=1}^K \theta_{dk} \phi_{kw_{dn}} \\ &= \prod_{d=1}^D \prod_{v=1}^V \sum_{k=1}^K \theta_{dk} \phi_{kv}^{N_{dv}} \end{aligned} $$

【途中式の途中式】

  1. 各文書は独立に生成される(と仮定する)ことから、各文書の生成確率の積になる。
  2. 各単語は独立に生成される(と仮定する)ことから、各単語の生成確率の積になる。
  3. 全てのトピック$1, \cdots, K$を考慮(周辺化)した単語$w_{dn}$の生成確率と捉えられることから、周辺化したトピック$z_{dn}$を明示する。
  4. 乗法定理より、生成過程に従い分解する。
  5. それぞれ項を具体的な式に置き換える。
    • 各文書の各単語に対するトピックの割り当て確率は$\theta_{dk}$である。
    • 各単語に割り当てられたトピックに従う単語(語彙)の生成確率は$\phi_{kw_{dn}}$である。
  6. 各文書における各語彙の出現回数$N_{dv}$を用いて、単語レベルから語彙レベルに変換する。


 続いて、パラメータ$\boldsymbol{\Theta},\ \boldsymbol{\Phi}$に事前分布を仮定する場合を考える。文書集合$\mathbf{W}$とパラメータ$\mathbf{Z},\ \boldsymbol{\Theta},\ \boldsymbol{\Phi}$の同時分布$p(\mathbf{W}, \mathbf{Z}, \boldsymbol{\Theta}, \boldsymbol{\Phi} | \alpha, \beta)$は、次のようになる。

$$ \begin{aligned} p(\mathbf{W}, \mathbf{Z}, \boldsymbol{\Theta}, \boldsymbol{\Phi} | \alpha, \beta) &= p(\mathbf{W} | \mathbf{Z}, \boldsymbol{\Phi}) p( \mathbf{Z} | \boldsymbol{\Theta}) p(\boldsymbol{\Theta} | \alpha) p(\boldsymbol{\Phi} | \beta) \\ &= \prod_{d=1}^D \prod_{n=1}^{N_d} p(w_{dn} | z_{dn} = k, \boldsymbol{\phi}_k) p(z_{dn} = k | \boldsymbol{\theta}_d) \prod_{d=1}^D p(\boldsymbol{\theta}_d | \alpha) \prod_{k=1}^K p(\boldsymbol{\phi}_k | \beta) \\ &= \prod_{d=1}^D \prod_{n=1}^{N_d} \phi_{kw_{dn}} \theta_{dk} \prod_{d=1}^D \left[ \frac{\Gamma(\sum_{k=1}^K \alpha)}{\prod_{k=1}^K \Gamma(\alpha)} \prod_{k=1}^K \theta_{dk}^{\alpha-1} \right] \prod_{k=1}^K \left[ \frac{\Gamma(\sum_{v=1}^V \beta)}{\prod_{v=1}^V \Gamma(\beta)} \prod_{v=1}^V \phi_{kv}^{\beta-1} \right] \\ &= \prod_{d=1}^D \prod_{v=1}^V \phi_{kv}^{N_{dv}} \theta_{dk} \prod_{d=1}^D \left[ \frac{\Gamma(\alpha K)}{\Gamma(\alpha)^K} \prod_{k=1}^K \theta_{dk}^{\alpha-1} \right] \prod_{k=1}^K \left[ \frac{\Gamma(\beta V)}{\Gamma(\beta)^V} \prod_{v=1}^V \phi_{kv}^{\beta-1} \right] \end{aligned} $$

【途中式の途中式】

  1. 乗法定理より、生成過程に従い分解する。
  2. それぞれ独立に生成されるとすることから、項を分解する。
  3. 各確率分布について、それぞれ具体的な式に置き換える。
    • $p(w_{dn} | z_{dn} = k, \boldsymbol{\phi}_k) = \mathrm{Categorical}(w_{dn} | \boldsymbol{\phi}_{z_{dn}})$である。
    • $p(z_{dn} = k | \boldsymbol{\theta}_d) = \mathrm{Categorical}(z_{dn} | \boldsymbol{\theta}_d)$である。
    • $p(\boldsymbol{\theta}_d | \alpha) = \mathrm{Dirichlet}(\boldsymbol{\theta}_d | \alpha)$である。
    • $p(\boldsymbol{\phi}_k | \beta) = \mathrm{Dirichlet}(\boldsymbol{\phi}_k | \beta)$である。
  4. 単語レベルから語彙レベルに変換する。またハイパーパラメータが一様な値をとる場合は、次のように計算できる。


 次節では、パラメータ間の依存関係をグラフィカルモデルで確認する。

4.2 グラフィカルモデル

 グラフィカルモデル表現は、生成モデルを表すためによく使われる。ノード(円)とエッジ(矢印)によって、モデル内の変数(パラメータ)の依存関係が直感的に捉えられる。

 色付きのノードは観測変数、白地のノードは未知変数を表す。また、四角は繰り返しを、四角内の数字は繰り返し回数を表す。

# 利用パッケージ
library(DiagrammeR)

 DiagrammeRパッケージを利用して作図する。

・ユニグラムモデル

 まずは、2章で扱ったユニグラムモデルの生成モデル

$$ \begin{aligned} p(\mathbf{W} | \boldsymbol{\phi}, \beta) &= p(\mathbf{W} | \boldsymbol{\phi}) p(\boldsymbol{\phi} | \beta) \\ &= \prod_{d=1}^D \prod_{n=1}^{N_d} p(w_{dn} | \boldsymbol{\phi}) p(\boldsymbol{\phi} | \beta) \end{aligned} $$

を例とする。

 ユニグラムモデルの事前分布$p(\boldsymbol{\phi} | \beta)$をグラフィカルモデルで表すと次のようになる。

・コード(クリックで展開)

# ユニグラムモデルの事前分布のグラフィカルモデル
DiagrammeR::grViz("
  digraph dot{
    graph [rankdir = LR]
    
    node [shape = circle]
    
    beta [label = 'β']
    phi [label = <<B>&phi;</B>>]
    
    edge []
      beta -> phi;
  }
")

f:id:anemptyarchive:20200924130543p:plain
ユニグラムモデルの事前分布のグラフィカルモデル

 $\beta$に従って$\boldsymbol{\phi}$が決まることが矢印で示されている。
 続いて、尤度$p(\mathbf{w} | \boldsymbol{\phi})$について見る。尤度の式は

$$ p(\mathbf{W} | \boldsymbol{\phi}) = \prod_{d=1}^D \prod_{n=1}^{N_d} p(w_{dn} | \boldsymbol{\phi}) $$

と変形できる。この式をグラフィカルモデルで表すと次のようになる。

・コード(クリックで展開)

# ユニグラムモデルの尤度のグラフィカルモデル
DiagrammeR::grViz("
  digraph dot{
    graph [rankdir = LR]
    
    node [shape = circle]
    
    phi [label = <<B>&phi;</B>>]
    
    subgraph cluster_D{
      label = D
      
      subgraph cluster_N{
        label = N
        
        w [label = 'w@_{dn}', style = filled, filledcolor = 'gray']
      }
    }
    
    edge []
      phi -> w;
  }
")

f:id:anemptyarchive:20200924130624p:plain
ユニグラムモデルの尤度のグラフィカルモデル

 文書集合の単語$w_{dn}$は、観測データなので色付きのノードで表現する。また単語$w_{dn}$が$n = 1, \cdots, N_d$の$N_d$個で単語ベクトル(文書)$\mathbf{w}_d$となり、単語ベクトル$\mathbf{w}_d$が$d = 1, \cdots, D$の$D$個で文書集合$\mathbf{W}$となる。それを2重の四角と$D,\ N$で表している。
 その文書集合の各変数$w_{dn}$が、単語分布$\boldsymbol{\phi}$に従って生成されることを矢印が示している。

 尤度と事前分布を組み合わせたユニグラムモデルのグラフィカルモデルは、次のようになる。

・コード(クリックで展開)

# ユニグラムモデルのグラフィカルモデル
DiagrammeR::grViz("
  digraph dot{
    graph [rankdir = LR]
    
    node [shape = circle]
    
    beta [label = '&beta;']
    phi [label = <<B>&phi;</B>>]
    
    subgraph cluster_D{
      label = D
      
      subgraph cluster_N{
        label = N
        
        w [label = 'w@_{dn}', style = filled, filledcolor = 'gray']
      }
    }

    edge []
      beta -> phi -> w
  }
")

f:id:anemptyarchive:20200924130642p:plain
ユニグラムモデルのグラフィカルモデル

 $\beta$によって$\boldsymbol{\phi}$が生成され、またその$\boldsymbol{\phi}$によって$w_{dn}$が生成されるユニグラムモデルの生成モデルが表されている。

・混合ユニグラムモデル

 混合ユニグラムモデルの生成モデルは、次のように分解できる。

$$ \begin{aligned} p(\mathbf{w}, \mathbf{z}, \boldsymbol{\theta}, \boldsymbol{\Phi} | \alpha, \beta) &= p(\mathbf{w} | \mathbf{z}, \boldsymbol{\Phi}) p(\mathbf{z} | \boldsymbol{\theta}) p(\boldsymbol{\theta} | \alpha) p(\boldsymbol{\Phi} | \beta) \\ &= \left[ \prod_{d=1}^D \left\{ \prod_{n=1}^{N_d} p(w_{dn} | z_d, \boldsymbol{\phi}_k) \right\} p(z_d | \boldsymbol{\theta}) \right] p(\boldsymbol{\theta} | \alpha) \prod_{k=1}^K p(\boldsymbol{\phi}_k | \beta) \end{aligned} $$

 従って、グラフィカルモデルは次のようになります。

・コード(クリックで展開)

# 混合ユニグラムモデルのグラフィカルモデル
DiagrammeR::grViz("
  digraph dot{
    graph [rankdir = LR]
    
    node [shape = circle]
    
    subgraph Cluster_alpha{
      alpha [label = '&alpha;']
      theta [label = <<B>&theta;</B>>]
      
      subgraph cluster_D{
        label = D
        
        z [label = 'z@_{dn}']
        
        subgraph cluster_N{
          label = N
          
          w [label = 'w@_{dn}', style = filled, filledcolor = 'gray']
        }
      }
      
      edge []
      alpha -> theta -> z -> w;
    }
    
    subgraph Cluster_beta{
      beta [label = '&beta;']
      
      subgraph cluster_K{
        label = K
        
        phi [label = <<B>&phi;</B>@_{k}>]
      }
      
      edge []
      beta -> phi -> w;
    }
  }
")

f:id:anemptyarchive:20200924130708p:plain
混合ユニグラムモデルのグラフィカルモデル

 ユニグラムモデルと比較して、トピックという概念を導入したことで、文書集合(各単語)$w_{dn}$が2つのパラメータ$\boldsymbol{\theta},\ \boldsymbol{\Phi}$に依存するようになったことが分かる。

・トピックモデル

 トピックモデルの生成モデルは、次のように分解できます。

$$ \begin{aligned} p(\mathbf{w}, \mathbf{z}, \boldsymbol{\Theta}, \boldsymbol{\Phi} | \alpha, \beta) &= p(\mathbf{w} | \mathbf{z}, \boldsymbol{\Phi}) p(\mathbf{z} | \boldsymbol{\Theta}) p(\boldsymbol{\Theta} | \alpha) p(\boldsymbol{\Phi} | \beta) \\ &= \left[ \prod_{d=1}^D \left\{ \prod_{n=1}^{N_d} p(w_{dn} | z_{dn}, \boldsymbol{\phi}_k) p(z_{dn} | \boldsymbol{\theta}_d) \right\} p(\boldsymbol{\theta}_d | \alpha) \right] \prod_{k=1}^K p(\boldsymbol{\phi}_k | \beta) \end{aligned} $$

 従って、グラフィカルモデルは次のようになります。

・コード(クリックで展開)

# トピックモデルのグラフィカルモデル
DiagrammeR::grViz("
  digraph dot{
    graph [rankdir = LR]

    node [shape = circle]

    subgraph Cluster_alpha{
      alpha [label = '&alpha;']

      subgraph cluster_D{
        label = D

        theta [label = <<B>&theta;</B>@_{d}>]

        subgraph cluster_N{
          label = N

          z [label = 'z@_{dn}']
          w [label = 'w@_{dn}', style = filled, filledcolor = 'gray']
        }
      }

      edge []
        alpha -> theta -> z -> w;
    }

    subgraph Cluster_beta{
        beta [label = '&beta;']

      subgraph cluster_K{
        label = K

        phi [label = <<B>&phi;</B>@_{k}>]
      }

      edge []
        beta -> phi -> w;
    }
  }
")

f:id:anemptyarchive:20200924130736p:plain
トピックモデルのグラフィカルモデル

 混合ユニグラムモデルと比較して、トピックを単語ごとに割り当てることで、トピック分布が文書数$D$個、トピック集合が各文書の単語数$N_d$個に増えたことが、四角で囲われた範囲から分かる。

参考書籍

  • 岩田具治(2015)『トピックモデル』(機械学習プロフェッショナルシリーズ)講談社

おわりに

 漸くトピックモデルにまで辿り着きました!

2019/07/30:加筆修正しました。
2020/08/24:加筆修正しました。

【次節の内容】

www.anarchive-beta.com