赣州新闻网

首页 / 科技

谁在背后资助比特币的开发?

2020-03-30 · 赣州新闻网 · 科技

用深度学习解决大规模文本分类问题 - 综述和实践

用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践 - 知乎

近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类领域特别是应用深度学习解决文本分类的相关的思路、做法和部) O S ^ r / ) S分y 2 2 i l 0 n *实践的经验。

业务问题描述:

淘宝商品的一个典型的例子见下图,图中商品的标题是“夏装雪纺条纹短z Q E X T袖t恤女春半袖衣服夏天中长款大码胖mm显瘦上衣夏”。淘宝网后台是通过树形的多层的类目体系管理商品的,覆盖F j ( 9Nave Bayes)、KNN、SVM、最大熵和神经网络等等,传统分类模型不是本文重点,在这里就不展开了。


二、深度学习文本分类方法

上文介绍了传统的文本分类做法,传统做法主要问题的文本表示是高纬度高稀疏的,特征表达能力很弱,而且神经网络很不擅长对此类数据的处理;此2 ] j y a t J外需要人工进行特征工程,成本很高。而深L X s - ?度学习最初在之所以图像和语音取得巨大成功,一个很重要的原因是图像和语音原始数据是连续和稠密的,有局部相关性,。i c I C ! 应用深度学习解决大规模文本分$ @ ] L O [ . o B类问题最重要的是解决文本表示,再利用CNN/= R y aRNN等网络结构自动获取特征表达能力,去掉繁杂的人工特征工程P ` v w v r Q = u,端到端的解决问题。接下来会B x ` =分别介绍:

2.1 文本的分布式表示:词向量[ T R(word embedding)

分布式表示(Distributed Representation)其实Hinton 最早在198m ( . s 8 Y 66年就提出了,基本思想是将每个词表达成 n 维稠密、连续的实数向量,与之相对的one-hot encoding向量空间只有一个维度是1,其余都a D j 0 l是0。分布式表示最大的优点是具备非常powerful的特征e W p e # l wc工具包,在语义维度上得到了很好的验证,极大的推进了文本分析的进程。下图是文中提出的CBOW 和t . Z / 4 g j Skip-Gram两个模型的结构,基本类似于NNLM,不同的是模型去掉了非线性隐层,预L p ] v $ ? L测目标不Q 3 R N J k同,CBOW是上下文词预测当前词,Skip-Gram则相反。

用深度学习解决大规模文本分类问题 - 综述和实践

除此之外,提出了Hierarchical Softmax 和 Negative Sample两个方法,很好的解决了计算有效性,L A o 9 e事实上这两个方法都没有严格的理论证明,有些trick之处,非常的实用主义。详细的过程不再阐述了,有兴趣深入理解word2vec的,推荐读读这篇很不错的paper:wQ : M } ? U `ord2vec Parameter Learning ExplainedL n 3 $ L 6 E。额外多提一点,实际上word2vec学习的向量和真正语义还有差距,更多学到的是具备相似上s I K - t X 8下文的词,比如“good”“bad”相似度也很高,反而是文本分类任务输入有监督的语义能够学到更好的语义表示,有机会后续系统分享下。

至此,文本的表示通过词向量的表示方式,把文本数据从高纬I $ C j % J _度高稀疏的神经网络难处理的方式,变成了类似图像、语音的的连续稠密数据。深度学习算法本身有很强的数据迁移性,很多之前在图像领域很适用的深度学习算法比如CNN等也可以很好的迁移到文本领域了,下一小节具体阐述下文本v y ? * 3 / ~分类领域深度学习的方法。

2.2 深度学习V p ~ m ; A文本分类模型

词向量解决了文本表示的问题,该部分介绍的文本分类模型则是利用CNN/RNN等深度学习网络及其变体解决自动特征提取(K j ! a %即特征表达)的问题。

1)fastf Z r O l ^ e WText

fastText 是上文提到的 word2vec 作者 Mikolov 转战 Facebook 后16年7月刚发表的一篇论文 Bag of Tricks for Efficient Text Classification。把 fastText 放在此处并4 B p G 3 Z g `非因为它是文本分类的主流做法,而是它极致简单,模型图见下:

用深度学习解决大规模文本分类问题 - 综述和实践

原理是把句子中所有的词向量进行平均(某种意义上可以理解为只N j r ] b #有一个Q y , ?avg pooling特殊CNN),然后直接接 softmax 层。其实文章也加入了一些 n-gram 特征的 trick 来捕获局部序列信a o @息。文章倒没太多信息量,算是“水文”吧,带来的思考是文本分类问题是有一些“线性”问题的部分,也就是说不必做过多的非线性转换、特征组合即可捕获K s 6 ~ F {很多分类信息,N R P C f Z因此有些任务即便简单的模型便可以搞定了。

2)TextCNN

本篇文章的题图选用的就是14年这篇文章提出的TextCNN的结构(见下图)。fastText 中的网络结果是完全没有考虑词序信息的,而它用的 n-gram 特征 trick 恰恰说明了局部序列信息的重要意义。卷积神经网络(CNN Convolutional Neural Networ8 Q q l $k)最初在图像领域取得了巨大成功,CNN原理就不讲了,核心点在| = @ G m于可以捕捉局部相关性,具体到文本分类任务中可以利用CNN来提- . 0 F 7 & L =取句子中类似 n-gram 的关键信息。

用深度学习解决大规模文本分类问题 - 综述和实践

TextCNN的详细过程原理图见下:

用深度学习解决大规模文本分类问题 - 综述和实践

TextCNN详细过程:第一层是图中最左边的7乘5的句子矩阵,每行是词向量,维度=5,这个可以类比为图像中的原始像素点了。然后经过有 filb j l Uter_size=(2,3,4) 的一维卷积层,每个filter_size 有两个输出 channel。第三层是H o ! % n 8 2 o一个1-max pooling层,这样X I sta6 . y - 4 Q Ftic方式采用比如word2vec预训i # L U . t Q p练的词向量,训练过程不更新词向量,实质上属于迁移学习了,特别是数据量比较小的情况下,采用静态的词向量往往效果不错。non-static则是在训练过程中更U 1 g新词向量。推荐的方式是 non= . b d ~ & 5 h-static 中的 fine-tunning方式,它是以预训练(pre-train)的word2vec向量初始化词向量,训练过程中调整词向量,能加速收敛,当然如果有充足的训练数据和资源| % ~ V,直接随机初始化词向量效0 z *果也是可以的。

通道(Channels):图像中可以利用E C } v e x (R, G,J = f G * g p 0 B) 作为P B o不同channel,而文本的输入的channel通常q Y G是不同方式的embedding方式(比如 worx C 0 U l Yd2vec或Glove)= 5 O 2 &,实践中也有M o T利用静态词向量和fine-tunnin* j F n Q 0g词向量作为不同chaB c + d + ^ # 9 Xnnel的做法。

一维卷积(conv-1d):图像是二维数据,经过词向量表达的文本为一维数据,因此在TextCNN卷积用的是一维卷积。一维卷积带来的问题是需要设计通过不同 filter_size 的 filter 获取不同宽度的视野。

Pooling层:利用CNN解决文本分类问题的文章还是很多的,比如这篇 A Convolutional Ne! # $ l i { $ural Network for ModelR + 3 D I ] Vling Sentences 最有意思的输入是在 pooling 改成 (dynamic) k-max po^ . #oling ,pooling阶段保留 k 个最大的信n L j息,保留了全局的序列信息。比如在情感分析场景,举个例子:

   &| 2 B g { M ?nbsp;        “ 我觉得这个地方景色还不错,但是人也实在太多了 ”

虽; z 4 * M ! [然前半部分体现情感是正向的,全局文本表达的是偏负面的情感,利用 k-max pooling能够很好捕W I ^捉这类信息。

3)TextRNN

尽管TextCNN能够在很多任务里面能有不错的表现,但CNN有个最大a f B 8 Q 5问题是固- C J H定 filter_size 的视野,一方面无法建模更长的序列信息,另一方面 filter_size 的超参调# v k Y d n t节也很繁琐。C; # # ANN本n ` D B N 质是做文本的特征表达工作,而自然语P d 5言处理中更常用的是递归神经网络(RNN, Recurrent Neural N9 0 | . w ` petwork),能够更好的表达上下文信息。具体在文本分类任务中,Bi-direction? l ! 6 1 v *al RNN(实际使用的是双向LSTM)从某种意义上可以理解为可y M , [ w 以捕获变长且双向的的 \"n-gram\" 信息。

双向LSTM算是在自然语z I C言处理领域非常一个标配网络了,在序列标注/命名体识别/seq2seq模型等很多场景都有应用,下图是Bi-LSTM用于分类问题的网络结构原理示意图,黄色的节M 3 Y点分别是前向和后向RNN的输出P Y ( B,示例中的是利用最后一个词的结果直接接全连接层softmax输出了。

用深度学习解决大规模文本分类问题 - 综述和实践

4)TextRNN + Attention

CNN和RNN用在文本分类任务中尽管效果显著,但都有一个不足的地方就是不够直观,可解释性不好,特别是在分析badcase时候感受尤其深刻。而注意力(Attention)机制是自然语言处理领域一个常用的建模长时间记忆机制,能够很直观的给出每个词对结果的贡献,基本成了Seq2Seq模型的标配了。实K N S 4际上文本分类从某种意义上也可以理解为一种特殊的Seq2SeN 6 a | = S [ ;q,所以考虑把Attention机制引入近来,研究了下学术界果然有类似做法。

Attention机制介绍:

详细介绍Attention恐怕需要一小篇文章的篇幅,感兴趣的可参考14年这B & K -篇paper NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE。

用深度学习解决大规模文本分类问题 - 综述和实践

用深度学习解决大规模文本分类问题 - 综述和实践

用深度学习解决大规模文本分类问题 - 综述和实践

Attention的核心point是在翻译每个目标词(或 预测商品标题文本所属类别)所用的上下文是不同的,这样的考虑显然是更合理的。

TextRNN + Attention 模型:

我们参考了这篇文章 Hierarchical+ Y g ` p e f W Attention Networks for Document Clad B C -ssification,下图是模型的网络结构图,它一方面用层次化的结构保T u ^ :形式了,即:

用深度学习解决大规模文本分类问题 - 综述和实践

最后再接跟TextCNN相同卷积层,pooling层即可,唯一不同的是卷积层 filts | |er_{ : ) r 4 Lsize = 1就可以了,不再需要更大 filter_size 获得更大视野,这里词的表示也可以只用双向RNN输出。


三、一点经验

理论和实践之间的Gap往往差异巨S 6 . I f ; G H大,学术paper更关注的是模型架L N I ] d { U N 9构设计的新颖性等,更重要的是新的思路;而实践最重要的是在落地5 * ? L m T场景的K 6 Z ) G 0 q效果,关注的点c # I C和方法都不一样。这部分简单梳理实= A _ _ f际做项目过程中的一点经验教训。

模型显然并不是最重要的:不能否认,好的模型设计对拿到好结果的至关重要,也更是学术关注热点。但实际9 Q . i W f D )使| ] p x _ & @ |用中,模型的工作量占l E X / y s的时间其实相对比较少。虽然再第二部分介绍了5种CNN/s 9 B % + 0 ; 4RNN及其变体的模型,实际中文本分类任务单纯用CNN已经足以取得# D 6 F m h很不错的结果了,我们的实验测试RCNN对l ? D 准确率提升大约1%,并不是十分的显著。最佳实践是先用TextCNN模型把整体任务效果调试到最: 9 & y ] G s %好,再尝试改进模型。

理解你的数据:虽1 J * ^ m然应用深度学习有一个很大的优势是不再需要繁琐低效的人工特征工程,然而如果你只是把他当做V P p q H ; o I一个黑盒,难免会经常怀疑人生。一定要理解你的数据,记住无论传统方法还是深度学习方法,数据 sense 始终非常重要。要重视 badcase 分析,明白你的数据是否适合,为什么对为什么错。

关注迭代质量 - 记录和分析你的每Q } ` 8次实验:迭代速度是决定算法项目成败的关键,学过概率的同学都n L N . X N z v很容易认同。而算法项目重要的不只是迭代速度,一定要关注迭代质量。如果你没有搭建一个快速实验分析的套路,迭代速度再快也只会替你公司心疼宝贵的计算资源。建议记录每次实验,实验分析至少回答这三个问题:为什么要实验?结论是什么?下一步怎么实验?

超参调节:超参调节是各位% Y Q . ? h / r I调参工程师的日常了,推荐一篇文本分类实践的论文 A Sensitivity Analysis of (and Practitioners’ GZ u h 7 [ a ` .uide to) Coo F f ,nvolutional Neural Networks for Sentence Classification,里面贴了一些超参的对比实验,如果你刚开始启动文本分析任务,不妨按文h i = 9 I X ,章 c U C e }的结果设置超参,怎么最快的得到超参调节其实是一个非常重要的问题,可以读读 萧瑟的这篇文章 深度学习网| # N % ~络调参技巧 - 知乎专栏。

一定要用 dropout:有两种情况可以不用:数据C a | T J h 4 e量特别小,或者你用了更好的正则方法,比如bn。实际中我们尝试了不同参数的dropout,最好的还是0.5,所以如果你的计算资源很 f w 2 s m .有限,默认0.5是一个很好的选择。

fine-tuning 是必选的:上文聊到了,如果只是使用word2vec训练的词向量作为特征表示,我赌你一定会损失很大的效果。

未必一定要 softmax loss:这取决与你的数据,如果你的任务g L L - Q R { N是多个类别间非互斥,可以试试着训练多个二分类器,我们调整后准确率还是增加了>1%。

类目不均衡问题:基本是一个在很多场景都验证过的结论:如果你的loss被一部分类别dominate,M V 0 _ l d对总体而言大多是负向的。建议可以尝试类似 booststrap 方法调整 loo O G f 9 6ss 中样本权重方式解决。

避免训练震荡:默认一定要增加随机采G H w样因素尽可能使得数据分布iid,默认shuffle机制能使得训练结果更稳定。如果训练模型仍然很震荡,可以考虑调整学习率或 mini_batch_size。

没有收敛前不要过早的下结论:玩到最后的才是玩的最好的,特别是一些新的角度的测试,不要轻易否定,至少要等到收敛吧。


四、写在最后

几年前校招面阿里时,一面二面聊的都是一个文本分类的项目(一个新浪微博主题分类的学校课题项目),用的还是文中介绍的传统的做法。面试时对特征项处理和各个分类器可谓如数^ z C 5 |家珍,被要求在白板上写了好几个特征选择公式,短短几年传统做法已经- q 1 s 0 }被远远超越,不得不感慨深度学习的发展。

值得感慨的一方面是今天技W a 1 R k $ P /术的发展非常快,故步自封自然是万万万万不可取,深知还有很多理论尚且不懂还要继续深读paper;另一方面,理解理论原理和做好项目间实际非常有巨大的gap,特别是身处工业界的同仁们,学术圈值得钻但要把握分寸,如果仅仅追逐技术深度,不免容易陷入空中阁楼。

最后老规矩再次安利下我们team的招聘,对淘宝搜索排序和自然语言处理方向感兴趣的同学欢迎邮件我 qingsong.huaqs@taobao.com,来淘宝,一起成长!

以上,感谢阅读。


用深度学习解决大规模文本分类问题 - 综述和实践

测试项目发展工作做好主题上犹开发比特币