前面一段时间一直忙着参加知乎看山杯机器学习挑战赛,现在比赛结束了想着总结一下最近的收获。因为这是一个多标签多类别的文本分类问题,而且题目非常适合用深度学习相关的知识去做,正好结合着这个竞赛把之前一段时间的学习成果检验一下。接下来我会分成常用模型总结、多标签/多类别专题、竞赛实战三部分进行介绍。
首先我们先来总结一下文本分类中常用的几个深度学习模型,这里可以参考brightsmart大神在github上面开源出来的代码,自己在做竞赛的时候也进行了参考,收获很大,下面我也会部分引用其代码来阐述。他给出了几乎可以用于文本分类的所有基础模型及相关代码实现(基于TensorFlow),是一份很棒的总结!接下来我们详细的介绍一下每个模型的原理。
FastText
正好最近做商品分类的时候用到这个模型,了解了一下,是facebook在2016年提出来的模型,代码可以直接使用这里的。这个模型其实算不上深度学习,他跟word2vec的模型极其相似,即输入层是文本中的单词,然后经过一个嵌入层将单词转化为词向量,接下来对文本中所有的词进行求平均的操作得到一个文本的向量,然后再经过一个输出层映射到所有类别中,可以参考Bag of Tricks for Efficient Text Classification这篇论文,里面还详细论述了如何使用n-gram feature考虑单词的顺序关系,以及如何使用Hierarchical softmax机制加速softmax函数的计算速度。模型的原理图如下所示:
- 这种模型的优点在于简单,无论训练还是预测的速度都很快,比其他深度学习模型高了几个量级
- 缺点是模型过于简单,准确度较低。(但是我听说有人只用这个模型竞赛里就做到了0.4的准确度,很厉害)
这里想说的是很多公司的实际场景里面,他们的数据并不像我们平时跑实验那么完美,各种人工标注,数据量也很大等等,很多应用的数据量又小、又很杂乱、甚至还没有标记==,所以那些深度学习的模型并不一定能派上很大的用场,反而这种简单快速的模型用的很多。这里也可以看一下其模型构建部分的代码,真的很简单: