社交、直播、论坛、电商等各类平台每天都会产生海量UGC(User Generated Content),其中不可避免地混杂有大量垃圾文本。这些内容不但严重影响用户体验,而且还可能发生违规的运营风险。面对这些迫切需要,达观数据提供了垃圾信息过滤服务,精准定位并剔除不良信息。
通常垃圾信息过滤的问题可以看作分类问题,即判断一个评论是属于正常评论这个分类,还是属于垃圾信息这个分类。
文本分类的研究已经经历了很长时间的发展,传统的垃圾信息过滤方法一般是监督的,但是为了确保分类器有良好的泛化能力,这些方法的使用都必须以存在大量标注语料作为前提条件。
而在垃圾信息过滤的场景下,标注工作是一件极为困难的事情,达观的审核系统在开发阶段初期就面临标注样本不足的挑战。
一方面,用户活跃的平台每天都能产生大量新的评论,而且垃圾信息所占的比重会很高,标注成本非常高;另一方面,垃圾信息发布用户会想方设法把自己“隐藏”在其他正常评论中,只凭语义信息可能难以确定是否垃圾信息。
为了克服标注样本不足的难题,垃圾信息过滤可以引入半监督学习方法来增强信息处理的能力。半监督学习方法的优势是能够在只有少量标注数据的条件下,综合利用已标注数据和未标注数据的信息,达到较好的过滤效果。
达观的文本挖掘系统在多个模块里面都使用到了半监督学习的方法,主要方式是通过外部知识来对训练样本进行语义扩展,然后结合数量较多的未标注样本选取预测置信度高的子集作为新样本加入训练集进行模型训练。
下面我介绍一下最近阅读过的采用半监督学习来进行垃圾信息过滤的两篇论文:NetSpam和SPEAGLE。
1
NetSpam: a Network-based Spam Detection Framework for Reviews in Online Social Media
论文链接:
http://ieeexplore.ieee.org/document/7865975/
NetSpam论文的基本思想是使用了异构信息网络方法来对用户评论进行建模,比较新颖的是在文本分类过程,利用到了异构网络中不同的边类型的信息来提升分类效果。另外,使用了无监督的方法能够在没有标注样本的情况下,根据评论数据的统计信息,获得各种特征对应的重要性。
1.1
特征类型
这篇文章提到了问题解决使用到的几方面特征,主要是从基于用户/评论和行为/语言特征两个维度去刻画,具体特征示例参考表格 1:
表格 1 NetSpam特征类型
1.2
异构信息网络
首先展示异构信息网络(Heterogeneous Information Network,HIN)定义,信息网络可以用一个有向图G = (V, E)来表示,其中V代表节点,E代表边。并且用映射函数 ϕ:V→A 来表示每一个节点 v∈V 属于节点类型集合A: ϕ(v)∈A,用映射函数ψ:E→R.表示每条边 e∈E 属于边的类型集合R:ψ(e)∈R。而在异构信息网络里面,节点和边有多重类型,每个节点或者每个边都有固定的类型,一个异构信息网络如图1。
图 1 异构信息网络
元路径P是定义在网络模式TG = (A, R)上的,如
表示了从A1 到Al1的复杂的关系,
元路径P的长度即为关系R的个数。不同元路径代表着不同的物理意义,元路径所所蕴含的丰富的语义特征,是HIN的一大非常重要的特征。
异构信息网络上分类问题的形式化定义是:对于网络G = (V, E),V’是V中需要进行分类的目标节点子集。目标节点的分类信息包含C1…Ck。C在该场景里,我们在V’中已经有部分已标注的节点,分类任务的目标就是预测V’中所有未标注的节点。
1.3
算法模型
首先计算先验概率,设定评论u的初始概率记作为yu。模型方案包括了半监督学习和无监督学习两种。在半监督学习方案中,初始概率yu定义为:
在无监督学习方案中,初始概率yu定义为:
其中表示f(x_{lu}) 评论u在特征l上的概率,L是所使用特征的总数。
异构网络网络架构的元素基于多个特征生成:负面比率(NR),平均内容相似度(ACS),第一人称数目(1PP)和早期时帧(ETF)等,见图2。
图 2 网络架构
基于该网络架构形成的评论到评论的元路径可表示为表格 2。
表格2 元路径列表
给定了元路径的设定后,论文扩展了异构网络的定义,在元路径上具有相同的值的两个评论是相互连通的。给定评论u,u在元路径pl上的值的计算方式为
其中s表示指定的元路径对垃圾评论相关的确定性的级别。如果对于两个评论u和v,如果满足
那么在评论网络中就把这两个评论连通起来。
1.4
分类过程
NetSpam的分类过程包括两个步骤:计算每个特征的影响权重;计算每条评论的最终概率并且进行标记垃圾/非垃圾信息。
NetSpam认为节点的分类是基于评论网络中该节点与其他节点的关系完成的,关联的两个节点会有较高的概率带有同样的标签。在此过程中,元路径的权重会帮助我们去理解评论网络中各种影响因子的重要性,合理设计权重的计算方式对分类效果有直接影响。该论文提出元路径权重的计算方式为:
标记过程就比较简单,假设Pru,v是和垃圾评论v有连通关系的未标注评论u可能是垃圾评论的概率,它的计算方式为:
而评论u最终为垃圾评论的概率Pr_{u}计算方式为:
图3展示了对构建的异构信息网络进行分类处理的计算过程:
图 3 NetSpam分类处理流程
1.5
小结
基于异构信息网络对用户评论进行建模,从全局上充分地收集了评论和用户,评论和评论,用户和用户之间的多元关系信息,在行为和语言特征两个维度上进行评估,能在不依赖于专家知识的基础上,自动地学习到用户和评论的分类属性,具有较强的鲁棒性。
2
Collective Opinion Spam Detection: Bridging Review Networks and Metadata
论文链接:
http://dl.acm.org/citation.cfm?id=2783370
SpEagle论文认为垃圾信息过滤需要充分用到包括文本、时间戳和评分在内的元数据和评论网络,并且需要将这它们融合到一个体系内。如图4所示,SpEagle利用了元数据、评论网络以及评论标签的信息,完成了识别出垃圾内容发布者、虚假评论和虚假内容目标商品三者的任务,分类过程是通过评论-产品和评论-用户的关系构建马尔科夫随机场模型实现。
图4 SPEAGLE系统框架
2.1
特征类型
SPEAGLE用到的特征和NetSpam论文相似,如表格 3和表格 4(其中第三列的H/L表示和垃圾内容的关联度是高/低):
表格3 SPEAGLE用户&商品特征类型
表格4 SPEAGLE评论特征
2.2
模型定义
利用评论-产品和评论-用户的关系,构建出了一个二分图G=(V,E),节点集合V=U\cup P\cup R ,包括了评论、用户和产品三种类型的节点。在该二分图上进行分类的目的是对每一个节点都分配一个标签,评论类型节点标签的值域LR={真实,虚假},用户类型节点标签的值域LU={正常用户,垃圾内容发布用户},产品类型节点标签的值域LP={垃圾内容目标产品,非目标产品}。
该分类问题可以形式化转化为成对马尔科夫随机场模型(MRF)。MRF模型包含了一个无向图,无向图的每个节点都和一个随机变量Yi关联,作为它的状态(状态数目有限)。而在成对MRF中,一个节点的标签可看做只依赖它的邻居和与图中其他所有节点独立。
标签的联合概率可以写作:
其中y表示对所有节点的一种标签标注方法,yi是节点分配的标签,Z是一个标准化常量。独立因子\phi : L \rightarrow \mathbb{R}^{+}
是节点的势函数,表示每个节点的初始分类概率,\phi : L_{u}\times L_{p} \rightarrow \mathbb{R}^{+} 是边的势函数,表示带有标签yi的节点通过边s连通到带有标签yj的节点的概率。
SPEAGLE算法面向两种类型的边的通用势函数\psi ^{t} 为:
从上可看出,我们假定了垃圾内容发布用户的评论都是虚假的,正常用户发布的评论都是真实的;不过虚假的评论也有可能是一个非目标产品,真实评论也可能和虚假评论在目标产品中共存。
节点的先验势函数通过SPEAGLE的特征类型进行响应的抽取计算来获取:\psi _{i}\leftarrow \left \{ 1-S_{i},S_{i} \right \}
2.3
算法过程
SPEAGLE的算法过程将用户-评论-产品的图G,通用势函数 \psi ^{t} ,元数据中抽取出的特征以及已标注节点的标签(包括评论、产品和用户的标签)作为输入,输出为所有未标注节点对应分类的概率。算法执行过程中,先对所有节点进行分类概率的初始化,如果是已标注节点,则根据 \psi ^{t} 进行设定;如果是未标注节点,则需要抽取这些节点对应的特征,然后计算出特征的垃圾内容权重Si,然后设置势函数为\psi _{i}\leftarrow \left \{ 1-S_{i},S_{i} \right \} 。
然后主要步骤是通过Loopy Belief Propagation(LBP)算法来计算条件边缘概率。LBP算法是基于网络中的每个节点通过和邻近节点交换信息对自身的概率状况进行评估,而且这个过程是迭代进行,对于每一次迭代,消息mi-j从节点传递到节点 j,其中T_{i},T_{j}\in \left \{ U,R,P \right \} ,表示了节点i和节点j的类型。消息mi-j表示节点对节点j的置信度,即i认为的j的分类分布。对于分类分布的,是基于连通节点i和节点j的边的权重,以及节点i的领域中不包含去j的其他节点中接收到的消息来进行。消息传递迭代进行,直到小于阈值到达稳定状态。
当消息稳定之后,计算出边缘概率bi(yi)见图。对于分类问题,节点可以根据 max_{y_{i}}b_{i}(y_{i}) 来进行标记;对于排序问题,则可以按照 _{y_{i}}b_{i}(y_{i}) 来进行排序。
图5 SPEAGLE算法伪代码
2.4
小结
SPEAGLE采用了基于评论网络来完成分类任务,将评论、用户和产品三者置于统一一致的框架内,而且对于不同的对象类型都使用了统一化的分类方法,这个点比较新鲜。
3
达观数据垃圾信息过滤工程实践
达观的文本挖掘系统在多个模块里面都使用到了半监督学习的方法,主要方式是通过外部知识来对训练样本进行语义扩展,然后结合数量较多的未标注样本选取预测置信度高的子集作为新样本加入训练集进行模型训练。
从上面两篇论文中的特征类型选择中可以看到,里面的语义特征抽取过程在英文文本上进行的。到了中文环境下,语义特征抽取的过程会变得复杂很多,主要是由于汉语的语言特性造成。具体到垃圾信息过滤这个场景中,变形识别问题是有效进行语义特征抽取亟需解决的重要问题。
3.1
变形识别问题
我们在浏览像贴吧、论坛、新闻媒体等各种平台中,会时常看到变形的敏感词。人脑的思维方式让我们能够非常自然地发现这些变形词,因为这些变形词在句子中是“异常”的部分,这种“异常”的感觉会将我们的注意力聚集到这一区域,进而逐渐发现完整的变形词。
而机器在直接面对这些变形词(包括间杂特殊符号,同音变换,形近变换,简繁转换,偏旁拆分等)时就显得稍微力不从心,变形词识别是解决中文垃圾内容过滤的一个重要问题。
图6 变形识别问题
3.2
变形词自动化生成
如果关键词词库通过人工配置的话,不仅成本大,而且扩展比较困难,面对新类型的垃圾内容出现反应时间也相对较慢。
为了解决变形词是被的问题,达观数据变形词采用了自动化生成的方法,具体步骤包括:
图7 自动化生成变形词词库
3.3
变形词检测
而在正文预测进行变形识别时,如果单纯依靠词库不结合语境的话,很有可能将正常词语错误识别为变形词。譬如根据同音转换的原则进行变形识别是, “Esports海涛解说视频专题”识别出变形关键词“海淘”,实际上普通读者一眼可以看出来这其实是一段正常文本,“海涛”并非“海淘”的变形词。达观审核系统在解决变形词识别时,使用了下面的方法来进行变形词检测:
3.3.1 贝叶斯分析方法
统计变形词在正常文本上下文中出现概率,计算当前文本上下文中变形词的后验概率。像“徽ィ訁”这样的词语,在正常文本中出现的概率几乎为0,所以可以判别为变形词;而对于出现在“Esports海涛解说视频专题”的关键词“海涛”,在计算出了当前文本上下文的后验概率之后,可判别为正常词语。
3.3.2 词嵌入方法
将单词转化为词向量,计算上下文语义重心,计算单词的词向量与上下文文本语义重心向量的相似度。正常文本里面的词语跟上下文文本语义接近,所以对应的词向量在空间上也是比较接近的。通过计算它与上下文语义重心的相似度,可以判别出来该词语是否处于正常语境中,从而识别出来是否是变形词。