评论

1、AGPC

针对一篇博客,可以根据用户画像个性化输出用户的评论

 

 

 

数据集格式:1个博客,该博客下的所有评论,评论由评论内容和评论者的信息组成

e(x1)...e(xn):博客的分词+id映射+embeding

e(d1)...e(dn):用户个人介绍(比如个性签名)的分词+id映射+embeding

User Numeric Feature:用户的一些属性,包括连续型属性(Age,Birthday)和离散型属性(Gender, City,Province),连续型属性直接拼接作为连续型向量,离散型属性分别转为onehot,再把多个onehot拼接作为离散型向量,最后连续型向量和离散型向量拼接起来 ,其中某个属性的onehot的转换方式,比如求某人的City是6,提前定义一个city的范围,如47,则该样本的 City 的onehot长47,第6个元素是1,其他位置是0

Encoder LSTM使用双向LSTM,输出所有单词的向量

Attentive Read:使用注意力机制(比如BahdanauAttention)输出一个句子向量

Embedding:1个全连接层做降维

LSTMdec:用于解码,使用单向LSTM网络,当前时间步 t 的输入= 上一个时间步的输出   拼接  ctX   拼接 ctD  拼接 Mto,当前时间步的输出可以映射为字典向量再通过sof得到当前时间步预测的词(我认为这个就可以了,但是作者没有这么做,而是加了个External Personality Expression)

Gated Memory Module:当时间的推进( t 的增大),Vu应该逐渐减弱,即当一句话开始生成时,Vu的很重要,然而随着单词的不断生成,Vu的重要性逐渐下降,所以 t 时刻的用户数字特征为Mt,而初始时刻的M0就是Vu:

 

 其中 st 是LSTMdec 在 t 时刻的状态(比如 t 时刻的 c和h 拼接),gut每个元素的范围在0-1,用于弱化上一个时间步的用户数字特征 Mt ,此处是元素积

t 时刻需要有选择的吸收用户数字特征,所以定义带注意力的用户数字特征Mto,用权重向量gto元素积和它做元素积,gto是将LSTMdec前一个时刻的状态,前一个时刻的输出,当前时刻的ctX拼接再映射,再sigmoid:

 

External Personality Expression:对LSTMdec的yt做进一步包装,强化了用户对评论的重要性(我感觉没必要多这个模块),当前时刻 t 的预测输出单词是:

 

 模型的整体损失就是yt的交叉熵损失

 2、给个标题,文章内容,生成不同主题(有多少主题是学出来的)对应的评论

 

 整体由 vae(左边)+注意力机制的 rnn(右边)构成

训练阶段:右边由 rnn 的解码器生成1个个的评论词,编码器的词 xi 的权重由两部分决定:门和注意力权重,门决定这个词的重要性(与标题相关性),通过把标题embedding和该词embedding拼接再映射来实现的。左边的vae主要作用是将评论映射为z向量,然后把z向量映射到不同主题,得到1个分布,左边的RNN编码器向量也映射到不同主题,利用KL散度将2个分布变一致,这样rnn编码器就知道一则新闻的所有评论可能涉及到哪些主题。

预测阶段:去掉VAE,由RNN编码器算出可能会涉及到哪些主题,然后分别用这些主题生成对应的评论。

3、Graph2text1

 

 输入标题title和知识,输出文本,title是基于双向rnn编码得到标题向量(绿色),知识是将知识图谱(由实体关系对构成,如药物a-用于-疾病b)组织成图的形式,组织方式:

 

 若节点v1有关系r12指向v2,则关系r12变成关系节点r12和逆向关系节点r21(比如used_for_inv),v1指向r12指向v2,v2指向r21指向v1。再新建1个全局节点指向所有的实体节点v1,v2…

节点向量v:节点短语单词们通过双向rnn,然后通过Graph Transformer,该结构中先由注意力机制聚合周围节点信息:

 

 针对vi,与它相连的邻居节点先线性映射再按权相加,同时采用N个head机制来拼接向量,计算vi对vj的注意力权重a时,每个节点通过线性映射放大后再切割就有了自己的qkv向量,然后qi和kj的相关系数结果除以qi和所有邻居节点的相关系数和,然后通过ln和ffn:

 

 解码器:单向rnn结构,用图的全局节点向量初始化,在生成第 t 步的词时,重点考虑了标题和知识,用ct和上一个隐状态输出ht来生成词,ct是知识向量cg和标题向量cs拼接而成的,cg是之前算好的图节点向量先映射再加权求和,再加ht的结果,依然基于多头机制:

 

 ct和cg的计算方式一样,只是把图节点向量换成了标题单词向量

词汇表的每个单词都有两个概率,最后按权相加得到最终概率,第一个概率是 ht拼ct 映射到字典长度+softmax,第二个概率是 :如果是知识或者标题单词,则概率是 a(ht 拼 ct,之前算好的词向量xj) ,如果是其他词,概率是 0。第1个概率的权重是 1-第2个权重,第2个概率的权重是 将 ht 拼 ct 映射+sigmoid,即:

 

 生成的词会继续把该词向量wt输给下个时间步的rnn

4、Graph2text2

输入由知识构成的KG,KG由实体和关系构成,再将KG转为图(与上面不同),由于实体有多个词,将实体拆分形成新的图G1,这个新图G1中,如果原来实体A指向实体B,则此时实体A的所有词分别指向B的所有词,1个词是1个节点,节点向量初始化为 token向量+该token在实体中的位置向量。进行L层的GNN迭代:比如第1层的节点v1,先通过v1的周围的0层节点向量以及边向量 通过聚合函数 算出v1的上下文向量,然后通过结合函数 将上下文向量和v1的第0层向量结合作为v1的第1层向量。

此处有2个GNN(Global Graph Encoder,Local Graph Encoder),分别用于计算节点的全局向量和局部向量。

Global Graph Encoder:针对节点v向量,采用Transformer + GAT结构:

先利用注意力机制算出上下文向量:所有节点向量先映射再按权相加,权重是v向量对于该向量的注意力权重:

 

再通过ln和ffn:

 

 

 Local Graph Encoder:针对节点v向量,采用 改进的GAT结构:

先利用注意力机制计算局部上下文向量:与v相邻的所有节点和v先映射再按权相加,映射矩阵Wr是对两者关系边的编码,计算evu时,两个向量分别映射(通过W)再拼接再映射(通过a):

 

 

 该上下文向量与原来的v向量再共同通过rnn:

 

 由于这2个GNN都是有多层的,需要将两者结合,作者提出了4个方案:PGE、CGE、PGE-LW、CGE-LW

PGE:

Global Graph Encoder 和 Local Graph Encoder 各自独立算,比如对于节点v,从初始向量到 Nx 层 的 Global Graph Encoder 得到最终全局向量,从初始向量到 Mx 层 的 Local Graph Encoder 得到最终局部向量,然后 最终全局向量 和 最终局部向量 拼接作为 v的最终向量

CGE:

 

先通过 Global Graph Encoder ,输出的全局向量作为 Local Graph Encoder 的初始向量

PGE-LW:

 

 共Nx 层, 对于第 l 层,l-1层向量分别通过 Global Graph Encoder 的第 l 层 和 Local Graph Encoder 的第 l 层 然后拼接 作为第 l 层的向量

CGE-LW(效果最好):

 

 

 共Nx 层, 对于第 l 层,l-1层向量先通过 Global Graph Encoder 的第 l 层 得到第 l 层的全局向量,这个全局向量再输入到 Local Graph Encoder 的第 l 层 得到第 l 层的向量

基于Transformer decoder 进行解码,前面的所有图节点的向量映射一倍再切割成2份,作为节点自己的 k 和 v 向量,一个一个词输入到decoder中,算出来的k,v保留,对所有节点和 decoder  之前生成的 token 实现注意力机制,输出下一个 token 可能是什么。

 5、title&body2comment

 

B是新闻体,第 k 个单词的向量由token向量、位置1向量、位置2向量 拼接再映射,位置1是该单词在所在句子中的位置,位置2是所在句子的开头在整个新闻体中的位置,最后形成e~B,k

T是标题,通过GRU生成每个标题单词的词向量

新闻体单词e~B,k 需要和所有加权后的新闻体单词向量cB,k 拼接再映射 得到hB,k,权重是e~B,k对新闻体单词的注意力系数:

 

 fusion layer将body和title融合,针对 Body 第k个单词向量,对标题所有单词向量按权求和,求和方式和前面公式一样,得到cT,k,再通过gate得到标题的重要信息,最后再相加:

 

 Body最后要输出一些重要的短语,每个单词先输出自己可以作为短语起始单词的概率(向量映射到1维度+sigmoid),设定1个阈值之后就知道哪些单词会作为起始单词了,如果第ak个单词能作为起始单词,就需要找它对应的尾部单词是谁,以便组成1个短语

和第j个单词组成短语的概率是αak,j,下面公式中,c0是所有v向量按权求和,权重是h0向量对齐的注意力系数:

 解码:基于GRU,在第t步输入第t-1步的隐向量ht-1,和另一个向量————t-1时刻预测的token向量 拼接 cT,t-1 拼接 cS,t-1 ,其中 cT,t-1:标题所有的单词向量加权求和,权重是标题ht-1 对单词的注意力系数,公式如前;cS,t-1:所有预测的重点短语的所有单词(比如短语1:hello world,短语2:big city,变为4个词汇hello world big city)的向量加权求和,权重是标题ht-1 对单词的注意力系数,公式如前

第t个词汇的预测:ht 拼接 cT,t 拼接 cS,t 再映射到词典+softmax

gru的初始状态h0是对所有短语的所有单词向量和标题的所有单词向量的加权求和,权重是一个可训练向量对其注意力系数,公式如前

posted @ 2023-01-03 17:16  Jary霸  阅读(38)  评论(0编辑  收藏  举报