“Datawhale AI 夏令营”--NLP方向Task2笔记

真的就是小白学了一点点,我觉得很不成熟,分享出来我觉得重要的出来看看(卑微ing)

首先还是和Task1里的基本差不多,先把dataset.zip放进去再解压,然后会有解压后的文件。

之后开始Task2的学习过程了。

1.配置环境

    这是我觉得特别麻烦的一步,可能只是对于2来说,我看飞书上的task3好像才是上分秘诀,这个环境真的配了好久,先直接用pip把torchtext,jieba,scarebleu三个东西放进去,这个还是挺简单的,就是把pip前面的!删掉再执行就好了。这三个东西的解释放在下面了:

  • torchtext :是一个用于自然语言处理(NLP)任务的库,它提供了丰富的功能,包括数据预处理、词汇构建、序列化和批处理等,特别适合于文本分类、情感分析、机器翻译等任务

  • jieba是一个中文分词库,用于将中文文本切分成有意义的词语

  • sacrebleu:用于评估机器翻译质量的工具,主要通过计算BLEU(Bilingual Evaluation Understudy)得分来衡量生成文本与参考译文之间的相似度

我写的就是这样,直接就装上了

然后就是我看着教程弄半天的spacy库(spacy:是一个强大的自然语言处理库,支持70+语言的分词与训练)。这里先是要去https://spacy.io/usage里配一个和魔搭平台适应的配置,然后复制下面的命令行进去就行。这里我删掉最后一行了,因为最后一行这样太慢了,换下面那种方法

这里我的第三个命令行python -m spacy download en_core_web_trf在我的本地下载的太慢了,所以我用了视频里说的另一个方法:

    从另一个路径https://github.com/explosion/spacy-models/releases安装对应版本的en_core_web_trf 语言包。但是这个在我的谷歌浏览器上还是很慢,460MB要下十几个小时,最后我还是用的发给我的现成的安装包安装的,先装到本地上,然后拖入dataset文件里,再用pip install ../dataset/en_core_web_trf-3.7.3-py3-none-any.whl命令装到环境里。这里的时候我怎么也不对,才知道../dataset/en_......是从一开始寻找,而我当时已经cd MT 里了,所以用一个点./dataset/en_.......就i可以了,这样才吧环境装好。

2.数据预处理

机器翻译任务的预处理是确保模型能够有效学习源语言到目标语言映射的关键步骤。其中主要有一些步骤:

  • 清洗和规范化数据

    • 去除无关信息:删除HTML标签、特殊字符、非文本内容等,确保文本的纯净性(本赛题的训练集中出现了非常多的脏数据,如“Joey. (掌声) (掌声) 乔伊”、“Thank you. (马嘶声) 谢谢你们”等这种声音词)【大概理解就是别让一些拟声词,名字什么什么的一堆影响了你的翻译结果】

    • 统一格式:转换所有文本为小写,确保一致性;标准化日期、数字等格式。【通通统一,听着很重要的一步,秦始皇还统一了一堆,很重要】

    • 分句和分段:将长文本分割成句子或段落,便于处理和训练。【方便一点,谁也不想看一大段然后迷迷雾雾的】

  • 分词

    • 分词:将句子分解成单词或词素(构成单词的基本组成部分,一个词素可以是一个完整的单词,也可以是单词的一部分,但每一个词素都至少携带一部分语义或语法信息),这是NLP中最基本的步骤之一。我们这里使用了使用jieba 对中文进行分词,使用spaCy对英文进行分词。【嗯,分开才好对应上,这样才能变成更基础的东西,才有更多的排列组合,才是机器运算发挥的舞台】

  • 构建词汇表和词向量

    • 词汇表构建:从训练数据中收集所有出现过的词汇,构建词汇表,并为每个词分配一个唯一的索引【分配索引,保证这个序号能对应到你,挺重要的】

    • 词向量:使用预训练的词向量或自己训练词向量,将词汇表中的词映射到高维空间中的向量,以捕捉语义信息(当前大模型领域训练的 embedding 模型就是用来完成此任务的)。

  • 序列截断和填充

    • 序列截断:限制输入序列的长度,过长的序列可能增加计算成本,同时也可能包含冗余信息。

    • 序列填充:将所有序列填充至相同的长度,便于批量处理。通常使用<PAD>标记填充。

  • 添加特殊标记

    • 序列开始和结束标记:在序列两端添加<SOS>(Sequence Start)和<EOS>(Sequence End)标记,帮助模型识别序列的起始和结束

    • 未知词标记:为不在词汇表中的词添加<UNK>(Unknown)标记,使模型能够处理未见过的词汇

  • 数据增强

    • 随机替换或删除词:在训练数据中随机替换或删除一些词,增强模型的鲁棒性。【鲁棒性???好像是新名词{鲁棒性(Robustness)是指系统或算法在面对异常或危险情况时,仍能保持稳定和可靠运行的能力。}百度来的,凑活看】

    • 同义词替换:使用同义词替换原文中的词,增加训练数据的多样性。

  • 数据分割

    • 划分数据集:将数据划分为训练集、验证集和测试集,分别用于模型训练、参数调整和最终性能评估(该赛题中已划分好,不需要自己进行划分)【嘿嘿嘿嘿,这个不用我管】

这里用这些是因为我看人家代码做的就是这些,然后我没怎么经过很大的修改,迷迷糊糊就先按着跑的这些要求还是蛮清楚的,但是我只能看着人家的代码才觉得能实现这些要求,自己根本憋不出一点。所以对这一部分还只是在了解上(汗——)

3.模型训练

编码器-解码器模型,刚认知到是觉得和之前生物学的转录翻译差不多,不过那个人家就有固定的码,只是随机组合。这个不一样,码都要自己编,挺厉害的。

图是盗的,然后后面那个公式真的我感觉知道就好了,其中每个数是什么清楚,然后这个函数关系就太抽象了。

还有就是翻译性能评价指标BLEU值,还是盗的图,就是20个单词是不错的,一多了也是不太准的样子。

这个的大概目的和原理差不多就是那样,剩下的就是逐步去一一对应然后在反过来对应,解释不了,我感觉我不懂,跳过跳过,笔记嘛,写了几个自己印象深的就行了(狗头保命)。

4.翻译质量评价

人们在使用机器翻译系统时需要评估系统输出结果的质量。这个过程也被称作机器翻译译文质量评价,简称为译文质量评价(Quality Evaluation of Translation)。在机器翻译的发展进程中,译文质量评价有着非常重要的作用。

总的来说就是翻译成“信 达 雅”就ok了,但是雅的标准不一样,所以信达其实就很不错了,我觉得这个图不错,拿来用用。

总的就是这样了,感觉学到的新东西挺多的,也挺感兴趣的,哇哦这种东西真的很酷好吧,反正自己敲代码的时候也是很多细节的问题,总是报错一堆也看不懂,还得问群里的专业人士,最后的分数还是那样,没有多大的提升,但是比按着步骤直接跑通baseline总算明白了点,知道我是在做什么,目的是什么,为什么这样做,学到的挺多的。之前真的一点都不懂,有什么我理解错的还是得多包涵哦(拜托+卑微ing)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值