【李宏毅 DLHLP 深度学习人类语言处理 HW1】

news/2025/3/15 3:46:44/

李宏毅 DLHLP 深度学习人类语言处理 HW1

  • 相关资料
  • HW1
  • 更多尝试
    • 1, 加深encoder:4层LSTM
    • 2, 加深encoder(4层LSTM)和加深decoder(2层LSTM)
    • 3, cnn代替vgg
    • 4, 再次加深decoder(4层LSTM)
    • 5, 在2的基础上加上dropout

语音小白在网上没有找到这门课的作业分享,那就记录一下自己的作业吧。

相关资料

课程官网:https://speech.ee.ntu.edu.tw/~hylee/dlhlp/2020-spring.php
作业github代码1:https://github.com/Alexander-H-Liu/End-to-end-ASR-Pytorch
作业github代码2:https://github.com/DLHLP2020/hw1-speech-recognition/tree/master
其中代码1是你用来跑模型写作业的代码,代码2只是辅助,帮你eval结果和把答案转换成提交要求格式。
提交作业kaggle网站:https://www.kaggle.com/competitions/dlhlp2020spring-asr/leaderboard
目前还是可以提交的,选late submmission,不会参与打榜。

首先大家好好听课,然后按照课件说明去下载作业slide、数据、github代码,最后按照作业slide一步一步往下走就可以。作业总体思路就是尝试不同元素的LAS模型:
Listen = encoder
Attention = Attention
Spell = Decoder

在作业里,会让你尝试
1,用最基础的seq2seq
2,在训练模型时,encoder部分叠加使用CTC,别的部分保持不变,所以loss会变成CTC+seq2seq混合loss
3,CTC joint的模型,decoder只用CTC
4,decoder部分,借助LM
5,不同beam size的效果

HW1

1,Train a seq2seq attention-based ASR model. Paste the learning curve and alignment plot from tensorboard. Report the CER/WER of dev set and kaggle score of testing set. (2 points)

一开始的时候,成绩很烂啦,虽然alignment plot看起来还挺合理的,不过打不过baseline
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
提交到kaggle上,成绩是这样的,比baseline烂不少
在这里插入图片描述

2,Repeat 1. by training a joint CTC-attention ASR model (decoding with seq2seq decoder). Which model converges faster? Explain why. (2 points)

这里我用的CTC weight是0.3,可以看到joint CTC-attention ASR收敛更快,而且模型效果更好。网上搜了一下,大概原因是ASR中attention是非常非常灵活的,joint CTC-attention相当于在前期encoder部分就做了对齐,所以会更快收敛,效果也更好。
在这里插入图片描述
在这里插入图片描述

这个时候结果已经可以比baseline好了在这里插入图片描述3,Use the model in 2. to decode only in CTC (ctc_weight=1.0). Report the CER/WER of dev set and kaggle score of testing set. Which model performs better in 1. 2. 3.? Explain why. (2 points)

1,2,3里面应该是2结果最好,因为2的decode有了CTC的帮助,但3中纯粹用CTC decode的话,就像老师在课上讲的,CTC不考虑前面的输出,效果不会特别好,往往需要后处理。

作业slide里面说CTC decode后的结果要再处理一下,但是我看结果没有什么重复和空的地方,应该是助教后期写好了吧,以下是eval的结果:
在这里插入图片描述

kaggle提交结果如下,还挺惊讶3的效果比1好。
在这里插入图片描述

4,Train an external language model. Use it to help the model in 1. to decode. Report the CER/WER of dev set and kaggle score of testing set. (2 points)

这里从libri里面copy decode example的时候,记得改一下max_step和valid_step,不然就会训练到地老天荒。我设成了 valid_step: 250,max_step: 20000,很快就训练完了。
decode的时候,我的lm weight取的0.3。最后的结果,只能说比1提升了一点吧,比不过CTC,离baseline还很远。
在这里插入图片描述
在这里插入图片描述

5,Try decoding the model in 4. with different beam size (e.g. 2, 5, 10, 20). Which beam size is the best? (2 points)

这里我只有beam size从2加到5的时候,private score有了一个相对明显的提升,beam size再提升的时候,效果就不再提升反而略微下降。用2中的model,尝试了beam size 5和10,不知道为什么,也没有见到模型效果的提升。

beam size 5
在这里插入图片描述在这里插入图片描述

beam size 10
在这里插入图片描述
在这里插入图片描述
beam size 20
在这里插入图片描述
在这里插入图片描述

更多尝试

1, 加深encoder:4层LSTM

因为作业2中的模型效果最好(CTC joint 训练,decoder时只使用seq2seq,不使用CTC),首先先尝试在这个基础上加深encoder重新训练,从一开始的2层LSTM加深为4层LSTM

  encoder:prenet: 'vgg'                         # 'vgg'/'cnn'/''# vgg: True                             # 4x reduction on time feature extractionmodule: 'LSTM'                        # 'LSTM'/'GRU'/'Transformer'bidirection: Truedim: [512,512,512,512]dropout: [0,0,0,0]layer_norm: [False,False,False,False]proj: [True,True,True,True]      # Linear projection + Tanh after each rnn layersample_rate: [1,1,1,1]sample_style: 'drop'                  # 'drop'/'concat'

最后效果如下 (beam size = 10):
提升不明显,看Loss,训练时收敛得慢一些
在这里插入图片描述在这里插入图片描述

2, 加深encoder(4层LSTM)和加深decoder(2层LSTM)

在尝试1的基础上加深decoder,从原来的1层LSTM变为2层LSTM,效果有了一个明显的提升
在这里插入图片描述
在这里插入图片描述

3, cnn代替vgg

encoder中的vgg使用cnn,其余与2中相同
在这里插入图片描述在这里插入图片描述

4, 再次加深decoder(4层LSTM)

在尝试2的基础上再次加深decoder,从2层LSTM变为4层LSTM,效果变差了
在这里插入图片描述

5, 在2的基础上加上dropout

model:                                    # Model architecturectc_weight: 0.3                         # Weight for CTC loss, set between 0.0~1.0 to jointly optimize for CTC + seq2seqencoder:prenet: 'vgg'                         # 'vgg'/'cnn'/''# vgg: True                             # 4x reduction on time feature extractionmodule: 'LSTM'                        # 'LSTM'/'GRU'/'Transformer'bidirection: Truedim: [512,512,512,512]dropout: [0.5,0.5,0.5,0.5]layer_norm: [False,False,False,False]proj: [True,True,True,True]      # Linear projection + Tanh after each rnn layersample_rate: [1,1,1,1]sample_style: 'drop'                  # 'drop'/'concat'attention:mode: 'loc'                           # 'dot'/'loc'dim: 300num_head: 1v_proj: False                         # if False and num_head>1, encoder state will be duplicated for each headtemperature: 0.5                      # scaling factor for attentionloc_kernel_size: 100                  # just for mode=='loc'loc_kernel_num: 10                    # just for mode=='loc'decoder:module: 'LSTM'                        # 'LSTM'/'GRU'/'Transformer'dim: 512layer: 2dropout: 0.5

首先尝试只有asr decoder,beam size =3
加上dropout后,模型效果有了一个很大的提升
在这里插入图片描述
在这里插入图片描述

再试试decoder加上0.3的lm权重
在这里插入图片描述
在这里插入图片描述
再试试beam size = 20
结果和beam size3 没什么大的区别
在这里插入图片描述
在这里插入图片描述
将decoder和encoder里面的dropout改成0.3,再重新训练一下:
在这里插入图片描述
在这里插入图片描述
可以看到,当dropout值调小后,虽然public score变小了,但是private score变大了,所以dropout调小后,应该是存在一些过拟合。如果用之前dropout 0.5,反而private score可以拿到更好的排名。

HW1的尝试就先到这里为止吧。没有尝试而相对明确的方向有,
1,增大LM的corpus
2,使用课堂上介绍的别的decoder结构,比如RNNT


http://www.ppmy.cn/news/996540.html

相关文章

pytorch超详细安装教程,Anaconda、PyTorch和PyCharm整套安装流程

本文介绍基于Anaconda环境以及PyCharm软件结合,安装PyTorch深度学习框架。 PyTorch深度学习框架详细安装教程 一、anaconda安装(一)下载(二)安装(三)配置环境变量(四)检查…

Ubuntu 离线部署的常见操作

Ubuntu 离线安装的常见操作 **说明:**很多情况下,生产环境都是离线环境,然而开发环境都是互联网的环境,因此部署的过程中需要构建离线安装包; 1. 下载但是不安装 # 例如使用 apt 下载 wireshark 安装包 sudo apt download wireshark # 下载…

MySQL报错:Row size too large。

项目场景: mysql添加varchar字段 问题描述 mysql表添加一个varchar类型的字段,执行保存时报错:Row size too large. The maximum row size for the used table type, not counting BLOBs, is 6553 巴拉巴拉 原因分析: 行数据大…

如何理解JavaScript中的执行上下文

原文合集地址如下,有需要的朋友可以关注 本文地址 合集地址 什么是执行上下文 执行上下文是 JavaScript 中一个重要的概念,它是在代码执行期间用于管理和执行代码的环境。每当 JavaScript 代码在运行时,都会创建一个执行上下文&#xff0…

JVM基础篇-方法区与运行时常量池

JVM基础篇-方法区与运行时常量池 方法区 Java 虚拟机有一个在所有 Java 虚拟机线程之间共享的方法区。方法区类似于传统语言的编译代码的存储区或者类似于操作系统进程中的“文本”段。它存储每个类的结构,例如运行时常量池、字段和方法数据,以及方法和…

新版塔罗占卜网站源码八字合婚风水起名附带搭建视频

新版塔罗占卜网站源码八字合婚风水起名PHP源码附带搭建视频,附带文本教学及视频教程安装方法以linux为例: 1、建议在服务器上面安装宝塔面板,以便操作,高逼格技术员可以忽略这步操作。 2、把安装包文件解压到根目录,同时建立数据库,把数据文件导入数据库 3、修改核心文件…

Python版GeoDetector更新

之前发布了用Python实现地理探测器一文,但当时实现的地理探测器功能仍不完善,比如在因子探测时缺乏p值。这次更新了一下,主要改动如下: 因子探测结果输出p值。交互探测结果输出交互类型。 代码已经开源到了GitHub,网…

前端学习--vue2--插槽

写在前面: 这个用法是在使用组件和创建组件中 文章目录 介绍简单使用多个插槽省写默认/后备内容作用域插槽常用实例Element-ui的el-table 废弃用法slot attributeslot-scope attribute 介绍 我们在定义一些组件的时候,由于组件内文字想要自定义&#…