本文是2020年ACMMM 上的一篇论文,通过构建item关系图,寻找项目之间的转化关系,并通过注意力机制与transformer对物品特征进行提取,最终对物品进行预处理。
作者提出问题
上图是物品关系图的构建方法:同一个用户购买的两个不同的物品会在图中相连,权重是两个物品被一同购买的用户数。
那么对于图中的每个点h,都存在一些可以丰富他们表达的点,我们称之为h的上下文邻居 C h \mathbf{C}_{h} Ch,而h的物理邻居则称为 N h \mathbf{N}_{h} Nh
下面我们将使用MCNSampling算法求出 C h \mathbf{C}_{h} Ch
设初始 C h \mathbf{C}_{h} Ch={h},只包含h本身。下面将 C h \mathbf{C}_{h} Ch每个元素t用 n i \mathbf{n}_{i} ni个点 t ′ 1 , t ′ 2 \mathbf{t'}_{1},\mathbf{t'}_{2} t′1,t′2…替代(i是当前操作的轮数, n i \mathbf{n}_{i} ni是提前设置好的参数), t ′ i \mathbf{t'}_{i} t′i属于 N t \mathbf{N}_{t} Nt,且 t ′ i \mathbf{t'}_{i} t′i=t’的取值概率是t与t’之间在物品图中的权重。然后将上述操作重复K轮,最终得到 C h \mathbf{C}_{h} Ch
我们利用下面的公式来对 C h \mathbf{C}_{h} Ch中每个结点对于h的重要性进行打分:
s t k = f t k × ( K − k + 1 ) (1) s_{t}^{k}=f_{t}^{k} \times(K-k+1)\tag{1} stk=ftk×(K−k+1)(1)
其中 f t k f_{t}^{k} ftk是点t在第K轮 C h \mathbf{C}_{h} Ch中出现的次数,k是轮数,我们可以理解为轮数越少,出现次数越多,则对于h越重要。
最终每个结点的重要程度为:
s t = ∑ k = 1 K s t k (2) s_{t}=\sum_{k=1}^{K} s_{t}^{k}\tag{2} st=k=1∑Kstk(2)
得到的 C h \mathbf{C}_{h} Ch取重要程度最高的n个点与目标点h组成新的集合S, x t i \mathrm{x}_{t}^{i} xti属于S ,对S中的所有点进行线性变换,并通过注意力机制提取物品特征。
X t i = x t i W M i + b M i , 1 ≤ i ≤ m X t = X t 1 ⊕ X t 2 ⊕ ⋯ ⊕ X t m , α t = softmax [ tanh ( X t ) W s + b s ] , M t = ∑ i m α t i X t i , (3) \begin{array}{c} \mathrm{X}_{t}^{i}=\mathrm{x}_{t}^{i} \mathbf{W}_{M}^{i}+\mathrm{b}_{M}^{i}, 1 \leq i \leq m \\ \mathrm{X}_{t}=\mathrm{X}_{t}^{1} \oplus \mathrm{X}_{t}^{2} \oplus \cdots \oplus \mathrm{X}_{t}^{m}, \\ \alpha_{t}=\operatorname{softmax}\left[\tanh \left(\mathrm{X}_{t}\right) \mathbf{W}_{s}+\mathrm{b}_{s}\right], \mathbf{M}_{t}=\sum_{i}^{m} \alpha_{t}^{i} \mathrm{X}_{t}^{i}, \end{array}\tag{3} Xti=xtiWMi+bMi,1≤i≤mXt=Xt1⊕Xt2⊕⋯⊕Xtm,αt=softmax[tanh(Xt)Ws+bs],Mt=∑imαtiXti,(3)
其中W与b都是可学习变量,然后根据节点在S集合中的位置进行位置向量嵌入(位置越靠前说明对于h来说该节点越重要)
P t = P − Embedding [ p ( t ) ] (4) \mathbf{P}_{t}=\mathbf{P-}\text { Embedding }[p(t)]\tag{4} Pt=P− Embedding [p(t)](4)
再根据节点的角色进行节点角色向量嵌入(就是将S中的原节点h突出,让h在接下来的聚合中取得更大的权重)
R t = R − Embedding [ r ( t ) ] (5) \mathbf{R}_{t}=\mathbf{R}-\text { Embedding }[r(t)]\tag{5} Rt=R− Embedding [r(t)](5)
然后将得到的三个向量嵌入求和,得到S中每个结点的初步向量表示,该向量表示融合了多模态信息、位置信息、角色信息
H t 0 = Aggregate ( M t , P t , R t ) (6) \mathrm{H}_{t}^{0}=\text { Aggregate }\left(\mathrm{M}_{t}, \mathrm{P}_{t}, \mathrm{R}_{t}\right)\tag{6} Ht0= Aggregate (Mt,Pt,Rt)(6)
接下来我们计划通过自注意力机制来提取S的整体特征:
H ℓ = F F N [ softmax ( Q K ⊤ d h ) V ] Q = H ℓ − 1 W Q ℓ , K = H ℓ − 1 W K ℓ , V = H ℓ − 1 W V ℓ , (7) \begin{array}{c} \mathrm{H}^{\ell}=\mathrm{FFN}\left[\operatorname{softmax}\left(\frac{\mathrm{QK}^{\top}}{\sqrt{d_{h}}}\right) \mathrm{V}\right] \\ \mathrm{Q}=\mathrm{H}^{\ell-1} \mathrm{~W}_{Q}^{\ell}, \mathrm{K}=\mathrm{H}^{\ell-1} \mathrm{~W}_{K}^{\ell}, \mathrm{V}=\mathrm{H}^{\ell-1} \mathrm{~W}_{V}^{\ell}, \end{array}\tag{7} Hℓ=FFN[softmax(dhQK⊤)V]Q=Hℓ−1 WQℓ,K=Hℓ−1 WKℓ,V=Hℓ−1 WVℓ,(7)
其中,K、Q、V是可学习参数然而作者认为这种自注意力的做法实际上会损失S中的特征多样性。
因此,在上式基础上我们进行改进
S = H ℓ − 1 W S ℓ , U 1 = softmax ( E − S S ⊤ ∥ S ∥ 2 ∥ S ∥ 2 ⊤ + I ) , (8) \begin{array}{c} \mathrm{S}=\mathrm{H}^{\ell-1} \mathrm{~W}_{S}^{\ell}, \\ \mathrm{U}_{1}=\operatorname{softmax}\left(\mathrm{E}-\frac{\mathrm{SS}^{\top}}{\|\mathrm{S}\|_{2}\|\mathrm{~S}\|_{2}^{\top}}+\mathrm{I}\right), \end{array}\tag{8} S=Hℓ−1 WSℓ,U1=softmax(E−∥S∥2∥ S∥2⊤SS⊤+I),(8)
U 2 = softmax ( Q K ⊤ d h ) , H ℓ = F F N [ ( β U 1 + ( 1 − β ) U 2 ) V ] , (9) \begin{array}{c} \mathbf{U}_{2}=\operatorname{softmax}\left(\frac{\mathrm{QK}^{\top}}{\sqrt{d_{h}}}\right), \\ \mathbf{H}^{\ell}=\mathrm{FFN}\left[\left(\beta \mathbf{U}_{1}+(1-\beta) \mathrm{U}_{2}\right) \mathrm{V}\right], \end{array}\tag{9} U2=softmax(dhQK⊤),Hℓ=FFN[(βU1+(1−β)U2)V],(9)
W S ℓ \mathrm{~W}_{S}^{\ell} WSℓ是可学习参数,E是单位矩阵, S S ⊤ ∥ S ∥ 2 ∥ S ∥ 2 ⊤ \frac{\mathrm{SS}^{\top}}{\|\mathrm{S}\|_{2}\|\mathrm{~S}\|_{2}^{\top}} ∥S∥2∥ S∥2⊤SS⊤其实是在计算S内节点的相似度,相似度越大 U 1 \mathrm{U}_{1} U1权重越小,因此能保留特征多样性。
优化方程:
L edge = 1 ∣ V ∣ ∑ h ∈ V 1 ∣ N h ∣ ∑ t ∈ N h [ − log ( σ ( h ⊤ t ∥ h ∥ 2 ∥ t ∥ 2 ) ) − Q ⋅ E t n ∼ P n ( t ) log ( σ ( − h ⊤ t n ∥ h ∥ 2 ∥ t n ∥ 2 ) ) ] (10) \begin{aligned} \mathcal{L}_{\text {edge }}=& \frac{1}{|\mathcal{V}|} \sum_{h \in \mathcal{V}} \frac{1}{\left|\mathcal{N}_{h}\right|} \sum_{t \in \mathcal{N}_{h}}\left[-\log \left(\sigma\left(\frac{\mathbf{h}^{\top} \mathbf{t}}{\|\mathbf{h}\|_{2}\|\mathbf{t}\|_{2}}\right)\right)\right.\\ &\left.-Q \cdot \mathbb{E}_{t_{n} \sim P_{n}(t)} \log \left(\sigma\left(-\frac{\mathbf{h}^{\top} \mathbf{t}_{n}}{\|\mathrm{~h}\|_{2}\left\|\mathbf{t}_{n}\right\|_{2}}\right)\right)\right] \end{aligned}\tag{10} Ledge =∣V∣1h∈V∑∣Nh∣1t∈Nh∑[−log(σ(∥h∥2∥t∥2h⊤t))−Q⋅Etn∼Pn(t)log(σ(−∥ h∥2∥tn∥2h⊤tn))](10)
L feature = 1 ∣ V ∣ ∑ h ∈ V 1 ∣ M h ∣ ∑ t ∈ M h ∑ i m ∥ H t L W r i − x t i ∥ 2 2 , (11) \mathcal{L}_{\text {feature }}=\frac{1}{|\mathcal{V}|} \sum_{h \in \mathcal{V}} \frac{1}{\left|\mathcal{M}_{h}\right|} \sum_{t \in \mathcal{M}_{h}} \sum_{i}^{m}\left\|\mathrm{H}_{t}^{L} \mathbf{W}_{r}^{i}-\mathrm{x}_{t}^{i}\right\|_{2}^{2} \text {, }\tag{11} Lfeature =∣V∣1h∈V∑∣Mh∣1t∈Mh∑i∑m∥ ∥HtLWri−xti∥ ∥22, (11)
L edge + λ L feature (12) \mathcal{L}_{\text {edge }}+\lambda \mathcal{L}_{\text {feature }}\tag{12} Ledge +λLfeature (12)
(11)就是让最终得到的物品嵌入与各个模态的嵌入不要相差太多,(10)则是让得到的物品嵌入与邻居物品更相似(?)
该文章仍然是通过多模态来对下游模型的物品嵌入做一个预处理,模型中包含很多元素,也挖掘了更多的多模态信息。可以看出有一定工作量,而且方法也可以适用于大多数模型。