task2_note—— Datawhale AI 夏令营

Datawhale AI 夏令营——从零入门NLP

任务2:从baseline代码详解入门深度学习

1. 环境配置
  • 运行环境:使用魔搭平台进行模型训练。
  • 需要安装的包
    • torchtext:用于自然语言处理任务,提供数据预处理、词汇构建、序列化和批处理等功能。
    • jieba:中文分词库。
    • sacrebleu:用于评估机器翻译质量,计算BLEU得分。
    • spacy:自然语言处理库,支持多语言分词与训练。
2. 安装spacy语言包
  • 使用命令!python -m spacy download en_core_web_trf安装英文语言包,但可能安装失败。
  • 建议离线安装,下载对应版本的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
    
3. 数据预处理
  • 清洗和规范化数据:去除无关信息,统一格式,分句和分段。
  • 分词:使用jieba对中文进行分词,使用spaCy对英文进行分词。
  • 构建词汇表和词向量:从训练数据中构建词汇表,使用预训练或自训练词向量。
  • 序列截断和填充:限制序列长度,填充至相同长度。
  • 添加特殊标记:添加序列开始和结束标记,未知词标记。
  • 数据增强:随机替换或删除词,同义词替换。
  • 数据分割:划分训练集、验证集和测试集。
4. 模型训练
  • 编码器-解码器模型:用于描述输入输出关系,适用于机器翻译。
  • 编码器:由词嵌入层和中间网络层组成,中间层可使用循环神经网络、卷积神经网络、自注意力机制等。
  • 解码器:基于编码器输出生成目标语言序列,使用RNN或自注意力机制。
  • RNN解码器:使用编码器输出的向量作为初始隐状态,逐词生成目标语言。
5. 注意力机制
  • 传统Seq2Seq模型:解码阶段仅依赖编码器的最后一个隐藏状态,不适合长序列。
  • 注意力机制:允许解码器在生成每个输出词时,关注编码器产生的所有中间状态。
6. 翻译质量评价
  • BLEU:Bilingual Evaluation Understudy,用于自动评估机器翻译质量。
  • 评价方法
    • 人工评价:最准确但成本高。
    • 有参考答案的自动评价:使用标注的正确译文与系统输出比对。
    • 无参考答案的自动评价:估计译文质量,用于快速反馈。
7. 任务要求
  • 画出基于注意力机制的GRU神经网络机器翻译:参考基于注意力机制的循环神经网络机器翻译和GRU相关知识。
    绘制一个基于注意力机制的 GRU 神经网络机器翻译模型的示意图。该图将展示模型的编码器和解码器结构,以及注意力机制在其中的作用。以下是详细的步骤和示意图:
  1. 示意图
    以下是使用Mermaid绘制的基于注意力机制的GRU神经网络机器翻译架构示意图:
解码器
编码器
词嵌入
GRU
GRU
GRU
...
当前时间步 t 输入 y_t
GRU
注意力机制
计算上下文向量 c_t
使用 s_t 和 c_t 生成输出
Emb
初始隐藏状态 s_0 = h_n
s_t
计算注意力权重 α_1 α_2 ... α_n
K
输出 y_t
Emb
输入序列 x_1 x_2 x_3 ... x_n
h_1
h_2
h_3
h_n

在这个图中:

  • 编码器部分从输入序列开始,经过词嵌入层和多个GRU单元,最终生成隐状态 ( h_1, h_2, \ldots, h_n )。
  • 解码器部分从初始隐藏状态 ( s_0 ) 开始,接收当前时间步的输入 ( y_t ),经过词嵌入层和GRU单元更新隐状态 ( s_t ),然后通过注意力机制计算注意力权重和上下文向量 ( c_t ),最终生成输出 ( y_t )。

详细解释

编码器
  1. 输入序列

    • 输入序列是一个源语言句子,包含若干单词:x_1, x_2, x_3, ..., x_n
  2. 词嵌入层(Emb)

    • 输入序列中的每个单词通过词嵌入层转换为向量表示:Emb(x_1), Emb(x_2), Emb(x_3), ..., Emb(x_n)
  3. GRU层

    • 每个嵌入向量依次输入到GRU单元中,生成隐藏状态:h_1, h_2, h_3, ..., h_n
    • 这些隐藏状态捕捉了输入序列的信息。

解码器

  1. 初始隐藏状态

    • 解码器的初始隐藏状态 s_0 通常是编码器最后一个隐藏状态 h_n
  2. 当前时间步输入

    • 在解码的每个时间步,解码器输入当前的目标语言单词 y_t
  3. 词嵌入层(Emb)

    • 输入的目标语言单词通过词嵌入层转换为向量表示:Emb(y_t)
  4. GRU层

    • 嵌入向量输入到GRU单元中,生成当前时间步的隐藏状态 s_t
  5. 注意力机制

    • 注意力机制根据当前隐藏状态 s_t 计算源语言序列中每个隐藏状态的注意力权重:α_1, α_2, ..., α_n
    • 这些权重表示解码器在当前时间步需要关注源语言序列的哪些部分。
  6. 上下文向量(c_t)

    • 使用注意力权重和编码器的隐藏状态计算上下文向量 c_t,总结源语言序列的相关信息。
  7. 生成输出

    • 解码器使用当前隐藏状态 s_t 和上下文向量 c_t 生成输出单词 y_t

总结

  • 编码器:将源语言序列编码为一系列隐藏状态。
  • 解码器:在每个时间步使用目标语言单词及其嵌入表示,通过GRU和注意力机制生成译文单词。
  • 注意力机制:在解码过程中动态地选择源语言序列中的相关部分,从而克服传统Seq2Seq模型在处理长序列时的局限性。

通过引入注意力机制,解码器不再依赖于编码器的最后一个隐藏状态,而是可以在整个源语言序列中自适应地选择需要的信息,从而提高翻译效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值