快速开始
备注
阅读本篇前,请确保已按照 安装教程 准备好昇腾环境及 WeNet !
本文档帮助昇腾开发者快速使用 WeNet × 昇腾 进行自动语音识别(Automatic Speech Recognition, ASR)模型的训练、推理和评估等。
WeNet 提供了多种数据集及模型的实验脚本,该脚本将实验分为几个阶段,包含数据集的下载、模型的训练、推理、评估等,均存放在 examples 路径下, 本篇以 aishell-1 数据集的实验为例,基于 WeNet 官方教程 , 详述如何使用 NPU 实验脚本 进行从零开始的语音模型训练。
首先进入该脚本所在目录下:
1cd example/aishell/s0
下载数据
stage -1 阶段将 aishell-1 数据下载到本地路径 $data
:
1bash run_npu.sh --stage -1 --stop_stage -1
如果已下载数据,请更改 run_npu.sh
脚本中的变量 $data
值为实际数据集存放的绝对路径,并从下一阶段开始。
准备训练数据
stage 0 阶段为训练数据准备阶段,将使用 local/aishell_data_prep.sh
脚本将训练数据重新组织为 wav.scp
和 text
两部分。
备注
wav.scp
每行记录两个制表符分隔的列: wav_id
和 wav_path
,
text
每行记录两个制表符分隔的列: wav_id
和 text_label
。
1bash run_npu.sh --stage 0 --stop_stage 0
提取最佳 cmvn 特征(可选)
stage 1 阶段从训练数据中提取 cmvn 特征,本阶段为可选阶段,设置 cmvn=false
可跳过本阶段。
1bash run_npu.sh --stage 1 --stop_stage 1
tools/compute_cmvn_stats.py
用于提取全局 cmvn(倒谱均值和方差归一化)统计数据,用来归一化声学特征。
生成 token 字典
stage 2 阶段生成训练所需 token 字典,用于 CTC 解码阶段查询,将输出转换为文字。
1bash run_npu.sh --stage 2 --stop_stage 2
准备 WeNet 数据格式
stage 3 阶段生成 WeNet 所需格式的文件 data.list
:
1bash run_npu.sh --stage 3 --stop_stage 3
生成的 data.list``每一行都是 json 格式,包含 关键词 ``key
(文件名称),
语音文件地址 wav
和 对应文本内容 txt
三个关键数据。如下为一示例:
{"key": "BAC009S0002W0122", "wav": "/export/data/asr-data/OpenSLR/33//data_aishell/wav/train/S0002/BAC009S0002W0122.wav", "txt": "而对楼市成交抑制作用最大的限购"}
模型训练
stage 4 为模型训练阶段, run_npu.sh
脚本中实现了 NPU 卡号的自动获取和相关环境变量设置,因此可直接通过以下启动昇腾 NPU 上的模型训练:
1bash run_npu.sh --stage 4 --stop_stage 4
如需自行指定 NPU 卡号,请更改 run_npu.sh
脚本中的变量 ASCEND_RT_VISIBLE_DEVICES
值为指定卡号。
备注
有关断点重训,参数配置等,请参考 WeNet 官方文档 。
测试推理
stage 5 为模型测试推理阶段,将测试集中语音文件识别为文本:
1bash run_npu.sh --stage 5 --stop_stage 5
此外,stage 5 还提供平均模型的功能,平均模型指当 ${average_checkpoint}``为 ``true
时,
将交叉验证集上的最佳的 ${average_num}
个模型平均,生成增强模型。
备注
此阶段还提供解码和 WER 模型评估等功能,详细信息请参考 WeNet 官方文档 。
导出训练好的模型
stage 6 为模型导出阶段, wenet/bin/export_jit.py
使用 Libtorch
导出以上训练好的模型,导出的模型可用于其他编程语言(如 C++)的推理。
1bash run_npu.sh --stage 6 --stop_stage 6