け日記

最近はPythonでいろいろやってます

論文メモ: Latent Aspect Rating Analysis on Review Text Data: A Rating Regression Approach

Latent Aspect Rating Analysis on Review Text Data: A Rating Regression Approach (KDD'10) という論文について紹介します。

@inproceedings{Wang:2010:LAR:1835804.1835903,
 author = {Wang, Hongning and Lu, Yue and Zhai, Chengxiang},
 title = {Latent Aspect Rating Analysis on Review Text Data: A Rating Regression Approach},
 booktitle = {Proceedings of the 16th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining},
 series = {KDD '10},
 year = {2010},
 isbn = {978-1-4503-0055-1},
 location = {Washington, DC, USA},
 pages = {783--792},
 numpages = {10},
 url = {http://doi.acm.org/10.1145/1835804.1835903},
 doi = {10.1145/1835804.1835903},
 acmid = {1835903},
 publisher = {ACM},
 address = {New York, NY, USA},
 keywords = {algorithms, experimentation},
} 

この論文の貢献

1つのレビューの文章から観点ごとについてポジティブ/ネガティブに評価されているのか知る、Latent Aspect Rating Analysis (LARA)というテキストマイニングの問題を新たに定義する。

そしてこのLARAを解く手法として、観点ごとの評価値を予測する回帰モデル Latent Rating Regression Model (LRR) を提案する。

Latent Aspect Rating Analysis (LARA)

レビューの文章では、複数の観点 (aspect) の評価が混在して書かれているのが普通です。たとえば以下のようなホテルのレビュー (原文Figure 1より抜粋) で見てみると、場所のこと・部屋のこと・サービスのこと・金額のことなど、それぞれ記述されています。
一方で数値化された評価は、扱う商品ごとに1つ (Overall Rating) となっているケースが多いです。レビュアーの手間を省いてレビューを増やすことの方が重要であったり、あるいは、総合ECサイトのように扱う商品が膨大で統一的な観点を設けられない (カメラと電動ノコギリで知りたい観点は違うはずです) など、1つの評価値のみにせざる得ない場合も多いかと思います。

f:id:ohke:20190119091806p:plain

しかし、観点ごとの評価を知りたい、というニーズもあります。ユーザによって重視する観点が異なるので、ユーザとしては各観点のサマリが欲しかったり、あるいは、ユーザが重視する観点を発見して評価が高い商品をおすすめしたりなどです。

上のニーズを汲み取った問題設定として、LARAでは新たに各観点の評価値と重みをレビューごとに推定します。

インプット

上の図のような文章 + 総合評価値のレビューが対象となります。

  • レビュー文  D= \{d_1, d_2, ..., d_{|D|}\}
    • 文書に現れる単語  V= \{w_1, w_2, ..., w_n\}
  • 総合評価値 (overall rating)  r_d \in [r_{min}, r_{max}]
  • 観点の数  k
  • 観点を特徴づけるいくつかのキーワード  A_i \in \{w | w \in V, A(w)=i \}
    • 例えば、観点Priceを特徴づける単語は"price", "value", "worth"など

アウトプット

  • 観点の評価値  \vec{s_d}
    • k次元のベクトルで、観点iの値は  \vec{s_d}_i \in [r_{min}, r_{max}] となります
  • 観点の重み  \vec{\alpha_d}
    • これもk次元のベクトルで、観点iの重みは  \vec{\alpha_d}_i \in [0, 1], \sum_{i=1}^{k}\vec{\alpha_d}_i=1 となります
    • 1に近いほうが、そのレビューにとって重要な評価値

Latent Rating Regression Model (LRR)

LRRでは2つのステップで観点ごとの評価値と重みを導出します。

  1. 全レビュー文書から、観点ごとに文を分ける
  2. LRRモデルを仮定して、パラメータの推定と評価値・重みを計算を行う

観点ごとに文を分ける

最初にどの文がどの観点について述べているのかを特定する必要があります。

観点を特徴づけるキーワードとして  \{T_1, T_2, ..., T_k\} の初期値をハイパパラメータとしてモデルを作る人が定義します。ホテルの場合、7つの観点を設定したとすると、 \{T_1, T_2, ..., T_k\} の初期値は以下のようになります (原文Table 1より抜粋) 。

f:id:ohke:20190126155222p:plain

この  \{T_1, T_2, ..., T_k\} を、次の手順で更新しながら、最終的に各文が述べている観点を特定します。カイ2乗検定 (独立性の検定) で、ある観点を述べる文と単語の間で関連が高いものは、その観点を述べているものとしてTに追加しています。

  1. 全てのレビューを文単位で分ける  X=\{x_1, x_2, ..., x_M\}
  2. 以下をI回繰り返す
    1. Xの各文で、  \{T_1, T_2, ..., T_k\} に属する単語の出現回数をカウントする
    2. Xの各文で、最も出現回数の多い  T_i と対応する観点  a_i を、その文が述べている観点として割り当てる
    3. 各単語のχ2乗値を計算する
    4. χ2乗値が最も大きいトップp個の単語を選び、  T_i に追加する

最終的に、レビューdごとに行列  \pmb{W_d} を得ます。この行列 (k×n) の各要素  \pmb{W_d}_{ij} は観点  A_i に割り当てられた単語  w_j の出現回数を、dの単語数で割って正規化された値 (つまり出現確率) が対応している。

LRRモデル

次にLRRモデルで各観点の評価値  \vec{s_d} と 重み  \vec{\alpha_d} を推定していきます。

LRRモデルでは、3段階のプロセスを経てレビューされるという前提に基づきます。

  1. レビューする観点を決める
  2. 各観点について単語を選んで文にする
  3. 各観点の重要度を含めて総合評価をつける

したがって、文の単語が総合評価を直接反映するのではなく、文の単語→各観点の評価→総合評価というモデルになります (原文Figure 3より抜粋、記号の意味などは後ほど) 。

観点の評価値は、上で得られた観点ごとの語の出現確率  \pmb{W}_{dij} と各単語の極性  \beta_{ij} によって決まります (1) 。

  • 直感的には、"worth"は観点Valueにポジティブな影響を与えますし、"dirty"は観点Roomsにネガティブに働くはず、というイメージです
  • 極性  \beta_{ij} はパラメータとして推定します

$$ \vec{s_i} = \sum_{j=1}^{n} \beta_{ij}\pmb{W}_{dij} $$

総合評価  r_d はガウス分布に従うと仮定してます (2) 。

  • 重み×各観点の評価値の和が、総合評価値の平均
  • 分散  \delta^2 も推定対象のパラメータ

$$ r_d \sim N(\mu, \delta^2) = N(\sum_{i=1}^{k}\alpha_{di} \sum_{j=1}^{n}\beta_{ij} \pmb{W}_{dij}, \delta^2) $$

重みもまたガウス分布に従うとしてます (3) 。

  • 平均  \mu と分散  \Sigma は推定対象

$$ \alpha_d \sim N(\mu, \Sigma) $$

パラメータの推定と評価値・重みの計算

(2)と(3)を組み合わせて、ベイズ回帰の問題に落とし込みます。

$$ P(r|d) = P(r_d | \mu, \Sigma, \delta^2, \beta, \pmb(W_d) = \int p(\alpha_d | \mu, \Sigma) p(r_d | \sum_{i=1}^{k} \alpha_{di} \sum_{j=1}^{n} \beta_{dij} \pmb{W}_{dij}, \delta^2) d\alpha_d $$

以上より、推定しないといけないパラメータは  \Theta=(\mu, \sigma, \delta^2, \beta) となります。これらパラメータは以下のステップで求めます。

  1. 各レビューdの  \vec{s_d} を(1)で計算する
  2. 対数尤度関数  L(d) = log p(\alpha_d | \mu, \Sigma) p(r_d | \sum_{i=1}^{k} \alpha_{di} \sum_{j=1}^{n} \beta_{dij} \pmb{W}_{dij}, \delta^2) の最尤推定量  \hat{\Theta} を計算して  \alpha_d 導出する (MAP推定)

最尤推定量はEMアルゴリズムで求めていきます (詳しくは、原文4.3 LRR Model Estimationを見てください) 。

所感

実験の章はさっと読んだだけなのですが、最後に読んだ所感を挙げておきます。

  • 観点の数kとSeed wordsの選定は、ドメイン知識が必要
  • 観点の数が多くなりすぎると、観点を表す語がレビューに現れにくくなって、スパースになりやすい (実験でも見られている)
  •  \pmb{W} では単語の出現頻度で作っているが、word2vecなどの埋め込みを使えばスパースを解消できるかも...?