基于BERT的超长文本分类模型
0.Abstract
本文实现了一个基于BERT+LSTM超长文本分类的模型, 评估方法使用准确率和F1 Score.
项目代码github地址: https://github.com/neesetifa/bert_classification
1.任务介绍
用BERT做文本分类是一个比较常见的项目.
但是众所周知BERT对于文本输入长度有限制. 对于超长文本的处理, 最简单暴力无脑高效的办法是直接截断, 就取开头这部分送入BERT. 但是也请别看不起这种做法, 往往最简单,最Naive的方法效果反而比一顿操作猛如虎 复杂模型来得好.
这里多提一句为什么. 通常长文本的文章结构都比较明确, 文章前面一两段基本都是对于后面的概述. 所以等于作者已经帮你提取了文章大意, 所以直接取前面一部分理论上来说是有意义的.
当然也有最新研究表明取文章中间部分效果也很不错. 在此不展开.
本文实现的是一种基于HIERARCHICAL(级联)思想的做法, 把文本切成多片处理. 该方法来自于这篇论文 <Hierarchical Transformers for Long Document Classification>.
文中提到这么做还能降低self-attention计算的时间复杂度.
假设原句子长为n, 每个分段的长度是k. 我们知道最原始的BERT计算时间复杂度是O(n2), 作者认为,这么做可以把时间复杂度降低到O(nk). 因为我们把n分数据分割成k小份, 那么我们一共要做n/k次, 每次我们的时间复杂度是k2, 即O(n/k * k2) = O(nk)
数据集
这次我们测试该模型在两种语言上的效果. 分别是中文数据集和英语数据集.
中文数据集依旧是我们的老朋友ChineseNLPCorps提供的不同类别商品的评论.
中文数据集传送门
英语数据集来源于Kaggle比赛, 用户对于不同金融产品的评论.
英语数据集传送门
由于两种数据集训练预测上没有什么本质区别, 下文会用英语数据集来演示.
评估方法
本项目使用的评估方法是准确率和F1 Score. 非常常见的分类问题评价标准.
测试集
此项目中直接取了数据集里一小部分作为测试集.
2.数据初步处理
数据集里有55W条数据,18个features.
我们需要的部分是product(即商品类别)以及consumer complaint narrative.