情感语音识别的基本环境是传统的机器学习方法,即使用特征参数有监督的训练模型,然后使用测试集进行识别。常用的、也比较简单的就是:支持向量机SVM。该识别网络性能较好,且学习资源较丰富,还有matlab的工具箱。需要下载工具包,设置路径添加到MATLAB中即可使用。
关于LibSVM工具箱的下载及其安装教程有很多,就不介绍了。设置路径教程如下,不用使用命令窗口等麻烦的工序,具体操作如下(以Matlab2015b为例,其他版本的也是一样的操作):
1、在matlab的安装路径下寻找到toolbox,将你下载的LibSVM工具箱的文件放在以下路径中。
注意:不建议把Matlab装在C盘,因为MATLAB占用空间和内存较大,放在C盘容易让电脑很卡。由于本人是接用别人的电脑,本身电脑空间较大,就懒得更换了。
2、设置路径:在HOME下寻找到Set Path单击:
弹出以下窗口,根据添加文件的性质选择按钮1或者2,然后点击Save,接下来点击Close就可以直接调用工具箱中的函数了。
添加成功之后,可以使用下面的函数测试一下:(注意:help 在MATLAB中超级好用,使用help可以很快的了解到你使用的函数)
help buffer2
如图是:1,表示没有添加成功;2,表示添加成功
接下来介绍:SVM的情感语音识别
首先,将测试集的特征数据与标签分开存放在:train_data与train_label中,注意数据要与标签对应起来,这里的train_data与train_label存放的是多种情感的特征数据与标签。关于测试集test_data与test_label与训练集相类似,代码如下:
[label1,data1]=libsvmread('happy_train.txt');
[labels1,datas1]=libsvmread('happy_test.txt');
[label2,data2]=libsvmread('sad_train.txt');
[labels2,datas2]=libsvmread('sad_test.txt');
[label3,data3]=libsvmread('neutral_train.txt');
[labels3,datas3]=libsvmread('neutral_test.txt');
[label4,data4]=libsvmread('angry_train.txt');
[labels4,datas4]=libsvmread('angry_test.txt');
train=[data1;data2;data3;data4];
train_label=[label1;label2;label3;label4];
test=[datas1;datas2;datas3;datas4];
test_label=[labels1;labels2;labels3;labels4];
livsvmread很强大的一个函数,可以直接将.txt文件中的第一列标签与后面的特征数据分开来:
然后使用以下两个函数进行参数寻优,最后寻得最优的两个参数:bestc与bestg
[train_final,test_final] = scaleForSVM(train,test,-1,1);
[bestCVaccuracy,bestc,bestg] = SVMcgForClass(train_label,train_final)
最后建模并进行预测:(这里的9.1896余0.0068是前面寻优得到的参数,把对应的参数填写在这里)
model=svmtrain(train_label,train_final,'-c 9.1896 -g 0.0068');
[predict_label,accuracy]=svmpredict(test_label,test_final,model);
最后predict_label为预测标签;accuracy为识别准确率。