基于CNN的口音识别分类算法(源码+万字报告+讲解)(支持资料参考_相关定制)
摘要鉴于声学特征的唯一性、稳定性,依托人工智能、大数据和云计算技术的助推,声纹识别和语音识别技术在对于不同人的口音识别发挥了重要作用。人类发声是一个复杂的生理和物理过程,由语言中心和多个发声器官的互动控制。由于发声器官的大小和形状以及大脑的神经结构不同,每个人都有独特的发声模式,使得个人的发声模式是独一无二的,个人的声学特征在一段时间内是稳定而独特的。随着人工智能、大数据、云计算等技术的快速发展,
摘 要
鉴于声学特征的唯一性、稳定性,依托人工智能、大数据和云计算技术的助推,声纹识别和语音识别技术在对于不同人的口音识别发挥了重要作用。人类发声是一个复杂的生理和物理过程,由语言中心和多个发声器官的互动控制。由于发声器官的大小和形状以及大脑的神经结构不同,每个人都有独特的发声模式,使得个人的发声模式是独一无二的,个人的声学特征在一段时间内是稳定而独特的。随着人工智能、大数据、云计算等技术的快速发展,语音识别和语言识别技术的准确性、智能性和速度都有很大提高。这些技术被广泛应用于公共安全和司法、智能家居、医疗服务监控、远程办公和金融领域的身份确认等领域。特别是在非实体案件中,如电信领域的欺诈,语音识别和语音识别技术的发展确保了证据的真实性和有效性。如今,中国的语音识别技术发展迅速,已达到世界领先水平。
关键词:声纹识别技术;语音识别技术;口音识别
ABSTRACT
In view of the uniqueness and stability of acoustic features, and with the help of artificial intelligence, big data and cloud computing technologies, vocal recognition and speech recognition technologies play an important role in the recognition of accents for different people. Human vocalisation is a complex physiological and physical process, controlled by the interaction of the speech centre and multiple vocal organs. Due to the different size and shape of the vocal organs and the neural structure of the brain, each person has a unique vocal pattern, making individual vocal patterns unique and individual acoustic characteristics stable and distinct over time. With the rapid development of technologies such as artificial intelligence, big data and cloud computing, the accuracy, intelligence and speed of speech recognition and language recognition technologies have improved significantly. These technologies are widely used in areas such as public safety and justice, smart homes, healthcare service monitoring, telecommuting and identity confirmation in the financial sector. Particularly in non-substantive cases, such as fraud in telecommunications, developments in speech recognition and voice recognition technology have ensured the authenticity and validity of evidence. Today, China’s speech recognition technology is developing rapidly and has reached a world leading level.
Keywords: voiceprint recognition technology; speech recognition technology; accent recognition;
第1章 绪论
1.1 语音识别发展历史和基础
1.1.1国外研究
语音识别技术可以追溯到上世纪50年代,最初推出的Audry系统虽然只能识别部分字母,但这却是技术创新的第一步。通过对语音信号建模问题的解决,动态线性编程和预测分析技术的应用,从70年代开始的动态时间正则化技术(DTW)、向量量化(VQ)和隐马尔科夫模型(HMM)等理论也相继出现和发展。80年代起,人工神经网络(ANN)和HMM模型成为了重要算法,为语音识别技术的进一步发展提供了巨大支持。90年代,随着语音识别技术在全球范围内得到广泛部署与应用,许多互联网技术公司也开始加入研究和开发战线。而进入21世纪,基于语音识别技术的应用已经逐渐扩展到即兴口语、自然对话和多语言同步翻译等领域。这个漫长的技术发展过程表明,技术的突破和创新需要长时间的积累与更新换代,并且仍然面临着许多挑战和问题。
1.1.2国内研究
语音识别技术在中国已经拥有数十年的发展历程,清华大学和中科院等机构设计出的语音识别技术已经达到了98%以上的准确率,并且整体识别率也可以控制在10%以下。近年来,随着深度学习、注意力机制等新方法和算法的引入,语音识别技术不断提高,应用范围也不断扩展。这些技术正在智能音箱、智能客服和智能交通等领域提供更加高效和便捷的服务体验。
从最初以隐马尔可夫模型(HMM)为基础的语音识别技术,到如今应用神经网络(NN)和深度神经网络(DNN)等新算法的流行,语音识别技术已经得到广泛运用。随着互联网、移动互联网和物联网的快速发展,语音交互技术受到了广泛的关注和应用。特别是在智能语音助手、智能家居、智能汽车、智能医疗和智能金融系统等领域,这些技术的应用取得了显著的成果。
未来,随着技术的发展和应用场景的不断拓展,语音识别技术将成为人们与计算机互动的最自然、最便捷的方式之一。自动语音识别技术将为人们提供更加智能、高效和人性化的服务,成为实现数字化生活的重要手段。
1.2 语音识别简介
语音识别技术作为一种基于人工智能的技术,经历了数十年的发展历程。在深度学习和注意力机制等新算法的引入下,该技术已经达到了98%以上的高准确度。如今,语音识别技术已经广泛应用于智能音箱、智能客服、智能交通等领域,进一步提高了服务效率。
未来,随着技术的进一步发展和应用场景的不断拓展,语音识别技术将成为数字化生活中不可或缺的一部分,为人们提供更加智能、高效、人性化的服务。例如,在家庭、手表和智能手机等设备上,通过语音识别技术可以实现语音搜索、语音拨号和语音导航等功能,大大方便了用户的控制和使用体验。此外,在医疗领域和智能交通领域,语音识别技术也可以通过电子病历、医疗转录以及车载娱乐、导航等功能,提高工作效率和驾驶体验。这一技术未来还将在教育、广告、金融和安防等领域继续拓展应用,为这些领域带来更多的便利和效率。总之,语音识别技术将成为实现智能和自然交互的主要方向之一,推动数字化时代的进一步发展,为人们的生活和工作带来更多的便捷和智能体验。1.3 论文构成
第1部分主要介绍了声纹识别和对于口音的分类,以及在国内外的发展情况,以及这一次的设计任务和要求。
第2部分为介绍如何进行数据的预处理,对声纹识别和语音识别技术进行了详细的阐述。
第3章为数据预处理
第4章为如何运用CNN来构建模型
第5章为数据如何进行预测
第6部分对本次设计进行了概括和总结。
目录
摘 要 1
ABSTRACT 2
第1章 绪论 2
第2章 总体设计 5
2.1 数据预处理过程 5
2.2 声纹识别和语音识别技术 6
2.2.1 声纹预处理 6
2.2.2 声纹特征提取 6
2.2.3 声纹识别 7
2.3 语音识别技术 7
2.3.1 语音合成 7
第三章 数据预处理 7
3.1 梅尔倒谱系数 7
3.2分帧、加窗 8
3.2.1预处理 9
3.3 总结 14
第四章 模型的构建 15
4.1 CNN的优点 15
4.1.1 CLDNN 15
4.1.2 CLDNN网络结构 15
4.1.3 实验结果 16
4.1.4 deep CNN 17
4.1.5 总结 17
4.2 模型的构建 18
4.4常用的损失函数 19
1、交叉熵——cross entropy 19
2、CTC loss 20
4.4 构建模型代码 21
4.5总结 23
第五章 模型的测试 23
5.1 关于numpy 23
5.2 如何运用keras测试模型 24
5.2.1 关于keras 24
5.2.2 keras在测试中的运用 24
5.3 测试代码实现 24
第六章 结论 25
第2章 总体设计
2.1 数据预处理过程
Librosa是一款开源的Python包,提供了一系列用于分析音频信号的工具,包括读取、处理、转换和可视化等功能。它主要支持的音频格式包括Wave、mp3、Ogg Vorbis等常见格式,可以方便地进行音频文件读取、处理和分析。Librosa依赖于NumPy和SciPy等科学计算库,可以与matplotlib进行集成,提供了许多可视化函数,便于用户将分析结果可视化展示出来。除了音频文件读取,Librosa还提供了其他强大的功能读取音频,读取音频时长:语句librosa.get_duration(y=None, sr=8000, S=None, n_fft=2048, hop_length=512, center=True, filename=None)来计算时间序列的持续时间(单位为秒)。其中:y:音频时间序列sr:y的音频采样率S:STFT矩阵或任何STFT衍生的矩阵(例如,色谱图或梅尔频谱图)n_fft:S的 FFT窗口大小hop_length:S列之间的音频样本数center :布尔值,如果为True,则S [:, t]的中心为y [t * hop_length];如果为False,则S [:, t]从y[t * hop_length]开始filename:如果提供,则所有其他参数都将被忽略,并且持续时间是直接从音频文件中计算得出的,返回的是持续时间(单位为秒)(librosa.get_duration(filename=’path’))
2.2 声纹识别和语音识别技术
语音识别技术是一种依靠个人语音特征进行身份验证和识别的生物识别技术。与其他生物识别技术相比,如指纹、虹膜、面部等,语音识别技术具备更为灵活的捕捉方式和更高的处理速度。只要设备配备了麦克风功能,例如监控摄像头或执法记录仪等,就可以轻松地捕获语音数据,从而明显提升远程识别的准确性和可信度。语音识别技术的发展经历了三个重要的阶段,分别是语音预处理、语音特征提取以及识别算法。在语音预处理阶段,主要致力于提高语音质量、去除噪声和干扰;语音特征提取则是从语音信号中提取具有描述人类语音特征的向量;识别算法涵盖多种不同的方法和算法,旨在进一步提高语音识别的精度和准确性。
2.2.1 声纹预处理
语音识别是一种利用人的声音进行生物识别的技术。该技术通过对人的语音进行分析,识别并确认其身份真实性。与指纹识别、虹膜识别和人脸识别等其他识别技术相比,声纹识别无需任何特殊设备,只需使用带有麦克风的普通设备就可以方便地进行识别,从而实现了远程识别的高效性和准确性。声纹识别技术的开发和应用主要分为三个步骤,即声纹预处理、声纹特征提取和识别方法。声纹预处理的目的在于提高语音质量,降低干扰噪音的影响。声纹特征提取则是从语音信号中提取可以识别人的特征向量,进一步增强辨识度。识别方法采用多种技术手段来提高识别的精度和速度。
2.2.2 声纹特征提取
在电信诈骗、毒品制贩等案件中,语音识别技术得到广泛应用,以翻译和识别嫌疑人的通话内容,从而更好地了解通话主题。语音识别技术包含三个重要步骤:语音合成、语音识别和语义理解。其中,语音合成是用来生成相应文本的语音输出,语音识别则将语音转换成文本,而语义理解则致力于理解语音信号的意义并进行推理分析。这些技术在案件调查、犯罪预防和打击犯罪方面发挥着重要作用。
2.2.3 声纹识别
作为声纹识别技术的最后一环,声纹识别是通过使用不同的模型来辨别说话人的身份。目前常用的声纹识别方法有:高斯混合通用背景模型(GMM-UBM)、联合因子分析(JFA)和神经网络等。这些方法旨在使用声音信号的特征,如声音频率和语音速度等,以确定说话人的身份。其中,高斯混合通用背景模型使用多个高斯分布来建模声音信号的属性,而联合因子分析则使用统计方法来分析声音信号的特征。神经网络则通过训练模型来识别声音信号的独特特征并判定说话人的身份。这些方法不仅在声纹识别领域有应用,也可以在其他领域,如安全、生物识别和人机交互等方面得到广泛应用。
2.3 语音识别技术
除了语音识别技术外,语音识别技术还被用于电信诈骗、贩毒等案件中,对嫌疑人的通话内容进行翻译和理解,以确定通话对象。语音识别技术包括语音合成、语音识别、语义理解等。
2.3.1 语音合成
语音合成方法主要有拼接法[13]和参数法[14]。拼接法最大限度保留了说话人的原始音色,保留了语义的自然度与清晰度。参数法通过数据构建模型,将文本特征转换为声学特征,声码器根据声学模型的输出重构语音波形[15]。
第三章数据预处理
3.1 梅尔倒谱系数
(Mel-scale FrequencyCepstral Coefficients,简称MFCC)。频谱的语音分析由实验结果决定。MFCC分析依据的听觉机理有两个:
第一梅尔刻度(Mel scale):人耳感知的声音频率和声音的实际频率并不是线性的,有下面公式从频率转换为梅尔刻度的公式为:=
从梅尔回到频率: 式中是以梅尔(Mel)为单位的感知频域(简称梅尔频域),f是以Hz为单位的实际语音频率。与f的关系曲线如下图所示,若能将语音信号的频域变换为感知频域中,能更好的模拟听觉过程的处理。
图 3-1 第二临界带
第二临界带(Critical Band):人耳对不同频率的声波有不同的敏感性反应。为了更好地模拟人耳的听觉特性,可以用频组分析法将声音分为一系列的频组。根据频率组的大小,从密到疏,设计一系列的带通滤波器,将输入信号从低频到高频进行过滤。每个带通滤波器输出的信号的能量是语音的基本特征,可作为进一步处理的输入特征。这个参数不依赖于声音特性,更对应于人耳的听觉特性。它具有更大的鲁棒性和更好的识别性能,尽管信噪比较低。
3.2分帧、加窗
对于每个语音帧,需要进行以下处理:首先,计算功率谱并估计周期图;然后,将融合滤波器组应用于功率谱,确定每个滤波器的能量,将其相加并形成所有滤波器组能量的对数;最后,使用离散余弦变换(DCT)对滤波器组的能量进行处理。这些程序有利于提取语音特征,并能更好地模拟人耳的听觉特性。通过保留DCT系数2-13,丢弃其余的,通常可以做得更多,有时可以给每个特征向量分配帧能量。Delta和delta-delta特征也经常被加入。提升法通常也被应用于最终的特征。
图 3-2MFCC的提取过程
3.2.1预处理
预处理包括预加重、成帧和开窗等功能。假设我们的语音信号是以8千赫兹采样的,语音数据在这里被捕获。
import numpyimport scipy.io.wavfilefrom scipy.fftpack import dct
sample_rate, signal = scipy.io.wavfile.read(‘OSR_us_000_0010_8k.wav’)
signal = signal[0:int(3.5 * sample_rate)] # 我们只取前3.5s
图 3-3 时域中的语音信号
1、预加重 (Pre-Emphasis)
预失帧滤波器在人声信号处理中很有用,可以提升高频信号,平衡频谱,提高信噪比,并消除发声过程中强调高频共振峰的影响。预失真是通过高通滤波器来实现的,可以用来对人声信号进行预处理。其中滤波器系数通常为0.95或0.97,这里取pre_emphasis =0.97:
emphasized_signal = numpy.append(signal[0], signal[1:] - pre_emphasis * signal[:-1])
图 3-4 预加重后的时域信号
题外话:预加重在现代系统中的影响不大,主要是因为除避免在现代FFT实现中不应成为问题的FFT数值问题,大多数预加重滤波器的动机都可以通过均值归一化来实现(在本文后面讨论)。 在现代FFT实现中。
2、分帧 (Framing)
在预加重之后,我们需要将信号分成短时帧。由于语音信号不是同质的,对整个信号进行傅里叶变换是没有意义的。因此,我们把语音信号分成短的帧,通常是20-40毫秒长,例如,通常是25毫秒。我们通常使用8千赫兹的采样率,因此每一帧的长度为200个样本。为了避免相邻帧之间过度不匹配,我们使用帧移来控制帧之间的重叠程度,通常设置为每帧语音的1/2、1/3或50%(+/-10%)。在实践中,帧移通常被设置为10毫秒。重叠范围的长度大约是每个语音帧长度的一半,由于采样率是8kHz,重叠范围的长度是120个样本。第一个语音帧从0开始,随后的帧从80个样本开始,直到语音文件的结束。如果语音文件的长度不能分成偶数帧,则用零填充,使之成为一个完整的帧。
frame_length, frame_step = frame_size * sample_rate, frame_stride * sample_rate # 从秒转换为采样点
signal_length = len(emphasized_signal)
frame_length = int(round(frame_length))
frame_step = int(round(frame_step))# 确保我们至少有1帧
num_frames = int(numpy.ceil(float(numpy.abs(signal_length - frame_length)) / frame_step))
pad_signal_length = num_frames * frame_step + frame_length
z = numpy.zeros((pad_signal_length - signal_length))pad_signal = numpy.append(emphasized_signal, z)
indices = numpy.tile(numpy.arange(0, frame_length), (num_frames, 1)) + numpy.tile(numpy.arange(0, num_frames * frame_step, frame_step), (frame_length, 1)).T
frames = pad_signal[indices.astype(numpy.int32, copy=False)]
3、加窗 (Window)
将信号分成多个短时帧后,我们会对每一帧进行窗函数处理。常用的窗函数是Hamming窗。这个窗函数能够增加帧左右两端的连续性,避免出现不连续的问题,同时也能够减少频谱泄漏问题。我们在进行傅里叶变换之前对每一帧信号进行窗函数处理,以消除傅里叶变换的假设(即数据是无限大的情况),同时也减少频谱泄漏,使得我们得到的频谱更加准确。Hamming窗的具体形式可以根据需要进行设计,通常包含一个阻尼部分和一个上升部分,具体形式为一个带有边缘存在的窗口函数:
式0≤n≤N−1,N是窗口长度,我们这里假设,是窗口长度,我们这里假设,N是窗口长度,我们这里假设a=0.46$
图 3-5加窗内部实现
frames *= numpy.hamming(frame_length)# frames *= 0.54 - 0.46 * numpy.cos((2 * numpy.pi * n) / (frame_length - 1)) # 内部实现
二、FFT (Fourier-Transform)
为了更好地观察信号的特性,我们需要将其从时域转换到频域上,以此获取其不同频率上的能量分布情况。为了实现这一转换,我们需要对分帧加窗后的信号进行N点FFT计算,也称为短时傅立叶变换(STFT)。通过STFT,我们能够获取到每一帧信号在不同频率上的能量分布情况,这些能量分布能够代表不同语音的特性,帮助我们更好地进行语音分析和处理,其中N通常为256或512,NFFT=512;
mag_frames = numpy.absolute(numpy.fft.rfft(frames, NFFT)) # fft的幅度(magnitude)
三、功率谱 (Power Spectrum)
为了计算语音信号的频谱能量,通常采用计算功率谱(即周期图)的方法。具体来说,对语音信号的频谱进行二次模式计算,使用对数或去括号操作,因为在功率谱中,频率不可能有负值。获得的频谱能量代表每个频率的信号强度,可用于声音特征提取和信号处理等方面。
其中,Xi是信号X的第i帧,这可以用以下几行来实现:
pow_frames = ((1.0 / NFFT) * ((mag_frames) ** 2))
四、滤波器组 (Filter Banks)
计算Mel滤波器组,将功率谱通过一组Mel刻度(通常取40个滤波器,nfilt=40)的三角滤波器(triangular filters)来提取频带(frequency bands)。
梅尔滤波器组与人耳的听觉感知系统相似,它们的作用是选择某些频率成分而忽略其他频率的信号。梅尔滤波器组在频率轴上的分布是不均匀的,低频段的滤波器较多,高频段的滤波器较少。梅尔滤波器组通常由22-40个三角形滤波器组成,每个都有自己的中心频率(f(m))和振幅响应。从FFT得到的振幅频谱与每个滤波器相乘并相加,得到每个滤波器对应的频段的帧能量值。如果滤波器的数量是22个,你就可以得到22个能量值。
nfilt = 40
low_freq_mel = 0
high_freq_mel = (2595 * np.log10(1 + (sample_rate / 2) / 700))
mel_points = np.linspace(low_freq_mel, high_freq_mel, nfilt + 2) hz_points = (700 * (10 ** (mel_points / 2595) - 1)) # 将mel频率再转到hz频率
bin = sample_rate/2 / NFFT/2=sample_rate/NFFT # 每个频点的频率数
bins = hz_points/bin=hz_points*NFFT/ sample_rate # hz_points对应第几个fft频点
bins = np.floor((NFFT + 1) * hz_points / sample_rate)
fbank = np.zeros((nfilt, int(np.floor(NFFT / 2 + 1))))for m in range(1, nfilt + 1):
f_m_minus = int(bins[m - 1]) f_m = int(bins[m]) f_m_plus = int(bins[m + 1]) for k in range(f_m_minus, f_m):
fbank[m - 1, k] = (k - bins[m - 1]) / (bins[m] - bins[m - 1])
for k in range(f_m, f_m_plus):
fbank[m - 1, k] = (bins[m + 1] - k) / (bins[m + 1] - bins[m])
filter_banks = np.dot(pow_frames, fbank.T)
filter_banks = np.where(filter_banks == 0, np.finfo(float).eps, filter_banks)
filter_banks = 20 * np.log10(filter_banks) # dB
五、梅尔频率倒谱系数(MFCCs)
在计算滤波器组系数时,这些系数之间存在着高度的相关性。这可能会给一些机器学习算法带来问题。为了解决这个问题,可以使用离散余弦变换(DCT)来变换滤波器组系数。通过这种方式,高度相关的滤波器组系数被转换为相互独立的系数,因此更适合用于一些机器学习算法。
图 3-6 信号的频谱图
语音识别需要对滤波器组系数进行处理并生成压缩表示。一般而言,我们只保留2-13个倒频谱系数,而将其他部分剔除。这是因为被剔除的系数所代表的微小差异对自动语音识别没有实际作用,反而可能会引入噪声干扰,从而影响准确性。因此,只保留2-13个倒频谱系数可以更好地处理语音信号,并提高自动语音识别的准确度。 mfcc = dct(filter_banks, type=2, axis=1, norm=‘ortho’)[:, 1 : (num_ceps + 1)] # 保持在2-13
为了提高在噪声环境下的语音识别准确性,可以使用MFCC正弦提升器(Liftering)进行滤波。该滤波是在倒谱域中实现的,可去除高频部分的MFCC,增强低频部分的信息。实践证明,采用Liftering可以有效改善在噪声信号中的语音识别效果。需要注意,在谱图和倒谱图中应分别使用filtering和liftering两种方法来完成这种滤波。(nframes, ncoeff) = mfcc.shape
n = numpy.arange(ncoeff)
lift = 1 + (cep_lifter / 2) * numpy.sin(numpy.pi * n / cep_lifter)
mfcc *= lift
生成的MFCC:
图 3-7 MFCCs
六、均值归一化(Mean Normalization)
filter_banks -= (numpy.mean(filter_banks, axis=0) + 1e-8)
均值归一化滤波器组:
图 3-6 归一化滤波器数组
同样对于MFCC:
mfcc -= (numpy.mean(mfcc, axis=0) + 1e-8)
均值归一化MFCC:
图 3-7标准的MFCC
3.3 总结
本文探讨了计算Mel刻度滤波器组和Mel频率倒谱系数(MFCC)的过程。在计算Filter Banks和MFCCs时,所有步骤都是基于语音信号的特性和人类感知原理。然而,在计算MFCC时需要进行离散余弦变换(DCT),以去除滤波器组系数间的相关性,这一步骤也称为白化。这是由于某些机器学习算法的限制所导致,它们需要对数据进行降维和压缩,以简化输入并减少计算成本。 尤其
更多推荐
所有评论(0)