糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

Learning and Transferring IDs Representation in E-commerce (KDD 2018) 読んだ

KDD 2018 | Learning and Transferring IDs Representation in E-commerce
EC サイトにおける商品 (item) の埋め込み (embedding) を学習する.その際,商品につけられたメタデータをまとめて学習する.

基本方針

ユーザの商品閲覧行動にもとづいて skip-gram を学習する.すなわち,窓幅を C として

\frac{1}{N}\sum_{n=1}^{N}\sum_{-C \leq j \leq C}^{1 \leq n + j \leq N,\ j \neq 0} \log p(\textrm{item}_{n + j} | \textrm{item}_{n})

を学習する.この時

p(\textrm{item}_{j} | \textrm{item}_{i}) = \frac{\exp ({e^{\prime}_{j}}^{T} e_i)}{\sum_{d}^D \exp ({e^{\prime}_{d}}^{T} e_i)}

である.e^{\prime}\, em 次元の商品の埋め込みとして得られる.

商品と属性の埋め込み

ここで,商品には様々な属性が付与されていることを考える.論文では例として

  • ある「商品」(product,例えば iPhone X) は異なる店 (store) にて異なる商品 (item) として扱われている
  • 「商品」にはブランド (brand) が付与されている
  • 「商品」には階層的なカテゴリ構造 (cate-level1, cate-level2, cate-level3) が付与されている

としている.以降, item ID, product ID, store ID, brand ID, cate-lebel1 ID, cate-lebel2 ID, cate-lebel3 ID の 7 種類を考える (これ以上増やすことも可能).また,これを「属性」と呼ぶことにする.

今, K 種類の属性があり,\textrm{IDs}(\textrm{item}_i) = [\textrm{id}_1(\textrm{item}_i), \cdots, \textrm{id}_K(\textrm{item}_K)] とする.また \textrm{id}_1 を item ID とすると,次の式がこの論文の提案手法.

p(\textrm{IDs}(\textrm{item}_j) | \textrm{IDs}(\textrm{item}_i)) = \sigma (\sum_{k = 1}^K (w_{jk} e^{\prime}_{jk})^T(w_{ik} e_{ik})) \prod_{s=1}^S \sigma (-\sum_{k = 1}^K (w_{sk} e^{\prime}_{sk})^T(w_{ik} e_{ik}))

S は negative sampling における負例集合であり, e_{ik} は 商品i における属性 \textrm{ID} k ごとの埋め込み.属性ごとに埋め込みの次元長  m_k は変わる (この時点では全ての埋め込みは異なるものとして扱う).言ってしまえば,商品ごとの全属性の内積の総和を用いて商品の出現確率を計算する.w_{ik} = \frac{1}{V_{ik}} であり V_{ik}i の属性 k を持つ商品の個数.

更に,商品とその属性との関係も学習する.すなわち

p(\textrm{item}_i | \textrm{IDs}(\textrm{item}_i)) = \sigma (\sum_{k=2}^K w_{ik} e_{i1}^T M_k e_{ik})

とする.ここで M_k は商品 i の長さ m_1 の埋め込み e_{i1} を各属性 k の長さm_k 埋め込みに変換するための行列.ここでようやく商品と属性の埋め込みが同じものとして扱えるようになる.\sum のインデックスが k=2 から始まっているのが重要.

最終的な目的関数は

\frac{1}{N}\sum_{n=1}^{N} ( \sum_{-C \leq j \leq C}^{1 \leq n + j \leq N,\ j \neq 0} \log p(\textrm{item}_{n + j} | \textrm{item}_{n}) + \alpha \log p(\textrm{item}_n | \textrm{IDs}(\textrm{item}_n)) - \beta \sum_{k}^K ||M_k||_2)

とする.[tex\alpha]は商品自身の表現に対する重みのハイパーパラメータ,\betaM_k に対する L2 正則化のハイパーパラメータ.

ユーザの埋め込み

複雑な方法はあるけれど計算が簡単なので直近 T 個の商品の埋め込みの平均をユーザの埋め込みとする.

応用

類似商品の提示

あるユーザが直近で閲覧したいくつかの商品について埋め込みが類似する商品を列挙すればいい.

未知の商品に対する計算

未知の商品 i があるが属性が付与されているときにその商品の埋め込みが計算できる.

p(\textrm{item}_i | \textrm{IDs}(\textrm{item}_i)) = \sigma (\sum_{k=2}^K w_{ik} e_{i1}^T M_k e_{ik})

だったことを思い出すと \sigma は単調増加なので

p(\textrm{item}_i | \textrm{IDs}(\textrm{item}_i)) \propto \sum_{k=2}^K w_{ik} e_{i1}^T M_k e_{ik} = e_{i1}^T(\sum_{k=2}^K w_{ik}  M_k e_{ik})

となる.目的関数が十分に最適化されていれば p(\textrm{item}_i | \textrm{IDs}(\textrm{item}_i)) は 1 と考えられるので式変形をすれば

e_{i1} \approx \sum_{k=2}^K w_{ik} e_{ik}^T M_k^T

で値が得られる.

異なるドメインに対する転移

ここの記述が全く理解できていない.

という手続きが説明されているが,そもそもユーザの埋め込みが共有できるということは商品の体系も共通していなければならない.揃っているならばまとめて学習すればいい(ドメインの違いは属性として特徴量に持たせればいい)のではないか.論文中では Taobao を source , Hema を target としているがそもそも EC サイトとしての性質が大きく異なるのに共通で計算できているという話もよくわからない.
「cold-start なユーザに対する推薦」という話だとしても,クラスタにそのユーザを割り振る際に計算するユーザの埋め込みはどのようにして計算できているのか,という話が理解できない(そこが計算できているならばクラスタに割り振る処理は不要ではないか).

とここまで書いたところで 5.3 にて Since new users have ho historical records に気づくが,やはりどうやって新規ユーザの埋め込みを計算したのかが謎.致命的な何かを読み落としているとしか思えない.