Kaldi为什么对语音识别有好处? (更新12.25.2019)



为什么我(我希望您)对语音识别感兴趣? 首先,与计算机语言学的其他任务相比,该方向是最受欢迎的方向之一,因为语音识别技术现已在几乎所有地方使用-从银行自动呼叫中心中的简单“是/否”识别到在银行中支持“闲聊”的能力“智能列”,例如“爱丽丝”。 其次,为了使语音识别系统具有高质量,有必要找到最有效的工具来创建和配置这样的系统(本文专门介绍一种这样的工具)。 最后,对我个人而言,在语音识别领域中选择专业无疑是“加”的,这是为了在该领域进行研究,既需要程序员又需要具备语言技能。 这非常刺激,迫使人们获得不同学科的知识。

毕竟,为什么卡尔迪还有其他语音识别框架?


为了回答这个问题,值得考虑一下现有的类似物以及它们使用的算法和技术(本文进一步描述了Kaldi中使用的算法):

  • CMU狮身人面像
    CMU Sphinx(不要与Sphinx搜索引擎混淆!)是由卡内基·梅隆大学的开发人员创建的语音识别系统,包括用于提取语音特征,语音识别(包括在移动设备上)和进行此类识别的培训的各种模块。 CMU Sphinx在语音识别级别使用隐藏的Markov模型,在语言识别级别使用统计N-gram模型。 该系统还具有许多有趣的功能:识别长语音(例如,采访的笔录或录音),连接成千上万个单词形式的大型词典的功能等。重要的是,请注意该系统在不断发展,每个版本的识别质量和性能都得到了提高。 也有跨平台和方便的文档。 在使用该系统的弊端中,有可能单独指出无法“开箱即用”启动CMU Sphinx的原因,因为 即使要解决简单的问题,也需要在语言建模等领域具有适应声学模型的知识。
  • 朱利叶斯
    Julius自1997年开始由日本开发人员开发,现在该项目得到了京都高级科学,技术与管理研究所的支持。 该模型基于N-gram和上下文敏感的隐马尔可夫模型,该系统能够实时识别语音。 缺点包括仅针对日语模型进行分发(尽管有一个VoxForge项目创建了针对其他语言(尤其是英语)的声学模型),并且缺乏稳定的更新。
  • RWTH ASR
    该模型自2001年以来由莱茵威斯特法伦技术大学的专家开发,包括几个用C ++编写的库和工具。 该项目还包括安装文档,各种培训系统,模板,声学模型,语言模型,对神经网络的支持等。同时,RWTH ASR实际上是跨平台的,并且速度很慢。
  • Htk
    HTK(隐马尔可夫模型工具包)是一组语音识别工具,于1989年在剑桥大学创建。 基于隐马尔可夫模型的工具包最经常用作创建语音识别系统的附加工具(例如,Julius开发人员使用此框架)。 尽管源代码是公开可用的事实,但该许可证禁止使用HTK为最终用户创建系统,这就是该工具包目前不受欢迎的原因。 该系统还具有相对较低的速度和准确性。

在“开源语音识别系统的比较分析”一文中( https://research-journal.org/technical/sravnitelnyj-analiz-sistem-raspoznavaniya-rechi-s-otkrytym-kodom/ ),进行了一项研究该系统在英语案例中接受了培训(160小时),并在一个10小时的小型测试案例中得到了应用。 结果,事实证明,卡尔迪具有最高的识别精度,在速度方面比竞争对手略快。 同样,Kaldi系统能够为用户提供用于各种任务的最丰富的算法选择,并且使用非常方便。 同时,重点在于以下事实:对于没有经验的用户,使用文档可能会带来不便, 它是为语音识别专业人士设计的。 但总的来说,与同行相比,卡尔迪更适合科学研究。

如何安装Kaldi


  1. 从位于https://github.com/kaldi-asr/kaldi的存储库下载档案:
  2. 解压缩档案,转到kaldi-master / tools / extras。
  3. 我们执行./check_dependencies.sh:

    如果在那之后您看不到“一切正常”,请打开文件kaldi-master / tools / INSTALL并按照其中的说明进行操作。
  4. 我们执行make(在kaldi-master / tools中,而不是在kaldi-master / tools / extras中):
  5. 转到kaldi-master / src。
  6. 我们运行./configure --shared,您可以通过指定已安装CUDA的路径(./configure --cudatk-dir = /usr/local/cuda-8.0)来配置是否使用CUDA技术的安装,或更改初始值“是“ To” no“(./配置--use-cuda = no)。

    如果同时看到:



    您可能没有遵循步骤4,或者需要自己下载并安装OpenFst: http : //www.openfst.org/twiki/bin/view/FST/FstDownload
  7. 我们确实依靠。
  8. 我们执行make -j。 建议您输入构建时将使用的正确处理器核心数量,例如make -j 2。
  9. 结果,我们得到:

使用已安装Kaldi的模型的示例


例如,我使用的是kaldi-ru模型版本0.6, 可以从以下链接下载它

  1. 下载后,转到文件kaldi-ru-0.6 / decode.sh并指定安装的Kaldi的路径,对我来说看起来像这样:


  2. 我们启动模型,指出要在其中识别语音的文件。 您可以使用解码器-test.wav文件,这是测试的特殊文件,已经在此文件夹中:


  3. 这是模型所识别的:

使用什么算法,工作的基础是什么?


有关该项目的完整信息,请访问http://kaldi-asr.org/doc/ ,这里我将重点介绍以下几点:

  • 要么使用声学MFCC(梅尔频率倒谱系数),要么使用不太流行的PLP(感知线性预测-参见H.Hermansky,“语音的感知线性预测(PLP)分析” )从输入信号中提取声学特征。 第一种方法是将原始信号的频谱从赫兹标度转换为粉笔标度,然后使用反余弦变换(https://habr.com/en/post/140828/)计算倒谱系数。 第二种方法基于语音的回归表示:构建一个信号模型,该模型通过线性组合来描述当前信号样本的预测-输入和输出信号的已知样本与线性预测系数的乘积。 在某些条件下,将计算语音信号的任务简化为找到这些系数。
  • 声学建模模块包括隐马尔可夫模型(HMM),高斯分布的混合模型(GMM),深层神经网络,即时延神经网络(TDNN)。
  • 语言建模是使用有限状态机或FST(有限状态转换器)进行的。 FST对从输入字符序列到输出字符序列的映射进行编码,并且转换的权重决定了在输出中计算输入字符的可能性。
  • 解码是使用正反向算法进行的。

关于创建kaldi-ru-0.6模型


对于俄语,有一个由Nikolai Shmyryov创建的预先训练的识别模型,在许多站点和论坛上也称为nsh

  • 为了提取特征,使用了MFCC方法,并且声学模型本身是基于TDNN类型的神经网络的。
  • 培训样本是从YouTube下载的俄语视频的配乐。
  • 为了创建语言模型,我们使用了CMUdict词典以及培训集中的词汇。 由于该词典包含不同单词的相似发音,因此决定为每个单词分配“概率”的值并将其标准化。
  • 为了学习语言模型,顾名思义,使用RNNLM框架(递归神经网络语言模型)基于递归神经网络(而不是良好的旧N-gram)。


与Google Speech API和Yandex Speech Kit的比较


当然,其中一位读者在阅读前面的段落时问了一个问题:好的,我们发现Kaldi优于其直接类似物,但是Google和Yandex的识别系统呢? 也许上述两个框架的相关性是否令人怀疑这两个巨人是否提供了工具? 这个问题真的很好,让我们测试一下!

  • 作为数据集,我们从臭名昭著的VoxForge获取记录和相应的文本解密。 结果,在每个系统识别出3677个声音文件之后,我收到以下WER(字错误率)值:


  • 在没有背景噪音,语调,语音速度等的情况下,VoxForge的记录大致相似。 让任务复杂化:获取open_stt验证子集,其中包括电话对话,YouTube视频和有声书中的音频片段,并使用WER和CER(字符错误率)评估性能。

    收到文字记录后,我注意到Google和Yandex(与Kaldi不同)识别出类似
    “一个”为“ 1”。 因此,有必要纠正这种情况(例如,open_stt的作者提供的参考成绩单中,所有内容均以字母形式表示),这会影响最终结果:



综上所述,我们可以说所有系统在大约相同的级别上都能完成任务,而Kaldi在Yandex语音工具包和Google语音API中并不逊色。 在第二种情况下,Yandex语音套件的性能最佳,因为 与无法识别其中任何部分的竞争对手相比,它最能识别短音频文件(对于Google而言,这些文件的数量甚至太大)。 最后,值得注意的是,Kaldi花费了12个多小时来识别28111个文件,而其他系统的管理时间却大大减少。 但是同时,Yandex语音工具包和Google语音API都是“黑匣子”,可以在其他人的服务器上很远的地方工作,无法进行调优,但是Kaldi可以适应手头任务的具体要求-特色词汇(专业知识,行话,口语),发音功能等。 所有这一切都是免费的,而且没有短信! 该系统是一种设计师,我们所有人都可以使用它来创建一些不寻常且有趣的东西。

我对Yandex.Cloud团队表示感谢,该团队帮助我实施了open_stt案例识别

我在APDiMO NSU实验室工作:
网站: https//bigdata.nsu.ru/
VK小组: https//vk.com/lapdimo

Source: https://habr.com/ru/post/zh-CN470696/


All Articles