本文使用基于学习向量量化算法实现了对普米语语谱图的识别。该算法首先通过傅立叶变换绘制出每条普米语语料的语谱图;再次,提取每张语谱图的图像灰度共生矩构建特征向量;最后,运用学习向量量化实现对普米语孤立词的分类。基于学习向量量化算法的分类准确率达到了80.0%。 In this paper, we proposed a Primi language speech recognition algorithm based on Learning Vector Quantization (LVQ). Firstly, the algorithm uses the Fourier transform to plot each Primi language pragmatics; secondly, it extracts the gray level cooccurrence moments of each spectrogram to construct feature vectors; and finally, it uses learning vector quantization to realize the classification of Primi isolated words. The classification accuracy based on the Learning Vector Quantization (LVQ) is 80.0%.
杨花,江涛*,和丽华,陈绍雄,潘文林
云南民族大学,数学与计算机科学学院,云南 昆明
收稿日期:2018年12月5日;录用日期:2018年12月17日;发布日期:2018年12月26日
本文使用基于学习向量量化算法实现了对普米语语谱图的识别。该算法首先通过傅立叶变换绘制出每条普米语语料的语谱图;再次,提取每张语谱图的图像灰度共生矩构建特征向量;最后,运用学习向量量化实现对普米语孤立词的分类。基于学习向量量化算法的分类准确率达到了80.0%。
关键词 :普米语,灰度共生矩阵,学习向量量化(LVQ)
Copyright © 2018 by authors and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
普米族是我国边疆少数民族之一,主要分布在云南省怒江州的兰坪白族普米族自治县、丽江市古城区、永胜县、宁蒗彝族县 [
LVQ神经网络模型是一种具有自学习能力强、网络结构简单等优点的有监督式神经网络分类方法 [
语谱图,亦称语音频谱图,它是通过像素的灰度值大小反映相应时刻和相应频率的语音信号能量密度。本文采用短时傅里叶变换(STFT)把语音信号从时域转换到频域,求取每帧信号的能量密度谱,最终绘制出语谱图,其流程如图1所示。
图1. 语谱图生成的流程图
1) 伪彩色映射函数:colormap (MAP)。其中MAP是所采用的伪彩色映射矩阵,默认值为JET,可以通过MAP = colormap获得当前的伪彩色映射矩阵,它可以是一个任意行的矩阵,但其必须有且只有三列,并分别表示红色、绿色和蓝色的饱和度。
2) 语谱图显示函数:imagesc (t,f,L)。当数据比例映射使用整个色域时使用该函数,其他情况下与image()函数作用相同。其中t是时间坐标,f是频率坐标,L则是从功率谱值经伪彩色映射后的彩色电平值。
通过上述流程,画出了普米语汉语为“出去”的语谱图,如图2。
在图2中横坐标表示时间,纵坐标表示频率,坐标点值表示语音数据能量。
灰度共生矩阵是一种研究图像纹理特征的方法,其能反映图像灰度关于变化幅度、相邻间隔、方向
图2. “出去”的语谱图
的综合信息,也是一种对图像相邻像素的灰度相关性进行定量描述的方法。灰度共生矩阵就是从影像 ( x , y ) 灰度i的像素出发,统计与距离为 δ ,灰度为j的像素 ( x + Δ x , y + Δ y ) 同时出现的概率 P ( i , j , δ , θ ) 。用数学公式表示则为:
P ( i , j , δ , θ ) = { [ ( x , y ) , ( x + Δ x , y + Δ y ) ] | f ( x , y ) = i , f ( x + Δ x , y + Δ y ) = j , x = 0 , 1 , 2 , ⋯ N x − 1 ; y = 0 , 1 , 2 , ⋯ , N y − 1 } (式1)
式中 i , j = 0 , 1 , 2 , ⋯ , L − 1 ; x , y 是影像中的像素坐标; N x , N y 分别为影像的行列数。
根据灰度共生矩阵,可以定义出大量反映图像在方向、间隔、变化幅度及快慢的纹理特征。
图3. 算法实现流程图
图3中计算出的特征值为灰度共生矩阵。
计算灰度共生矩阵时,我们取0˚,45˚,90˚,135˚四个方向作为灰度共生矩阵的方向:
P 0 ∘ ⋅ d ( a , b ) = | { [ ( k , l ) , ( m , n ) ] ∈ D : k − m = 0 , | l − n | = d , f ( k , l ) = a , f ( m , n ) = b } | (式2)
P 45 ∘ ⋅ d ( a , b ) = | { [ ( k , l ) , ( m , n ) ] ∈ D : ( k − m = d , l − n = − d ) ∨ ( k − m = − d , l − n = d ) , f ( k , l ) = a , f ( m , n ) = b } | (式3)
P 90 ∘ ⋅ d ( a , b ) = | { [ ( k , l ) , ( m , n ) ] ∈ D : | k − m | = d , l − n = 0 , f ( k , l ) = a , f ( m , n ) = b } | (式4)
P 135 ∘ ⋅ d ( a , b ) = | { [ ( k , l ) , ( m , n ) ] ∈ D : ( k − m = d , l − n = − d ) ∨ ( k − m = − d , l − n = − d ) , f ( k , l ) = a , f ( m , n ) = b } | (式5)
式中d表示像素间隔, ( k , l ) , ( m , n ) 分别为原像素和偏移后的像素坐标,其中 k , m 为纵坐标,D为图像范围。
1) 对比度
C o n = ∑ n = 0 L − 1 n 2 { ∑ i = 0 L − 1 ∑ i = 0 L − 1 p ^ ( i , j | d , θ ) } 2 | i − j | = n (式6)
2) 能量
A s m = ∑ i = 0 L − 1 ∑ i = 0 L − 1 p ^ ( i , j | d , θ ) 2 (式7)
3) 熵
E n t = ∑ i = 0 L − 1 ∑ i = 0 L − 1 p ^ ( i , j | d , θ ) lg p ^ ( i , j | d , θ ) (式8)
4) 相关性
C o o r = 1 σ x σ y ∑ i = 0 L − 1 ∑ i = 0 L − 1 ( i − μ x ) ( j − μ y ) p ^ ( i , j | d , θ ) (式9)
其中 μ x , μ y , σ x , σ y 分别定义为:
μ x = ∑ i = 0 L − 1 i ∑ j = 0 L − 1 p ^ ( i , j | d , θ ) (式10)
μ y = ∑ i = 0 L − 1 j ∑ j = 0 L − 1 p ^ ( i , j | d , θ ) (式11)
σ x = ∑ i = 0 L − 1 ( i − μ x ) 2 ∑ j = 0 L − 1 p ^ ( i , j | d , θ ) (式12)
σ y = ∑ i = 0 L − 1 ( j − μ y ) 2 ∑ j = 0 L − 1 p ^ ( i , j | d , θ ) (式13)
其中 μ x , μ y 为均值, σ x , σ y 为标准差。
LVQ (Learning Vector Quantization)神经网络是一种有监督的聚类学习方法,LVQ神经网络由输入层、竞争层和线性输出层三层神经元组成。如下图4所示:
图4. LVQ网络的结构
分类的流程如图5所示:
图5. 设计步骤流程图
步骤1:从语料库中随机抽取100个特定人发音的普米语孤立词,每个孤立词读八遍,共有800个语料;
步骤2:生成的800个样本语谱图,随机抽取600个作为训练集,200个作为测试集;
步骤3:计算出训练集和测试集能量、熵、惯性矩、相关的均值、标准差、一阶矩、二阶矩、最大值、最小值作为最终纹理特征向量。
步骤1:选定训练集和测试集后,建立一个向量量化神经网络函数newlvq,其中学习速率设定为0.01,learnlv1为学习方法(LVQ1),其MATLAB代码如下:
for i = 1:8
rate{i} = length(find(Tctrain == i))/300;
end
net = newlvq (minmax (Ptrain),10,cell2mat (rate),0.01,'learnlv1');
net.trainParam.epochs = 100;
net.trainParam.goal = 0.001;
net.trainParam.lr = 0.1;
步骤2:网络创建好后,对网络中的迭代次数、学习速率和训练精度等参数进行设置,并运用train函数对LVQ网络训练,其MATLAB代码如下:
net = train(net, P_train, T_train);
步骤3:待LVQ神经网络模型训练好后,使用sim函数将普米语语谱图的测试集数据输入到模型,得到测试集语谱图的分类结果。其MATLAB代码如下:
T_sim = sim(net, P_test);
T_csim = vec2ind(T_sim);
result = [Tc_sim; Tc_test]
本实验首先从语料库中随机抽取100个特定人发音的普米语孤立词,每个孤立词读八遍,共有800个语料;其次从生成的800张语谱图中随机抽取600张语谱图作为训练集,200张语谱图作为测试集进行实验;最后根据灰度共生矩阵算法定义:设相邻间隔距离d = 1,即可得到0˚、45˚、90˚、135˚四个方向上的共生矩阵,通过计算训练集和测试集的灰度共生矩阵,将能量、熵、对比度、相关性的均值、最大值、最小值和标准差作为最终16维纹理特征第LVQ网络进行训练,训练结果如图6所示。
图6. 网络迭代100次的误差变化过程
网络训练迭代100次的误差变化如图5所示,从图可以看出,随着迭代次数的增加,当迭代次数epoch = 17时,训练结果是最优的,最终的分类准确率为Accuracy = 80.0%。
本文主要是针对普米语进行分析研究的,最后的实验结果表明,数据归一化预处理结合LVQ神经网络可以实现对普米语的识别,识别率为80.0%,可以证明实验结果的合理性和价值性。然而本文只基于特定人的小样本数据且仅针对LVQ一种方法对普米语语谱图进行识别,因此在今后对大样本数据和不同的识别方法可以作进一步对比研究。
国家自然科学基金项目(61363022);云南民族大学研究生创新基金(2018YJCXS228);云南省教育厅科学研究基金项目(2017YJS056)。
杨 花,江 涛,和丽华,陈绍雄,潘文林. 基于LVQ的普米语语谱图识别Primi Language Spectrogram Recognition Based on Learning Vector Quantization[J]. 计算机科学与应用, 2018, 08(12): 1850-1856. https://doi.org/10.12677/CSA.2018.812205