From c56baec069472081ac74d575df560ba54ad42b56 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E6=98=A5=E4=B9=94?=
<83450930+Liyulingyue@users.noreply.github.com>
Date: Fri, 15 Nov 2024 23:29:39 +0800
Subject: [PATCH] Create README_cn.md
---
examples/aishell/asr0/README_cn.md | 208 +++++++++++++++++++++++++++++
1 file changed, 208 insertions(+)
create mode 100644 examples/aishell/asr0/README_cn.md
diff --git a/examples/aishell/asr0/README_cn.md b/examples/aishell/asr0/README_cn.md
new file mode 100644
index 000000000..6fb437636
--- /dev/null
+++ b/examples/aishell/asr0/README_cn.md
@@ -0,0 +1,208 @@
+# 使用Aishell数据集训练DeepSpeech2的离线/在线ASR模型
+此示例包含用于使用[Aishell数据集](http://www.openslr.org/resources/33)训练DeepSpeech2离线或在线模型的代码。
+## 概述
+您需要的所有脚本都在`run.sh`中。`run.sh`中有几个阶段,每个阶段都有其功能。
+| 阶段 | 功能 |
+|:---- |:----------------------------------------------------------- |
+| 0 | 数据处理。包括:
(1) 下载数据集
(2) 计算训练数据集的CMVN
(3) 获取词汇文件
(4) 获取训练、开发和测试数据集的manifest文件 |
+| 1 | 训练模型 |
+| 2 | 通过平均前k个最佳模型来获得最终模型,设置k=1表示选择最佳模型 |
+| 3 | 测试最终模型性能 |
+| 4 | 导出静态图模型 |
+| 5 | 测试静态图模型 |
+| 6 | 对单个音频文件进行推理 |
+您可以通过设置`stage`和`stop_stage`来选择运行一系列阶段。
+例如,如果您想执行阶段2和阶段3的代码,可以运行以下脚本:
+```bash
+bash run.sh --stage 2 --stop_stage 3
+```
+或者,您可以将`stage`设置为等于`stop-stage`来仅运行一个阶段。
+例如,如果您只想运行`stage 0`,可以使用以下脚本:
+```bash
+bash run.sh --stage 0 --stop_stage 0
+```
+下面的文档将详细描述`run.sh`中的脚本。
+## 环境变量
+`path.sh`包含环境变量。
+```bash
+source path.sh
+```
+需要先运行此脚本。
+另一个脚本也需要运行:
+```bash
+source ${MAIN_ROOT}/utils/parse_options.sh
+```
+它将支持在shell脚本中使用`--variable value`的方式。
+## 局部变量
+在`run.sh`中设置了一些局部变量。
+`gpus`表示您想使用的GPU数量。如果您设置`gpus=`,则表示仅使用CPU。
+`stage`表示您想在实验中从哪个阶段开始。
+`stop_stage`表示您想在实验中结束于哪个阶段。
+`conf_path`表示模型的配置路径。
+`avg_num`表示要平均的前k个最佳模型的数量,以获得最终模型。
+`model_type`表示模型类型:离线或在线
+`audio_file`表示在阶段6中您想进行推理的单个文件的路径。
+`ckpt`表示模型的检查点前缀,例如"deepspeech2"
+您可以在使用`run.sh`时设置局部变量(除了`ckpt`)。
+例如,您可以在命令行中设置`gpus`和`avg_num`:
+```bash
+bash run.sh --gpus 0,1 --avg_num 1
+```
+## 阶段0:数据处理
+要使用此示例,您需要先处理数据,可以使用`run.sh`中的阶段0来完成此操作。代码如下:
+```bash
+if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then
+ # 准备数据
+ bash ./local/data.sh || exit -1
+fi
+```
+阶段0用于处理数据。
+如果您只想处理数据,可以运行:
+```bash
+bash run.sh --stage 0 --stop_stage 0
+```
+您也可以直接在命令行中运行这些脚本。
+```bash
+source path.sh
+bash ./local/data.sh
+```
+处理完数据后,`data`目录将如下所示:
+```bash
+data/
+|-- dev.meta
+|-- lang_char
+| `-- vocab.txt
+|-- manifest.dev
+|-- manifest.dev.raw
+|-- manifest.test
+|-- manifest.test.raw
+|-- manifest.train
+|-- manifest.train.raw
+|-- mean_std.json
+|-- test.meta
+`-- train.meta
+```
+## 阶段1:模型训练
+如果您想训练模型,可以使用`run.sh`中的阶段1。代码如下:
+```bash
+if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then
+ # 训练模型,所有`ckpt`在`exp`目录下
+ CUDA_VISIBLE_DEVICES=${gpus} ./local/train.sh ${conf_path} ${ckpt}
+fi
+```
+如果您想训练模型,可以使用以下脚本来执行阶段0和阶段1:
+```bash
+bash run.sh --stage 0 --stop_stage 1
+```
+或者,您可以在命令行中运行这些脚本(仅使用CPU)。
+```bash
+source path.sh
+bash ./local/data.sh
+CUDA_VISIBLE_DEVICES= ./local/train.sh conf/deepspeech2.yaml deepspeech2
+```
+如果您想使用GPU,可以在命令行中运行这些脚本(假设您只有一个GPU)。
+```bash
+source path.sh
+bash ./local/data.sh
+CUDA_VISIBLE_DEVICES=0 ./local/train.sh conf/deepspeech2.yaml deepspeech2
+```
+## 阶段2:前k个模型平均
+训练完模型后,我们需要得到用于测试和推理的最终模型。在每个epoch中,都会保存模型检查点,因此我们可以基于验证损失从它们中选择最佳模型,或者我们可以对它们进行排序并平均前k个模型的参数以得到最终模型。我们可以使用阶段2来完成此操作,代码如下:
+```bash
+if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then
+ # 平均n个最佳模型
+ avg.sh best exp/${ckpt}/checkpoints ${avg_num}
+fi
+```
+`avg.sh`在`../../../utils/`中定义,该路径在`path.sh`中定义。
+如果您想得到最终模型,可以使用以下脚本来执行阶段0、阶段1和阶段2:
+```bash
+bash run.sh --stage 0 --stop_stage 2
+```
+或者,您可以在命令行中运行这些脚本(仅使用CPU)。
+```bash
+source path.sh
+bash ./local/data.sh
+CUDA_VISIBLE_DEVICES= ./local/train.sh conf/deepspeech2.yaml deepspeech2
+avg.sh best exp/deepspeech2/checkpoints 1
+```
+## 阶段3:模型测试
+测试阶段用于评估模型性能。测试阶段的代码如下:
+```bash
+if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then
+ # 测试ckpt avg_n
+ CUDA_VISIBLE_DEVICES=0 ./local/test.sh ${conf_path} exp/${ckpt}/checkpoints/${avg_ckpt} || exit -1
+fi
+```
+如果您想训练并测试模型,可以使用以下脚本来执行阶段0、阶段1、阶段2和阶段3:
+```bash
+bash run.sh --stage 0 --stop_stage 3
+```
+或者,您可以在命令行中运行这些脚本(仅使用CPU)。
+```bash
+source path.sh
+bash ./local/data.sh
+CUDA_VISIBLE_DEVICES= ./local/train.sh conf/deepspeech2.yaml deepspeech2
+avg.sh best exp/deepspeech2/checkpoints 1
+CUDA_VISIBLE_DEVICES= ./local/test.sh conf/deepspeech2.yaml conf/tuning/decode.yaml exp/deepspeech2/checkpoints/avg_10
+```
+## 预训练模型
+您可以从[这里](../../../docs/source/released_model.md)获取预训练模型。
+使用`tar`脚本来解压模型,然后您可以使用脚本来测试模型。
+例如:
+```bash
+wget https://paddlespeech.bj.bcebos.com/s2t/aishell/asr0/asr0_deepspeech2_offline_aishell_ckpt_1.0.1.model.tar.gz
+tar xzvf asr0_deepspeech2_offline_aishell_ckpt_1.0.1.model.tar.gz
+source path.sh
+# 如果您已经处理了数据并获得了manifest文件,则可以跳过以下两个步骤
+bash local/data.sh --stage -1 --stop_stage -1
+bash local/data.sh --stage 2 --stop_stage 2
+CUDA_VISIBLE_DEVICES= ./local/test.sh conf/deepspeech2.yaml exp/deepspeech2/checkpoints/avg_10
+```
+发布的模型性能如[这里](./RESULTS.md)所示。
+## 阶段4:导出静态图模型
+此阶段是将动态图转换为静态图。
+```bash
+if [ ${stage} -le 4 ] && [ ${stop_stage} -ge 4 ]; then
+ # 导出ckpt avg_n
+ CUDA_VISIBLE_DEVICES=0 ./local/export.sh ${conf_path} exp/${ckpt}/checkpoints/${avg_ckpt} exp/${ckpt}/checkpoints/${avg_ckpt}.jit ${model_type}
+fi
+```
+如果您已经有一个动态图模型,可以运行以下脚本:
+```bash
+source path.sh
+./local/export.sh conf/deepspeech2.yaml exp/deepspeech2/checkpoints/avg_10 exp/deepspeech2/checkpoints/avg_10.jit
+```
+## 阶段5:测试静态图模型
+与阶段3类似,静态图模型也可以进行测试。
+```bash
+if [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then
+ # 测试导出的ckpt avg_n
+ CUDA_VISIBLE_DEVICES=0 ./local/test_export.sh ${conf_path} exp/${ckpt}/checkpoints/${avg_ckpt}.jit ${model_type}|| exit -1
+fi
+```
+如果您已经导出了静态图,可以运行以下脚本:
+```bash
+CUDA_VISIBLE_DEVICES= ./local/test_export.sh conf/deepspeech2.yaml conf/tuning/decode.yaml exp/deepspeech2/checkpoints/avg_10.jit
+```
+## 阶段6:单个音频文件推理
+在某些情况下,您可能想使用训练好的模型对单个音频文件进行推理。您可以使用阶段5。代码如下:
+```bash
+if [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then
+ # 测试单个.wav文件
+ CUDA_VISIBLE_DEVICES=0 ./local/test_wav.sh ${conf_path} ${decode_conf_path} exp/${ckpt}/checkpoints/${avg_ckpt} ${model_type} ${audio_file}
+fi
+```
+您可以自己训练模型,或者下载预训练模型,使用以下脚本:
+```bash
+wget https://paddlespeech.bj.bcebos.com/s2t/aishell/asr0/asr0_deepspeech2_offline_aishell_ckpt_1.0.1.model.tar.gz
+tar asr0_deepspeech2_offline_aishell_ckpt_1.0.1.model.tar.gz
+```
+您可以下载音频演示文件:
+```bash
+wget -nc https://paddlespeech.bj.bcebos.com/datasets/single_wav/zh/demo_01_03.wav -P data/
+```
+您需要准备一个音频文件或使用上述音频演示文件,请确认音频的采样率为16K。您可以通过运行以下脚本来获取音频演示文件的结果。
+```bash
+CUDA_VISIBLE_DEVICES= ./local/test_wav.sh conf/deepspeech2.yaml conf/tuning/decode.yaml exp/deepspeech2/checkpoints/avg_10 data/demo_01_03.wav
+```