> # ♻️ 资源
> **大小:** 143MB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010572**](https://www.yuque.com/sxbn/ks/100010572)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87404252**](https://download.csdn.net/download/s1t16/87404252)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 孤立词语音识别
## 1 任务介绍
语音识别是通往真正的人工智能的不可缺少的技术。尽管能真正听懂人类说话的智能机器任然在未来不可捉摸的迷雾之中,但我们必须先解决如何识别出人类语音中包含的自然语言信息的问题。而数字信号处理技术将为这一任务赋能。在本课程项目的任务之中,我们面对的是一个简化的语音识别场景——即孤立词识别。
我们针对 20 个关键词,采集了所有参与课程的同学朗读每个词 20 遍的语音。我将以此为数据集来构建一个能正确识别这 20 个关键词的孤立词识别系统。
## 2 项目实现
基于一学期跟随老师学习到的关于信号处理与语音识别技术的知识,我额外查阅多方资料,最终呈现出了我的语音识别系统与报告。
我实现的语音识别系统的亮点有以下几个方面
说话人无关的孤立词识别是语音识别技术发展中一个里程碑。从现代的观点来看,如果将语言信号视作时间序列,那么孤立词识别就是一个模式识别中的分类问题。模式识别问题的解决一般分为特征提取与模型构建两个部分。我们将这两个部分分开处理,使得代码的实现更加具有结构性和层次性。报告也将这两部分的处理分开叙述。
我在整个系统的实现中,除了利用了数值处理函数包 numpy 和自动求导工具包 pytorch 之外的所有核心代码都是单纯使用 python 实现。即真正锻炼了代码实现能力,也加深了对语音识别技术的理解。在报告中我也强调了各个方法和过程的代码实现,并将关键代码添加到附录之中以方便检阅。
特别地,我基于课堂上所学的蝶形变换方法,实现了以 2 为基的快速傅里叶变换,并运用到了频域特征的分析之中。这让我更加领略到该算法的优美。
根据我自行实现的快速傅里叶变换,实现了梅尔频率域的倒谱系数的计算,并根据通过梅尔滤波器之后得到梅尔频谱特征设计了基于卷积神经网络的识别算法。
我将计算出的频谱特征视为图片,因而可以使用近年来在大规模图片分类任务上大放异彩的卷积神经网络来进行分类识别。我采用了 2014 年在 ImageNet 的比赛上获胜的 VGGNet 作为我们的识别模型,并使用了批归一化和 Dropout 手段来避免过拟合,提高模型的泛化能力。
该系统可以获得极高的识别准确度,无论是对在训练集内的说话人还是没有训练数据的说话人都能实现精准的识别效果。
为了方便测试,我基于我之前为采集语音而设计的网页界面制作了美观的测试界面,使得整个测试过程只需要点击鼠标然后说话即可完成,并对波形做了可视化,可以观察到是否录制失败。
### 2.1 预处理
首先我对数据进行了清洗。
各个同学上交的文件结构并不一致,有的是一个压缩包下包含所有文件,有的是一个压缩包中还有以自己的学号命名的文件夹,此外还有一些同学提交的压缩包是在 MacOS 上进行打包的,因此还有一个额外的缓存文件夹。这样的结构不利于我们对数据进行批量的读入。
因此我编写了程序先解压所有压缩包,然后进行深度优先搜索来遍历所有文件夹,根据文件的命名规则把所有文件提取出来,按照 data/学号/文件名.wav 的格式统一存储。同时因为需要大规模地进行复制提取,为了效率的考量,我使用多线程的方式完成了这一任务。
此外有几个文件显示已损坏而无法读取,以及一个文件录音长度大于两秒。为了数据的一致性,必须去除掉异常数据,但仅仅删除数据将导致样本不均衡的问题。为此我采用随机替换的方式,用同一个同学在同一个词下的另一个语音文件进行替换。这样就可以缓解数据缺失带来的样本不均衡的问题。
表 1:异常数据
| 异常文件 | 替换文件 | 异常原因 |
| --- | --- | --- |
| 15307130345-07-13.wav | 15307130345-07-11.wav | 文件损坏 |
| 15307130345-08-07.wav | 15307130345-08-17.wav | 文件损坏 |
| 15307130345-03-08.wav | 15307130345-03-18.wav | 文件损坏 |
| 15307130345-19-03.wav | 15307130345-19-13.wav | 文件损坏 |
| 15307130053-18-03.wav | 15307130053-18-05.wav | 文件损坏 |
| 15307130053-02-02.wav | 15307130053-02-05.wav | 文件损坏 |
| 15307130053-09-02.wav | 15307130053-09-09.wav | 文件损坏 |
| 15307130053-09-03.wav | 15307130053-09-19.wav | 文件损坏 |
| 15307130266-11-04.wav | 15307130266-11-12.wav | 文件损坏 |
| 15307110394-18-04.wav | 15307110394-18-12.wav | 文件损坏 |
| 15307130350-06-03.wav | 15307130350-06-09.wav | 录音时长异常 |
同时,考虑到最终测试时是采用集外测试的方法,理论上讲应剔除女生的数据。在接下来的报告中,如无特殊声明,用 _y_0_,y_1_···,yt,···_来表示离散的信号构成的序列,用_ sr_来表示采样率。
### 2.2 特征提取
#### 2.2.1 归一化
因为数据在采集的时候声音强度并不一致,为了消除影响,我对每一段音频数据进行归一化。这里只需要对 _y_ 使用 numpy.normailize 方法即可。
#### 2.2.2 预加重
对读入的数据,我首先通过预加重的方法来补偿由于唇和空气导致的声音在产生和传播中高频部分的损失。预加重通常采用一个一阶的线性高通滤波器
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1713230370122-882919f4-62f2-4781-baca-c1b762ebca0b.png#averageHue=%23fefdfc&id=d4r5D&originHeight=50&originWidth=275&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
来实现,其中 _α_=0_._97。在代码实现上,只需要对数组进行加权差分即可。
#### 2.2.3 分帧
一般情况下,语音信号是一种典型的非平稳信号,但是可以认为人说话的语调变换并不是是突然的,因此可假定语音信号在短时间(10-30ms)内是平稳的;故而在对语音信号进行分析时,我们可以将语音信号以 10-30ms 的间隔将连续的音频信号截取成一段一段来进行分析。
因此,当音频信号采样率为 48kHz 的时候,想要得到时长为 10-30ms 的信号帧,其应该包含 480-1500 个采样点。
另外,从分帧后信号的连续性考量,一般在分帧的时候会让相邻的两帧有 30%-50% 的重叠。
分帧的实现是简单的,只需要使用 python 支持的数组切片(slice)方法即可方便地取出一帧对应的采样点。
### 2.3 加窗
对于每一帧数据,我们应当强调该帧数据内中间部分的数据,并将边缘的数据进行弱化。
我将使用汉明窗作为窗函数。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1713230370179-8236f3c0-245e-4faf-84ac-336a2f3b98fb.png#averageHue=%23fdfdfc&id=XVs7T&originHeight=86&originWidth=389&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
![](https://cdn.nlark.co
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010572 在整个系统的实现中,除了利用了数值处理函数包 numpy 和自动求导工具包 pytorch 之外的所有核心代码都是单纯使用 python 实现。 我们针对 20 个关键词,采集了所有参与课程的同学朗读每个词 20 遍的语音。我将以此为数据集来构建一个能正确识别这 20 个关键词的孤立词识别系统。
资源推荐
资源详情
资源评论
收起资源包目录
基于Python实现孤立词语音识别【100010572】 (472个子文件)
fb.csv 38KB
fb-checkpoint.csv 38KB
events.out.tfevents.1529821450.DESKTOP-AQDP069 25B
课程项目要求20180312.docx 16KB
sampling2.eps 3.08MB
sampling4.eps 3.06MB
sampling3.eps 2.65MB
autocorr5.eps 2.09MB
sampling5.eps 946KB
sampling7.eps 760KB
systems7.eps 719KB
systems6.eps 702KB
systems8.eps 685KB
sampling1.eps 376KB
chirp2.eps 259KB
nsfg_birthwgt_normal.eps 175KB
convolution4.eps 162KB
rednoise3.eps 107KB
pinknoise3.eps 93KB
uml_diagram1.eps 92KB
whitenoise3.eps 89KB
diff_int1.eps 80KB
systems2.eps 79KB
diff_int2.eps 78KB
sampling8.eps 77KB
whitenoise1.eps 75KB
systems4.eps 65KB
autocorr4.eps 65KB
sounds3.eps 63KB
diff_int5.eps 60KB
noise1.eps 57KB
noise-triple.eps 56KB
diff_int9.eps 54KB
diff_int6.eps 54KB
whitenoise5.eps 53KB
violin2.eps 53KB
whitenoise4.eps 52KB
convolution1.eps 51KB
sampling9.eps 51KB
pinknoise1.eps 51KB
noise3.eps 50KB
whitenoise2.eps 47KB
dct1.eps 46KB
diagram1.eps 45KB
diff_int3.eps 45KB
systems3.eps 40KB
noise2.eps 40KB
autocorr7.eps 39KB
whitenoise0.eps 39KB
pinknoise0.eps 39KB
noise0.eps 38KB
sampling6.eps 37KB
rednoise0.eps 37KB
windowing2.eps 36KB
chirp3.eps 36KB
dft2.eps 35KB
diff_int7.eps 35KB
windowing1.eps 34KB
pinknoise5.eps 34KB
diff_int8.eps 32KB
rednoise5.eps 31KB
aliasing1.eps 30KB
dft1.eps 30KB
pinknoise2.eps 29KB
convolution10.eps 29KB
triangle-1100-2.eps 29KB
convolution6.eps 28KB
chirp1.eps 28KB
triangle-200-2.eps 27KB
systems5.eps 26KB
convolution8.eps 26KB
convolution9.eps 25KB
diagram2.eps 25KB
windowing3.eps 25KB
autocorr9.eps 24KB
diff_int4.eps 24KB
interarrivals_logy.eps 23KB
brfss_weight_log.eps 23KB
nsfg_birthwgt_model.eps 23KB
autocorr6.eps 23KB
autocorr3.eps 23KB
sounds2.eps 23KB
pinknoise4.eps 22KB
rednoise2.eps 22KB
rednoise1.eps 22KB
dft3.eps 22KB
convolution5.eps 22KB
autocorr1.eps 21KB
square-100-2.eps 21KB
violin1.eps 21KB
autocorr2.eps 20KB
sounds1.eps 20KB
autocorr8.eps 19KB
rednoise4.eps 19KB
convolution7.eps 19KB
sinusoid1.eps 19KB
systems1.eps 19KB
tuning1.eps 19KB
sounds4.eps 18KB
example1.eps 18KB
共 472 条
- 1
- 2
- 3
- 4
- 5
资源评论
- 雨天是个迷2023-04-18资源中能够借鉴的内容很多,值得学习的地方也很多,大家一起进步!
神仙别闹
- 粉丝: 2676
- 资源: 7664
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功