Datawhale AI夏令营 NLP方向 Task2之我与跑通代码的艰难抗争

Task2中所给出的baseline代码并不是完整的,即不能像Task1所给的代码那样一键跑通,需要在这个基础上做一些简单的补充。在跑这个任务时建议将代码与学习指南中的内容对照着看,不然很容易报错,对于纯小白来说还是很棘手的,下面我就自己在操作过程中遇到的问题及补充的内容进行一个记录,供自己及有需要的朋友参考。另外本人几乎无任何编程基础,下述操作仅限于能将程序跑通并输出一个看似还算正常的结果,如有任何问题欢迎各位大佬提出修改建议,非常感谢❀

1.先将官方提供的dataset压缩包拖入MT文件夹内,将代码拖入code文件夹。

2.在空白Terminal窗口内,设定工作路径为MT,并将压缩包解压。需要注意的是,进行解压的过程可能花费的时间比较长,即使工作目录中已经出现解压后的dataset文件夹也并不一定意味着已经解压完成,一切以窗口下方的进度条为准,如果读条还没结束则代表解压还未完成,此时直接进行后续操作则很有可能会报错,后续所有涉及到读条的操作均同理。

cd MT
unzip dataset.zip

 3.切换到代码界面,执行baseline中所给的三行“install”代码,我在这里又添加了一个install spacy的操作,不知道是不是画蛇添足,因为之前按原代码跑的时候后面安装spacy里的tokenizer时经常报错(显示什么和什么不适配好像),我看b站上的视频在加载spacy时也是直接用了install的操作,所以就试了一下,添加完以后就没有这个问题了。

!pip install torchtext
!pip install jieba
!pip install sacrebleu
!pip install spacy

4.按着代码继续跑这一段。

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.nn.utils import clip_grad_norm_
from torchtext.data.metrics import bleu_score
from torch.utils.data import Dataset, DataLoader
from torchtext.data.utils import get_tokenizer
from torchtext.vocab import build_vocab_from_iterator
from typing import List, Tuple
import jieba
import random
from torch.nn.utils.rnn import pad_sequence
import sacrebleu
import time
import math

5.在进入spacy官网进行配置时,由于按官网给出的第三行代码!python -m spacy download en_core_web_trf容易报错(学习指南中也有提到),因此我只跑了前两行,第三行的语言包我选择手动下载。这里还有一个需要注意的点是,官网给出的代码和baseline中给出的代码是不一样的,baseline中好像选择了清华大学的下载线路,我使用时会报错,用官网给的代码反而不会。

!pip install -U pip setuptools wheel
!pip install -U 'spacy[cuda11x]'
#python -m spacy download en_core_web_trf

6.手动下载就不用多说了,大家按照学习指南或者群里的指引下载就好,得到一个名为 en_core_web_trf-3.7.3-py3-none-any.whl 的文件,大小约为436Mb。将这个文件直接拖入dataset文件夹中,同样也要耐心等待界面下方的进度条完全读完才可以进行后续的操作,这个过程可能需要比较久的时间。这也是配置环境部分的最后一个报错点了(我在这一部分卡的时间最久)。

7.下载完成之后,跑一下baseline中的第三行代码。这样环境配置部分就完成了。

!pip install ../dataset/en_core_web_trf-3.7.3-py3-none-any.whl

8.后续的代码其实基本上没有什么问题了,我还遇见的两次报错都是因为没有新建程序所需要的文件夹,这里一共需要两个文件夹,分别名为model和results,创建的顺序没有严格要求,只要在跑到需要这两个文件夹的代码之前将其建好即可。具体代码为:

mkdir model
mkdir results

9.另外,我将“数据预处理”部分的第6个单元和“对测试集进行翻译”部分的第1个单元的代码前方的注释符号“#”删去了,让它们也加入到程序中,不知道对于整体结果是否有影响,还有待进一步研究,不过至少按我这样操作是可以把这份代码跑通的。

结尾:在以上的摸索中我前前后后一共输出了三次,每次的操作没有严格地控制变量,所以我也不清楚每次输出的区别究竟在哪里,这三份结果中第一份只出现了“PCB食物链”和“对许多,”两个词,并且重复了非常多行;第二份结果为空白文档;第三份结果看起来似乎还比较正常,只不过正常只是相较于前面两份,细看依旧说得不是人话,提交上去也只有0.03的得分,甚至不如Task1的成绩,希望在Task3中能有更好的表现吧。

-----------------------------------------------------2024.07.20更新-----------------------------------------------------

今天跑完了Task3的代码,整体上其实跟Task2差不多,对之前写过的内容再稍微做一点点补充:

首先是上文的3.中,我在最后添加了“!pip install spacy”的代码,这一步应该是多余的。我在跑Task3的代码时去掉了这一行,程序依然可以正常运行。

其次是如果大家在跑代码时遇到这样的报错:

(报错内容为:pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
pai-easycv 0.11.6 requires timm==0.5.4, but you have timm 1.0.7 which is incompatible.)

这个的大概意思就是我们目前加载的包和它需要的版本不匹配,需要的timm包应该是0.5.4版本的,但我目前加载的是1.0.7版本的,这时只需要重新下载它需要的版本就可以了。具体格式为:

!pip install (包的名称)==(所需要的版本)

例如在上图中我遇到的这个具体问题中,解决方法就是在运行这段代码之前,先跑一个:

!pip install timm==0.5.4

这样就可以解决这一系列的问题了。

有了Task2的基础,跑通Task3还是很轻松的,但是Task3中有些代码跑起来真的非常慢,甚至某些单元要花半个小时左右的时间(当然也有可能是我电脑的问题),不过最后的结果也是成功提到了6分+,无脑上了一波大分,这一期到这里也算是完结撒花啦~

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值