# 推薦システム 9章 「潜在ディリクレ分配による因子分解」
## LDA(潜在ディリクレ分配) と fLDA(潜在ディリクレ分配因子分解)
### bag-of-words (復習 : 2.1.2節)
* テキストを有するアイテムに対してアイテム素性ベクトルを構成するために使用される手法
* 素性ベクトルの各次元は各単語に対応する
* アイテムにおける出現頻度
* アイテムに含まれるか含まれないかの2値 など
### LDA (復習 : 2.1.3節)
* テキストベースの教師なし分類手法
* 教師なし => クラスの分け方にユーザーの応答は加味しない
* アイテムと単語の関係(<-bag-of-words)が与えられたときに、アイテム$j$がトピック$k$である確率$\theta_{jk}$とトピック$k$において単語$w$が出現する確率$\Phi_{kw}$を推定する
* アイテムと単語の関係を説明する潜在的なクラスタ(=トピック)を与えるモデル
* 訓練データにないアイテムが出てきたとしても、bag-of-wordsは構築できるので、トピックを得ることができる
* アイテムのコールドスタートには強い
### fLDA (今回)
* LDAでのトピック推定においてユーザー応答も活用する(=教師あり)
* トピックによる表現はユーザへの推薦理由の解釈可能性を与える
## モデル
観測モデルと状態モデルの2段階からなる
### 観測モデル
* 潜在因子とトピックから応答の分布を決定する
ユーザー$i$に潜在因子$(\alpha_i, \boldsymbol{u}_i)$、アイテム$j$に潜在因子$(\beta_j, \overline{\boldsymbol{z}}_j)$を割り当てる
ユーザー$i$のアイテム$j$に対する応答の潜在因子による成分$l_{ij}$は
$$
l_{ij} = \alpha_i + \beta_j + \boldsymbol{u}_i^T \overline{\boldsymbol{z}}_j
$$
* $\alpha_i, \beta_j$はユーザー、アイテムごとのバイアス
* 肯定的な反応をしがちな人、人気なアイテム
* トピックの数を$K$として、$\boldsymbol{u}_i, \overline{\boldsymbol{z}}_j$はともに$K$次元ベクトル
* ユーザー$i$ / アイテム$j$ とそれぞれのトピックの親和性
* $\overline{\boldsymbol{z}}_j$はアイテム$j$の$n$番目の単語の離散的な潜在因子$z_{jn}$の平均である
$$
\overline{\boldsymbol{z}}_j = \frac{1}{W_j} \sum_{n=1}^{W_j}z_{jn}
$$
* $z_{jn}$は1つの次元だけ1で残りは全て0となる$K$次元ベクトル
* $W_j$はアイテム$j$の単語数
応答$y_{ij}$の分布は、上述の$l_{ij}$とユーザーアイテム対($i, j$)の素性ベクトル$\boldsymbol{x}_{ij}$を用いて
$$
\mu_{ij} = \boldsymbol{x}_{ij}^T \boldsymbol{b} + l_{ij} \\
y_{ij} \sim N(\mu_{ij}, \sigma^2)
$$
と推定される(バイナリ応答の場合はベルヌーイ分布)
### 状態モデル
* ユーザー$i$、アイテム$j$の素性ベクトル$\boldsymbol{x}_i, \boldsymbol{x}_j$およびアイテム$j$の$n$番目のワード$w_{jn}$により、潜在因子たち($\alpha_i, \beta_j, \boldsymbol{u}_i, \boldsymbol{z}_{jn}$)の事前分布を決定する
$$
\alpha_i \sim N(\boldsymbol{g}_0^T \boldsymbol{x}_i, a_\alpha) \\
\beta_j \sim N(\boldsymbol{d}_0^T \boldsymbol{x}_j, a_\beta) \\
\boldsymbol{u}_i \sim N(\boldsymbol{H}\boldsymbol{x}_i, \boldsymbol{A}_u) \\
\boldsymbol{z}_{jn} \sim Multinom(\boldsymbol{\theta}_{j})
$$
$\boldsymbol{\theta}_{j}$はアイテム$j$に対するトピックの分布であり、LDAによって計算される(LDA事前分布)
* 観測モデルだけでは自由度が高すぎて、データの不完全性ゆえに過学習してしまうので、状態モデルを用いて自由度を削減している
* 典型的には可能なユーザーアイテム対の1~5%程度の応答しか得られない
## 学習と予測
学習の目的は観測された応答$\boldsymbol{y} = \{y_{ij}\}$とアイテムの単語$\boldsymbol{w} = \{w_{jn}\}$に対して不完全データ対数尤度を最大化するモデルパラメータ$\Theta$を探すことである
$$
\hat{\Theta} = \mathop{\rm arg~max}\limits_{\boldsymbol{\Theta}} Pr(\boldsymbol{y}, \boldsymbol{w} | \boldsymbol{\Theta}, \boldsymbol{X})
$$
ただし$\boldsymbol{X}$は素性ベクトルたちのこと
* おなじみEMアルゴリズムを用いる
* Eステップで完全データ尤度の期待値を$\Theta$の関数として計算->Mステップで最大化して$\Theta$を更新
* ただし、今回はEステップで因子の事後分布が閉じた式で得られないので、事後分布からサンプルを生成し、モンテカルロ法を用いて期待値の近似を行う(MCEMアルゴリズム)
* トピック数は予め指定すべきハイパーパラメータだが、経験的にMCEMアルゴリズムではトピック数が多すぎても過学習しにくいらしい
* 他のすべての条件を固定した場合、MCEMアルゴリズムの計算量は観測数(=応答数+ワード数)に線形
* 因子のサンプリングはユーザー/アイテムにを分割して、分割ごとに独立にサンプリングすることで並列化可能
## 実験
#### MovieLensデータ
* 映画のレイティングデータセット
* 時系列順で最初の75%を訓練に用い、残りでテスト
* テストデータのレイティングの半数以上が新規ユーザによるものだが、その多くは訓練データ中にレイティングの存在するアイテムに対するものであった
* =>fLDA のつよみ活かせず(表9.2)
#### Yahoo! Buzz
* ニュースサイトで、記事に"buzz up"と"buzz down"の二種類の投票が可能
* レイティングは、buzz upを1, buzz downを-1とする
* 無関心な記事には投票されないので、各ユーザーについてbuzz upとbuzz downの総数と同数だけの投票されなかった記事をランダム選択し、それをレイティング0とした
* 最初の2ヶ月分を訓練、後の1ヶ月分をテストデータとした
* テストデータの多くは新規アイテムに対するレイティング(ニュース記事なので)
* =>fLDA の独壇場
* 解釈しやすいなトピックも得られた(表9.3)
## まとめ
* fLDAはアイテム因子にLDAを用いた分解モデルであり、トピックの推定にユーザーの応答も用いているために単純なLDAを上回る性能を示す
* 特にアイテムのコールドスタートが想定される場合に強い
* データに元からクラスが存在しない場合でも、解釈可能なクラス分けが副産物として得られる
* これを別のモデルで応用できる可能性