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