本文参考的是两篇论文(Fernández-Gavilanes et al., 2016; Cruz et al., 2011)以及PageRank算法(Page et al., 1998)

对了宝贝儿们,卑微小李的公众号【野指针小李】已开通,期待与你一起探讨学术哟~摸摸大!


目录

  • 1 PolarityRank算法原理
  • 1.1 图的生成
  • 1.2 情感传播
  • 1.2.1 公式说明
  • 1.3 矩阵运算
  • 1.4 收敛性证明
  • 2 总结
  • 3 参考


1 PolarityRank算法原理

由于PolarityRank算法是基于PageRank算法的,如果对PageRank算法不熟的同学可以参考我的上一篇文章:情感分析学习笔记(4)——PageRank原理与python代码实现。

PolarityRank算法是一个情感计算的方法,其思想大体上就是每个词语带有两个情感值paddlenlp情感分析阈值 情感分析算法原理_PageRankpaddlenlp情感分析阈值 情感分析算法原理_算法_02,这些词语通过某种方式构成了一张图,在图中通过PangRank式的传播(即通过节点之间的相关性计算),将情感传播至不同的节点。

在本节我会综合讲解两篇论文提到的内容,在下一节讲代码的时候我会讲我的方法,与这两个论文的方法有些许区别。

1.1 图的生成

根据上面的介绍,我们会发现需要一张有向图,Fernández-Gavilanes et al.提出,图是来源于句法树的,他们先对一句话进行POS,得到一颗句法树,其中图的节点及句法树中所有的名词、形容词、动词。

边的生成是依据节点之间的依赖关系,每个节点会与其所有的后代节点相连,但是为了使整棵树的左右都有边相连(因为情感传播不是针对于某棵子树),所以每个节点还会与自己的兄弟节点相连。作者考虑到系动词不带有任何情感极性,所以作者剔除了系动词,同时将系动词的孩子节点向上提一级。

1.2 情感传播

Cruz et al. 设有向图为paddlenlp情感分析阈值 情感分析算法原理_线性代数_03,其中paddlenlp情感分析阈值 情感分析算法原理_PageRank_04是顶点集,paddlenlp情感分析阈值 情感分析算法原理_线性代数_05是边集。每条边有个实数非零值作为权重paddlenlp情感分析阈值 情感分析算法原理_PageRank_06,即从顶点paddlenlp情感分析阈值 情感分析算法原理_PageRank_07paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_08的权重。paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_09指的是节点paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_08的所有出边,paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_11是节点paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_08的所有带正权重的入边,paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_13同理。作者还设定了paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_14paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_15,如果节点paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_08是种子节点(seed node,就是指的情感基准词),那么paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_14paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_15不为0,否则为0。这两个值对应的是PageRank算法中的paddlenlp情感分析阈值 情感分析算法原理_线性代数_19中的paddlenlp情感分析阈值 情感分析算法原理_线性代数_20,指的是节点paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_08有这么多的概率接收到来自种子词的情感。

由以上定义,得出PolarityRank的paddlenlp情感分析阈值 情感分析算法原理_PageRank_22值计算公式:
paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_23

paddlenlp情感分析阈值 情感分析算法原理_PageRank_24

情感计算归一化公式:
paddlenlp情感分析阈值 情感分析算法原理_PageRank_25

1.2.1 公式说明

这部分我罗列几个我看这个公式遇到的一些问题

a) 关于paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_26这个含义的说明:

这里先给大家上个图,就借用Fernández-Gavilanes et al. 老哥们的图一用:

paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_27


我们假设paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_08paddlenlp情感分析阈值 情感分析算法原理_算法_29,那么paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_09就有paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_31,即paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_32

我们继续假设paddlenlp情感分析阈值 情感分析算法原理_PageRank_07paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_34,那么paddlenlp情感分析阈值 情感分析算法原理_线性代数_35就有paddlenlp情感分析阈值 情感分析算法原理_线性代数_36,即paddlenlp情感分析阈值 情感分析算法原理_算法_37

我们借用上图的权重都为paddlenlp情感分析阈值 情感分析算法原理_算法_38,那么paddlenlp情感分析阈值 情感分析算法原理_线性代数_39,最终得到的值为paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_40,这个的意思就是说paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_34在每一轮迭代中有paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_40的概率将情感传递到paddlenlp情感分析阈值 情感分析算法原理_算法_29中。

类比到PageRank中,就是对应的浏览paddlenlp情感分析阈值 情感分析算法原理_PageRank_44网页的时候有多少概率跳转到paddlenlp情感分析阈值 情感分析算法原理_PageRank_45网页。

b) 为什么paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_46,但是后面跟的paddlenlp情感分析阈值 情感分析算法原理_线性代数_47值不仅有paddlenlp情感分析阈值 情感分析算法原理_算法_48也有paddlenlp情感分析阈值 情感分析算法原理_PageRank_49

这是我纠结了最久的一个问题,后来发现原文中有一句话:

According to this arithmetic, and similarly to what happened in PageRank, the positive relevance of a node paddlenlp情感分析阈值 情感分析算法原理_算法_50 is increased proportionally to the positive relevance of the nodes connected to paddlenlp情感分析阈值 情感分析算法原理_算法_50 by edges of positive weights. But also, the positive relevance of paddlenlp情感分析阈值 情感分析算法原理_算法_50 is increased in proportion to the negative relevance of those nodes connected to paddlenlp情感分析阈值 情感分析算法原理_算法_50

这句话的意思我大体简略的翻译一下,就是说,无论算的是节点paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_54paddlenlp情感分析阈值 情感分析算法原理_PageRank或者paddlenlp情感分析阈值 情感分析算法原理_算法_02,但凡边权为positive,都对这个节点的paddlenlp情感分析阈值 情感分析算法原理_PageRankpaddlenlp情感分析阈值 情感分析算法原理_算法_02带来增加,如果边权为negative,那么对节点的paddlenlp情感分析阈值 情感分析算法原理_PageRankpaddlenlp情感分析阈值 情感分析算法原理_算法_02都带来减少。

c) paddlenlp情感分析阈值 情感分析算法原理_PageRank_49究竟是正的还是负的?

这个问题我也纠结的有点久,后来发现情感计算的公式是个归一化的过程,那么我们假设paddlenlp情感分析阈值 情感分析算法原理_算法_02是负的,那么paddlenlp情感分析阈值 情感分析算法原理_线性代数_63就会是一个很大的值,而paddlenlp情感分析阈值 情感分析算法原理_PageRank_64有可能是个很小的值,不满足归一化,所以paddlenlp情感分析阈值 情感分析算法原理_算法_02也是个正的值。

1.3 矩阵运算

当数据量过大后,使用for循环是一个很浪费性能的做法,所以需要转变为矩阵运算,Cruz et al. 为了凑页数,把矩阵运算都推导了一遍,我这里就copy paste一下:

首先定义矩阵paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_66,里面存储的是边权paddlenlp情感分析阈值 情感分析算法原理_PageRank_67,定义paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_68,即矩阵paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_66paddlenlp情感分析阈值 情感分析算法原理_PageRank_45行的所有值之和。

当有了该矩阵后,作者对其进行了转置,定义paddlenlp情感分析阈值 情感分析算法原理_线性代数_71,这一步的作用主要在于使得paddlenlp情感分析阈值 情感分析算法原理_算法_72,保证了最终达到收敛,收敛证明下面再讲。转置后,第paddlenlp情感分析阈值 情感分析算法原理_PageRank_45行的边权总和变为了第paddlenlp情感分析阈值 情感分析算法原理_PageRank_45列的边权总和,即paddlenlp情感分析阈值 情感分析算法原理_PageRank_75,且paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_76

但是由于边权有正负之分,所以作者将paddlenlp情感分析阈值 情感分析算法原理_算法_77拆开为paddlenlp情感分析阈值 情感分析算法原理_线性代数_78paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_79。其中:

paddlenlp情感分析阈值 情感分析算法原理_算法_80

paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_81

拆分后,paddlenlp情感分析阈值 情感分析算法原理_PageRank_82就变为了第paddlenlp情感分析阈值 情感分析算法原理_PageRank_45paddlenlp情感分析阈值 情感分析算法原理_算法_84paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_85的项之和。

根据以上几步,作者将上面的公式变为了如下这样:
paddlenlp情感分析阈值 情感分析算法原理_线性代数_86

paddlenlp情感分析阈值 情感分析算法原理_PageRank_87

这里有个小细节要注意,上面的公式是paddlenlp情感分析阈值 情感分析算法原理_算法_88,这下面是paddlenlp情感分析阈值 情感分析算法原理_线性代数_89,说明是已经发生了转置的。

作者又定义了两个矩阵paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_90paddlenlp情感分析阈值 情感分析算法原理_算法_91paddlenlp情感分析阈值 情感分析算法原理_线性代数_92,我们可以发现,这个paddlenlp情感分析阈值 情感分析算法原理_算法_93就是归一化后的权重。于是将原有公式改变为:
paddlenlp情感分析阈值 情感分析算法原理_PageRank_94

paddlenlp情感分析阈值 情感分析算法原理_线性代数_95

当有了上面这一坨之后,作者就开始操作了,首先定义paddlenlp情感分析阈值 情感分析算法原理_算法_96,这里paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_54是词的数量,定义paddlenlp情感分析阈值 情感分析算法原理_PageRank_98的向量paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_99
paddlenlp情感分析阈值 情感分析算法原理_PageRank_100

定义paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_101的向量paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_102
paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_103

定义paddlenlp情感分析阈值 情感分析算法原理_算法_104的矩阵paddlenlp情感分析阈值 情感分析算法原理_算法_105
paddlenlp情感分析阈值 情感分析算法原理_PageRank_106

于是上面的公式可以直接改为:
paddlenlp情感分析阈值 情感分析算法原理_算法_107

这里作者专门说明了一下两个式子:
paddlenlp情感分析阈值 情感分析算法原理_PageRank_108

所以我这里也要专门说明下这个式子,最开始没发现多么重要,后来敲代码一直有问题才发现这个公式很重要,先上个图:

paddlenlp情感分析阈值 情感分析算法原理_线性代数_109


我们把矩阵A扩展开是如上图的,结合上面的公式,我们会发现paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_110,就是说如果只看矩阵左上块的第一列的和,即paddlenlp情感分析阈值 情感分析算法原理_线性代数_111,不只是第一列,每一列如果只看一半,和都为0.5,只有看每一列的全部,再求和才为1。这里就是之前说的,为了保证paddlenlp情感分析阈值 情感分析算法原理_PageRank_112

对于paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_14paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_15的计算方法如下:paddlenlp情感分析阈值 情感分析算法原理_算法_115。由此可得两点:

  1. paddlenlp情感分析阈值 情感分析算法原理_线性代数_116paddlenlp情感分析阈值 情感分析算法原理_算法_117都是正值;
  2. paddlenlp情感分析阈值 情感分析算法原理_线性代数_118

作者接下来的操作有点骚,作者的目标是:提取出PR向量paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_119,使得矩阵与矩阵进行求和运算,运算完了之后再与向量做乘(我估计这样是方便计算机运算)。

为了达到这一目标,那么就需要将paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_120给变为矩阵,改变步骤如下:

  1. paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_121是标量,可以不考虑;
  2. paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_119给归一化到paddlenlp情感分析阈值 情感分析算法原理_PageRank_123区间内,即paddlenlp情感分析阈值 情感分析算法原理_线性代数_124,那么给定一个大小为paddlenlp情感分析阈值 情感分析算法原理_线性代数_125的单位列向量paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_126,那么paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_127
  3. 由于多乘了一个paddlenlp情感分析阈值 情感分析算法原理_线性代数_125,就需要除以一个paddlenlp情感分析阈值 情感分析算法原理_线性代数_125,即paddlenlp情感分析阈值 情感分析算法原理_PageRank_130
  4. 组合2、3步,变为:paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_131,由于之前推导的过程,就会发现值其实并没有改变,但是paddlenlp情感分析阈值 情感分析算法原理_算法_132就变成了一个paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_133的矩阵。

所以由上的推导,定义矩阵paddlenlp情感分析阈值 情感分析算法原理_PageRank_134
paddlenlp情感分析阈值 情感分析算法原理_线性代数_135

由此公式就可以变为如下情况:
paddlenlp情感分析阈值 情感分析算法原理_PageRank_136

作者令paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_137,那么公式就变为:

paddlenlp情感分析阈值 情感分析算法原理_算法_138

由于paddlenlp情感分析阈值 情感分析算法原理_算法_139是两个系数为正且和为1的矩阵的线性组合,所以paddlenlp情感分析阈值 情感分析算法原理_算法_139是一个随机矩阵(stochastic matrix)。由此可以根据Perron-Frobenius理论得出公式paddlenlp情感分析阈值 情感分析算法原理_线性代数_141有特征值为1,而其余特征值都小于1。

这里这个随机矩阵与Perron-Frobenius理论我查了些资料,发现还是不清楚是什么意思,我大致猜想了一下就是随机矩阵满足Perron-Frobenius理论,而Perron-Frobenius理论得出,当随机矩阵迭代(paddlenlp情感分析阈值 情感分析算法原理_算法_142)趋于无穷次的时候,矩阵的值可以由特征值和特征向量直接解出来。
当然这个不一定是正确的,因为那些文章里面的公式我看得头皮发麻,我会把我参考的链接放出来,如果有问题,望大佬们纠正或者补充。

1.4 收敛性证明

由PageRank算法可以得出,最终需要满足收敛,所以作者们通过数学上的内容证明了PolarityRank算法是收敛的,证明过程如下:

由于这是一个迭代的过程,所以作者用paddlenlp情感分析阈值 情感分析算法原理_算法_143表示第paddlenlp情感分析阈值 情感分析算法原理_paddlenlp情感分析阈值_144次迭代的结果。于是将上面的公式转换为:

paddlenlp情感分析阈值 情感分析算法原理_算法_145

paddlenlp情感分析阈值 情感分析算法原理_线性代数_146

将上面两个公式相减,可得:
paddlenlp情感分析阈值 情感分析算法原理_算法_147

对于矩阵paddlenlp情感分析阈值 情感分析算法原理_算法_105,取第一范数,即:
paddlenlp情感分析阈值 情感分析算法原理_线性代数_149

由上面提到的,paddlenlp情感分析阈值 情感分析算法原理_算法_150,同时paddlenlp情感分析阈值 情感分析算法原理_PolarityRank_151,所以paddlenlp情感分析阈值 情感分析算法原理_算法_152

2 总结

大家能够看到这里也不容易哈,上面7000+字以及花里胡哨的公式推导。本来说放代码的,但是为了方便大家对比公式,所以代码我重新写一篇文章来放上去。

本篇文章主要讲解了PolarityRank算法,这是一个基于PageRank的算法,其主要实现是需要将情感词(或者其他带有情感的东西)构成一个有向图,给每个节点分配两个值paddlenlp情感分析阈值 情感分析算法原理_PageRank_153,给每条边分配两个权重paddlenlp情感分析阈值 情感分析算法原理_PageRank_154,其他的传播过程类似于PageRank。