文本分类的一些建议

  1. 文本分类模型
    • 常用的文本分类方法有,TF-IDF、Word2Vec、NB、SVM、LR、RNN、CNN等
    • 传统的文本分类模型需要大量的特征工程,而基于神经网络的模型,通过向量化词语,可以省去大量的特征工程。往往有比较好的效果
    • 使用RNN模型可以捕捉文本的上下文信息,CNN模型的效果受window大小的影响比较大,window的大小定义了模型的“视野”的大小,所以这里我们使用RNN模型,常见的实现有LSTM/GRU等
    • 通常双向的RNN比单向的效果更好
    • 由于地址的长度不是固定的,RNN模型可以选择动态的RNN或者padding句子长度后进入静态的RNN。动态的RNN的好处是输入的句子长度可以不固定;可以节省memory,可以长度长度不固定的语句。实验证明动态的RNN效果更好
    • 一定要使用dropout, dropout的作用主要相当于做bagging,可以提升模型的泛化能力。通常0.5效果比较好
    • 词向量的问题。Word2vec通常有两种方法。1.CBOW;2.skip-gram。对于大数据集,skip-gram效果更好
    • 词向量加入训练模型的效果可以获得可观的提升
    • 多任务loss之间的比例关系,主要靠调参来尝试解决
    • fine tuning可以获得可观的提升
    • 激活函数的选择,在某些情况下,比如学习步数太大的时候,可能会导致神经元的坏死,从而使得模型的效果有损失。在概率类的模型中使用tanh更好

三、线上模型

  1. MultiTask
    • 共享表示提高泛化能力
    • 至于为什么MultiTask能够提高多个任务的效果,参考http://ruder.io/multi-task/
    • 本任务中,由于前面的RNN部分主要为了获得一种泛化的地址向量化的表示方式,所以使用shared-layer方法
  2. 单层的RNN模型
    • draw.io evaluation version
      Dense1:256
      LSTM-layer:1 (256)
      LSTM-layer:0 (256)
      output2:42
      output1:9
      Dense2:128
      Dense3:128
    • 如图使用的为单向RNN
  3. 双向RNN模型
    • draw.io evaluation version
      Dense1:512
      static-bi-directional-LSTM-layer:1 (256)
      static-bi-directional-LSTM-layer:0 (256)
      output2:42
      output1:9
      Dense2:256
      Dense3:256
    • 如图使用的为静态的双向RNN,第二层LSTM输出为(-1,512)的shape的状态
  4. TextRNN+CNN模型
    • TextRNN+CNN的模型结构。其中convolutional-layer采用Bi-directional LSTM来实现。

你可能感兴趣的:(机器学习,算法)