EX3: Explainable Attribute-aware Item-set Recommendations
https://gyazo.com/faf5b9287b031f7074f200b0a92ab8e5
著者情報
Rutgers University, United States
Amazon
その他多くの大学
選んだ理由
Explainable の文脈に興味が湧いた
Amazonが関連している論文なので、実運用を見据えた設計になっていそう
どんなもの?
attributes を考慮したアイテムセット推薦の問題を一般化する
アイテムの特性(ブランド、色、サイズなど)とユーザーのフィードバックに従って、attributes による説明付きのアイテムセットの生成を目的としている
以下のようなイメージ。今回のExplainableはここでいうところの価格や画質、ディスプレイサイズや重さ等々を示している部分
https://gyazo.com/9b447ff509aaf148f7c73f687e1b93a1
過去のユーザ行動から行動指向の attributes 重要度を学習する手法を提案する
(目標) 各アイテムがユーザに推奨される理由を正当化するための重要なattributes(説明)と関連付けられたアイテム(推奨)の組を生成することである
単に推奨アイテムを生成するだけでなく、値の変化がユーザの購買意思決定に影響を与える重要なアイテムの属性に基づいて、それに対応する説明を提供することを目指している
説明可能なアイテムセット推薦のためのマルチステップのフレームワーク Extract-Expect-Explain (EX3) を提案する。
input: pivotとなるitem, 候補のitem群、関連するattributes (e.g., title, item type)
output: 重要なattributesに関連する推薦アイテムセット
先行研究と比べてどこがすごい? (貢献)
アイテムがユーザに推奨された説明として、基本的なアイテムの attributes を利用しているものはほとんどない
明示的なラベル無しにユーザーの行動ログから購入意思決定に重要なattributesを特定する
実環境では常にデータの欠損や疎性の問題に悩まされる。問題への対処方法の一例を提案
大規模な量のitemに対して実運用可能なフレームワークの提案
提案手法
課題の定式化
$ u\left(q, p, a\right): keyになるitem と それに関連するitem と attributes を渡してclickや購入確率を返す関数
$ X_{i j}: item $ p_{i}が attribute$ a_{j}におけるグループに入っていれば 1 、入っていなければ 0
$ \begin{aligned} \max _{X} & \sum_{i \in[m], j \in[n]} u\left(q, p_{i}, a_{j}\right) X_{i j} \\ \text { s.t. } & \sum_{i=1}^{m} X_{i j} \leq D_{\mathrm{grp}}, \forall j \in[n] \quad \text { (Group capacity constraint) } \\ & \sum_{j=1}^{n} X_{i j} \leq D_{\mathrm{div}}, \forall i \in[m] \quad \text { (Item diversity constraint) } \end{aligned}
Group capacity constraint: 1つのグループに含まれるitem数を一定以下に抑える
Item diversity constraint: 全体の推薦における各itemの出現を一定以下に抑える
上式の課題点
item $ p_{i} の数が膨大なのですべてを探索するのは現実的ではない
attribute$ a によって計算される$ u\left(q, p, a\right)がユーザーの行動ログからだと非明示的
ユーザーが商品を購入した際に商品のどの属性が決め手となって購入に至ったかが明示的に示されないのがチャレンジング
$ EX^{3}(以下EX3)を提案
https://gyazo.com/5651abdb73aa8f222a4936a613f17053
$ EX^{3}は以下の3コンポーネントに分かれる
Extract-Step: itemのdense vector作成。近いitemを取れるようにして探索範囲を狭める
Expect-Step: attribute を考慮しつつのitemのrelevance推定 & attributeの重要度の出力
Explain-Step: Expect-Stepの出力を元に推薦リストの作成
上から順に詳細を説明する
Extract-Step
ユーザーの行動ログをベースに関連したitemが近くなるようなembeddingの作成。近くにある上位 m 件を取得して次の step に渡す (次の step で embedding も使う)
関連するitemは以下で定義
(詳細は論文で。事前実験でMTurkを使いながら確かめた結果、ユーザーの購入行動とのbestな関連度だったらしい)
$ \mathcal{B}=\mathcal{B}_{\mathrm{cv}} \cap \mathcal{B}_{\mathrm{pv}}-\mathcal{B}_{\mathrm{cp}}
$ \mathcal{B}_{\mathrm{cv}}: 同時に閲覧されたitem
$ \mathcal{B}_{\mathrm{pv}}: 閲覧後に購入されたitem
$ \mathcal{B}_{\mathrm{cp}}: 同時に購入されたitem
あるitemをpivotとしたときに、上記で定義される 関連item の重み付き和のvectorを近づけれるようにする (not 関連item を遠ざける)
後のstepで詳細に推定を行うcandidateの作成は、pivotに近い item 上位 m 件を取得する
Expect-Step
関連しているかを推定したい item pair とそれぞれの item が持っている attribute を入力に 関連度 と attributeの重要度を出力する
詳細なNNの構造等は下の画像 + 論文を参照ください
ここでは、今回の特有の課題に対処している部分に重点を置く
https://gyazo.com/3bf31d9d7fddd46892c251cbcd4364b6
attribute の扱い
構造は画像下半分
(課題) attribute はユーザーの任意入力感が強いため、入力される文言やデータの形式が多種多様らしい
すべてのデータ形式はどうにかすれば文字列に変換できるので、すべての attribute を文字列に変換
Character level の Embedding で変換した後に 1D Conv に通す
Attention-based Attribute Scorer
Random-masking Attention Block
ここでのAttentionの重み = attribute の重要度として出力される
(課題) attribute は種類によって出現確率が大きく異なる。加えて出品者の入力依存なので欠損が多い
学習時に attribute の出現頻度に依存して、ランダムにマスクをかけるようにした
Explain-Step
前段のExpect-Stepの出力を使って、推薦リストの作成を行う
$ \begin{aligned} \max _{X} & \sum_{i \in[m], j \in[n]} u\left(q, p_{i}, a_{j}\right) X_{i j} \\ \text { s.t. } & \sum_{i=1}^{m} X_{i j} \leq D_{\mathrm{grp}}, \forall j \in[n] \quad \text { (Group capacity constraint) } \\ & \sum_{j=1}^{n} X_{i j} \leq D_{\mathrm{div}}, \forall i \in[m] \quad \text { (Item diversity constraint) } \end{aligned}
の最適化問題をLP solversを使って解く (weighted bipartite b-matching problem)
$ u\left(q, p_{i}, a_{j}\right)は $ \hat{Y}_{i} \cdot \hat{y}_{i j}
(アイテム間の関連度の推定値とattributeの重要度をかけたもの)
https://gyazo.com/889dfe0924109921f1efae81e9b6bf59
($ D_{\mathrm{grp}}と$ D_{\mathrm{div}}はどこに行ったんだろう :thinking_face:)
実験
データセット
Amazon.comで取得したデータを使用
Overall 以外は商品カテゴリ別に別れている
https://gyazo.com/6c71c5ef9a5d8c43709f261194bc9190
推薦性能はどうだったのか
今回のモデルはExpect-Stepまで (2段階目) までで、推薦システムとしては稼働可能。
Expect-Stepの出力とその他推薦モデルとの性能を比較した
Relevance: Extract-Stepで出た item vector の類似度をそのまま使用 (2段階目を通さない)
A2CF: SOTA
EX3: 本モデル (2段階目まで使用)
https://gyazo.com/f94b112dd5358bff989ecf8d83a36ed9
一番良かった。CoffeeとIncontinence Protectorで非常に良い
attributes の欠損に頑健か (attentionにmaskしてたけど意味あったのか)
Drop Ratios に従ってランダムにattributesをドロップした際の性能 (mask あり vs mask なし)
https://gyazo.com/11d81d60c604a18898c463f2f3cde970
どのDrop Ratiosでもmaskをした方が性能面でrobustだった
提案したExplain-stepは有効だったか
https://gyazo.com/d5601ccaa6eb6e5ffca9e6b061b167ee
Random: attributeの一致度を見つつランダム割当
Greedy: $ u\left(q, p_{i}, a_{j}\right)が高い順に割当。厳密にLP solversを使わずに割り当てたバージョン (たぶん)
EX3: 提案モデル
制約条件のパラメータに依らずEX3が一番いいよね
実例
https://gyazo.com/9e7ce6cbbcfd793f6d0cbd38b26aae98
brandが異なる商品を入力にした際には、brandのscoreが上がりbrandが上位にくる
brandが同じ商品を入力にした際には、brandのscoreが下がりbrandが下位にくる
ユーザー実験
デプロイ前にユーザーへのアンケートによる実験を行った
80%以上の高品質な推薦を得ることができ、86%以上の精度で同等の推薦が可能であることがわかった
大規模ECサイトでの実ユーザトラフィックによるオンラインA/B実験を行った
オンラインA/B実験ではコンバージョン(+0.080%)、収益(+0.105%)が大幅に増加する結果を得た
議論はある?
自由入力であってもattributeを事前に持っているというのが難しい
関連記事推薦で同じトピックに対して異なる視点を持っている記事を並べる等はできそうだが、視点に関する情報が事前にないといけないのが難しい