鴨川η

joint topic modelのサンプリング式導出

はじめに

間違っていたらnzwまでお願いします.

トピックモデルによる統計的潜在意味解析の3章の周辺化ギブスサンプリングの式を参考にjoint topic modelのサンプリング式を導出します. Joint topic modelよりもpolylingual topic modelの名前のほうが有名かもしれないです.

まずグラフィカルモデルをBlei+, 2003のものと合わせて示します.

Topic model gmodel

Joint topic model gmodel

Blei+, 2003とほぼ同じ形をしていますが, 観測できる変数が1つ増え,それに合わせて潜在変数も増えています.

通常のLDAでは1つの文書集合が与えられますが,このモデルでは,さらにそれぞれの文書ごとに補助情報が与えられます. 補助情報ごとに のプレートとが増えます.

このようなデータの例としては,

  • レシピの手順をひとまとめにしたもとを1文書とし,そのレシピについているつくれぽ
  • 日本語のwikipediaの1記事と対応する英語のwikipedia1記事

などが挙げられます. (WSIにこのモデルを使った論文では,context–windowとPOSを使っていました)

示したグラフィカルモデルではのプレートは2つですが,いくつでも増やせます.(wikipediaの例を使うと,[英語, 日本語, ロシア語] など)

本題

『トピックモデルによる〜』のp55を踏襲します.

は1番目の文書集合の番目の文書の番目の単語のトピックです. このとき は1番目の文書集合の番目の文書の番目の単語です.

同様に,は2番目の文書集合の番目の文書の番目の単語のトピックで,は2番目の文書集合の番目の文書の番目の単語です. 文書集合の要素に対応関係が取れていれば,対応する文書長は一致しなくても構いません.

は,1番目の文書集合の語彙数次元あるディリクレ分布のパラメータベクトル, は,2番目の文書集合の語彙数次元あるディリクレ分布のパラメータベクトルです. の次元数は一致しなくても構いません.

このとき,周辺化ギブスサンプリングにおけるのサンプリング式を考えます.

\begin{eqnarray} p(z_{d,i}^{1}=k| w_{d,i}^{1}=v, \mathbf{W}^{1}_{\backslash d,i}, \mathbf{W}^{2}, \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2}, {\boldsymbol \alpha}, {\boldsymbol \beta}^{1}, {\boldsymbol \beta}^{2}) &=& \frac{p(z_{d,i}^{1}=k, w_{d,i}^{1}=v, \mathbf{W}^{1}_{\backslash d,i}, \mathbf{W}^{2}, \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2}, | {\boldsymbol \alpha}, {\boldsymbol \beta}^{1}, {\boldsymbol \beta}^{2})} {p(w_{d,i}^{1}=v, \mathbf{W}^{1}_{\backslash d,i}, \mathbf{W}^{2}, \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2}, | {\boldsymbol \alpha}, {\boldsymbol \beta}^{1}, {\boldsymbol \beta}^{2})} \tag{1}\\ & \propto & p(z_{d,i}^{1}=k, w_{d,i}^{1}=v, \mathbf{W}^{1}_{\backslash d,i}, \mathbf{W}^{2}, \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2}, | {\boldsymbol \alpha}, {\boldsymbol \beta}^{1}, {\boldsymbol \beta}^{2}) \tag{2} \\ &=& p(w_{d,i}^{1}=v | z_{d,i}^{1}=k, \mathbf{W}^{1}_{\backslash d,i}, \mathbf{W}^{2}, \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2}, {\boldsymbol \alpha}, {\boldsymbol \beta}^{1}, {\boldsymbol \beta}^{2}) \\ & &\times p(z_{d,i}^{1}=k, \mathbf{W}^{1}_{\backslash d,i}, \mathbf{W}^{2}, \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2} | {\boldsymbol \alpha}, {\boldsymbol \beta}^{1}, {\boldsymbol \beta}^{2}) \tag{3} \\ &=& p(w_{d,i}^{1}=v | z_{d,i}^{1}=k, \mathbf{W}^{1}_{\backslash d,i}, \mathbf{W}^{2}, \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2}, {\boldsymbol \alpha}, {\boldsymbol \beta}^{1}, {\boldsymbol \beta}^{2}) \\ & &\times p(z_{d,i}^{1}=k| \mathbf{W}^{1}_{\backslash d,i}, \mathbf{W}^{2}, \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2} {\boldsymbol \alpha}, {\boldsymbol \beta}^{1}, {\boldsymbol \beta}^{2}) \\ && \times p(\mathbf{W}^{1}_{\backslash d,i}, \mathbf{W}^{2}, \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2} | {\boldsymbol \alpha}, {\boldsymbol \beta}^{1}, {\boldsymbol \beta}^{2}) \tag{4} \\ & \propto & p(w_{d,i}^{1}=v | z_{d,i}^{1}=k, \mathbf{W}^{1}_{\backslash d,i}, \mathbf{W}^{2}, \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2}, {\boldsymbol \alpha}, {\boldsymbol \beta}^{1}, {\boldsymbol \beta}^{2}) \\ & &\times p(z_{d,i}^{1}=k| \mathbf{W}^{1}_{\backslash d,i}, \mathbf{W}^{2}, \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2} {\boldsymbol \alpha}, {\boldsymbol \beta}^{1}, {\boldsymbol \beta}^{2}) \tag{5} \\ &=& \int p(w_{d,i}^{1}=v|{\boldsymbol \phi}^1_{k}) p({\boldsymbol \phi}^1_{k}| \mathbf{W}^{1}_{\backslash d,i}, \mathbf{Z}^{1}_{\backslash d,i}, {\boldsymbol \beta}^{1}) d {\boldsymbol \phi}^1_{k} \\ && \times \int p(z_{d,i}^{1}=k|{\boldsymbol \theta}_{d}) p({\boldsymbol \theta}_{d}| \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2}, {\boldsymbol \alpha}) d {\boldsymbol \theta}_{d} \tag{6} \\ &=& \int \phi_{k,v}^{1} \times p({\boldsymbol \phi}^1_{k}| \mathbf{W}^{1}_{\backslash d,i}, \mathbf{Z}^{1}_{\backslash d,i}, {\boldsymbol \beta}^{1}) d {\boldsymbol \phi}^1_{k} \\ && \times \int \theta_{d,k} \times p({\boldsymbol \theta}_{d}| \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2}, {\boldsymbol \alpha}) d {\boldsymbol \theta}_{d} \tag{6} \\ &=& \mathbb{E}_{p({\boldsymbol \phi}^1_{k}| \mathbf{W}^{1}_ {\backslash d,i},\mathbf{Z}^{1}_{\backslash d,i}, {\boldsymbol \beta}^{1})}[\phi_{k,v}^{1}] \mathbb{E}_{p({\boldsymbol \theta}_{d}| \mathbf{Z}^{1}_{\backslash d,i}, \mathbf{Z}^{2},{\boldsymbol \alpha}) d {\boldsymbol \theta}_{d}}[\theta_{d,k}] \tag{7} \\ &=& \frac{n_{k,v, \backslash d,i}^{1}+\beta^{1}_{v}}{\sum_{v’} (n_{k,v’, \backslash d,i}^{1}+\beta^{1}_{v’})} \frac{n_{d,k, \backslash d,i}^{1} + n_{d,k}^{2} + \alpha_k}{\sum_{k’} (n_{d, k’, \backslash d,i}^{1} + n_{d,k’}^{2} + \alpha_{k’})} \tag{8} \end{eqnarray}

の場合も同様に求まります.

単語の分布()は,文書集合ごとに別なので,トピックモデルと同じ式に帰着します. は,各文書集合の潜在変数で繋がっていますが,ディリクレ分布の期待値計算から上記の式のように求まります.

実行例

以下のような2つの文書集合を使ってみました. それぞれ1行が1文書とみなし,行ごとに対応関係(この例では対訳のページ)であるとします.


lisp lisp lisp scala scala scala clojure clojure

java java java scala scala scala

book book library library lisp lisp clojure clojure

writing writing book book library library

scala book lisp book java book clojure

movie movie article article book book mars mars

movie movie article article mars mars mars


リスプ リスプ リスプ スカラ スカラ スカラ

ジャバ ジャバ ジャバ スカラ スカラ スカラ

本 本 図書館 図書館 リスプ リスプ

書く 書く 本 本 図書館 図書館

スカラ ジャバ リスプ 本 本 本

映画 映画 論文 論文 本 本 火星 火星

映画 映画 論文 論文 火星 火星 火星


トピック数3で実行したときの, の確率値の高い単語の一覧を示します.

- 英語
  - topic=0
    - mars 0.382442748092
    - article 0.306106870229
    - movie 0.306106870229
  - topic=1
    - book 0.596688741722
    - library 0.265562913907
    - writing 0.133112582781
  - topic=2
    - scala 0.317194570136
    - lisp 0.271945701357
    - clojure 0.226696832579
    - java 0.181447963801

- 日本語
  - topic=0
    - 火星 0.382734912147
    - 論文 0.306340718105
    - 映画 0.306340718105
  - topic=1
    - 本 0.597084161696
    - 図書館 0.265738899934
    - 書く 0.133200795229
  - topic=2
    - スカラ 0.410181392627
    - リスプ 0.351667641896
    - ジャバ 0.234640140433

このときトピックは共通しているため(同じからが生成されるため),言語が違っていても共通したトピックから生成される単語分布を求めることができます.

せっかくなのでJuliaでのコードを公開しました.

参考資料