使用 WeNet 训练 AISHELL-1 模型的详细入门指南

news2024/9/9 1:03:54

使用 WeNet 训练 AISHELL-1 模型的详细入门指南

在这篇文章中,我们将通过 WeNet 框架详细介绍如何训练 AISHELL-1 数据集的语音识别模型。我们将逐步解释各个阶段的操作,适合初学者入门。

1. 环境准备

1.1 安装miniconda

  • miniconda官网
    1. 获取下载链接
    在这里插入图片描述
    2. 在服务器使用wget命令,进行下载
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

3. 给下载文件加上可执行权限

未加执行权限,无高亮,不可安装。

在这里插入图片描述

chmod +x Miniconda3-latest-Linux-x86_64.sh

赋予可执行权限,显示高亮

在这里插入图片描述
4. 安装 miniconda

./Miniconda3-latest-Linux-x86_64.sh

1.2 创建虚拟环境

conda create -n wenet python=3.10
conda activate wenet
  • 坑点:出现conda: command not found报错和无法自动激活base环境问题的解决方案

解决方法:执行以下命令。 (详细解决方法)

source ~/.bashrc

1.3 安装并配置WeNet

  • 见GitHub上的wenet详细配置步骤

2. 数据准备

2.1 下载 AISHELL-1 数据集

你可以从 AISHELL 官方网站下载 AISHELL-1 数据集。下载后,解压缩数据集,并确保文件结构如下:

aishell/
├── wav/
│   ├── train/
│   ├── dev/
│   └── test/
└── text/

2.2 设定数据路径

example/aishell/s0/run.sh 文件中,修改数据路径变量 $data 指向你解压后的 AISHELL 数据集的绝对路径,例如:

data=/home/username/asr-data/aishell

3. 运行实验

WeNet 提供了一个完整的实验脚本,包含多个阶段。我们建议逐步运行每个阶段,以便理解整个训练过程。

3.1 运行各个阶段

example/aishell/s0 目录执行以下命令:

cd example/aishell/s0
bash run.sh --stage -1 --stop_stage -1  # 下载数据
bash run.sh --stage 0 --stop_stage 0    # 准备训练数据
bash run.sh --stage 1 --stop_stage 1    # 提取特征
bash run.sh --stage 2 --stop_stage 2    # 生成标签字典
bash run.sh --stage 3 --stop_stage 3    # 准备 WeNet 数据格式
bash run.sh --stage 4 --stop_stage 4    # 训练神经网络
bash run.sh --stage 5 --stop_stage 5    # 使用训练模型进行识别
bash run.sh --stage 6 --stop_stage 6    # 导出训练模型

你也可以一次性运行整个脚本:

bash run.sh --stage -1 --stop_stage 6

4. 各阶段详细说明

4.1 阶段 -1: 下载数据

此阶段将 AISHELL-1 数据下载到本地路径。下载可能需要几个小时。如果你已经下载过数据,请确保在 run.sh 文件中更改 $data 变量,并从 --stage 0 开始。

4.2 阶段 0: 准备训练数据

在此阶段,local/aishell_data_prep.sh 会将原始 AISHELL-1 数据整理成两个文件:

  • wav.scp:每行记录两个用制表符分隔的列:wav_idwav_path
  • text:每行记录两个用制表符分隔的列:wav_idtext_label

4.3 阶段 1: 提取特征

此阶段将原始 WAV 文件复制到 raw_wav/train/ 目录中,并使用 tools/compute_cmvn_stats.py 提取全局 CMVN(倒谱均值和方差归一化)统计信息,用于对声学特征进行归一化。

4.4 阶段 2: 生成标签字典

此阶段生成一个字典,其中映射标签符号(对于 AISHELL-1 使用字符)和整数索引。例如:

<blank> 0
<unk> 1
一 2
丁 3
...
<sos/eos> 4232

4.5 阶段 3: 准备 WeNet 数据格式

此阶段生成 WeNet 所需的格式文件 data.list。每行以 JSON 格式包含以下字段:

  • key:话语的键
  • wav:话语的音频文件路径
  • txt:标准化的转录文本

4.6 阶段 4: 训练神经网络

在此阶段,模型将开始训练。你可以使用多 GPU 模式,设置 CUDA_VISIBLE_DEVICES 来指定使用的 GPU 卡。配置文件(如 conf/train_conformer.yaml)可以设置神经网络结构、优化参数等。

你可以使用 TensorBoard 监控训练过程:

tensorboard --logdir tensorboard/$your_exp_name/ --port 12598 --bind_all

4.7 阶段 5: 使用训练模型进行识别

此阶段展示如何使用训练好的模型对一组 WAV 文件进行识别,并提供模型平均功能。你可以选择不同的解码方法,如 CTC 贪婪搜索、CTC 前缀束搜索和注意力解码。

4.8 阶段 6: 导出训练模型

通过运行 wenet/bin/export_jit.py,可以导出训练模型,以便在其他编程语言(如 C++)中进行推理。

5. 总结

通过以上步骤,你可以使用 WeNet 框架成功训练 AISHELL-1 数据集的语音识别模型。本文详细介绍了每个阶段的具体操作和功能,帮助初学者更好地理解整个训练流程。

如果在训练过程中遇到任何问题,请随时参考 WeNet 的文档或搜索相关社区讨论。希望这篇文章能帮助你顺利进行语音识别模型的训练!

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

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

相关文章

【Dash】Dash模块介绍

什么是Dash&#xff1f; Dash 是一个开源的 Python 框架&#xff0c;用于创建基于 Web 的应用程序。它由 Plotly 公司开发&#xff0c;专为数据科学家和分析师设计&#xff0c;以便他们可以构建自定义的数据可视化 Web 应用程序&#xff0c;而无需具备前端开发知识。Dash 提供…

Scrapy 爬取旅游景点相关数据(五)

本期内容&#xff1a;&#xff08;1&#xff09;爬取日本其他城市数据存入数据库&#xff08;2&#xff09;爬取景点评论数据 1 爬取其他城市景点数据 只爬取一个城市的数据对于做数据可视化系统可能是不够的&#xff0c;因为数据样本量少嘛&#xff0c;本期来爬取其他城市的景…

Qt之详解QPainter

文章目录 前言QPainter 是干什么的如何使用 QPainter在哪个函数使用 QPainter为什么要在这里使用 QPainter最简单的示例代码 QPainter 函数构造函数与析构函数QPainter()QPainter(QPaintDevice *device)~QPainter() 初始化和结束绘图bool begin(QPaintDevice *device)bool end(…

x-cmd pkg | yazi - 超快终端文件管理器

目录 简介快速入门功能特点竞品和相关项目进一步阅读 简介 yazi 是由 github.com/sxyazi 用 Rust 开发的终端文件管理器&#xff0c;支持预览文本文件、pdf 文件、图像、视频&#xff0c;内置代码高亮功能。在内部&#xff0c;它使用 Tokio 作为其异步运行时&#xff0c;以非阻…

【百度超级智能体】零代码构建趣味语言游戏:秋日寻宝知识问答

前言 文心智能体平台AgentBuilder是由百度推出的一个创新平台&#xff0c;该平台基于其先进的文心大模型。这个平台旨在帮助开发者根据各自的专业领域和应用场景&#xff0c;以灵活多样的开发方法构建定制化的智能体&#xff08;Agent&#xff09;。通过简单易用的prompt编排功…

详解Qt 定时器QTimer

文章目录 前言QTimer 是什么什么时候使用 QTimer定时器时间到了调用什么函数 QTimer 的所有函数构造函数与析构函数QTimer(QObject *parent nullptr) 基本操作void start(int msec)void start()void stop()bool isActive() const 定时器属性void setInterval(int msec)int int…

瑞芯微平台RK3568系统开发(1)安卓环境搭建

1 开发环境搭建 注意: 重要&#xff01;重要&#xff01;重要&#xff01;自己编译后的固件&#xff0c; 必须先确认io_domains(4.2章节)后&#xff0c;才可以下载到板子运行&#xff0c; 否则可能造成烧坏RK3568的情况。 1.1 更新系统 ~$ sudo apt-get update 1.2 安装依…

MATLAB多元函数梯度下降法找最小值-梯度演示-绘制梯度方向

如果海森矩阵在所有可能的参数值上都是正定的&#xff0c;则该函数是凸的&#xff1b;函数将呈现为光滑的碗状&#xff0c;使得训练过程相对简单。存在单 一的全局最小值&#xff0c;不会有局部最小值或鞍点。 沿着梯度方向&#xff0c;函数变化最快。 x&#xff0c;y点的更新…

LNMP动态网站环境部署

1、LINUX部署 stop firewallddisable selinux 2、Nginx部署 ​ vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.…

Java 多线程编程核心技术权威指南(电子版教程)

前言 Java多线程编程是现代软件开发中不可忽视的关键技术&#xff0c;它能有效利用多核处理器的计算能力&#xff0c;实现并发执行&#xff0c;提升系统性能和响应速度。本篇博客将带您深入了解Java线程的核心概念、高级用法以及并发编程中的常见问题与解决方案。无论您是Java…

前端web开发HTML+CSS3+移动web(0基础,超详细)——第1天

一、开发坏境的准备 1&#xff0c;在微软商店下载并安装VS Code 以及谷歌浏览器或者其他浏览器&#xff08;我这里使用的是Microsoft Edge&#xff09; 2&#xff0c;打开vs code &#xff0c;在电脑桌面新建一个文件夹命名为code&#xff0c;将文件夹拖拽到vs code 中的右边…

《python语言程序设计》2018版第6章第19题几何问题点的位置,利用4.31显示如何测试一个点是在一条有向线的左、右还是刚好在线上

# 这个是4.31的代码&#xff0c;一个函数里包含了。在线上&#xff0c;在线左&#xff0c;在线右 def judgePoint(x0, y0, x1, y1, x2, y2):juMethod ((x1 - x0) * (y2 - y0)) - ((x2 - x0) * (y1 - y0))if juMethod > 0:print("p2 is on the left side of the line f…

MATLAB 共轭梯度法求解线性方程组(附代码)

共轭梯度法求解线性方程组 1. 引言 共轭梯度法&#xff08;Conjugate Gradient Method&#xff09;是一种用于求解大型稀疏对称正定线性方程组的迭代算法。该方法结合了梯度下降法和共轭方向的概念&#xff0c;以达到更快速的收敛。共轭梯度法 是介于最速下降法与牛顿法之间的…

Android 11(R) IPC Binder机制 初版

Android 系统分为三层。最上层是application应用层&#xff0c;第二层是framework层&#xff0c;第三层是native层 1.Android 中的应用层和系统服务层不在同一个进程&#xff0c;系统服务在单独的进程中。每个应用的进程都是zygote fork出来的。 2.Android中不同应用属于不同…

数据驱动未来:构建下一代湖仓一体电商数据分析平台,引领实时商业智能革命

1.1 项目背景 本项目是一个创新的湖仓一体实时电商数据分析平台&#xff0c;旨在为电商平台提供深度的数据洞察和业务分析。技术层面&#xff0c;项目涵盖了从基础架构搭建到大数据技术组件的集成&#xff0c;采用了湖仓一体的设计理念&#xff0c;实现了数据仓库与数据湖的有…

《程序猿入职必会(4) · Vue 完成 CURD 案例 》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

【优选算法】——leetcode——438.找到字符串中所有字母异位词

目录 1.题目 2.题目理解 3.算法原理 1.如何快速判断两个字符串是否是异位词 2.解决问题 暴力求解——>滑动窗口哈希表 滑动窗口 利用滑动窗口哈希表解决问题 优化&#xff1a;更新结果的判断条件 4.编程代码 C代码 1.频率统计 2. 双指针 C语言代码 1.字符频率…

传统CS网络的新生——基于2G网络的远程灌溉实现

概述&#xff1a;iphone 实现远程电话触发&#xff0c;实现灌溉绿植的一般方法 方法一&#xff1a; 远程电话触发&#xff0c;音频线左右声道会产生一个信号&#xff0c;可以在后端利用SR锁存器暂存信号&#xff0c;后级可以接相应的控制电路实现灌溉。 方法二&#xff1a; 同…

记录阮一峰grid教程笔记

前言 看了阮一峰的grid教程&#xff0c;做一个笔记&#xff0c;主要自己看&#xff0c;有理解错误的地方后续更正&#xff0c;有新的理解后续补充。教程链接如下&#xff1a; CSS Grid 网格布局教程 - 阮一峰的网络日志 grid主要分为容器属性和项目的属性&#xff0c;在行列布…

React 学习——Context机制层级组件通信

核心思路&#xff1a;&#xff08;适用于所有层级&#xff0c;不仅仅是爷孙 父子&#xff09; createContext方法创建一个上下文对象在顶层组件 通过Provider组件提供数据在底层组件&#xff0c;通过useContext钩子函数使用数据 import { createContext, useContext } from …