我目前正在研究歌唱语言识别问题(以及机器学习的基础知识)。我在互联网上找到了很多关于这方面的工作,但其中一些没有提供任何代码(甚至是伪代码),这就是为什么我试图使用他们的机器学习模型描述来重现它们。
一个很好的例子是由Keunwoo Choi和Yuxuan Wang编写的LISTEN, READ, AND IDENTIFY: MULTIMODAL SINGING LANGUAGE IDENTIFICATION OF MUSIC
。
总而言之,他们将两个层面串联起来:音频层(以声谱图的形式)、文本层(使用LangDetect的元数据上的语言概率向量、56维向量)。The text branch is a 3-layer MLP where each layer consists of a 128-unit fully-connected layer, a batch normalization layer, and a ReLU activation [22].
对于文本模型,我得到了这样的结果:
text_model = Sequential()
text_model.add(Input((56,), name='input'))
text_model.add(BatchNormalization())
text_model.add(Dense(128, activation='relu'))
langdetect.detect_langs(metadata)
会传回[de:0.8571399874707945, en:0.14285867860989504]
。
我不确定我是否正确描述了我的模型,我不明白如何将它正确地(langdetect概率向量)放入keras模型。
1条答案
按热度按时间mcvgt66p1#
首先,需要将
langdetect
输出转换为一个恒定长度的向量。库中有55种语言,因此我们需要创建一个长度为55的向量,其中第i个元素表示文本来自第i种语言的概率。可以这样做:然后你需要创建一个有多个输入的模型,这可以通过functional API来实现,例如,如下所示(根据用例更改输入):
在某些输入上测试模型:
我使用expand_dims函数扩展输入的维度,使输入具有
(1, 256)
和(1, 55)
的形状(这与模型在训练期间预期的输入(batch_size, 256)
和(batch_size, 55)
类似)。这只是一个草稿,但这是你的问题大致可以解决。