海南话语音识别模型——模型训练(一)

news/2025/1/10 0:55:35/文章来源:https://www.cnblogs.com/softlin/p/18503908

      上篇文章已经介绍了语料数据的预处理,对数据集中的音频数据分别做了重采样、静音切除、降噪以及在Fbank和MFCC中特征提取方式中选择了Fbank对音频数据进行特征提取的方法;在经过上面的处理后已经可以将提取出的音频数据Fbank丢到Transformer中进行训练,但还漏了一个比较重要的数据预处理,音频对应的文本预处理。下面除了介绍文本预处理之外还会介绍模型训练的相关内容;

数据集结构

      数据集结构如下,train文件夹下存放训练集wav音频文件,trains.text文件每行对应一个音频文件的中文标注,trans.paths文件每行对应一个wav音频文件的路径其与trains.text文件同一行对应同一个文件标注。

train/x.wav
trains.text
trains.paths

标签文本预处理

      在ASR模型中其预测出来的结果文本并不是固定长度的,模型推理出的结果也不会是只是输出中文,它输出的只是一句话或某个词的向量/数字标识,基于此我们需要对语料集中的音频所对应的文本进行数据预处理将其转为向量/数字标识,建立其对应关系。
      音频所对应的文本可能是一个句子也可能是一两个词我们就将文本分词(tokenization),在分词,按分词粒度分目前存在三种算法方案:char、word、subword
      char: 对于英文来说由26个字母词表以及其他特殊字符组成,对于中文由5000多个中文字以及特殊组成,词表很简单。
      word: 词表由单词、中文词组成,但可能词覆盖得不够全,词表大。
      subword: 介于char与word之间分词粒度比char大又比word小,如承上启下,可能分为了:承上、启下两个子词。
      目前subword(子词)分词算法主要有三种:Byte Pair Encoding (BPE)、WordPiece、Unigram Language Model。在这里使用了Sentencepiece分词框架,其支持BPE、ULM子词算法、支char, word分词。它使用了Unicode编码字符支持多语言、编解码可逆、可控词表大小。

词表生成

      这里使用了Sentencepiece用于生成词表,会生成两个文件,一个为模型文件、另一个为词表文件,具体词表生成代码如下:

pip install sentencepiece
parser = ArgumentParser()parser.add_argument("--txt_file_path", type=str, required=True)parser.add_argument("--vocab_size", type=int, required=True)parser.add_argument("--model_type", type=str, required=True)parser.add_argument("--model_prefix", type=str, required=True)parser.add_argument("--sos", type=int, required=True)parser.add_argument("--eos", type=int, required=True)parser.add_argument("--unk", type=int, required=True)parser.add_argument("--norm", type=str, default="identity", help="no normalization")parser.add_argument("--unk_str", type=str, default=chr(ord('a') + 72))args = parser.parse_args()os.makedirs(os.path.dirname(args.model_prefix), exist_ok=True)spm.SentencePieceTrainer.train(' '.join([f"--input={args.txt_file_path} ",f"--model_prefix={args.model_prefix}",f"--vocab_size={args.vocab_size}",f"--model_type={args.model_type}",f"--normalization_rule_name={args.norm}",f"--control_symbols=<blank>",                                           # for CTC lossf"--bos_id={args.sos} --eos_id={args.eos} --unk_id={args.unk}",         # we don't need to set `pad_id` since it's -1 by defaultf"--pad_piece=<ig> --bos_piece=<sos> --eos_piece=<eos> --unk_piece={args.unk_str}",]))参数描述
txt_file_path:数据集文本标签文档
model_prefix:模型前缀
model_type:模型类型
vocab_size:词表大小
sos:文本开始标志
eos:文本结束标志

      简单看词表就是经过分词后词与数字的映射关系表,词表文件在语音识别模型中至关重要,在ASR训练模型时会将音频文件所对应的中文词汇(子词)所对应的数字编码与音频文件丢到模型中训练。训练处模型完成后语音识别模型在推理时推理出来的也是概率相对较高的一个/一串数字,将数字丢到Sentencepiece分词模型就可得到某个音频所对应的中文。

tokenizer = SubwordTokenizer('hainan.model')
tokenizer.tokenize('槟榔')     #获取槟榔获取在词汇表中的编码870
tokenizer.detokenize([870])    #获取编码870在词汇表中对应的词 槟榔

模型推理

      由于数据集规模较小,模型泛化能力不太好。通常在语音识别中通过使用词错误率(Word Error Rate)字符错误率(Character Error Rate) 这两个指标来了评估语音识别模型性能,观察模型训练的效果。在英文中可以用两者来评估。英文最小单位为Word(单词)中文最小单位为字(字符)所以在中文语音识别中通常用CER来表示字错误率。
      WER、CER其原理为编辑距离(Edit distance)中的Levenshtein Distance的计算过程,编辑距离指两个字串之间,由一个转成另一个所需的最少编辑操作次数。操作包括:插入、删除、替换
      还有一个常用指标SER(Sentence Error Rate)句错率描述识别句子错误的概率。

      WER:在词维度评估错误率,关注词的插入、删除和替换错误。WER的计算公式是将识别结果中的替换、删除和插入词的数量除以参考文本中的总词数。WER的值越低,说明语音识别系统的性能越好,因为它表示识别出的词序列与参考词序列之间的差异越小。

      CER:则是在字符维度上评估错误率,关注的是字符的插入、删除和替换错误。CER的计算公式是将识别结果中的替换(S)、删除(D)和插入(I)字符的数量除以参考文本中的总字符数。CER的值越低,同样表示生成文本与参考文本越接近,系统性能越好。

公式:CER = (S+D+I)/N
S:替换数(识别错误) D:删除数(识别少了) I:插入次数(预测文本比参考文本多出的)

参考文本(真实): 东线高速    预测文本: 西线高速
CER = (1+0+0)/4 = 0.25

参考文本(真实): 你真的有钱啊    预测文本: 什么时候去工作啊
CER = (6+0+2)/6 = 1.33

SER: 识别错误的文本个数除以参考文本总数*100,只要有一个字错都算识别错误。

      这里使用了SER(句错率)与字错率(CER)来评估模型训练的性能。
      经过评测句错误率(SER)比较高达到54%,字错误率(CER)为36%,两者都比较高不太理想。理想语音识别系统通常准确率要达到95%+以上才会有比较好的可用性。

      后续将通过各种方法继续扩大数据集规模、优化训练模型,争取提高海南话语音识别模型的正确率。

参考资料:
Edit distance
WER
Automatic-Speech-Recognition-from-Scratch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/825936.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024秋软件工程iman现场编程作业

作业所属课程 班级的链接作业要求 2024秋软件工程现场编程作业 - 作业 - 软件工程2024 - 班级博客 - 博客园作业目标 现场极限编程,制作一个个人记账本程序。团队名称 iman团队成员 102202146 - 蓝敏龙, 102201225 - 陈碧煌, 102202105 - 王梓铭, 102202124 - 阿依娜孜, 10220…

4 Empirical Properties of Limit Order Books

LOB 可以揭露很多有趣的微观信息,近年来也有许多研究。但需要注意:高频交易的进化速度极快,让这些研究很多时候比较过时。 Originally Posted at: https://clouder0.com/zh-cn/posts/lob-empirical-properties/ 总结性的来说,作者发现了这些特点:每日交易量大概占市值的 \…

2024秋软工实践iman原型设计和UML设计

信息类别 内容作业所属课程 软件工程实践 - 秋季班作业要求 第一次团队作业 - 原型设计与概要设计作业目标 根据需求分析和设计,完成项目的原型设计和概要设计,培养团队协作能力,为后续的开发奠定基础。团队名称 iman 🌟团队成员 - 102202146 - 蓝敏龙- 102201225 - 陈碧煌…

CF1658E Gojou and Matrix Game

题意题解 设f[i,j]表示(i,j)先手必胜/必败 则全局max一定必败,因为先手走出去后手走回来,重复无限次后必输 然后全局max外(距离>k)的必胜,因为可以走到全局max 之后可以发现,下一个必败的是全局max范围内的次max,因为次max不能①走出全局max范围 ②走到全局max ③走到…

20222422 2024-2025-1 《网络与系统攻防技术》实验四实验报告

一、实验内容 1、恶意代码文件类型标识、脱壳与字符串提取对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具; (2)使用超…

【Atcoder训练记录】AtCoder Beginner Contest 378

训练情况赛后反思 简单题又WA了一发,淦,开局崩心态,然后做题的时候被场外因素打断了。 A题 统计 \([1,4]\) 中每个数字出现的个数,输出对数即可。 #include <bits/stdc++.h> #define int long longusing namespace std;int cnt[5];void solve(){for(int i = 1;i<=…

《使用Gin框架构建分布式应用》阅读笔记:p307-p392

《用Gin框架构建分布式应用》学习第16天,p307-p392总结,总86页。 一、技术总结 1.AWS chapter 08讲使用AWS进行部署,可以根据需要选择是否阅读。因为使用到的概率很小,且还要绑卡,本人选择跳过。 2.CI/CD (1)什么是CI/CD p348,Luckily, many deployment steps can be aut…

基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现六

三、系统部分功能描述物品分类信息业务逻辑层Service、小区信息业务逻辑层Service、快递柜格子信息业务逻辑层Service、投诉信息业务逻辑层Service、快递柜类型信息业务逻辑层Service、快递柜信息业务逻辑层Service一、前言介绍: 1.1 项目摘要 随着电子商务的迅猛发展和城市化…

团队作业3——需求改进系统设计

这个作业属于哪个课程 班级地址这个作业要求在哪里 作业要求这个作业的目标 需求改进&系统设计评分基准:需求&原型改进 - 20分系统设计 - 50分Alpha任务分配计划 - 20分测试计划 - 10分一、需求&原型改进: 1.1针对课堂讨论环节老师和其他组的问题及建议,对修改选…

2024年仿真/CAE 软件市场报告

CAE仿真市场的影响CAD、CAE呈融合趋势设计方法的革命--分析/模拟MCAE 是 MFG 设计软件的最大部分MFG设计,全称Manufacturing Design,即制造设计。它是一种在产品设计阶段就考虑制造过程的工程实践,旨在提高产品的可制造性,降低生产成本,缩短生产周期,并提升产品质量。 MC…

美团面试:Mysql如何选择最优 执行计划,为什么?

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

网络请求库–axios库

认识axiosaxios请求方式常见的配置选项axios的创建实例