本文用于复现SimCSE_Chinese的方法,主要参考已有的代码和论文,再根据自己的环境进行调试。
一、环境搭建
1.我的环境
大家环境尽量满足SimCSE的官方版本,在此基础上根据设备和需要调整版本,我的版本如下:
![环境配置](https://i-blog.csdnimg.cn/blog_migrate/d05f4938f456afbb59a1e48512c86862.png)
2.Pytorch相关问题
由于我之前做过一次关于Pytorch的项目,所以安装过一次,主要流程就是查看自己GPU版本,到pytorch与之匹配的版本(我是低一个版本),再去cuda官网下载对应版本的驱动,现在cuda好像可以集成了不需要下载tool,然后再把其他的补充文件下载好,可以参考一下网上的其他文章。
我的问题是在调用GPU阶段,Anaconda Powershell就可以,甚至新建一个项目中单独测试GPU和pycharm的终端中同样可以,唯独在此项目中就失败,我姑且使用CPU进行训练。
解决:
pytorch安装中解决命令行中gpu为true但是pycharm中gpu为false的问题_gpu false-CSDN博客
环境不匹配,不适用于我;
二、复现依据
文章参考:文本相似度算法 | SimCSE 实战 - 知乎 (zhihu.com)
该链接中包含了代码链接、数据集下载源和代码的部分讲解及结果分析。
文章最后也会附上我的代码链接
三、复现流程及问题
1.数据集格式不全的问题
上述文章链接中提供了STS-B、SNLI、MNLI、ATEC、BQ和PAWSX,缺少代码中所用到的LCQMC数据集。
格式问题讨论:由于我开始跟的是另一篇复现文章:。当时其使用的STS-B数据集是txt文件,但是找了很久,CNCS上的链接失效了,其他地方的只有.data格式。所以我发现本文使用的是.data 数据集,但是LCQMC数据集我只找到了tsv格式(如同一个魔咒一样)。但是经过实验后发现,存储文本内容的这些文件几乎是通用的,.data可以存储二进制和文本两种数据,二进制传输更快;tsv和csv是可以相互转化的,同时文本内容的tsv是可以通过记事本打开的,故而在这里也可以成功装载(load)。
2.模型下载和路径问题
这是我第二次使用预训练模型,对于线上使用和下载使用的方式都很不熟练,这次又走了很多弯路。一方面在github上下载源码中的模型不全(可能在git仓库或者啥的,了解过一点但没接触过,后续可以尝试一下),另一方面就是网络问题(科学上网的方法下载大文件有点堪忧)。
本文使用了三种模型的对比,我就先挑的bert-base-chinese进行尝试,后续的分析和其他的暂不考虑。在内网搜索模型名称,通过其他好心人上传的百度网盘进行下载。
在装载模型的时候经常会报“Model name '......' was not found in tokenizers model name list....”(忘记截图了)
这个问题的解决就是模型的文件不全,需要到网上再补全模型文件,一般包含至少四个文件:vocab.txt、config.json、pytorch_model.bin、tokenizer,我的当时少了tokenizer文件。
3.注意transformer的版本问题(报错AttributeError: 'tuple' object has no attribute 'last_hidden_state')
![BERT返回值问题](https://i-blog.csdnimg.cn/blog_migrate/662666ceeffe4808baa5021f62acf272.png)
![](https://i-blog.csdnimg.cn/blog_migrate/49f9abf7635957aa7ded5f7ff5923346.png)
查看simCSE官方环境标准
![查看环境](https://i-blog.csdnimg.cn/blog_migrate/e30bc4371c819bb196c7260c05c60653.png)