如何为简单的语音命令收集训练数据?

数据挖掘 机器学习 数据集 训练
2022-03-11 22:18:20

我正在尝试建立一个机器学习模型来识别简单的语音命令,如上、下、左等。

基于图像的类似问题,我只是拍照并为其分配标签。

我可以使用 librosa 生成特征并可视化它们。我听说 CNN 在这项任务上表现出色。所以,我想知道如何为这种基于音频的系统收集训练数据,因为我无法录制整个剪辑,因为我的命令只有几毫秒长(在预测时,它只会是一个也有几毫秒)。

我的第一个想法是每隔几毫秒生成一个图像(使用 matplotlib 和 librosa.features),并且只使用我所说的命令作为正标签(以及其余的负标签),但这似乎很乏味,可能做一个更好的方法。

有没有一种有效的方法来做到这一点?

2个回答

librosa 会生成什么?如果它给你的声音片段也不是文字,那么我会担心培训的有效性。最好记录下你自己说正面标签词和说一堆其他词作为负面标签的样本。我认识到这可能是一个令人恼火的过程;我过去读过的一种最大限度地利用少量训练数据的方法是对训练数据使用转换和扭曲来增加有效样本数量。在这种情况下,训练数据是动物的图片。实际上,研究人员所做的只是稍微调整了图像。他们将图像旋转不同程度,挤压它们(通过降低高度或宽度而不保持纵横比)或拉伸它们等等。您也许可以这样做;

要为固定词汇语音命令训练(和评估)分类器,您应该构建一个精选数据集,该数据集:

  • 具有明确定义的命令列表(分类器的类)
  • 每个命令都有足够的样本。10-100,或更多
  • 每个音频样本仅包含一个命令。
  • 每个样本的长度大致相同
  • 命令的开始位于音频样本的开头

然后,数据集将是 .WAV 音频文件的集合,以及描述它们的 .CSV:

filename,command,...
dd690d11-2412-4a16-8103-f1c2d178eca8.wav,up
df36c75b-d30d-49c0-a103-f9fc76827625.wav,down
dab2f090-4493-4756-85ee-b6cd62c7bae8.wav,left
...

录制过程

录音的一个基本过程是使用现有的音频程序(例如Audacity),并为每个单词制作一个录音。

可以加快收集速度的一件事是一次性记录许多话语。连续多次说出一个命令词(“up”),每个命令之间有很多静默(0.5 秒)。然后可以使用自动音频分割算法来使用静音分割命令。静音分割的示例程序是:pyAudioAnalysisaudiotok

捕捉变化

一个好的数据收集过程可以确保包含类中大部分自然发生的变化。对于演讲,这通常意味着录制许多不同的演讲者,因为每个人的说话方式都略有不同。但即使只有一个扬声器,您也可以自己引入一些变化:在您说快或慢的地方做额外的录音。并且还通过您大声(接近喊叫)或轻柔(接近耳语)说它们的地方。

您可能还希望有课外示例,至少用于评估。您可以以几乎相同的方式收集这些。为了获得许多不同的单词,例如可以逐字阅读维基百科的文章(之间保持沉默)。然后过去并删除您的目标词。