Exploiting Positional Information for Session-based Recommendation
概
本文讨论了一些 常用 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 的了. 

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号