小蚂蚁说:
随着深度学习的快速发展,以及在图像、语音领域取得的不错成果,基于深度学习的自然语言处理技术也日益受到人们的关注。计算机是怎么理解人类的语言的呢?
传统机器学习的应用,常常是利用上述人工总结的文本特征,但往往会遇到一些问题。比如“猫”和“咪”这两词语的语义很接近(即近义词),但计算机并不能真正的在词语语义层面理解,只是把他们当作了两个不同的词语。再比如“小狗”和“小猫”是很相关的两个词语,也不能被很好的理解和刻画。
本文主要介绍了深度学习中的文本分类任务,以及一些应用于文本分类的深度学习模型。文本分类是自然语言处理领域最经典的场景之一,试图推断出给定的文本(句子、文档等)的标签或标签集合。通过这些技术,计算机能够更好地理解人类的语言。
针对支付宝投诉欺诈场景,蚂蚁金服人工智能团队设计了多个文本深度学习模型。包括双向 GRU,Capsule Network 和 Attention-based Model 等等,均在支付宝投诉欺诈场景上取得了不错的效果。大家一起来看看吧!
对于风控业务,用户的投诉是理解黑产运作方式和监控风控变化的重要形式。风险决策中心每天会得到大量用户投诉文本信息,每个投诉文本通常对应一定的风险形式。目前分类模型只解决了部分对于文本信息利用率的问题。目前支付宝投诉欺诈场景主要应用到的深度学习模型有 TextCNN 和双向 GRU。
相关工作分析
本文的主要目的是想介绍一下深度学习中的文本分类任务,以及一些应用于文本分类的深度学习模型。文本分类是自然语言处理领域最经典的场景之一,试图推断出给定的文本(句子、文档等)的标签或标签集合。
文本分类中包含了大量的技术实现,从是否使用了深度学习技术作为标准来衡量,可以将这些技术实现分为两大类:基于传统机器学习的文本分类和基于深度学习的文本分类。
文本分类的应用非常广泛,其中比较有常见的应用有垃圾邮件分类,情感分析,新闻主题分类,自动问答系统中的问句分类以及一些现有的数据竞赛等。现有的数据竞赛包括知乎的看山杯机器学习挑战赛,BDCI2017 的比赛“让 AI 当法官”和 Kaggle 的比赛“Toxic Comment Classification Challenge”等。
文本分类中主要有三种分类类型,包括二分类问题,多分类问题以及多标签问题。比如垃圾邮件分类中判断邮件是否为垃圾邮件,属于一个二分类问题。在情感分析中,判断文本情感是积极还是消极,或者判断文本情感属于非常消极,消极,中立,积极,非常积极中的一类,既可以是二分类问题也可以是多分类问题。在 BDCI 2017 的比赛“让 AI 当法官”中,基于案件事实描述文本的罚金等级分类和法条分类,分别属于多分类问题和多标签分类问题。
文本分类的评价指标会根据不同的分类类型有各自不同的评价指标。二分类问题中常常用到 Accuracy,Precision,Recall 和 F1-score 等指标;多分类问题往往会使用到 Micro-Averaged-F1,Macro-Averaged-F1 等指标;多标签分类问题中则还会考虑到 Jaccard 相似系数等。
在基于传统机器学习的文本分类中,一般采用 TF-IDF 和 Word Counts 提取不同 word n-gram 的文本特征,然后将提取到的文本特征输入到 Logistics 回归、Naive Bayes 等分类器中进行训练。但是当统计样本数量比较大的时候,就会出现数据稀疏和维度爆炸等问题。这时候就需要做一些特征降维处理,比如停用词过滤,低频 n-gram 过滤,LDA 降维等。
随着深度学习的快速发展,以及在图像、语音领域取得的不错成果,基于深度学习的自然语言处理技术也日益受到人们的关注。传统机器学习的应用,是利用上述人工总结的文本特征,但往往会遇到一些问题。比如“猫”和“咪”这两词语的语义很接近(即近义词),但计算机并不能真正的在词语语义层面理解,只是把他们当作了两个不同的词语。再比如“小狗”和“小猫”是很相关的两个词语,也不能被很好的理解和刻画。
为了解决上述问题,让计算机一定程度上能够理解词语的语义,词向量技术应用而生。Mikolov et al. 2013 [1] 提出了 word2vec 模型,可以通过词语上下文的结构信息,将单词的语义映射到一个固定的向量空间中。如果需要判定两个词语的语义相似度(或相关度),只需要计算两个词向量的夹角余弦或欧式距离等即可。比如,“小狗”与“小猫”的相似度值就会很高。凭借词向量算法,计算机有了一定的词语语义上的理解能力。
在此基础上,我们希望可以更好的刻画整个句子的语义信息。Yoon Kim, 2014 [2] 提出将 CNN 模型首次应用到文本分类问题上。这里,词向量作为网络的第一层的输入,而 CNN 的核心点在于可以捕捉局部相关性,在文本分类任务中可以利用 CNN 来提取句子中类似 word n-gram 的关键信息。
TextCNN 模型架构如下图所示,句子中每个 word 使用 K 维向量来表示,于是句子可表示为一个 N*K 的矩阵,作为 CNN 的输入。使用不同的 Filter Window 进行卷积操作得到 Feature Map,之后对 Feature Map 使用 Max-over-time Pooling 的池化操作,即将 Feature Map 向量中最大的值提取出来,组成一个一维向量。经过全连接层输出,使用 Softmax 层进行分类,并且加上 Dropout 层防止过拟合。
自然语言处理中更常用的是递归神经网络(RNN, Recurrent NeuralNetwork),能够更好的表达上下文信息。Liu et al., 2016 [3] 介绍了 RNN 用于分类问题的设计。用于文本分类的 RNN 网络结构如下图所示,网络中将最后一个单元的结果作为文本特征,连接全连接 Softmax 层进行分类。
除此之外,还有使用双向 RNN 网络 [4](Bidirectional RNNs,BiRNNs)的两个方向的输出向量的连接或均值作为文本特征。
一般的循环神经网络往往存在许多弊端。在训练网络过程中,经过许多阶段传播后会出现梯度消散(Gradient vanishing)或梯度爆炸(Gradient exploding)等问题。循环神经网络在反向传播中得到误差的时候,可以想象一下多次乘以自身的参数权重,该乘积消散或爆炸取决于的幅值。针对于梯度爆炸的情况,常常会使用截断梯度方法。但是梯度截断并不能有效地处理梯度消散问题,有一个容易想到的方法是使用正则化或约束参数,当然还有更好的解决方案,那就是使用 LSTM(Long Short-Term Memory)或 GRU(Gated recurrent unit)等门控 RNN(Gated RNN)。
梯度消散是原生 RNN 中一个很大的问题,也就是后面时间的节点对于前面时间的节点感知力下降,也就是忘事儿。Hochreiter et al., 1997[5] 提出了 LSTM,它的设计初衷就是来解决梯度消散问题。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层。LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。如下图所示,一个 LSTM 块有四个输入。
(1)输入(Input):模块的输入;
(2)输入门(Input Gate):控制输入;
(3)遗忘门(Forget Gate):控制是否更新记忆单元(Memory Cell);
(4)输出门(Output Gate):控制输出。
在多个 LSTM 连接的循环网络中,单个的 LSTM 的各个门的控制方式如下:
Cho et al., 2014 [6] 提出了 GRU 网络结构,GRU 作为 LSTM 的一种变体,将遗忘门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态,加诸其他一些改动。最终的模型比标准的 LSTM 模型要简单,是目前非常流行的变体。
具体在文本分类任务中,BiRNNs(实际使用的是双向 GRUs)从某种意义上可以理解为可以捕获变长且双向的“word n-gram”信息。
问题与挑战
word2vec 算法虽然可以学到有用的词向量,但是该算法只刻画了词语的上下文结构信息,并不能很好的利用中文词语内部的结构信息,而中文又是一种强表义的语言文字。尤其是在大安全领域的数据里,有很多词语的变种写法。比如“小姐”和“小女且”这两个词语,经常会有不法分子为了绕开拦截系统,故意采用“形变”写成后者;再比如“微信”和“威芯”这两个词语,则是“音变”的刻意回避。因此,我们希望尝试一种新的算法,可以很好的刻画出中文词语的“形”和“音”的特性,生成更高质量的词向量,进而为后面的深度神经网络提供更大的信息量。
TextCNN 能够在很多任务里面能有不错的表现,CNN 卷积特征检测器提取来自局部的序列窗口的模式,并使用 max-pooling 来选择最明显的特征。然后,CNN 分层地提取不同层次的特征模式。然而,CNN 在对空间信息进行建模时,需要对特征检测器进行复制,降低了模型的效率。但在实际中文的语料库中,文本结构丰富,单词的位置信息、语义信息、语法结构等,对于 CNN 这种空间不敏感的方法不可避免会出现问题。
BiGRUs 在文本分类上有明显的效果,但是在可解释性以及关注文本整体重要性上有明显的不足,特别是在分析 badcase 的时候感受尤其深刻。
如何解决 TextCNN 在文本中深入理解文字的位置信息、语义信息、语法结构等信息,以及使 BiGRUs 文本模型能够关注文本整体重要性将是下面要探索的内容。
CW2VEC
Cao et al. 2018 [7] 在 AAAI 2018 的论文里提出了 cw2vec 算法。(相关阅读请参考《AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法》)该算法通过构造“n 元笔画”提取出汉字的表义单元,比如“森林”与“木材”这两个词语具有很多共同的“4 元笔画”-“木”,因此这两个词语具有较高的相关度。相对于汉字、偏旁粒度的词语拆解,n 元笔画是一种非人工总结、由算法自动统计出来的表义结构。在中文的公开测试集中,cw2vec 相对于 word2vec, GloVe, CWE 等算法均取得了一致性的提升。
cw2vec 算法同时利用了中文词语内部和上下文的结构信息,来设计损失函数,因此产生更高质量的中文词向量。
除了“形”之外,“音”的刻画可以通过“n 元拼音”来实现。这里拼音字符从“a”到“z”,按照同样的方法获得词语的拼音,然后通过滑窗进一步得到“n 元拼音”。
为了同时获得“形”和“音”的特征信息,我们采用了一种简单有效的实验方案,即分别基于“n 元笔画”和“n 元拼音”模式学习词向量,然后再对词向量进行拼接。相对于词向量平均(可以看作是线性加权),这种拼接方法,对后续的深度神经网络保有了更高的非线性信息融合能力。
目前 cw2vec 算法在内容安全宝、保险等场景中取得了不错的效果,这里我们也将探索其在支付宝投诉欺诈场景的作用。
Capsule Network
Hinton et al., 2017 [8] 在去年发表的论文中,Hinton 介绍 Capsule 是一组神经元,其输入输出向量表示特定实体类型的实例化参数(即特定物体、概念实体等出现的概率与某些属性)。我们使用输入输出向量的长度表征实体存在的概率,向量的方向表示实例化参数(即实体的某些图形属性)。同一层级的 Capsule 通过变换矩阵对更高级别的 Capsule 的实例化参数进行预测。当多个预测一致时(本论文使用动态路由使预测一致),更高级别的 Capsule 将变得活跃。
到目前为止,将胶囊网络应用到自然语言处理上的论文研究较少,其中 Zhao et al., 2018 [9] 提出了将胶囊网络应用到文本分类任务上。对于传统的分类问题上,胶囊网络取得了较好的性能,并且其性能超过了 TextCNN,其模型结构图如下所示。
我们当前使用的网络结构是隐藏大小为 128 的 BiGRUs(双向 GRUs),连接胶囊网络层,胶囊数量设置为 10,路由数量设置为 3。
Attention 机制
在谈及基于 Attention 机制的模型时,不能不先提及一下 Encoder-Decoder 框架,Encoder-Decoder 框架可以理解成由一个句子生成另一个句子的通用处理模型。其架构如下图所示:
如图中的例子可以看到通过 Encoder 编码了“机器学习”四个繁体字,得到一个中间语义,即图中标了红框框的绿色方块。然后将这个红框框的绿色方块作为 Decoder 的输入。这里得做一下解释,Encoder-Decoder 是一个通用的计算框架,其中的 Encoder 和 Decoder 可以是不同的模型组合,比如 CNN、RNN 等,上图展示的就是 Encoder 和 Decoder 都是 RNN 的组合。
仔细看上图的翻译框架可以看到,在生成目标单词的时候,无论哪个单词都是用到同一个红框框的绿色方块,即同一个中间语义。这就是展现出一种注意力不集中的分心模型。那注意力模型是如何的呢?
Bahdanau et al., 2014 [10] 提出了将 Attention 机制应用到在机器翻译。注意力模型会在输出目标单词的时候关注到输入单词的,比如输出“machine”的时候,注意力模型应该将目光注意到“机器”两个词上,即“机器”的关注重要性应该大一些,而“学习”两个词的重要性应该小一些。基于 Attention 机制的模型架构如下图所示。
Yang et al., 2016 [11] 提出了用词向量来表示句子向量,再由句子向量表示文档向量,并且在词层次和句子层次分别引入 Attention 的层次化 Attention 模型(Hierarchical Attention Networks,HAN)。HAN 的模型结构如下图所示。
我们当前使用的网络结构是隐藏大小为 128 的 BiGRUs(双向 GRUs),连接 word-level 的 Attention 层。
实验结果
实验中读取了支付宝投诉欺诈场景的一段数据作为训练集,另一段时间的数据作为测试集。数据的标签是三分类,有违禁类,非案件类和欺诈类。其中欺诈的分类结果是我们主要关注的结果。数据集经过一些去重数据,去除文本中的标点,填充空值等预处理操作后,将处理后的数据输入我们的神经网络模型中,得到如下结果。
实验中我们主要对比 Capsule Network 和 TextCNN 模型以及 BiGRU 模型和 Attention 模型在不同词向量作为初始网络 Embedding 层在不同评价指标下的效果对比。其中为了验证两种词向量拼接后的高维词向量对网络结构的效果,添加了一组词向量拼接后对不同网络结构的实验对比。
上图是使用 word2vec 作为词向量,多个网络模型在支付宝投诉文本上的一组实验示例。第一张图是该组模型的 ROC 曲线,第二张图是该组模型的 Precision/Recall 曲线。
上图是使用 cw2vec 作为词向量,多个网络模型在支付宝投诉文本上的一组实验示例。第一张图是该组模型的 ROC 曲线,第二张图是该组模型的 Precision/Recall 曲线。
上图是使用拼接后的高维向量作为词向量,多个网络模型在支付宝投诉文本上的一组实验示例。第一张图是该组模型的 ROC 曲线,第二张图是该组模型的 Precision/Recall 曲线。
备注:其中 2vecs 是指将 300 维 cw2vec 词向量和 300 维 word2vec 词向量拼接在一起,形成一个 600 维词向量。AUC 的计算方式是根据三分类共同的预测结果和真实标签计算得出的。三分类准确度(Accuracy)的计算方式是根据三分类结果的最大值来确定类别的,而 Precision/Recall 是仅根据三分类中的欺诈类的结果计算出来的。
实验中词向量算法分别用到了 word2vec 和 cw2vec,其中 word2vec 中包含了 cbow 和 skip-gram 各 150 维的词向量,cw2vec 中包含了基于笔画和拼音各 150 维的词向量。其中拼接后的高维词向量(2vecs)是同时包含 cw2vec 和 word2vec 的 600 维词向量。
上述实验表明,不管在使用 word2vec,cw2vec 以及拼接后的高维词向量作为词向量,我们用 Capsule Network 网络结构训练的模型在 Precision/Recall 值和 AUC 值上都比原先 TextCNN 的效果好。比较两者的三分类准确度,仅在使用拼接后的词向量的准确度上 Capsule Network 略低于 TextCNN。因此,实验证明 Capsule Network 的整体表现优于原先的 TextCNN。
在比较 BiGRU 模型和 Attention 模型时,我们可以发现在较低 Precision 下的 Recall 值时,BiGRU 模型的分值略高于 Attention 模型。但在较高 Precision 下的 Recall 时,Attention 模型的分值则明显高于 BiGRU 模型。如表中 Attention+word2vec 在 80%Precision 下 Recall 值略低于 BiGRU+word2vec。但在 85% 和 90%Precision 下,Attention+word2vec 的 Recall 值则明显高于 BiGRU+word2vec。在比较两者的 AUC 值和 Accuracy 值,在使用 word2vec 词向量和拼接的高维词向量时,Attention 模型的分数较高。
在词向量间的对比中,可以看到仅使用 cw2vec 作为词向量网络模型整体上比 word2vec 和拼接的词向量效果更好。
本文转载自公众号蚂蚁金服科技(ID:Ant-Techfin)。
原文链接:
https://mp.weixin.qq.com/s/NPITuQHfe3IbEBm1Bb-bKA
评论