Skip to content

wanghesong2019/BERT-pytorch

 
 

Repository files navigation

BERT-pytorch学习心得

在2023年的2月中旬的凌晨2点,我要结束对BERT-pytorch项目的学习了,这是注册github账号之后第1次相对认真系统的学习一个开源项目,从寒假前夕开始,持续直到现在,坚持下来了离开之前,啰嗦2句,以作纪念!

1.经验

  • 根据代码,结合bert论文,基本掌握了bert的真面目:包括词典构建和token随机替换,句子对随机采样的dataset模块、基于transformer编码器的encoder架构的modeling模块、包括loss计算和梯度下降的trainner模块;
  • 在代码学习的过程中,掌握了git基本操作,github的使用习惯(自己的注释都合并到了master分支)和常见pytorch API用法;
  • 开源项目学习最好结合论文看,这样就将理论和实践结合起来了,当然最好是能灌入数据跑起来

2.教训

  • 代码逐行看了,也搭建了bert-pytorch环境,但是没有结合数据去运行查看结果,故调参经验并没有增加
  • 项目学习没有指定里程碑时间表,拖沓
  • 后续的开源项目学习,一定要结合数据,运行起来
  • 本来想好好写一篇readme,但是到头有泄气了。

bert理解记录

20230213:今天和大华同事明浩讨论了bert的embedding部分:由token到初始化的embedding向量是怎么实现的?他认为初始化的embedding向量会参与到训练学习中,但是晚上我又看了下该项目,发现本项目的embedding模块只是承担着token的随机初始化过程,之后就会进到attention模块,先线性投影成querey,key,value之后就开始了注意力机制的计算;由此可以认为embedding模块还只是数据预处理的一部分,是不会参与到训练中的;

另外一个问题是为什么可以随机初始化embedding?我认为主要是token的索引就是随机的(现到先得),也就是说不管是token的index,还是初始的embedding向量,只要固定好key-value关系即可,不含任何的语义信息;这样就能圆回来了:如果初始化的embedding是模型参数,参与到学习训练,就破环了key-value关系的确定性;

About

BERT pytorch源码学习记录

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.9%
  • Makefile 0.1%