大家好,我是隔壁小王。

Soft-Masked-Bert是复旦大学和字节跳动联合发布的在bert基础上针对文本纠正的网络模型,这里对其细节进行一个梳理。

考虑到我另外一个网络中有讲过bert的细节,因此这里姑且把bert作为一个黑盒,详细介绍下smbert相比与bert改动的部分。

首先上图:

别看它这个图挺唬人,其实改动非常简单,该网络主要加入的是一个错别字的检测网络部分也就是图中的Detection Nerwork。

假设输入的句长是128,embedding后的维度是768,batchsize就定为16好了,那么bert的embedding部分不会变,依旧是token_embedding+position_embedding+segment_embedding,得到的维度是(16,128,768),接下来将这些输入接入到一个双向的GRU里,输出是(16,128,1536)。此时接一个全链接(1536,768)再变回(16,128,768)。此时得到的结果就是图中的pi,也就是说该tensor表示的是当前我这个字是是否是错别字的可能性,当然此处只是检测,该改成啥它还不管。

接下来会有一个e-mask这样的embedding与上述embedding想加,实际上就是第103个字符“[MASK]”的embedding值,维度是(128, 768),接下来按照这个方法计算就可以了:

这里要注意的是pi在计算前会经过一个sigmoid,换句话说,当这个自被认为是错别字时,pi就接近1,否则则接近0。

最终得出的 ei' 就是一个与bert输入同维度的embeddings:(16,128,768)。接下来的事就都是跟bert一模一样的事了。

最后,还有个残差计算,bert的12层transformer block的结果(16,128,768)要与最开始的输入embedding: ei(16,128,768)进行想加,结果也是(16,128,768),然后接全链接和softmax就可以了。

本人的复现源码如下:

https://github.com/whgaara/pytorch-soft-masked-bert​github.com

最后说说测试效果:

因为bert的预训练模型本身就很强大,其实很多基于bert改动的网络在预训练的基础上进行finetune后的结果都不会太差。再考虑到训练的速度,本人没用使用任何预训练模型,只是随机找了一些古诗进行了训练,默认16个epoch,测试集就是将这些古诗随机位置替换一个随机的字,用训练好的模型进行纠正,咱们看看结果如何:

最后说说测试效果:

因为bert的预训练模型本身就很强大,其实很多基于bert改动的网络在预训练的基础上进行finetune后的结果都不会太差。再考虑到训练的速度,本人没用使用任何预训练模型,只是随机找了一些古诗进行了训练,默认16个epoch,测试集就是将这些古诗随机位置替换一个随机的字,用训练好的模型进行纠正,咱们看看结果如何:

Bert epoch0:

EP_0 mask loss:0.15134941041469574

EP:0 Model Saved on:../../checkpoint/finetune/mlm_trained_128.model.ep0

top1纠正正确率:0.81

top5纠正正确率:0.91

Bert epoch8:

EP_train:8: 100%|| 170/170 [00:53<00:00, 3.20it/s]

EP_8 mask loss:0.010850409045815468

EP:8 Model Saved on:../../checkpoint/finetune/mlm_trained_128.model.ep8

top1纠正正确率:0.94

top5纠正正确率:0.98

Bert epoch15:

EP_train:15: 100%|| 170/170 [00:53<00:00, 3.21it/s]

EP_15 mask loss:0.002929957117885351

EP:15 Model Saved on:../../checkpoint/finetune/mlm_trained_128.model.ep15

top1纠正正确率:0.97

top5纠正正确率:0.99

soft-masked-bert epoch0:

EP_0 mask loss:0.11019379645586014

EP:0 Model Saved on:../checkpoint/finetune/mlm_trained_128.model.ep0

top1纠正正确率:0.88

top5纠正正确率:0.91

soft-masked-bert epoch8:

EP_train:8: 100%|| 170/170 [01:01<00:00, 2.74it/s]

EP_8 mask loss:0.011160945519804955

EP:8 Model Saved on:../checkpoint/finetune/mlm_trained_128.model.ep8

top1纠正正确率:0.93

top5纠正正确率:0.98

soft-masked-bert epoch15:

EP_train:15: 100%|| 170/170 [01:01<00:00, 2.75it/s]

EP_15 mask loss:0.0014254981651902199

EP:15 Model Saved on:../checkpoint/finetune/mlm_trained_128.model.ep15

top1纠正正确率:0.94

top5纠正正确率:0.98

总结下:smbert收敛快一点,但是结果没有bert好,速度也会慢一点。令我疑惑的是smbert最后加的残差网络,ei是带有错字信息的输入内容,好不容易纠错完的结果最后再加一个带有错误信息的原始输入,不是很懂。上面的smbert就是我将残差去掉以后的结果,如果将残差加上,正确率还要降1个点,我想这正论证了我的想法。当然,git上的代码没有任何部分缺失的。

Soft-Masked-Bert网络细节解读相关推荐

  1. NLP突破性成果 BERT 模型详细解读 bert参数微调

    https://zhuanlan.zhihu.com/p/46997268 NLP突破性成果 BERT 模型详细解读 章鱼小丸子 不懂算法的产品经理不是好的程序员 ​关注她 82 人赞了该文章 Goo ...

  2. 从Attention到Bert——1 Attention解读

    下一篇从Attention到Bert--2 transformer解读 文章目录 1 Attention的发展历史 2015-2017年 2 Attention的原理 3 Multi-Head Att ...

  3. 论文浅尝 | 使用孪生BERT网络生成句子的嵌入表示

    论文笔记整理:吴杨,浙江大学计算机学院,知识图谱.NLP方向. https://www.ctolib.com/https://arxiv.org/abs/1908.10084 动机 谷歌的 BERT ...

  4. Faster RCNN超详细入门 02 网络细节与训练方法

    文章目录 前言 论文结构 Abstract Introduction Related Work Region Proposal Network Experiments Conclusion 网络架构 ...

  5. YOLOV7详细解读(一)网络架构解读

    YOLOV7详细解读 网络架构解读 YOLOV7详细解读 前言 一.YOLOV7是什么? 二.网络架构 1.架构图总览 2.CBS模块解读 3.CBW模块解读 4.REP模块解读 5.MP模块解读 6 ...

  6. Pytorch Bert源码解读

    Bert 源码解读 从 CV 转 NLP 有小半年了,一直在用 Bert 系列做一些自然语言理解任务,包括命名实体识别.关系抽取,文本结构化等信息抽取任务.之前开发任务紧,Bert 拿来就用了,很多代 ...

  7. 孪生网络图像相似度_论文浅尝 | 使用孪生BERT网络生成句子的嵌入表示

    论文笔记整理:吴杨,浙江大学计算机学院,知识图谱.NLP方向. https://www.ctolib.com/https://arxiv.org/abs/1908.10084 动机 谷歌的 BERT ...

  8. Pytorch构建网络细节总结

    Pytorch构建网络细节总结 optimizer.step() 和 scheduler.step() 的区别 定义: 区别: .to(device)与.cuda()的区别 .to(device) 可 ...

  9. 用于乒乓球运动分析的深度网络TTNet解读

    用于乒乓球运动分析的深度网络TTNet解读 深度学习与乒乓球运动分析的有趣融合 问题难点 相关工作 OpenTTGames数据集 提出的方法 结果 深度学习与乒乓球运动分析的有趣融合 首先,这是基于深 ...

  10. NLP新秀:BERT的优雅解读

    恰逢春节假期,研究了一下BERT.作为2018年自然语言处理领域的新秀,BERT做到了过去几年NLP重大进展的集大成,一出场就技惊四座碾压竞争对手,刷新了11项NLP测试的最高纪录,甚至超越了人类的表 ...

最新文章

  1. 算力超英伟达?华为推出两款“昇腾”芯片;五大AI战略正式公布
  2. 【数据挖掘】高斯混合模型 ( 与 K-Means 每个步骤对比 | 初始参数设置 | 计算概率 | 计算平均值参数 | 计算方差参数 | 计算高斯分布概率参数 | 算法终止条件 )
  3. P3225 [HNOI2012]矿场搭建
  4. RabbitMQ之监控(1)
  5. Flexible 弹性盒子模型之CSS flex-shrink 属性
  6. 3.3 其他因素3.3.1 Fork子进程
  7. Ubuntu18.04下C++编译tensorflow并在QT中使用
  8. 图书馆管理系统UML各种图
  9. 苹果手机温度测试软件,苹果手机测温神器上线啦!
  10. 3d max材质贴图
  11. c百分号输出格式汇总
  12. 打桩(Stubbing), Mocking 和服务虚拟化的差异
  13. 空间换时间小例子(2)
  14. 计算机多媒体技术的应用,计算机多媒体技术及其应用.ppt
  15. 盛世昊通:数字汽车的未来由谁来书写
  16. Python 、Sqlite3数据库、单片机 、RC522 -公交卡管理系统(含部分源码)#可刷卡登陆
  17. 读,写,删,复集合脚本
  18. 〖OKaimi点金胜手_2019年4月〗走地大球分析系统|万胜
  19. 社交网络SNS的好友推荐算法
  20. 仿360影视网站模板html

热门文章

  1. c语言maxval函数,fortran语言常用函数
  2. PySpark 之 连接变换 union、intersection、subtract、cartesian
  3. Laravel和Vue提供支持的VueFileManager v2.0.2私有云盘多用户网盘程序源码
  4. 卸载 Notepad++ !事实已证明,它更牛逼……
  5. Moveit更换默认规划器KDL为TraceIk
  6. Appro DM36x IPNC 4.0 开发环境配置
  7. FPGA芯片供电总结
  8. Reactjs项目构建
  9. Ubuntu下切换root用户认证失败解决方案
  10. 春天的致富梦ZZNU