深入做文本分类的同学都知道,短文本分类相对来说比较难。因为较短的文本包含的信息较少,有时候模型很难学到关键特征。
指出:
对于短文本,CNN配合Max-pooling池化(如TextCNN模型)速度快,而且效果也很好。因为短文本上的关键词比较容易找到,而且Max-pooling会直接过滤掉模型认为不重要特征。具体工作机制是:卷积窗口沿着长度为n的文本一个个滑动,类似于n-gram机制对文本切词,然后和文本中的每个词进行相似度计算,因为后面接了个Max-pooling,因此只会保留和卷积核最相近的词。这就是TextCNN抓取关键词的机制。虽然Attention也突出了重点特征,但是难以过滤掉所有低分特征。而Capsules效果比CNN好,所以我个人觉得在短文本上LSTM/GRU+Capusules是一个不错模型,这也是目前Kaggle Quora比赛上(短文本分类)最好的baseline之一。
但是对于长文本直接用CNN就不行了,TextCNN会比HAN模型泛化能力差很多。当然如果在TextCNN前加一层LSTM,这样效果可以提升很大。
另外还有一点很重要的是,实际使用的模型也要看训练数据, 根据训练数据以及相关任务确定采用哪种模型比较合适, 虽然文本有长短之分,但是对于不同任务还是要考虑是否使用,对于一些简单的任务,长文本分类可以直接上BERT看效果,BERT在长文本效果比短文本好很多,也是因为预训练的时候长文本较多有关系,且因为BERT的网络结构及数据规模,时期在长文本分类等自然语言处理任务中有很好的效果。 对于一些比较复杂的任务来说,可以考虑BERT上拼接其他算法。 短文本可以按前人经验采用TextCNN尝试下效果。
参考链接: