如何为说话人识别应用设计人工神经网络?

我想设计一个使用人工神经网络的说话人识别软件(给定一段音频,我希望能够识别出说话人是谁)。我考虑将说话人的名字存储在一个数据库中,每个说话人都有一个唯一的id:

id first_name last_name

网络设计如下:- 输入是音频特征(频率、音高等) – 隐藏层 – 单一输出:说话人在数据库中的ID

我的问题是网络架构背后的逻辑是否有效。将网络的输出设置为数据库ID(我将对找到的最大ID进行归一化处理)是否正确?

我考虑过使用多个输出,每个输出对应一个特定的说话人。但随着说话人数量的增加,输出的数量也会随之增加,所以如果我有10,000个说话人,我将不得不有10,000个输出,我认为这是不合理的。

这是使用ANN解决此类问题的方法吗?


回答:

我的问题是网络架构背后的逻辑是否有效。将网络的输出设置为数据库ID(我将对找到的最大ID进行归一化处理)是否正确?

这是错误的方法。如果你将输出视为数字,你会对人施加某种接近性,使得那些ID更接近的人比那些ID更远的人拥有更相似的语音,因此某些错误的惩罚会比其他错误更重。

我考虑过使用多个输出,每个输出对应一个特定的说话人。但随着说话人数量的增加,输出的数量也会随之增加,所以如果我有10,000个说话人,我将不得不有10,000个输出,我认为这是不合理的。

不幸的是,这是正确的方法。通常,在进行多类别分类时,会使用softmax输出单元。这样你就不会施加任何偏好,所有错误的惩罚都与标识符的接近性无关。

实际上,你试图解决的问题非常困难(从我的角度来看)。我怀疑即使是人类也无法区分10,000个说话人!你将需要每个说话人的大量语音数据、一些智能的预处理,以及更智能的(很可能是深度)机器学习算法来使其工作。不要认为你只需使用一个人工神经网络,它就会“自动工作”。有许多类型的人工神经网络,我们仍然不知道如何在一般情况下可靠地训练它们。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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