Exploiting Positional Information for Session-based Recommendation

发布时间 2023-06-07 13:39:30作者: 馒头and花卷

Qiu R., Huang Z., Chen T. and Yin H. Exploiting positional information for session-based recommendation. ACM Transactions on Information Systems, 2021.

本文讨论了一些 常用 positional encoding 的 forward-awareness, backward-awareness, 并提出了一种新的 forward&backward-awareness 的位置编码. 思想挺简单的, 不过这套概念不错.

符号说明

  • \(\bm{P} \in \mathbb{R}^{l \times d}\), 某个位置的位置编码, \(l\) 表示 length, \(d\) 表示 embedding 的维度.

Forward/Backward-awareness

  • 在 transformer 架构中, positional encoding 被引入以期望模型能够意识到序列中的时间信息, 通常采用如下的方式注入位置信息:

    \[\bm{x}_i + \bm{p}_i, \]

    其中 \(\bm{x}_i \in \mathbb{R}^d\) 为某个 item 的 embedding, 而 \(\bm{p}_i\) 为 positional encoding.

  • 对于 session-based 推荐而言, 我们对于 positional encoding 的要求实际上要更高.

  • Forward-awareness: 位置编码 \(\bm{P} \in \mathbb{R}^{l \times d}\) 是 forward-aware 的, 若对于任意的序列长度 \(m,n \in \mathbb{Z}^+\), 存在非空位置集 \(\mathcal{A} \subset \{0, 1, \ldots, d-1\}\), 使得对于位置 \(p, q\) 而言:

    \[\bm{P}_{p,\mathcal{A}}^m = \bm{P}_{q, \mathcal{A}}^n, \quad \text{ if } p = q, \\ \bm{P}_{p,\mathcal{A}}^m \not= \bm{P}_{q, \mathcal{A}}^n, \quad \text{ if } p \not= q. \\ \]

  • Backward-awareness: 位置编码 \(\bm{P} \in \mathbb{R}^{l \times d}\) 是 backward-aware 的, 若对于任意的序列长度 \(m,n \in \mathbb{Z}^+\), 存在非空位置集 \(\mathcal{B} \subset \{0, 1, \ldots, d-1\}\), 使得对于位置 \(p, q\) 而言:

    \[\bm{P}_{p,\mathcal{A}}^m = \bm{P}_{q, \mathcal{A}}^n, \quad \text{ if } m-p = n-q, \\ \bm{P}_{p,\mathcal{A}}^m \not= \bm{P}_{q, \mathcal{A}}^n, \quad \text{ if } m-p \not= n-q. \\ \]

  • 我们还是用实际的例子来理解上面的两种条件. 假设有两个序列:

    \[s = [s_1, s_2, \ldots, s_m], \\ s' = [s_1', s_2', \ldots, s_n']. \\ \]

  • 由此, 我们可以得到它们的 embedding 表示:

    \[\bm{X} = [\bm{x}_1, \bm{x}_2, \ldots, \bm{x}_m], \\ \bm{X}' = [\bm{x}_1', \bm{x}_2', \ldots, \bm{x}_n']. \\ \]

  • 一般的推荐模型, 都采用 learnable 的 positional encoding, 此时,

    \[\bm{P}_{p, \mathcal{A}}^m = \bm{P}_{p, \mathcal{A}}, \]

    故该位置编码是 forward-aware 的. 但是不是 backward-aware 的.

  • 在 session 推荐中, 我们常常看见 inversed 位置编码, 即:

    \[\bm{x}_i + \bm{p}_{m - i + 1}, \]

    此时:

    \[\bm{P}_{p, \mathcal{A}}^m = \bm{P}_{m- p + 1, \mathcal{A}}, \]

    故这种位置编码是 backward-aware 的.

  • 一个位置编码是 forward-aware 的, 那么这种位置编码就能告诉模型当前位置距离起始位置的距离, 反之, 倘若一个位置是 backward-aware 的, 那么这种位置编码就能告知模型当前位置距离最后一个位置. 后者对于抓住用户最新的偏好有特别的作用.

  • 可惜无论是 learnable 的, 还是 NLP 中常用的 sinusoidal positonal encoding (SDE):

    \[\bm{P}_{p, 2i} = \sin(p / f(i)), \\ \bm{P}_{p, 2i + 1} = \cos(p / f(i)). \\ \]

    其中 \(i = 0, 1, \ldots, 2/d - 1\), \(p = 0, 1,\ldots, l-1\).

  • 为了构造一种 foward&backward-aware 的位置编码, 首先我们定义 reverse sinusoidal positonal encoding (RSPE):

    \[\bm{P}_{p, 2i}^l = \sin((l - p - 1) / f(i)), \\ \bm{P}_{p, 2i + 1}^l = \cos((l - p - 1) / f(i)). \\ \]

    其中 \(i = 0, 1, \ldots, 2/d - 1\), \(p = 0, 1,\ldots, l-1\).

  • 可以证明, SDE 仅是 forward-aware 的, RSPE 仅是 backward-aware 的.

Dual Positional Encoding

  • 作者的方案是:

    \[\bm{P}_{p, 2i}^l = \sin(p / f(i)), \\ \bm{P}_{p, 2i + 1}^l = \cos(p / f(i)), \\ \bm{P}_{p, 2i + d/2}^l = \sin((l - p - 1) / f(i)), \\ \bm{P}_{p, 2i + 1 + d/2}^l = \cos((l - p - 1) / f(i)). \\ \]

    其中 \(i=0,1,\ldots, d/4\).

  • 即, 我们去 embedding 的一半为 forward-aware, 另一半为 backward-aware, 最终的结果就是 forward&backward-aware 的了.