该论文提出了一个称为KBRD的框架,它是一个基于知识图谱的推荐对话系统。
首先需要做的就是知识图谱的实体链接,论文中使用到了DBpedia,将对话中出现的items以及non-item entities与DBpedia中的实体链接起来。通过知识图谱,我们也许可以发现这些non-items的内容可能与某些items联系紧密,这样可以起到丰富对话内容的作用,起到更好的推荐效果。
这样一来就可以将用户表示为(mathcal{T}_u = {{e_1,e_2,···,e_{| au_u|}}}), (e_iinvarepsilon), 其中(e_{i})代表了对话中链接到图谱的items以及non-item entities。
那么接下来的问题就是怎么来表示DBpedia中的实体呢?论文中采用了R-GCN算法来获得图中每个节点的特征表示
所以在最后一层(L),可以得到 ( extbf H^{(L)} in mathbb{R}^{|varepsilon| imes d^{(L)}})。注:后面(d^{(L)})简写成(d)。
在得到DBpedia中的实体特征表示矩阵后,上文中所提到的$ mathcal{T_u}$也可以用向量的形式表示出来了,即
其中(h_iinmathbb{R}^d)是实体(e_i)的特征表示。
但是现在又出现了新的问题,就是每个用户的对话内容大小不一,对应的$| au_u|$也是不相同的,论文并没有采用简单线性相加的方式,而是采用了self-attention来将不同大小的$ extbf{H}_u$转换成固定大小的向量表示。需要注意的是,论文中所采用的self-attention,并不是《Attention is all you need》论文中所提到的self-attention,而是来自《A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING》。
应用论文中所提到的方法:
其中(W_{a1}in mathbb{R}^{d_a imes d})是一个权重矩阵,(w_{a2})是一个大小为(d_a)的向量。
据此得到的(alpha_u)是一个维度为(|mathcal{T}_u|)的向量,代表了对话中不同实体的权重,每个用户就可以用(t_u = alpha_u extbf{H}_u)来表示,其表示的内容就是用户的偏好。
最后通过用户偏好与图谱中的实体做内积,越相似的话则内积越大,推荐的概率也就越高,即
其中的mask的作用是将non-item的实体的分数置为(-infty),因为最后要推荐的是item。
论文的另一重点就是对话模块了,论文中采用的是transformer框架,根据收集到的推荐对话训练集对该模型进行训练,在decoder中每个时间步都会有结果(o)输出。
于是在decoder的最后一层的每一个时间步,就可以输出词汇的概率分布,即
这里(Winmathbb{R}^{|V| imes d}),(binmathbb{R}^{|V|}),(P_{dialog})是一个大小为(|V|),即词汇表大小的向量。
但是,如果只是这样的话,那么对话模块就没有和推荐模块结合起来,在推荐模块中,我们已经学到了用户的偏好(t_u),如果在对话模块中加入(t_u),那么是不是就会更好的生成符合用户偏好的对话?
于是,论文中的做法就是首先经过一个前馈神经网络
其中(mathcal{F}:mathbb{R}^d o mathbb{R}^{|V|}),这里也是先将维度统一一下。
于是,概率输出变成
最后如何确定在每一步应该输出vocabulary还是item呢?论文中采用的方法是
其中(w)代表的是vocabulary或者是item,(o)是transformer最后一层的输出,(w_sinmathbb{R}^d),(b_sinmathbb{R})。其实这里我还不是怎么懂。。。
最后,再来回顾一下KBRD框架:
之前的左边框架没有很好的将对话模块和推荐模块结合起来,而KBRD很好的弥补了这个缺点。首先对话模块将内容与知识图谱联系起来,将更丰富的内容提供给了推荐模块,使得它可以给出更加符合用户偏好的推荐。同时推荐模块可以将学到的用户偏好传递给对话模块,使之可以生成更符合用户偏好的对话。