文章目录
前言
在Task1中我初步了解了如何一键跑通 baseline和赛题,详情可以参考文档 从零入门NLP竞赛和 Task1:了解机器翻译 & 理解赛题。
今天的任务是对baseline代码做具体解析,让我们知其然更知其所以然!
我可以从中学会 Seq2Seq模型结构、中英文分词、循环神经网络(RNN)、门控循环单元(Gated Recurrent Unit,GRU)等。
一、Seq2Seq模型结构是什么?
Seq2Seq模型(Sequence-to-Sequence模型)是一种用于处理序列到序列的任务的神经网络模型。它由两个主要部分组成:编码器(Encoder)和解码器(Decoder)。
-
编码器(Encoder):
- 接收输入序列(通常是文本序列)并将其转换为一个语义表示或固定长度的向量。
- 常用的编码器结构是循环神经网络(RNN)或者其变种,如长短时记忆网络(LSTM)和门控循环单元(GRU)。
- 编码器的作用是将输入序列编码成一个语义空间中的向量,捕捉输入序列的语义信息。
-
解码器(Decoder):
- 接收编码器生成的语义向量,并将其解码为目标序列(例如翻译的文本或生成的序列)。
- 解码器也通常使用RNN、LSTM或GRU结构,但它们的参数通常是独立训练的,即解码器和编码器并不共享参数。
- 解码器的输出是一个逐步生成的序列,直到生成完整的目标序列为止。
Seq2Seq模型通常用于机器翻译、对话生成、文本摘要等需要将一个序列映射到另一个序列的任务中。
下面是一个应用编码器解码器结构来解决汉译英的例子:
二、中英文分词是什么?
中英文分词是自然语言处理中的一项重要任务,其目的是将连续的文本序列切分成有意义的词或词语。
-
中文分词:
- 中文分词由于汉语没有明显的词语边界,因此需要利用词典、统计信息和规则来切分文本。
- 常见的中文分词方法包括基于词典的正向最大匹配、逆向最大匹配和双向最大匹配,以及基于统计和机器学习的方法如隐马尔可夫模型(HMM)、条件随机场(CRF)和深度学习模型。
-
英文分词:
- 英文分词相对简单,通常通过空格进行分割,但也涉及到处理标点符号和特殊词汇等问题。
- 英文分词通常可以使用规则或者基于统计的方法来实现,也可以结合机器学习模型进行更精确的切分。
三、循环神经网络是什么?
循环神经网络(RNN)是一种专门用于处理序列数据的神经网络结构,具有记忆功能,能够捕捉数据中的时间依赖关系。
-
结构:
- RNN的基本结构包括一个循环的隐藏状态(hidden state),它在每个时间步接收输入和前一个时间步的隐藏状态作为输入。
- 典型的RNN结构包括一个激活函数(如tanh)来处理输入和隐藏状态之间的非线性关系。
-
应用:
- RNN常用于处理序列数据,如自然语言处理(语言建模、机器翻译)、时间序列预测(股市预测、天气预测)等领域。
四、 门控循环单元是什么?
门控循环单元(GRU)是一种改进的循环神经网络结构,旨在解决长期依赖问题,同时减少了参数数量。
-
结构:
- GRU与传统的RNN相比,引入了更新门(Update Gate)和重置门(Reset Gate)的概念。
- 更新门控制了当前时间步的输入信息与上一时间步的隐藏状态的融合程度,而重置门则控制了如何考虑过去的信息。
- GRU的设计使得它可以更好地捕捉长期依赖关系,同时减少了参数量和计算复杂度。
-
应用:
- GRU在语言建模、机器翻译等领域表现优异,常用于替代传统的RNN结构,同时在效果和速度上都有所提升。
这些技术在自然语言处理和序列建模领域中起着至关重要的作用,帮助解决了多种复杂的语言处理任务。
五、基于 Seq2Seq 的 Baseline 详解
1.配置环境
运行环境我们还是基于魔搭
平台进行模型训练,这里不再重复说明。另外,有几个包需要额外安装:
-
torchtext :是一个用于自然语言处理(NLP)任务的库,它提供了丰富的功能,包括数据预处理、词汇构建、序列化和批处理等,特别适合于文本分类、情感分析、机器翻译等任务
-
jieba
:是一个中文分词库,用于将中文文本切分成有意义的词语 -
sacrebleu:用于评估机器翻译质量的工具,主要通过计算BLEU(Bilingual Evaluation Understudy)得分来衡量生成文本与参考译文之间的相似度
!pip install torchtext !pip install jieba !pip install sacrebleu
-
spacy:是一个强大的自然语言处理库,支持70+语言的分词与训练,用于英文的 tokenizer(分词,就是将句子、段落、文章这种长文本,分解为以字词为单位的数据结构,方便后续的处理分析工作),具体安装步骤前文提到的文档中有。
注意: 在配置环境的时候安装可能报错,可以到https://spacy.io/usage查看解决方法。
2.数据预处理
-
清洗和规范化数据
-
去除无关信息
-
统一格式
-
分句和分段
-
-
分词
-
构建词汇表和词向量
-
词汇表构建:从训练数据中收集所有出现过的词汇,构建词汇表,并为每个词分配一个唯一的索引。
-
词向量:使用预训练的词向量或自己训练词向量,将词汇表中的词映射到高维空间中的向量,以捕捉语义信息(当前大模型领域训练的 embedding 模型就是用来完成此任务的)。
-
-
序列截断和填充
-
序列截断:限制输入序列的长度,过长的序列可能增加计算成本,同时也可能包含冗余信息。
-
序列填充:将所有序列填充至相同的长度,便于批量处理。通常使用
<PAD>
标记填充。
-
-
添加特殊标记
-
序列开始和结束标记
-
未知词标记
-
-
数据增强
-
随机替换或删除词
-
同义词替换
-
-
数据分割
-
划分数据集:将数据划分为训练集、验证集和测试集,分别用于模型训练、参数调整和最终性能评估(该赛题中已划分好,不需要自己进行划分)
-
3.模型训练
神经机器翻译主要采用编码器-解码器(Encoder-Decoder)模型。编码器将源语言句子编码成一个向量,解码器将该向量解码为目标语言句子。
基线代码中实现了一个经典的Seq2Seq模型,使用GRU网络,并加入了注意力机制。注意力机制允许解码器在生成每个输出词时关注编码器产生的所有中间状态,从而更好地利用源序列的信息。
4.翻译质量评价
评估机器翻译系统输出结果的质量,可以采用人工评价、有参考答案的自动评价和无参考答案的自动评价。BLEU是常用的自动评价方法,通过与参考译文的比对来评估翻译质量。
总结
通过对Task2的学习,我理解了Seq2Seq模型结构、中英文分词、循环神经网络(RNN)、门控循环单元(GRU)以及注意力机制等关键概念和技术,为进一步深入学习和应用深度学习技术打下了坚实基础,在遇到困难的时候群里的同学和老师都积极给予了帮助,解决了我很多问题。