基础
ASR
,英文的全称是Automated Speech Recognition,即自动语音识别技术,它是一种将人的语音转换为文本的技术。语音识别是一个多学科交叉的领域,主要涉及声学,信号处理、信息论等学科。由于语音信号的多样性、复杂性,目前的语音识别系统在特定的场合有较满意的性能。系统性能大致取决于4类因素:1. 识别词汇表的大小和语音的复杂性;2. 语音信号的质量;3. 单个说话人还是多说话人;4. 硬件。
TTS
,英文全称是TextToSpeech,即文语转换,又称为计算机语音合成,它的过程和ASR刚好相反,是把计算机中任意出现的文字转换成自然流畅的语音输出。主要由三个部分组成:文本分析模块、韵律生成模块和声学模块。
技术篇
ASR
-
实现方式:
- 传统: 隐马尔可夫模型(HMM)
- 深度神经网络端到端方法
!
-
实现过程:
-
编码:把声音转化成机器能识别的样式,即用数字向量表示。
输入的声音信号是计算机没办法直接识别的,首先需要将声音信号切割成一小段一小段,然后每一小段都按一定的规则用向量来表示。
-
解码: 把数字向量拼接文字的形式。
首先,将编译好的向量,放到声学模型中,就可以得到每一小段对应的字母是什么;
然后,把翻译出来的字母再经过语言模型,就可以组装成单词了。
-
TTS
-
实现方式:
-
拼接法
首先,要准备好大量的语音,这些音都是又基本的单位拼接成的(基本单位如音节、音素等),然后从已准备好的声音中,抽取出来合成目标声音。
- 优点:语音合成的质量比较高。
- 缺点:数据量要求很大,数据库里必须有足够全的“音”。
-
参数法
根据统计模型来产生每时每刻的语音参数(包括基频、共振峰频率等),然后把这些参数转化为波形。
- 优点:对数据的要求要小点。
- 缺点:质量比拼接法差一些。
-
参考
- 语音交互的三驾马车:ASR、NLP、TTS | 人人都是产品经理 (woshipm.com)
开源项目
1. 微软 Speech SDK 5.1(SAPI 5.1) - 更新至2009年8月
-
优缺点
windows 开源的SDK,支持windows 7, 后续未更新过,C++
-
概述
SAPI API在一个应用程序和语音引擎之间提供一个高级别的接口。SAPI 实现了所有必需的对各种语音引擎的实时的控制和管理等低级别的细节。
SAPI 发动机的两种基本类型是文本到语音(TTS)和语音识别器(SR)。TTS 系统使用合成语音将文本字符串和文件合成到语音音频中。语音识别器将人类语音音频转换为可读文本字符串和文件。
- 参考
- 演讲 API 概述 (SAPI 5.4) |微软文档 (microsoft.com)
2. Kaldi
-
优缺点
开源,C++,工具箱,包含语音识别技术,且开源多种模型,但模型较大(小几G),网上测试效果不错,行业数据集达到字错率2.44%
-
概述
KALDI是著名的开源自动语音识别(ASR)工具,这套工具提供了搭建目前工业界最常用的ASR模型的训练工具,同时也提供了其他一些子任务例如说话人验证(speaker verification)和语种识别(language recognition)的pipeline。
-
Kaldi结构图
KALDI的矩阵计算功能以及构图解码功能分别是基于BLAS/LAPACK/MKL和OpenFST这两个开源工具库的,在这些库的基础上,KALDI实现了Matrix,Utils,Feat,GMM,SGMM,Transforms,LM,Tree,FST ext,HMM,Decoder等工具,通过编译之后可以生成命令行工具,也就是图中的C++ Executables文件。最后KALDI提供的样例以及通用脚本展示了如何使用工具来搭建ASR Pipeline,是很好的学习材料。
- 参考
- KALDI简介 - 简书 (jianshu.com)
- 官网
- Kaldi: Kaldi (kaldi-asr.org)
- kaldi-asr/kaldi: kaldi-asr/kaldi is the official location of the Kaldi project. (github.com)
- Kaldi Models
- CVTE Mandarin Model
- 编译
- kaldi在Windows下的使用_yutouwd的博客-CSDN博客_kaldi windows
- 测试
- Kaldi ASR准确度测试 - 知乎 (zhihu.com)
- mikeBlogEssays/20191026_kaldi使用cvte模型进行语音识别.rst at master · mike-zhang/mikeBlogEssays (github.com)
- 教程
- Kaldi实践
- 工业应用实践 (xmu.edu.cn)
- Kaldi中文语音识别:各种开源的已经训练好的语音识别模型_Ryan0828的博客-CSDN博客
- 语音识别:在Kaldi上使用CVTE模型-已训练好的开源中文ASR模型_Ryan0828的博客-CSDN博客
- 官网
- KALDI简介 - 简书 (jianshu.com)
3. Wenet(推荐)
-
优缺点
专注于语音识别领域,借鉴EspNet实现端到端解决方案,模型大小150M左右,支持x86,支持流式处理(边说边识别)性能出色(10s音频识别不超过1s),面向工业应用落地,但在Windows环境下编译网上尚未成功编译
-
设计框架
整个方案基于Pytorch是实现,左侧是开发环境,右侧是生产环境,通过模型导出将开发与生产环境打通
- 参考
- 官网
- wenet-e2e/wenet: Production First and Production Ready End-to-End Speech Recognition Toolkit (github.com)
- 论文 - 2102.01547.pdf (arxiv.org)
- 技术
- WeNet 更新:支持中文开源1385h数据集并开放预训练模型 - 知乎 (zhihu.com)
- Wenet网络设计与实现 | Chao Yang (placebokkk.github.io)
- Wenet - 面向工业落地的E2E语音识别工具 - 知乎 (zhihu.com)
- WeNet步行街 - 知乎 (zhihu.com)
- 编译部署
- Windows下编译语音识别引擎Wenet_weixin_46846685的博客-CSDN博客_wenet语音识别
- Wenet 转onnx - Mashiro009/wenet-online-decoder-onnx (github.com)
- 用 WeNet 搭建 Android 语音识别系统 - 知乎 (zhihu.com)
- 官网
5. 其他(未完成)
5.1 EspNet
-
优缺点
需要依赖Kaldi
- 参考
- Espnet实践 (xmu.edu.cn)
5.2 ASRT_SpeechRecognition
5.3. CMU Sphinx
5.4 HTK
5.5 deepspeech
5.6 deepspeech2
5.7 SpeechBrain
DATASET
- CSLT public data
- OpenSLrR (THCHS-30)
参考
- ASR-工业级中文语音识别系统 · ASR-中文语音识别系统 (taorui-plus.github.io)
- TTS论文 - 低调奋进 (yqli.tech)
- TTS数据集 - 低调奋进 (yqli.tech)