speech-recognition - 什么是上下文相关的声学建模?

标签 speech-recognition

我试图弄清楚上下文独立/依赖声学建模到底是什么。我一直在尝试阅读一些解决这个问题的论文,但我对这个概念仍然有点动摇。据我目前的理解(这可能是错误的)上下文相关的声学模型是根据音素按顺序出现的数据训练的声学模型。例如,使用单词对目标语言进行训练,因此音素取决于前后出现的音素的上下文,从而为它们提供上下文。独立上下文将是一个声学模型,它是如何仅使用孤立的音素进行训练的。

最佳答案

传统的方法是使用隐马尔可夫模型(HMM)来识别语音。基本上,在 HMM 中,您尝试将输入声音表示为状态序列。每个状态对应于音素的特定部分。

区别不在于模型训练的内容,而在于模型本身的结构。声学模型是一组声音检测器。每个检测器描述什么声音是相似的,例如,它可能是描述音素特征的最可能值的高斯混合模型(GMM)。或者它可能是一个检测特定声音的神经网络。

在上下文无关模型中,隐马尔可夫模型的结构很简单,您可以使用单个检测器检测所有出现的电话。假设您使用检测器检测到单词“hi”

 HH_begin HH_middle HH_end IY_begin IY_middle IY_end

您可以使用与手机完全相同的检测器检测单词“hoy”HH

 HH_begin HH_middle HH_end OY_begin OY_middle OY_end

在上下文相关模型中,“hi”和“hoy”中的 HH 检测器是不同的并单独训练。基本上它们有不同数量的参数。这是合理的,因为周围的电话确实会影响电话本身的发音,电话开始听起来有点不同。所以你有

 HH_before_IY_begin HH_before_IY_middle 
     HH_before_IY_end IY_after_HH_begin 
        IY_after_HH_middle IY_after_HH_end

还有哦

 HH_before_OY_begin HH_before_OY_middle 
     HH_before_OY_end OY_after_HH_begin 
        OY_after_HH_middle OY_after_HH_end

这种方法的优点是,因为你有更多的参数,所以你可以更准确地识别语音。缺点是您必须考虑很多变体。

语音识别算法非常复杂,超出了公共(public)网络通常描述的范围。例如,为了减少检测器的数量,上下文相关的模型通常被聚类并绑定(bind)到一些较小的集合中。您只需合并数千个检测器即可提供良好的区分和泛化,而不是数百个可能的上下文相关检测器。

如果您认真对待语音识别算法和实践,而不是网络上的随机来源,最好阅读像 Spoken Language Processing 这样的教科书或者至少是论文The Application of Hidden Markov Models in Speech Recognition

关于speech-recognition - 什么是上下文相关的声学建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37375865/

相关文章:

algorithm - 通过与预先录制的单词进行比较来识别

speech-recognition - 使用 Sphinx4 的听写应用程序

javascript - 如何将 SpeechContext 用于 Google Cloud Speech

python - 直接从 SFTP 服务器将音频文件加载到 Python 语音识别模块(使用 Paramiko SFTPClient)

python - 使用 Dragonfly 禁用 Windows 语音识别

flutter/Dart : speech to text (offline and continuous) for any language

java - Oreo 中的 RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS

java - 使用java中的麦克风通过VOSK进行语音识别

javascript - SpeechRecognition 在 Firefox 中不起作用

python - 我们如何使用 pocketsphinx 将 .wav 文件转换为文本?