New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BERT、ERNIE、TextCNN做文本分类任务性能对比 #222
Comments
你好,请问这个对比实验用的是公开数据集么?分类任务是做的二分类还是多分类任务呢?之前看一些文章说bert之类的transformer模型的input限制在512个字符,所以说这个512最大的结论是不正确的是么? |
@jackyrpi2016 测试用的数据就是自己随便找的数据啊,只是想看下性能。最大长度是512哈,可能*漏掉了。我是将长文本截断分批进行预测的。做的二分类哈 |
我们最近会升级一版推理程序,专门针对推理速度做优化,请关注。 |
好的,谢谢。话说老哥是校友?中南? 你跑多分类用的是哪个脚本? |
你好,我在运行sh script/zh_task/ernie_base/run_ChnSentiCorp.sh时报错TypeError: new() missing 1 required positional argument: 'text_a', |
数据格式不对,请参考官方给定样例 |
我把batch_size换成 2可以运行,这样对结果的影响会很大吗 |
如果是显存不够,只能将batch_size调小了,但影响应该没有特别大,尽可能调大点吧,不然数据一多就很慢了 |
如果我的文本长度是5000,训练BERT的时候,需要截断成512去训练吗?(就是5000/512)一条数据,当几条使用,还是直接传给模型,长度指定512. |
@sevenold 训练的时候我觉得还是截断吧,不然数据很多信息丢失,我用文本前面n条512长度数据+文本末尾512长度数据训练,效果要更好些 |
您好,请问在训练的时候,如果文本长度是5000,那就是n=5000/512,然后每条文本的向量表示是n个bert向量表示加和求平均吗 |
@jiangix01 我不是这样弄的哈,我就是将这n个文本(512长度)都拿来训练(一般不会全取,整个文本的前后部分信息更重要),觉得学习到的特征多点。预测(涉黄、正常二分类)的时候也是这样,如果只要其中一条预测为涉黄,那么整个文本就判断为涉黄(整个文本假设10*512长度,我拿前3个512文本和后2个512文本去预测),这样基本不会出现误判 |
那在训练的时候,我想知道每条样本的向量是咋得来的?如果是n个文本都拿来训练,并不是每n个文本都会有label吧。还是说,如果一条样本的label是0,那么这样样本的n段文本的label都是0? 举个例子,比如一条样本是下列这样子: 然后,比如截断的长度是10 那么每一段就是['这是长征六号运载火箭', '首次进行低倾角发射,', '同时也是长征六号运载', '火箭的第3次飞行。'] |
是你后面理解的那种做法,即如果整个文本label为0,切分后n个文本的label都为0
|
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Feel free to reopen it. Thank you for your contributions. |
以下模型的推理速度、内存占用等均在‘CPU’上考察
【TextCNN、pytorch_bert、tensorflow_bert、ERNIE文本分类任务性能对比】
【以下性能考察结果均经过多次测试】
推理时的数据最长文本有75万中文字符,利用100个文本进行测试。
从内存占用及推理速度指标来看,四种算法中,TextCNN均是最优的。
由于bert及ERNIE并未经过多次fine-tune就已经达到较好泛化效果,因此可以认为其泛化能力会相对textcnn更好些。
pytorch_bert、tensorflow_bert、ERNIE三者相比较,在内存占用方面相差不是很大;但ERNIE在推理速度方面稍差(这个蛮重要),不过ERNIE版本更新很快、另可直接联系其工作团队解答疑问
长文本预测时,尝试了将文本截断(例如:文本长度100000, 则分n=100000//510次)预测,因为长文本前510长度有可能没有重要信息。(例如:【‘娱乐’, ‘赌博’】二分类,截断n次,只要有一次预测为‘赌博’那文本就是赌博类别)
【TextCNN】
推理时模型占用内存大约:546M(稳定)
推理时预测一个文件(完整长文本)平均所需时间:0.095s
多次训练,保存泛化效果最好模型,其在测试集上准确率:95.312%
【Pytorch_bert】
推理时模型占用内存:942M(峰值)
推理时预测一个文本(前128+后382字符)平均所需时间:1.149S
推理时预测一个文本(前510 * 1长度+尾部数据;相当于预测截断成n个510文本)平均所需时间:2.658s
推理时预测一个文本(前510 * 2长度+尾部数据)平均所需时间:3.529s
推理时预测一个文本(前510 * 5长度+尾部数据)平均所需时间:5.233s
推理时预测一个文本(完整长文本)平均所需时间:38.77s
fine-tune模型,其在测试集上准确率:98.82%
【tensorflow_bert】
推理时模型占用内存:988M(峰值)
推理时预测一个文本(前128+后382字符)平均所需时间:1.332S
推理时预测一个文本(前510 * 1长度+尾部数据)平均所需时间:1.485s
推理时预测一个文本(前510 * 2长度+尾部数据)平均所需时间:3.570s
推理时预测一个文本(前510 * 5长度+尾部数据)平均所需时间:7.033s
推理时预测一个文本(完整长文本)平均所需时间:56.18s
fine-tune模型(调节的参数与pytorch_bert一致),其在测试集上准确率:98.90%
【ERNIE】
推理时模型占用内存:1072M(峰值)
推理时预测一个文本(前128+后382字符)平均所需时间:2.227s
推理时预测一个文本(前510 * 1长度+尾部数据)平均所需时间:3.934s
推理时预测一个文本(前510 * 2长度+尾部数据)平均所需时间:6.001s
推理时预测一个文本(前510 * 5长度+尾部数据)平均所需时间:9.835s
推理时预测一个文本(完整长文本)平均所需时间:
fine-tune模型,其在测试集上准确率:98.74%
The text was updated successfully, but these errors were encountered: