メモ:EX3 : Explainable Attribute-aware Item-set Recommendations(RecSys2021)

論文
https://dl.acm.org/doi/pdf/10.1145/3460231.3474240

正直こちらのWantedlyさんの参加報告見れば十分説がある。
www.wantedly.com

概要

これまでのレコメンドは関連するアイテム集合を提供することにフォーカスしていたが、ユーザーの嗜好に合わせた重要な属性を抽出し、それに合わせてアイテムセットを提供することで、より説明力が上がり購買につながるはず。
今回は過去のユーザー行動から重要な属性と、それに一致するアイテムの集合を生成するアプローチ(Extract-Expect-Explain Framework)の提案。

手法

問題設定としては、seedとなるアイテムと、そのアイテムと各属性に対するスコアのペア、グループ数が与えられた時に、その数分の説明可能なグループ(属性とそれに対応するクリック、購入されやすいレコメンドアイテムの集合)を出力すること。

論文のタイトル通り、Extract-Expect-Explainという3つのステップが行われる。
f:id:A_Koide0519:20211010144715p:plain

Extract-Step

個々のアイテムをd次元空間にマッピングするStep。
まずアイテムのタイトルなどのメタ情報を用いて特徴量を生成する。
続いて任意のアイテムpに対して関連性のあるアイテム集合N_pとの距離が近くなるようにアイテム空間を定義する。
なおN_pはCo-view(レコメンドなどを通じてseedアイテムと同時に見られている状態)かつView-to-buyされたアイテムからCo−buyアイテムを除いたものと定義する(ポジティブデータ)。
※ユーザー行動としてアイテム間を比べて買ったということを考えると妥当と思われる
また、ネガティブデータとしてView-to-buyのアイテム集合から|N_p|分アイテムをランダムサンプリングするN_p^-
最終的にエンコーダーはhinge lossを用いて、すべてのpに対してpN_pの距離がより近くなるように、pN_p^-の距離が遠くなるように学習される。
このエンコーダーを通してembeddingされたアイテムについて、各アイテム毎に距離の近いTopN件のアイテムをレコメンドの候補集合とする。

Expect-Step

seedのアイテムqに対して、クリックや購入に結びつくアイテム候補pを属性aのもとに学習する。
今回はAttribute Differentiating Networkというニューラルネットワークを提案している。
seedとなるアイテムと、Extract-Stepで抽出した候補アイテムに対して、そのアイテムペア間の関連度と、アイテムペアにおける属性の重要度スコアを同時に算出できる仕組みとなっている。
f:id:A_Koide0519:20211012151845p:plain

入力はExtract-Stepで抽出したアイテムのベクトル、onehot化された属性データ、アイテムのタイトルやカテゴリから抽出した文字ベクトル。
(a)のvalue-difference moduleは、アイテムq,pの属性a_jに対応する文字ベクトルの値の差異が計算される。
(b)のattention-based attribute scorerでは、q,pをconcatして低次元空間にマッピングしたベクトルと、(a)で作ったベクトルを用いて、pの各属性ごとの重要度を算出する
(c)のrelevance predictorでは、q,pをconcatして低次元空間にマッピングしたベクトルと(b)のアウトプットとして計算された全属性の情報をまとめたベクトルを使って、アイテムqpの関連度のスコアを算出する。

Explain-Step

seedのアイテムqに対して、K個の属性が付与されたグループを作成し、各アイテムを適切なグループに割り当てる。
1.Extract-Stepで候補アイテム集合C_qを取得
2.すべての候補アイテムに対して、Expect−Stepの候補アイテムp_iの各属性ごとの重要度と、qp_iの関連度のスコアを計算する。
また、その結果を掛け合わせることで、属性jにおける、アイテムqp_iの関連度のスコア(u_{ij})を計算する
3.候補アイテム×すべての属性に対して、下記を最大化するように候補アイテムをXに配置する
f:id:A_Koide0519:20211014195153p:plain
X_{ij}=1のとき、レコメンドアイテムiが属性jに配置されることを表している
u_{ij}=u(q,p_i,a_j)と考えて良いはず
4.すべての属性、すべての候補アイテムに対して、X_{ij}=1のときそのアイテムをグループG_jにinsertし、u_{ij}で降順ソートする。
その後、グループ全体の平均関連度スコアs_jを計算する
6.すべてのグループをsのスコアで降順ソートし、TopKのグループを返却する

今回は30個の候補アイテムに対して、5個の属性グループを作る。
また、一つの属性グループに対して5つのアイテムを割り当てる。

実験

amazonの7つのサブカテゴリの実データを用いて検証をした。
比較として
・ExtractのEmbeddingのみ
・BPR
・ACCM
・A2CF
との比較を実施。

expect-stepの評価

30個のアイテムからTop10を抽出した際のNDCG、Recall、Precisionで評価。
best baselineのA2CFと比較してもNDCGで10%以上の改善をしている。
Recall、Precisionについても全体で5%以上改善している。
カテゴリによっては30-50%の大幅な改善が見られている。

explain-stepの評価

重要な属性を抽出できているかの評価。
・ランダム:候補アイテムのランダムに任意の属性に割り当てる
・Greedy:候補アイテムに対し、そのタイミングでu_{ij}が一番大きい属性に候補アイテムを割り当てる
との比較を実施。
評価として、ランダムに抽出した1000caseをユーザーに5点満点で評価してもらった。
こちらの結果についても提案手法が最も良い結果を出している。
実際に提案手法では候補となるアイテム集合が異なると属性のランキングが変化している。

オンラインA/Bテスト

コンバーションが+0.080%増加し、売上が+0.105%向上

所感

属性ベースのレコメンド第2弾。
extractとexpectの結果にかなり大きな差があるが、基本的に属性とそれに対応するキーワードの情報を追加しただけでかなりのリフトがあって意外な感じがした。
この問題を実用化する時に、アイテムに対する属性と、それに対応するキーワードを付与する部分が一番大変だと思うので、そのあたりもいい方法があったら知りたい。