技术开发 频道

搜狐党磊:深度学习在短文本分类中的应用

  【IT168 评论】本文根据【创客168】第12期现场演讲嘉宾党磊老师分享内容整理而成。录音整理及文字编辑@IT168许真真。

  讲师介绍

搜狐视频深度学习在短文本分类中的应用

  党磊,搜狐视频高级工程师。2015年研究生毕业后加入搜狐视频,曾负责短视频推荐的召回模型、排序模型、短视频播放质量评价体系、短视频分类等项目,目前主要研究方向为将深度学习算法应用到视频推荐系统中。

  正文

  大家下午好,我是来自搜狐视频的党磊,接下来为大家介绍深度学习在搜狐短视频、短文本分类上的应用。

  我今天的分享主要包括项目需求、可选择解决方案以及模型训练部署三部分。

搜狐视频深度学习在短文本分类中的应用

  需求及方案

  该项目的需求是搜狐视频会要求出品人上传新视频时为视频绑定一个原生分类,如果出品人分类绑定错误,会对后期的个性化推荐造成一定干扰,以下是反例:

搜狐视频深度学习在短文本分类中的应用

  比如第一个,从视频标题看其本身是一个娱乐性内容,但因为有“傅园慧”三个字被绑定到运动领域。如果靠人工审核,视频数量较多的情况下,分类效率会非常低下,所以需要训练一个模型对视频分类自动识别并进行一定程度的修正。在该项目中,我们抽取视频标题作为项目的原始数据,下面介绍一下项目最终的整体架构。

搜狐视频深度学习在短文本分类中的应用

  首先抽取短视频标题数据,通过分词库对标题进行分词,分词训练完成后会用Word2vec算法对分词训练,将分词转换成词向量。一切就绪之后,开始人工筛选分类正确的样本作为训练样本,利用提前训练好的词向量将样本数据(视频标题关键词集合)转换成模型需要的数据格式(词向量矩阵,一个样本一个小矩阵)进行训练。如果模型预测准确率较好的话,会将模型保存到分布式系统HDFS上,当线上实时预测的时候,会从HDFS加载模型,最终利用模型对上传视频进行预测,从而给出视频的预测分类。

  选择解决方案

  由于短视频的标题文本信息太少,字数又在三十以内,要实现短视频分类自动化,可选方案一般是传统的机器学习:Bag of Words方法将视频标题转换成一个向量,选择SVM/树模型等分类模型训练。还有一些深度学习方案:word2ve训练词向量,分类模型可选卷积神经网络CNN,或者长短期记忆网络LSTM等。

搜狐视频深度学习在短文本分类中的应用

  (一)词向量

搜狐视频深度学习在短文本分类中的应用

  首先要说Bag of Words算法。以下表的前两行--两个视频标记分词完成之后的结果,为例。假如我有AB两个标题文档,我需要把这些文档的非重复词组成一个词典,词典中每个词有一个对应的索引,索引上对应位置的值是该词在其对应文档中出现的次数。在该例子中,最后有九个词,所以将AB两个数据各自转化成一个9维的向量。

搜狐视频深度学习在短文本分类中的应用

  我们来看一下A样本最后转化成的向量。因为张继科的索引是1,在A里面出现的次数是1,所以他的位置上的值是1,其它词处理方法相同。Bag of words算法实现简单,该方法的向量容易稀疏存储,如果向量里只有一些简单的非零值,我们只存储非零值就可以了。这个方法的缺点是它认为文档里的词是完全独立的,单词之间没有语法、句法以及前后关联,这样就不能很好的刻画词语之间的相似性。例如电脑和笔记本,该方法认为二者是不一样的,而且差异很大,但实际上它们在语意上是很相似的。另外一个缺点是随着词典的扩大,容易造成维度灾难。

  下面再说Word2vec。Word2vec算法认为处于相同上下文环境的词语在语意上是相似的。它的优点是相似词的词向量在空间上也是接近的,Word2vec另一个优点是在词向量的维度可指定成固定大小,词向量维度不受词典大小的限制。

搜狐视频深度学习在短文本分类中的应用

  上图是转换以后在向量空间上的典型例子,图上面的那条线上的两个字man和woman,下面是king和queen。在空间上,man和king是比较相近的,woman和queen也是相近的,man的词向量减去woman的词向量得到的值和king减去queen的词向量得到的值是相似的。

  (二)分类模型

  下面是常用的机器学习流程,下图左边是全部数据,每一行代表一个视频标题向量。大家可以这样理解——全部数据作为一个分类模型输入,SVM支持向量机是分类模型,训练完SVM模型可以对每个样本进行预测,这是传统机器学习的方式。

搜狐视频深度学习在短文本分类中的应用

  下图是利用深度学习里面比较经典的神经网络CNN对短文本(视频标题)分类的大体流程。图中最左侧矩阵数据代表一个标题,每一行是一个分词对应的word2vec词向量。如果一个视频标题有十个分词,那最左边矩阵的行就等于10,矩阵列是分词词向量的长度,例如300维。用该小矩阵代表每个视频,作为CNN模型的一次输入。

  接下来是卷积层和池化层。

  卷积层的作用是对视频标题进行高级特征提取。一般每个卷积层会有多个不同大小的卷积核(可以理解为一个小矩阵),然后用卷积核对输入矩阵进行卷积操作,最后会获得多个新的矩阵,例如下面图中蓝黄绿三个n*1大小的向量。

搜狐视频深度学习在短文本分类中的应用

  下面介绍一下池化层。我们最终选择的池化是max-pooling,把经过卷积操作后获取的每一个列向量里的最大值提取出来,这就是最大池化。池化操作可以理解为进一步提取高级特征,然后将提取的特征拼接成一个向量,最后用一个Softmax多分类器进行处理。Softmax最后会给出一个样本属于每一个类别的概率,这样我们就可以选择一个概率最大的类别作为该样本的预测。这就是用CNN处理短文本分类时的常见思路。当然卷积可以是多层的,每一层可以有多个卷积核,池化层也可以对应多个。

  我们还尝试了另一个模型—循环神经网络RNN,RNN认为一句话的词是有先后顺序的,训练的时候能够更好地捕捉句子单词的上线文信息,用来进行文本分类也会获得不错的效果。

  RNN认为标题的词是有前后序列的,W1可以看作是一个词,W2是第二个词。RNN在处理时,模型隐含节点里的值不仅仅依赖于当前输入,还依赖于上一时刻隐含节点的值,经过有序列的处理,最后会得到一个向量,然后将这个向量表示这个样本,最后再把向量给Softmax多分类器,对样本类别进行预测。

搜狐视频深度学习在短文本分类中的应用

  模型训练和部署

  前面选择了什么模型对训练集进行训练,那么接下来就是是选择高效的平台去验证,上面这幅图的内容是一些比较流行的深度学习处理平台,我们最终选择的是TensorFlow。感兴趣的可以自行到Github上查看。TensorFlow是由谷歌推出的,业界用的比较多,建立模型的时候比较快速,一些底层的算法已经实现,可以理解为模块化拼装想要的模型。TensorFlow也支持各种流行的语言比如Java和Python,这是我们最终选择TensorFlow的原因。

搜狐视频深度学习在短文本分类中的应用

  接下来是训练和部属。从上面的图中,可以看出目前tensorflow平台用的最广泛,所以我们也选择TensorFlow。在TensorFlow上,可以选择Python对模型建模,快速训练验证。当训练好模型后,可用tf.train.Saver()函数将模型保存到本地文件中。但是该函数默认会将模型分开保存,例如下图中“.data”为后缀的文件保存的是模型训练好的参数,而以“.meta”为后缀的文件保存的模型的网络结构和各种常量以及训练的各种操作。因为目前我们线上的开发环境是java,但是TensorFlow的Java API支持较少,没有类似于tf.train.Saver()的函数。所以若想将模型顺利部署到线上,需要对这个模型进行freeze(固化)操作,该操作会将把变量参数值转换成常量值,然后融合到模型里,最终整合成一个文件,例如下图中的freeze_model.pb。然后我们就可以利用TensorFLow目前支持的JavaAPI—importGraphDef将模型加载成功,最后就可以顺利的利用模型实时预测视频的分类。

搜狐视频深度学习在短文本分类中的应用

  下图是各个模型的预测效果对比。我们当时选择人工抽查,主观判断的方式去检验模型对测试样本的预测是否准确有效。

  (1)针对原本绑定分类正确的测试样本,会以指标“准确率”的高低去判断模型的好坏。

  (2)针对原本绑定分类错误的测试样本,就不能以“准确率”判断模型的好坏,而是人为主观判断预测的分类和视频的标题所表达的意思是否一致。比如从一个视频标题上看,这个视频应该和娱乐有关,但是却被绑定到运动分类下,那么假如模型预测的类别是娱乐,我们就可以认为模型的这一次预测是有效正确的,其预测类别是对该视频类别的一次正确修正。

  以修正率指标判断的话,总体来说SVM模型的优势不大。

  我们最终选择的是CNN,因为输入数据快。LSTM训练的时间长,速度不太快,GRU虽然比LSTM快一点,但是也没有CNN好,所以我们最终选择了CNN。LSTM 模型效果优秀,GRU次之,但是考虑到模型训练时间的话,LSTM>GRU>CNN,所以结合我们自己的业务,最终选择了CNN模型作为预测视频分类的模型。

搜狐视频深度学习在短文本分类中的应用

  前面的内容,就是我们整个项目大体流程:从句子标题分词,词向量的表示,再到模型的选择和训练、上线部署。今天的分享到此结束,谢谢大家!

0
相关文章