こんにちは.エンジニアをしている田中です.
近年の多くの推薦システムでは,機械学習手法を用いて,ユーザの行動履歴から推薦モデルを構築するようになってきています.これにより,単にデータを集計して人気のアイテムを出すようなアプローチと比べて,よりユーザの趣向に合ったアイテムを推薦することが可能になります.ここでは,そのような推薦モデルの構築(学習)方法について,簡単に紹介したいと思います.
この記事では,ユーザの行動履歴をフィードバックと呼びます.一言にユーザからのフィードバックと言っても様々な種類があります.例えば,ユーザがアイテムに対して点数(rating)をつけたものや,like・dislikeのようにそのアイテムを好きか嫌いかを表すものがあります.このタイプは,ユーザがそのアイテムを好きかどうかがはっきりとわかるので,明示的フィードバック(explicit feedback)と呼ばれます.一方で,単なる閲覧・購入履歴などのデータも存在します.このデータからは,閲覧したけど好きだったかどうかはわかりませんし,購入したけど満足したかどうかはわかりません.したがって,このタイプは暗黙的フィードバック(implicit feedback)と呼ばれます.大きく分けて,この二つのタイプのフィードバックを元に推薦モデルを構築するわけですが,この二つでは,学習手法が異なってきます.
学習方法に入る前に,「推薦」という問題の定式化をしていきます.\(m\)個のアイテム,\(n\)人のユーザを考え,アイテムを\(i \in \mathcal{I} = \{1, \ldots, m\}\),ユーザを\(u \in \mathcal{U} = \{1, \ldots, n\}\)とします.そして,推薦モデルへの入力を\((i, u)\),出力を\(y \in \mathbb{R}\)とします.最後に,推薦モデルを\(\hat{y}: \mathcal{I} \times \mathcal{U} \rightarrow \mathbb{R}\)とします.こうすると,ユーザ\(u\)への推薦は,\(\hat{y}(i, u)\)の高い順にアイテム\(i\)を推薦すれば良いことになります.よって,ここでの目的はフィードバックから\(\hat{y}\)を学習することになります.
ユーザから与えられるフィードバックを\((i, u, y, \alpha)\)とし,その集合を\(S\)とします.ここで,ユーザ\(u\)がアイテム\(i\)を(どのくらい)好きか(どのくらい)嫌いかというのを\(y\)で表していると考えます.\(\alpha\)は,そのフィードバックの強さを表す重みです.例えば,新しいフィードバックが古いフィードバックより重要な場合は,前者の重みを後者の重みに比べて大きくしたりします.もちろん,このような設定を考えない場合は全ての\((i, u, y, \alpha) \in S\)について\(\alpha=1\)としても構いません.このフィードバックを用いて\(\hat{y}\)を学習します.ここで,どんな最適化問題を定義して,どのように解くかは自由ですが,この記事ではl2正則化最小二乗学習の枠組みで考えたいと思います.
明示的フィードバックでは,二乗誤差に正則化項を加えた以下のような最適化問題を考えます.
$$
\begin{aligned}
\min_{\mathbf{\Theta}} \ \sum_{(i, u, y, \alpha) \in S} \alpha \left(y – \hat{y}(i, u; \mathbf{\Theta})\right)^2 + \sum_{\theta \in \mathbf{\Theta}} \lambda_{\theta} \theta^2
\end{aligned}
$$
ただし,\(\lambda_{\theta}\)は\(\theta\)に対する正則化パラメータです.さらに,\(\mathbf{\Theta}\)は,\(\hat{y}\)がもつパラメータ集合で,これを学習することになります.この最適化問題は,通常の勾配法に加えて,\(\hat{y}\)が多重線型性をもつ場合はより効率的に解を見つける方法が提案されています.多重線型性とは,いくつかのパラメータを固定すると,注目しているパラメータに対しては線形になるような性質を指します.
一方で,暗黙的フィードバックではもう少し工夫が必要です.先ほど,\(y\)はユーザ\(u\)がアイテム\(i\)を(どのくらい)好きかを表していると考えましたが,暗黙的フィードバックではこれは不確かなものです.よって,\(y\)に対して,何らかの仮定が必要になってきます.最も単純な仮定として,「フィードバックは全てポジティブなものである」というのがあり得るでしょう.例えば,「閲覧したから興味があるのだろう」と言った具合です.これは,ポジティブな場合は\(y\)を1と,ネガティブな場合は\(y\)を0とし,全ての\((i, u, y, \alpha) \in S\)に対して\(y=1\)とすることで表現できます.しかし,明示的フィードバックの時のような最適化問題を考えてしまうと,全ての\((i, u)\)に対して\(1\)を出力するような\(\hat{y}\)が最適なものとなってしまいます.そこで,\(S\)に含まれないアイテム・ユーザの組み合わせについては弱い重み\(\alpha_0\)で\(y=0\)とすることにし,以下のような最適化問題を考えます.
$$
\begin{aligned}
\min_{\mathbf{\Theta}} \ \sum_{(i, u, y, \alpha) \in S} \alpha \left(y – \hat{y}(i, u; \mathbf{\Theta})\right)^2 + \alpha_0 \sum_{(i, u) \in S_0} \hat{y}(i, u; \mathbf{\Theta})^2 + \sum_{\theta \in \mathbf{\Theta}} \lambda_{\theta} \theta^2
\end{aligned}
$$
ただし,\(S_0\)は\(S\)に含まれていないアイテム・ユーザペアで,以下のように定義しました.
$$
\begin{aligned}
S_0 = (\mathcal{I} \times \mathcal{U}) \setminus \left\{(i, u) \vert (i, u, y, \alpha) \in S\right\}
\end{aligned}
$$
以上のような最適化問題を解くことで,明示的・暗黙的フィードバックから推薦モデル\(\hat{y}\)を学習することになります.この段階では\(\hat{y}\)の形については一切触れていません.様々な\(\hat{y}\)を考えることができ,それに対して様々な最適化アルゴリズムが提案されています.次回以降,余力があればそれらについてもいくつか紹介したいと思います.
読んでいただきありがとうございました.