如何处理Keras中不是两个扬声器输出之一的语音输入?

时间:2018-11-22 11:40:16

标签: python machine-learning keras

我正在尝试使用Keras和傅立叶变换通过神经网络创建说话人识别,以处理语音样本。声音样本是我和我的朋友说“ eeeee” 3秒钟。现在的问题是,如果我们给神经网络其他人的输入(“ ee”持续3秒钟),它仍然给出表明它是我们100%的输出。我使用softmax输出数据,因此它给我的朋友大约[1,0],给我大约[0,1]。有时就像[0.95,0.05]。

工作正常,除了我们像我说的那样输入来自另一个人的数据外,它仍然给出[1,0],尽管我希望它给出类似[0.6,0.4]的信息,因为这是另一种声音。现在,我也尝试使用MFCC的2个功能,但似乎也不起作用。是否会制作第三个输出并使用随机样本对其进行训练(我本人并不这么认为,因为它不能针对所有不同的输入进行训练)?否则我该如何面对这个问题?我已经在这个问题上苦苦挣扎了很长时间了,因此我们将不胜感激!

2 个答案:

答案 0 :(得分:0)

这不是一件简单的事情。您需要更多的培训示例并进行一些测试。

您可以尝试训练一些东西成为您和您的朋友,而不是所有人,但这并不是那么容易,并且(再次)您将需要很多示例。

这是一个非常广泛的问题,有几种不同的方法,我不确定Keras和神经网络是否是解决此特定任务的正确答案。

答案 1 :(得分:0)

神经网络本质上就是花哨的特征提取器和插值器。
没有理由期待从未见过的特定数据,这与使用DTFT,MFCC或I-Vectors没有太大关系,这是数据驱动算法的基本原理。
就像方法论上的解释一样,不要从字面上理解,可以通过找到平均音高并确定一个不太实用的功能来确定两个说话者之间的区别。
然后引入新的话语会如何?
最后一点-有很多方法可以解决这种退化的情况,以至于您很可能会感到过拟合。这也可能导致样本外数据出现意外结果。


关于一般问题,有几种不同的方法,但是我建议分两个阶段:

  1. 1类SVM或类似的东西,以标识话语在you or your friend类中
  2. 您训练过的NN。

另一种选择是获取足够的“通用发言人”样本并将其添加为第三类。在某些情况下,这称为OOS(样本外)分类。那可以给你一些很好的谷歌搜索材料:-)