[0066] 附图非限制性的公开了本发明所涉及优选实施例的流程示意图;以下将结合附图详细的说明本发明的技术方案。
[0067] 步骤(1)具体实现如下:使用glove.840B.300d的词向量文件把SARC数据集中的网络评论和上下文进行词向量嵌入,获得一个维度为300维的词向量矩阵;
[0068] 步骤(2)具体实现如下:
[0069] 将步骤(1)中获得的上下文的文本特征和网络评论的文本特征输入到Transformer中获得上下文的隐藏层特征和网络评论的隐藏层特征,Transformer模型序列化传导模型不同于传统的模型(LSTM或GRU),它可以获得有效地获取长文本的上下文相关的文本特征,它原理如下具体实现如下:
[0070] 大部分神经序列转导模型都有一个编码器-解码器结构。这里,编码器映射一个用符号表示的输入序列x1,…,xn到一个连续的表示z=(z1,…,zn)。根据z,解码器生成符号的一个输出序列(y1,…,ym),一次一个元素。在每一步中,模型都是自回归的,当生成下一个时,消耗先前生成的符号作为附加输入。
[0071] Transformer模型中编码器和解码器都使用self-attention堆叠和point-wise、完全连接的层。Attention函数可以描述为将query和一组key-value对映射到输出,其中query、key、value和输出都是向量。输出为value的加权和,其中分配给每个value的权重通过query与相应key的兼容函数来计算。
[0072] 这里的attention为“缩放版的点积attention”。输入由query、dk维的key和dv维的value组成。我们计算query和所有key的点积、用 相除,然后应用一个SoftMax函数以获得值的权重。在实践中,我们同时计算一组query的attention函数,并将它们组合成一个矩阵Q。key和value也一起打包成矩阵K和V。计算输出矩阵为:
[0073]
[0074] 多头注意力机制允许模型的不同表示子空间联合关注不同位置的信息。如果只有一个注意力头部,它的平均值会削弱这个信息。
[0075] MultiHead(Q,K,V)=Concat(head1,…,headn)WO#(24)
[0076] 其中 WO是可训练的参数。
[0077] 除了attention子层之外,编码器和解码器中的每个层都包含一个完全连接的前馈网络,该前馈网络单独且相同地应用于每个位置。它由两个线性变换组成,之间有一个ReLU激活。
[0078] FFN(x)=max(0,xW1+b1)W2+b2#(25)
[0079] 其中,x是输入,W1,W2是可训练的权重参数,b1,b2是可训练的偏置参数。
[0080] 由于Transformer不包含循环和卷积,为了让模型利用序列的顺序,模型必须注入序列中关于词符相对或者绝对位置的一些信息。为此,模型将“位置编码”添加到编码器和解码器堆栈底部的输入嵌入中。位置编码和嵌入的维度dmodel相同,所以它们俩可以相加。有多种位置编码可以选择,例如通过学习得到的位置编码和固定的位置编码。在这项工作中,模型使用不同频率的正弦和余弦函数:
[0081]
[0082]
[0083] 其中pos是位置,i是维度,dmodel表示模型的维度。
[0084] 在步骤(3)中,将步骤(2)获得的网络评论的隐藏层特征,使用CNN进行特征提取,然后通过Max-Pooling获得网络评论的池化特征。
[0085] 在步骤(4)中,使用步骤(3)中获得的网络评论的池化特征,对上下文的隐藏层特征进行权重偏移。具体来说,我们使用了缩放点积的注意力机制,将注意力机制描述为将query和key映射到单词级别的权重上。
[0086] query包括上下文的隐藏层特征的平均向量,以及网络评论的池化特征的平均向量,通过可训练的参数转化为dk维:
[0087]
[0088]
[0089] key包括上下文的隐藏层特征和网络评论的池化特征,通过可训练的参数转化为dk维:
[0090]
[0091]
[0092] 其中, 是上下文的隐藏层特征, 是网络评论的池化特征,它们的向量维度都是2dl; 的向量维度是2dl*dk。
[0093] 网络评论到上下文的交互注意力权重可以计算如下:
[0094]
[0095]
[0096] 为了确保 的每个维度之间的参数差距比较大,我们引入 作为比例因子。
[0097] 在步骤(5)中,使用SenticNet获得网络评论中每个单词对应的情感权重,然后使用注意力机制把网络评论的情感权重与步骤(2)中获得的网络评论的隐藏层特征进行权重偏移,获得新的隐藏层特征Ⅱ。
[0098] 在步骤(6)中,把步骤(4)和步骤(5)的输出的隐藏层特征Ⅰ和隐藏层特征Ⅱ作为输入,创建低层次的语义胶囊。低层次的语义胶囊i包含激活概率和高层次输出两个部分。
[0099] 在步骤(7)中,为了获得高层次的语义胶囊j,我们对低层次的语义胶囊i进行EM路由,它的具体过程实现如下:
[0100] 首先,我们利用公式(13)、公式(14)和公式(15)计算出低层次语义胶囊i到高层次语义胶囊j的均值和方差:
[0101] Voteij=GiWij#(13)
[0102]
[0103]
[0104] 其中,权重矩阵Wij是可训练的参数;Gi表示低层次的语义胶囊i的高层次输出,它是可训练的参数,它的初始值是低层次语义胶囊的输入;Rij表示低层次的语义胶囊i到高层次的语义胶囊j的分配概率; 表示低层次语义胶囊i到高层次的语义胶囊j的输出d维的均值; 表示低层次语义胶囊i到高层次的语义胶囊j的d维的方差。
[0105] 我们根据6-1计算出的低层次的语义胶囊i到高层次的语义胶囊j的均值和方差来计算分配概率。低层次的语义胶囊i到高层次的语义胶囊j的概率密度如公式(16)所示:
[0106]
[0107] 其次,低层次的语义胶囊i到高层次的语义胶囊j的分配概率如公式(17):
[0108]
[0109] 最后,根据分配概率来更新低层次语义胶囊j的高层次输出。
[0110] 根据低层次语义胶囊i到高层次的语义胶囊j的均值和方差,我们使用公式(17)和公式(18)来计算低层次语义胶囊i到高层次语义胶囊j的激活概率:
[0111]
[0112]
[0113] 其中,βu和βv都是可训练的参数;λ是一个固定值,被设置为1e-3;aj是低层次语义胶囊i到高层次的语义胶囊j的激活概率。
[0114] 因此,整个EM路由算法步骤可以总结为:
[0115] 1:设置低层次的语义胶囊i到高层次的语义胶囊j的分配概率的初始值为:J表示高层次的语义胶囊j的数量;
[0116] 2:计算上下文的低层次的语义胶囊i的激活概率为: 其中ai中的i表示低层次语义胶囊i, 中的i表示网络评论中的单词;
[0117] 3:计算网络评论的低层次的语义胶囊i的激活概率为: 这里i的含义与步骤2一致;
[0118] 4:重复进行r次迭代:
[0119]
[0120] 其中,M步骤的具体流程如下:
[0121] 1:根据低层次语义胶囊i到高层次语义胶囊j的激活概率,来更新低层次的语义胶囊i到高层次的语义胶囊j的分配概率:R'ij=Rij*ai,其中i和j分别表示低层次语义胶囊和高层次语义胶囊。
[0122] 2:根据公式(13)、(14)和(15)计算均值μj和方差σj;
[0123] 3:根据公式(18)和(19)计算激活概率aj。
[0124] E步骤的流程如下:
[0125] 1:根据公式(16)和(17)计算高层次语义胶囊j的概率密度pj,然后根据pj来低层次的语义胶囊i到高层次的语义胶囊j的分配概率Rij。
[0126] 在步骤(8)中,把高层次的语义胶囊j通过SoftMax函数输出最后的分类结果。