参考:Docs
https://datawhaler.feishu.cn/wiki/PztLwkofsi95oak2Iercw9hkn2g
task2
-
赛题深入解析:赛题背景
-
赛题数据分析
-
基于seq2seq的机器翻译任务的代码实现
文档结构
spacy安装界面
上传压缩包en_core_web_trf 巨慢无比。。。。。
运行代码就完成啦!!
下面是摘抄的内容:
基于 Seq2Seq 的 Baseline 详解
当前机器翻译任务的主流解决方案是基于神经网络进行建模,依据赛题背景中意思,也是希望我们能用神经网络解决此英文翻译中文的任务。
配置环境
运行环境是基于魔搭
平台进行模型训练,这里不再重复说明。另外,有几个包需要额外安装:
-
torchtext :是一个用于自然语言处理(NLP)任务的库,它提供了丰富的功能,包括数据预处理、词汇构建、序列化和批处理等,特别适合于文本分类、情感分析、机器翻译等任务
-
jieba
**:**是一个中文分词库,用于将中文文本切分成有意义的词语 -
sacrebleu:用于评估机器翻译质量的工具,主要通过计算BLEU(Bilingual Evaluation Understudy)得分来衡量生成文本与参考译文之间的相似度
pip install torchtext pip install jieba pip install sacrebleu
-
spacy:是一个强大的自然语言处理库,支持70+语言的分词与训练
这里,需要安装 spacy 用于英文的 tokenizer(分词,就是将句子、段落、文章这种长文本,分解为以字词为单位的数据结构,方便后续的处理分析工作),环境的安装参考:Install spaCy · spaCy Usage Documentation,
需要注意的是,使用命令!python -m spacy download en_core_web_trf
安装 en_core_web_sm 语言包非常的慢,经常会安装失败,这里我们可以离线安装**。由于en_core_web_sm 对 spacy 的版本有较强的依赖性,你可以使用pip show ``s``pac``y``
命令在终端查看你的版本,可以看到我的是 3.7.5 版本的 spacy。**
然后我们从该路径下:Releases · explosion/spacy-models · GitHub 安装对应版本的 en_core_web_trf 语言包,可以看到我的 en_core_web_trf 3.7.3 版本的要求 spaCy >=3.7.2,<3.8.0,刚好满足 3.7.5的 spacy
将下载到本地的压缩包上传到魔搭平台上的 dataset 目录下:
然后使用 !pip install ../dataset/en_core_web_trf
安装英文语言包:
pip install -U pip setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple pip install -U 'spacy[cuda12x,transformers,lookups]' -i https://pypi.tuna.tsinghua.edu.cn/simple pip install ../dataset/en_core_web_trf-3.7.3-py3-none-any.whl
数据预处理
机器翻译任务的预处理是确保模型能够有效学习源语言到目标语言映射的关键步骤。预处理阶段通常包括多个步骤,旨在清理、标准化和转换数据,使之适合模型训练。以下是机器翻译任务预处理中常见的几个处理步骤:
-
清洗和规范化数据
-
去除无关信息:删除HTML标签、特殊字符、非文本内容等,确保文本的纯净性(本赛题的训练集中出现了非常多的脏数据,如“Joey. (掌声) (掌声) 乔伊”、“Thank you. (马嘶声) 谢谢你们”等这种声音词)
-
统一格式:转换所有文本为小写,确保一致性;标准化日期、数字等格式。
-
分句和分段:将长文本分割成句子或段落,便于处理和训练。
-
-
分词
-
分词:将句子分解成单词或词素(构成单词的基本组成部分,一个词素可以是一个完整的单词,也可以是单词的一部分,但每一个词素都至少携带一部分语义或语法信息),这是NLP中最基本的步骤之一。我们这里使用了使用
jieba
对中文进行分词,使用spaCy
对英文进行分词。
-
-
构建词汇表和词向量
-
词汇表构建:从训练数据中收集所有出现过的词汇,构建词汇表,并为每个词分配一个唯一的索引。
-
词向量:使用预训练的词向量或自己训练词向量,将词汇表中的词映射到高维空间中的向量,以捕捉语义信息(当前大模型领域训练的 embedding 模型就是用来完成此任务的)。
-
-
序列截断和填充
-
序列截断:限制输入序列的长度,过长的序列可能增加计算成本,同时也可能包含冗余信息。
-
序列填充:将所有序列填充至相同的长度,便于批量处理。通常使用
<PAD>
标记填充。
-
-
添加特殊标记
-
序列开始和结束标记:在序列两端添加
<SOS>
(Sequence Start)和<EOS>
(Sequence End)标记,帮助模型识别序列的起始和结束。 -
未知词标记:为不在词汇表中的词添加
<UNK>
(Unknown)标记,使模型能够处理未见过的词汇。
-
-
数据增强
-
随机替换或删除词:在训练数据中随机替换或删除一些词,增强模型的鲁棒性。
-
同义词替换:使用同义词替换原文中的词,增加训练数据的多样性。
-
-
数据分割
-
划分数据集:将数据划分为训练集、验证集和测试集,分别用于模型训练、参数调整和最终性能评估(该赛题中已划分好,不需要自己进行划分)
-
模型训练
在源语言句子的表示形式确定之后,需要设计相应的编码器和解码器结构。在当今主流的神经机器翻译系统中,编码器由词嵌入层和中间网络层组成:
-
当输入一串单词序列时,词嵌入层(embedding)会将每个单词映射到多维实数表示空间,这个过程也被称为词嵌入。
-
之后中间层会对词嵌入向量进行更深层的抽象,得到输入单词序列的中间表示。中间层的实现方式有很多,比如:循环神经网络、卷积神经网络、自注意力机制等都是模型常用的结构。
解码器的结构基本上和编码器是一致的,在基于循环神经网络的翻译模型中,解码器只比编码器多了输出层,用于输出每个目标语言位置的单词生成概率,而在基于自注意力机制的翻译模型中,除了输出层,解码器还比编码器多一个编码解码注意力子层,用于帮助模型更好地利用源语言信息。
通过循环网络对源语言文本进行编码,并生成目标语言翻译结果的过程十分简单。然而,它仅仅使用一个定长的向量 $$h_{m}$$ 编码整个源语言序列。这对于较短的源语言文本没有什么问题,但随着文本序列长度的逐渐加长,单一的一个向量 hm 可能不足以承载源语言序列当中的所有信息。
翻译质量评价
传统观点把翻译分为“信”、“达”、“雅”三个层次,而忠诚度体现的是一种“信”的思想,而流畅度体现的是一种“达”的思想。不过“雅”在机器翻译评价中还不是一个常用的标准,而且机器翻译还没有达到“雅”的水平,是未来所追求的目标。给定评价标准,译文质量评价有很多实现方式,下图给出了机器翻译译文评价方法的逻辑关系图:
-
人工评价。当需要对系统进行准确的评估时,往往采用人工评价。比如,对于机器翻译的一些互联网应用,在系统上线前都会采用人工评价对机器翻译系统性能进行测试。当然,这种方法的时间和人力成本是最高的。
-
有参考答案的自动评价。由于机器翻译系统研发过程中需要频繁地对系统性能进行评价,这时可以让人标注一些正确的译文,之后把这些译文作为参考答案与机器翻译系统输出的结果进行比对。这种自动评价的结果获取成本低,可以多次重复,而且可以用于对系统结果的快速反馈,指导系统优化的方向。
-
无参考答案的自动评价。在很多应用场景中,在系统输出译文时,使用者希望提前知道译文的质量,即使这时并没有可比对的参考答案。这样,系统使用者可以根据这个对质量的“估计”结果有选择地使用机器翻译译文。严格意义上说,这并不是一个传统的译文质量评价方法,而是一种对译文置信度和可能性的估计。