如何处理Keras中不是两个发言者输出的语音输入?

我正在尝试使用Keras和傅里叶变换来创建一个基于神经网络的说话人识别系统,处理的语音样本是我和我的朋友持续3秒钟说“eeeee”。现在的问题是,如果我们给神经网络输入另一个人的语音(同样是3秒钟的“ee”),它仍然会输出100%的概率认为是我们其中之一。我使用softmax输出数据,所以对于我的朋友输出大约是[1, 0],对我则是[0, 1]。有时候输出会是[0.95, 0.05]。

除了输入另一个人的数据时,它仍然会输出像[1,0]这样的结果之外,其他情况运行良好,但我期望它会给出像[0.6, 0.4]这样的结果,因为这是另一个人的声音。我还尝试使用了MFCC的两个特征,但似乎也没用。我想增加第三个输出并用随机样本进行训练是否可行(我自己并不认为这样做有效,因为它无法针对所有不同的输入进行训练)?或者我该如何尝试解决这个问题?我已经为这个问题挣扎了很长时间,任何帮助都将不胜感激!


回答:

神经网络本质上不过是高级的特征提取器和插值器。
对于它从未见过的数据,不应期望有什么特定的表现,这与使用DTFT、MFCC或I-Vectors无关,这是数据驱动算法的基本原则。
仅作为方法论的解释,不应过于字面理解,通过寻找两个说“eeeeeeeee”的说话人之间的差异,可以通过找出平均音高并基于这个不太有信息量的特征来决定。
那么,当引入一个新的语音时,你认为会发生什么?
最后一点 – 有很多方法可以解决这种退化情况,你很可能会遇到一些过拟合。这也可能导致对样本外数据出现意外的结果。


关于一般问题,有几种不同的方法,但我推荐采用两阶段的方法:

  1. 使用1类SVM或类似方法,识别语音是否属于你或你的朋友这一类
  2. 你训练的神经网络。

另一种选择是收集足够的“一般说话人”的样本,并将其作为第三类添加。这种方法在某些情况下被称为分类中的OOS(样本外)类别。这可以为你提供一些不错的搜索资料 🙂

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注