Conformer_Wenet_PyTorch
论文
WeNet: Production Oriented Streaming and Non-streaming End-to-End Speech Recognition Toolkit
模型结构
Conformer模型是一种结合了Transformer的自注意力机制和卷积神经网络的模型结构,用于语音识别和自然语言处理任务,具有时域和频域特征的建模能力。
算法原理
Conformer算法原理是通过结合多层的Transformer编码器和深度卷积神经网络,实现对输入序列的时域和频域特征进行建模,从而提高语音识别和自然语言处理任务的性能。
环境配置
Docker(方法一)
此处提供光源拉取docker镜像的地址与使用步骤
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.10.0-centos7.6-dtk-22.10-py38-latest
docker run -it -v /path/your_code_data/:/path/your_code_data/ --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
cd /path/workspace/
pip3 install typeguard==2.13.3
Dockerfile(方法二)
此处提供dockerfile的使用方法
cd ./docker
docker build --no-cache -t conformer .
docker run -it -v /path/your_code_data/:/path/your_code_data/ --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
Anaconda(方法三)
此处提供本地配置、编译的详细步骤,例如:
关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装。
DTK驱动:dtk22.10
python:python3.8
torch:1.10
torchvision:0.10
Tips:以上dtk驱动、python、paddle等DCU相关工具版本需要严格一一对应
其它非深度学习库参照requirements.txt安装:
pip3 install -r requirements.txt
pip3 install typeguard==2.13.3
数据集
Aishell
此处提供数据预处理脚本的使用方法
#如果自行下载了aishell数据集,只需要在run.sh文件中修改数据集路径,然后执行如下指令即可
cd ./examples/aishell/s0
#设置stage为-1会自动下载数据集,若有下载好的数据集,可手动设置run.sh脚本中的data路径即可省去下载过程
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
预处理好的训练数据目录结构如下,用于正常训练的完整数据集请按此目录结构进行制备: 该工程数据集分为两个部分,一个是原始数据,另一个是索引和音频提取的特征文件
1、原始数据
├── data_aishell
│ ├── transcript
│ │ └── aishell_transcript_v0.8.txt
│ └── wav
│ ├── dev
│ ├── test
│ └── train
├── data_aishell.tgz
├── resource_aishell
│ ├── lexicon.txt
│ └── speaker.info
└── resource_aishell.tgz
2、索引和音频提取的特征文件
├── dev
│ ├── data.list
│ ├── text
│ └── wav.scp
├── dict
│ └── lang_char.txt
├── local
│ ├── dev
│ │ ├── text
│ │ ├── transcripts.txt
│ │ ├── utt.list
│ │ ├── wav.flist
│ │ ├── wav.scp
│ │ └── wav.scp_all
│ ├── test
│ │ ├── text
│ │ ├── transcripts.txt
│ │ ├── utt.list
│ │ ├── wav.flist
│ │ ├── wav.scp
│ │ └── wav.scp_all
│ └── train
│ ├── text
│ ├── transcripts.txt
│ ├── utt.list
│ ├── wav.flist
│ ├── wav.scp
│ └── wav.scp_all
├── test
│ ├── data.list
│ ├── text
│ └── wav.scp
└── train
├── data.list
├── global_cmvn
├── text
└── wav.scp
训练
# 默认是4卡,可以通过修改run_train.sh文件修改卡数
# 需要注意训练默认在evaluation过程输出识别的结果,结果的输出会增加训练的时间,单独测试可以在/wenet/bin/recognize.py 文件中注释掉355行的logging.info('{} {}'.format(key, args.connect_symbol.join(content))),不显示输出的结果,从而减少训练的耗时
bash train.sh
推理
# 默认使用exp/conformer/final.pt进行推理,可以手动修改
# 注意如果训练过程中关闭了日志输出,需要手动打开,否则将不会输出识别的内容
bash validate.sh
result
精度
测试数据:aishell,使用的加速卡:Z100L。
根据测试结果情况填写表格:
卡数 | 数据精度 | 精度 |
---|---|---|
4 | fp32 | 93.1294 |
应用场景
算法类别
语音识别
热点应用行业
金融,通信,广媒