【问题标题】:Speech Recognition - how to split a sentence into words?语音识别 - 如何将句子拆分为单词?
【发布时间】:2020-01-31 07:52:39
【问题描述】:
我是语音识别的新手,我正在寻找一种将音频/wav 文件形式的句子(或多个句子)拆分为单个单词的方法?这听起来像是一个标准问题,所以我想知道业内人士是如何处理它的。
ps:是的,这个问题是三年前提出的,但我正在使用更新的库(即 pytorch 和 tensorflow 2.0)寻找最新的答案。谢谢!
【问题讨论】:
标签:
python
tensorflow
pytorch
tensorflow2.0
【解决方案1】:
这不是那么简单。
您想要的称为对齐。 IE。每个音频帧都与一个词(或子词、字符或更好的单个音素)对齐。
最合理的方法需要标准的传统语音识别系统。最简单的方法是使用 HMM 系统,要么由老式 GMM 支持,要么由 NN(称为混合 HMM-NN 模型)支持。这也需要一个词典(音素到单词的映射)。通常你会使用所有这些的现有实现,例如Kaldi 或 RASR,因为实现起来并不简单。我还没有看到纯 TF 实现。然后,该软件通过 HMM 计算可能的最佳对齐路径(即,根据训练的模型,它具有最高的概率)。如果你知道ground truth的话,这就是维特比算法,来计算这个最佳路径。否则你会做一些解码(使用光束搜索)。
你也可以做,但这会更老套,也不太好(对于这个获得对齐的任务):使用一些端到端模型,例如带注意力的编码器-解码器,或 CTC。对于具有注意力的编码器-解码器,您可以使用注意力权重来很好地猜测单词在哪里(然后您可能会猜测边界在哪里)。 CTC 类似。但这并不准确。但这是你可以在纯 TF 中轻松实现的东西。
无论如何,实现本身并不是那么难的部分(尽管仍然不简单)。您首先需要了解其背后的所有理论。也许 StackOverflow 不是问这个问题的正确地方。通读 Kaldi 或 RASR 文档,或者观看一些有关语音识别的讲座,或者阅读有关该主题的书籍。