SimCSE 复现问题与解决方法

本文用于复现SimCSE_Chinese的方法,主要参考已有的代码和论文,再根据自己的环境进行调试。

一、环境搭建

1.我的环境

大家环境尽量满足SimCSE的官方版本,在此基础上根据设备和需要调整版本,我的版本如下:

环境配置
环境列表(conda list)

 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返回值问题
弹出问题:AttributeError: 'tuple' object has no attribute 'last_hidden_state'
回到出问题的代码

查看simCSE官方环境标准

查看环境
查看原文环境使用transformer为4.2.1​​

四、经过以上的问题排除,代码就能运行了

 本文代码链接:Bpig-C/simCSE_chinese_Reproduce (github.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Java 中解决一个无法问题可能会比较具有挑战性,因为无法问题往往是不稳定或不可预测的。以下是一些常见的方法,可以帮助你解决这类问题: 1. 调试:使用调试工具,例如断点调试器,逐步执行代码并观察变量的值。这有助于找到问题发生的具体位置,并理解代码执行期间发生了什么。 2. 日志记录:通过在关键代码部分添加适当的日志语句,可以在问题发生时记录相关信息。这样可以帮助你追踪问题并了解代码的执行路径。 3. 异常处理:在可能发生异常的地方使用 try-catch 块来捕获异常并记录相关信息。这样可以帮助你了解问题发生的原因。 4. 单元测试:编写针对具体场景和功能的单元测试,以验证代码的正确性。通过测试不同的输入和边界条件,可以发隐藏的问题。 5. 代码审查:请其他开发人员或同事对你的代码进行审查。他们可能会发你忽略的一些细微问题或不合理的设计。 6. 版本控制:使用版本控制系统(如Git)来跟踪代码更改并恢到先前的工作状态。这样可以帮助你在问题后回到一个可工作的代码版本。 7. 关注环境:检查操作系统、Java 运行时环境以及其他相关软件或硬件的配置。有时问题可能与特定的环境设置或依赖项有关。 8. 向社区求助:如果你无法解决问题,可以在相关的 Java 开发社区或论坛上向其他开发者寻求帮助。他们可能会提供有关类似问题解决方案或指导。 尽管这些方法可能不一定能解决所有的无法问题,但它们可以帮助你更好地理解和定位问题,并增加解决问题的几率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值