文本内容安全领域-谛听安全深度学习的常见应用方法

在深度学习技术兴起之前相当长的一段时间内,基于机器学习技术的文本分类方法占据着文本分类领域的统治地位。特征工程+机器学习分类器一直是解决文本分类问题的标准范式。针对不同的业务场景,算法工程师需要精心设计相应的特征工程,以取得最佳的分类效果。

 

到2010年,深度学习技术逐渐兴起,文本分类领域的技术格局也相应的发生了变化。基于深度学习的文本分类方法打破了上述技术范式,对文本进行简单预处理后,直接喂给深度学习模型,进行端到端的训练和推断。一般性的,用于文本分类的深度学习模型最后一层为softmax层(多标签问题则为sigmoid),这相当于机器学习分类器中的LR模型。由此可见,模型的其余部分本质上就是在表示自动学习文本的特征,因此算法工程师再也不用操心特征工程的事情了。不过先别高兴得太早,文本特征学得好不好,取决于具体的深度学习模型结构设计和超参数设置,工程师们还是得把省下来的时间花在模型结构和超参数的调整上面。

本文根据谛听文本算法团队在内容安全领域的实践经验,介绍在项目中用过的一些深度学习模型以及对部分技术细节进行讨论。深度学习是近几年来的热门方向,学术界和工业界的研究人员提出了很多有价值的方法,本文所分享的方法只是其中少数代表性的工作,仅供读者参考。

使用CNN来做文本分类最早见于2014年Convolutional Neural Networks for Sentence Classification这篇文章当中。CNN模型现在已经是做文本分类的经典模型,综合考虑模型效果、计算开销、计算并行化等因素,CNN模型往往具备不错的竞争力。有学者表示,CNN模型之所以能够获得较好的分类效果,与卷积核的使用有关。不同size的卷积核,对文本在不同位置进行卷积计算,相当于提取不同的n-gram特征,这有助于模型的最终分类。

RNN模型主要用于处理序列数据,而文本天然的就是表示成若干词的序列,因此使用RNN模型来对文本进行建模是十分自然的事情。与全连接或卷积网络不同,RNN内部不同词对应的隐藏层相互之间是有联系的:当前词的隐藏层的输入除了输入层的输出,还包括前一个词的隐藏层的输出。

当序列长度较长时,基础的RNN模型存在梯度爆炸和梯度消失问题。LSTM和GRU是RNN的两种改良版本,它们通过门的机制对RNN中信息的传播进行控制,缓解了RNN的梯度消失问题(RNN梯度爆炸问题可以通过gradient clipping技术进行解决)。从图中可以看出,GRU与LSTM结构比较相似,主要不同之处在于GRU使用更新门来对LSTM的输入门和遗忘门进行简化。

RCNN也是早期深度学习技术应用于文本分类上面经常用到的模型之一。RCNN为每个词定义了left context和right context两个变量,具体计算方式如下:

最终每个词由自身的词向量和两个context拼接共同表示,然后先接一层全连接层,再作max pooling形成单个的向量。这个模型为什么叫RCNN(Recurrent Convolutional Neural Networks)呢?首先,从left context和right context的定义可以看出这部分其实就是一个双向的RNN,只不过最后还拼接上原始的词向量。另外,这里并没有只取最后一个词的输出计算分类分数,而是对每个词的输出进行全连接再作max pooling。其实,这里的全连接等价于进行size为1和strip为1的二维卷积操作,后面再跟着max pooling,这就是典型的CNN结构。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>