李宏毅2021年机器学习作业7(bert)实验记录

前言

声明:本文参考了李宏毅机器学习2021年作业例程,开发平台是kaggle notebook。

一、问题描述

给机器一个文章和一个问题,要求输出问题的答案,简单来说就是QA问题。
B站作业讲解视频
Kaggle地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关于为什么代码中要控制输入序列的长度。
关于为什么代码中要控制输入序列的长度。
解决方案:
在训练时,对每一个问题的答案附近切一个固定长度的窗口,在测试的时候由于不知道答案的位置信息,切出多个窗口,在每个窗口中找答案。total score最大的为最终的答案。

在这里插入图片描述
在这里插入图片描述

二、实验过程

2.1 跑助教提供的原始代码

在代码中有两个库比较重要:

BertForQuestionAnswering#下载预训练模型
BertTokenizerFast#下载Tokenizer

结果:
在这里插入图片描述
训练时长:10min
Kaggle得分:0.48481 0.47482

2.2 修改窗口

在测试集上做测试时,如果答案在窗口附近或者横跨两个窗口的话,模型会看不到,所以要改成overlapping window
操作:doc_stride = 300在这里插入图片描述

结果:在这里插入图片描述
运行时长:10min
Kaggle得分:0.36217 0.34725
可以看到训练效果变差。所以视频里助教这里讲错了,应该减小doc_stride,才能做到重叠窗口的效果。

操作:doc_stride = 75
结果:在这里插入图片描述
运行时长:12min
Kaggle得分:0.59828 0.57894(显著提升)
结论:正确使用重叠窗口这个技巧可以提升训练结果。

2.3 加Linear Learning rate decay

在这里插入图片描述

操作:在2.2基础上,加入Adjust learning rate manually。
结果:在这里插入图片描述
运行时长:15min
Kaggle得分:0.69627 0.67906
在public score上已经达到medium baseline。
结论:训练时使用Linear Learning rate decay可以提供训练效果。

2.4 改变窗口切取位置

在baseline中,以答案为中点切窗口,导致模型学到本不该学到的信息,比如答案在窗口中间的情况。

操作:窗口选取时加入随机性
结果:在这里插入图片描述
Kaggle得分:0.76446 0.74485(提升明显)
在public score和private score都已经达到medium baseline

2.5 后续可以改进的方向:postprocessing

预测结果中可能有一些错误信息,比如end_index < start_index或者答案为空的情况。
可以在下面这段代码中进行添加内容。
在这里插入图片描述

2.6 后续可以改进的方向:换pre-train model

在这里插入图片描述

https://huggingface.co/models?sort=downloads

三、总结

在这里插入图片描述
由于本人并不是NLP方向的学生,所以对于今天的bert问答任务就不再花过多时间改进了。有兴趣的同学可以在我的代码基础上进行修改。

代码链接:

https://github.com/Wangdaoshuai/LHYML2021-Spring

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值