李宏毅2023机器学习作业HW05解析和代码分享

ML2023Spring - HW5 相关信息:
课程主页
课程视频
Sample code
HW05 视频
HW05 PDF

个人完整代码分享: GitHub | Gitee | GitCode
运行日志记录: wandb

P.S. HW05/06 是在 Judgeboi 上提交的,完全遵循 hint 就可以达到预期效果。

因为无法在 Judgeboi 上提交,所以 HW05/06 代码仓库中展示的是在验证集上的分数。

每年的数据集 size 和 feature 并不完全相同,但基本一致,过去的代码仍可用于新一年的 Homework。

仓库中 HW05 的代码分成了英文 EN 和中文 ZH 两个版本。

(碎碎念:翻译比较麻烦,所以之后的 Homework 代码暂只有英文版本)

任务目标(seq2seq)

  • Machine translation 机器翻译,英译中

性能指标(BLEU)

参考链接:

BLEU: a Method for Automatic Evaluation of Machine Translation

Foundations of NLP Explained — Bleu Score and WER Metrics

BLEU(Bilingual Evaluation Understudy) 双语评估替换

公式:
BLEU = B P ⋅ exp ⁡ ( ∑ n = 1 N w n l o g p n ) 1 N \text{BLEU} = BP \cdot \exp\left( \sum_{n=1}^{N} w_n log\ p_n\right)^{\frac{1}{N}} BLEU=BPexp(n=1Nwnlog pn)N1
首先要明确两个概念

  1. N-gram
    用来描述句子中的一组 n 个连续的单词。比如,“Thank you so much” 中的 n-grams:

    • 1-gram: “Thank”, “you”, “so”, “much”
    • 2-gram: “Thank you”, “you so”, “so much”
    • 3-gram: “Thank you so”, “you so much”
    • 4-gram: “Thank you so much”

    需要注意的一点是,n-gram 中的单词是按顺序排列的,所以 “so much Thank you” 不是一个有效的 4-gram。

  2. 精确度(Precision)
    精确度是 Candidate text 中与 Reference text 相同的单词数占总单词数的比例。 具体公式如下:
    $ \text{Precision} = \frac{\text{Number of overlapping words}}{\text{Total number of words in candidate text}} $
    比如:
    Candidate: Thank you so much, Chris
    Reference: Thank you so much, my brother
    这里相同的单词数为4,总单词数为5,所以 Precision = 4 5 \text{Precision} = \frac{{4}}{{5}} Precision=54
    但存在一个问题:

    • Repetition 重复

      Candidate: Thank Thank Thank
      Reference: Thank you so much, my brother

      此时的 Precision = 3 3 \text{Precision} = \frac{{3}}{{3}} Precision=33

解决方法:Modified Precision

很简单的思想,就是匹配过的不再进行匹配。

Candidate: Thank Thank Thank
Reference: Thank you so much, my brother

Precision 1 = 1 3 \text{Precision}_1 = \frac{{1}}{{3}} Precision1=31

  • 具体计算如下:

    C o u n t c l i p = min ⁡ ( C o u n t , M a x _ R e f _ C o u n t ) = min ⁡ ( 3 , 1 ) = 1 Count_{clip} = \min(Count,\ Max\_Ref\_Count)=\min(3,\ 1)=1 Countclip=min(Count, Max_Ref_Count)=min(3, 1)=1
    $ p_n = \frac{\sum_{\text{n-gram}} Count_{clip}}{\sum_{\text{n-gram}} Count} = \frac{1}{3}$

现在还存在一个问题:译文过短

Candidate: Thank you
Reference: Thank you so much, my brother

p 1 = 2 2 = 1 p_1 = \frac{{2}}{{2}} = 1 p1=22=1

这里引出了 brevity penalty,这是一个惩罚因子,公式如下:

B P = { 1 if  c > r e 1 − r c if  c ≤ r BP = \begin{cases} 1& \text{if}\ c>r\\ e^{1-\frac{r}{c}}& \text{if}\ c \leq r \end{cases} BP={1e1crif c>rif cr

其中 c 是 candidate 的长度,r 是 reference 的长度。

当候选译文的长度 c 等于参考译文的长度 r 的时候,BP = 1,当候选翻译的文本长度较短的时候,用 e 1 − r c e^{1-\frac{r}{c}} e1cr 作为 BP 值。

回到原来的公式:$ \text{BLEU} = BP \cdot \exp\left( \sum_{n=1}^{N} w_n log\ p_n\right)^{\frac{1}{N}}$,汇总一下符号定义:

  • B P BP BP 文本长度的惩罚因子
  • N N N n-gram 中 n 的最大值,作业中设置为 4。
  • w n w_n wn 权重
  • p n p_n pn n-gram 的精度 (precision)

数据解析

  • Paired data
    • TED2020: 演讲
      • Raw: 400,726 (sentences)
      • Processed: 394, 052 (sentences)
    • 英文和中文两个版本
  • Monolingual data
    • 只有中文版本的 TED 演讲数据

Baselines

这里存在一个问题,就是HW05是在 Judgeboi 上进行提交的,所以没办法获取最终的分数,所以简单的使用 simple baseline 对应的 validate BLEU 来做个映射。

因为有 EN / ZH 两个版本,对于每个 hint 我会给出代码的修改位置方便大家索引。

Simple baseline (15.05)

  • 运行所给的 sample code

Medium baseline (18.44)

  • 增加学习率的调度 (Optimizer: Adam + lr scheduling / 优化器: Adam + 学习率调度)
  • 训练得更久 (Configuration for experiments / 实验配置)
    这里根据预估的时间,可以简单的将 epoch 设置为原来的两倍。

Strong baseline (23.57)

  • 将模型架构转变为 Transformer (Model Initialization / 模型初始化)
  • 调整超参数 (Architecture Related Configuration / 架构相关配置)
    这里需要参考 Attention is all you need 论文中 table 3 的 transformer-base 超参数设置。
    image-20231115135033382

你可以仅遵循 sample code 的注释,将 encoder_layer 和 decoder_layer 改为 4(简单的将这一个改动称之为 transformer_4layer),此时模型的参数数量会和之前的 RNN 差不多,在 max_epoch =30 的情况下,Bleu 可以达到 23.59。

代码仓库中分享的 Strong 代码完全遵循了 transformer-base 的超参数设置,此时的模型参数将约为之前 RNN 的 5 倍,每一轮训练的时间约为 transform_4layer 的三倍,所以我将 max_epoch 设置为了 10,让其能够匹配上预估的时间,此时的 Bleu 为 24.91。如果将 max_epoch 设置为 30,最终的 Bleu 可以达到 27.48。

下面是二者实验对比。

Boss baseline (30.08)

  • 应用 back-translation (TODO)

    这里我们需要交换实验配置 config 中的 source_lang 和 target_lang,并修改 savedir,训练一个 back-translation 模型后再修改回原来的 config。

    然后你需要将 TODO 的部分完善,修改并复用之前的函数就可以达到目的。

    (为了与预估时间匹配,这里将 max_epoch 设置为 30 进行实验。)

代码仓库中分享的 Boss 代码展示的是最终训练的结果,完整的运行流程是:

  1. 实验配置中 / Configuration for experimentsBACK_TRANSLATION 设置为 True 运行
    训练一个 back-translation 模型,并处理好对应的语料。
  2. 实验配置 / Configuration for experiments 中的 BACK_TRANSLATION 设置为 False 运行
    结合 ted2020 和 mono (back-translation) 的语料进行训练。

Gradescope

Visualize Positional Embedding

你可以直接在 确定用于生成 submission 的模型权重 / Confirm model weights used to generate submission 后进行处理,在仓库的代码中我已经提前注释掉了 训练循环 / Training loop 中的训练部分,如果在之前,模型没有训练,直接运行代码会报错。

image-20231119122408389

添加的处理代码如下(可以复制下面的处理代码放到你的 submission 模块之后):

推荐阅读:All Pairs Cosine Similarity in PyTorch

pos_emb = model.decoder.embed_positions.weights.cpu().detach()# 计算余弦相似度矩阵
def get_cosine_similarity_matrix(x):x = x / x.norm(dim=1, keepdim=True)sim = torch.mm(x, x.t())return simsim = get_cosine_similarity_matrix(pos_emb)
#sim = F.cosine_similarity(pos_emb.unsqueeze(1), pos_emb.unsqueeze(0), dim=2) # 一样的# 绘制位置向量的余弦相似度矩阵的热力图
plt.imshow(sim, cmap="hot", vmin=0, vmax=1)
plt.colorbar()plt.show()

Clipping Gradient Norm

只需要将 config.wandb 设置为 True 即可,此时可以在 wandb 上查看。

image-20231119183413555

或者直接在 train_one_epoch 添加一下处理代码,记录 gnorm。

image-20231119183535765

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/150665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 源码解读系列(八)——生命周期

生命周期 正常的生命周期 // 注册钩子函数 const onBeforeMount createHook(bm/* BEFORE_MOUNT */) const onMounted createHook(m/* MOUNTED */) const onBeforeUpdate createHook(bu/* BEFORE_UPDATE */) const onUpdated createHook(u/* UPDATED */) const onBeforeUnm…

商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

java桌面程序

目标之一是把打印导出的功能最终用java实现一套,首先选定javafx,因为idea默认创建工程就带的javafx,没找到swing。 创建工程,这里要选1.8,高版本jdk默认不带fx 实现主界面的代码 package sample;import javafx.app…

将word中的表格无变形的弄进excel中

在上篇文章中记录了将excel表拷贝到word中来: 记录将excel表无变形的弄进word里面来-CSDN博客 本篇记录:将word中的表格无变形的弄进excel中。 1.按F12,“另存为...”,保存类型:“单个文件页面”,保存。…

numpy报错:AttributeError: module ‘numpy‘ has no attribute ‘float‘

报错:AttributeError: module numpy has no attribute float numpy官网:NumPy 报错原因:从numpy1.24起删除了numpy.bool、numpy.int、numpy.float、numpy.complex、numpy.object、numpy.str、numpy.long、numpy.unicode类型的支持。 解决办法…

Java-方法的重写

【1】重写: 发生在子类和父类中,当子类对父类提供的方法不满意的时候,要对父类的方法进行重写。 【2】重写有严格的格式要求: 子类的方法名字和父类必须一致,参数列表(个数,类型&#xff0c…

Django 入门学习总结4

视图是Django应用程序在Python语言中提供特定的方法并对应于有特定的模板的网页。网页的页面通过视图的方式进行跳转。 在投票系统中,有四个视图: 首页视图,显示最新的问题列表。细节视图,显示问题文本,通过表单可以…

阿里国际站(直通车)

1.国际站流量 2.直通车即P4P(pay for performance点击付费) 2.1直通的含义:按点击付费,通过自助设置多维度展示产品信息,获得大量曝光吸引潜在买家。 注意:中国大陆和尼日利尼地区点击不扣费。 2.2扣费规…

Apache Doris (五十四): Doris Join类型 - Bucket Shuffle Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

Python的机器学习库:Sklearn库

随着机器学习的发展,各种强大的机器学习库涌现出来,使开发人员能够更轻松地构建和应用机器学习模型。其中,Scikit-learn(简称Sklearn)作为Python中最受欢迎和广泛使用的机器学习库之一,提供了丰富的功能和算…

vue+element实现多级表头加树结构

标题两种展示方式 方式一 完整代码: <template><div class"box"><el-tableref"areaPointTable":data"tableData"border:span-method"objectSpanMethod":header-cell-style"tableHeaderMerge"><el-ta…

mac中安装Homebrew

1、Homebrew是什么&#xff1f; 软件安装管理工具 2、先检查电脑中是否已经安装了Homebrew 打开终端输入&#xff1a;brew 提示命令没有找到&#xff0c;说明电脑没有安装Homebrew 如果提示上述图片说明Homebrew已经安装成功 3、安装Homebrew 进入https://brew.sh/ 复制的命…

Android开发APP显示头部Bar

Android开发显示头部Bar 需求&#xff1a; 显示如下图&#xff1a; 显示头部Bar&#xff0c;颜色也能自定义。 解决方案 这个修改是在如下三个文件里进行修改&#xff1a; 按顺序修改&#xff1a; themes.xml(night): <resources xmlns:tools"http://schemas.andr…

持续集成交付CICD:Jenkins Sharedlibrary 共享库

目录 一、理论 1.共享库 2.共享库配置 3.使用共享库 4.共享库扩展 二、实验 1.连接共享库 2.使用共享库 三、问题 1.路径报错 2.readJSON 报错 一、理论 1.共享库 &#xff08;1&#xff09;概念 1&#xff09;共享库这并不是一个全新的概念&#xff0c;其实在编…

央国企数字化转型难在哪?为什么要数字化转型?

科技在发展&#xff0c;技术在升级&#xff0c;全球信息化、数字化的步伐在加快&#xff0c;企业想要在未来的发展中抓住机会&#xff0c;更好地发展壮大&#xff0c;就需要加快企业数字化转型的速度&#xff0c;才能立足于信息化、数字化时代&#xff0c;央国企作为企业中的一…

Vue3 项目修改index.html的 title

实现思路 通过插件 vite-plugins-html 进行参数配置&#xff0c;html 中使用参数&#xff0c;实现配置安装插件 $ npm install vite-plugins-html --save-devvite.config.js 中的配置 // 可以动态处理html文件内容的 import { createHtmlPlugin } from vite-plugin-htmlexpo…

Echarts 实现两两柱图重叠(背景和实际值柱图)

Echarts实现两两重叠柱状图_echarts 重叠柱状图_Web_阿凯的博客-CSDN博客 引用启发的博客 先来效果&#xff1a; option {backgroundColor: #03213D,animation: true, // 控制动画是否开启animationDuration: 1000, // 动画的时长, 它是以毫秒为单位animationDuration: func…

KaiwuDB 监控组件及辅助 SQL 调优介绍

一、介绍 KaiwuDB 具备完善的行为数据采集功能&#xff0c;此功能要求 KaiwuDB 数据库系统 C/E/T 端不同进程的不同维度的指标采集功能十分完善&#xff1b;在不同进程完成指标采集后&#xff0c;会通过 Opentelemetry 和 Collector 将指标存入 Prometheus&#xff0c;以便查找…

KiCad源代码研究:KiCad是如何渲染和绘图的。

common.json文件中appearance.show_scrollbars common.json对应于代码的common_settings 1.EDA_DRAW_PANEL_GAL类 EDA_DRAW_PANEL_GAL类中定义了绘图的基本要素&#xff1a; /// Interface for drawing objects on a 2D-surfaceKIGFX::GAL* m_gal;/// Stores v…

主播三维能力总览

主播需要的三维能力包括话术能力、成交能力和表现力 主播的话术能力 主播在直播过程中运用语言和表达方式的能力。好的话术能力可以帮助主播吸引观众、增加互动、提高直播效果等。 1.了解观众需求:在直播前&#xff0c;主播应该了解观众的需求和兴趣&#xff0c;以便在直播过…