语音识别 - 如何将句子拆分成单词?

Speech Recognition - how to split a sentence into words?

我是语音识别的新手,我正在寻找一种方法来将 audio/wav 文件形式的一个句子(或多个句子)拆分成单个单词?这听起来像是一个标准问题,所以我想知道业内人士是如何处理它的。

ps:是的,这个问题是三年前提出的,但我正在寻找使用较新库(即 pytorch 和 tensorflow 2.0)的最新答案。谢谢!

这可不简单。

你想要的叫做对齐。 IE。其中每个音频帧都与一个词(或子词、字符或更好的单个音素)对齐。

最合理的方法需要标准的常规语音识别系统。最简单的方法是使用 HMM 系统,由老式 GMM 或 NN(称为混合 HMM-NN 模型)支持。这也需要一个词典(音素到单词的映射)。通常你会使用所有这些的现有实现,例如Kaldi or RASR,因为这实现起来并不那么简单。我还没有看到它的纯 TF 实现。然后,该软件通过 HMM 计算最佳可能对齐路径(即根据训练模型,具有最高概率的对齐路径)。如果你知道ground truth的话,这就是维特比算法,来计算这条最佳路径。否则你会做一些解码(使用波束搜索)。

你也可以做什么,但这会更麻烦,也不太好(对于获得对齐的任务):使用一些端到端模型,例如带有注意力的编码器-解码器,或 CTC。对于有注意力的编码器-解码器,你可以使用注意力权重来很好地猜测单词在哪里(然后你也许可以猜测边界在哪里)。 CTC 类似。但这并不准确。但这是您可以在纯 TF 中轻松实现的东西。

无论如何,实现本身并不是那么难的部分(尽管仍然不简单)。您首先需要了解其背后的所有理论。也许 Whosebug 不是问这个问题的合适地方。通读 Kaldi 或 RASR 文档,或观看一些有关语音识别的讲座,或阅读有关该主题的书。