我想设计一个使用人工神经网络的说话人识别软件(给定一段音频,我希望能够识别出说话人是谁)。我考虑将说话人的名字存储在一个数据库中,每个说话人都有一个唯一的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个说话人!你将需要每个说话人的大量语音数据、一些智能的预处理,以及更智能的(很可能是深度)机器学习算法来使其工作。不要认为你只需使用一个人工神经网络,它就会“自动工作”。有许多类型的人工神经网络,我们仍然不知道如何在一般情况下可靠地训练它们。