我想建立一个模型,可以本地化音频文件中特定单词的出现。例如,我想在大约 5 分钟的录音中找到单词“pizza”。该程序应返回一个数组,其中(start, stop)
包含描述文件中该单词的开始和停止边界的对象。
我可以使用带有某种 CNN 的经典对象定位,其中对象是频谱图中的所需词吗?如果可以:我需要如何准备训练数据——包含单词“pizza”和相同数量的其他单词或更多其他单词的记录?
在录音中搜索单词是否有更好的方法?
我想建立一个模型,可以本地化音频文件中特定单词的出现。例如,我想在大约 5 分钟的录音中找到单词“pizza”。该程序应返回一个数组,其中(start, stop)
包含描述文件中该单词的开始和停止边界的对象。
我可以使用带有某种 CNN 的经典对象定位,其中对象是频谱图中的所需词吗?如果可以:我需要如何准备训练数据——包含单词“pizza”和相同数量的其他单词或更多其他单词的记录?
在录音中搜索单词是否有更好的方法?
您描述的问题称为唤醒词检测或触发词检测。
我相信您可以使用 CNN 对音频的分块Mel频谱图进行分类(另请参见librosa)。作为训练标签,您只需将0
其用于没有唤醒词(没有“披萨”)1
的时间戳和带有唤醒词的时间戳。除了对一个块的所有时间戳进行分类之外,您还可以只训练每个频谱图块的中心帧(让事情变得更容易)。在任何情况下,您都必须确保您的数据集至少是适度平衡的,即您必须有足够的唤醒词和非唤醒词实例。实现这一点的一种方法是将背景噪声的记录与唤醒词和非唤醒词的记录叠加。有一些教程详细说明了如何做到这一点,例如此 YouTube 视频、本文或此 GitHub 存储库。请注意,所有这些方法都使用RNN来完成任务。但是,Bia 等人对此进行了争论。时间卷积网络(TCN)架构(本质上是CNN 跳过连接和扩张)对于您描述的任务可能同样好或更好,并且可能更容易训练。
希望这个答案能给你一些起点。
对于在录音中搜索单词的实用方法,请考虑使用语音识别模型并仅以文本形式进行匹配。现代预训练语音识别模型非常好,既可以作为服务使用,也可以作为可本地安装的开源包使用。有关单词级语音识别的示例,请参见此答案。