ASR语音识别纠错-fast correct

1、使用方式说明

ASR对应的文本越长,识别准确率和召回率越高

识别的错误分类:

编号错误类型示例
1谐音字词配副眼睛-配副眼镜
2混淆音字词流浪织女-牛郎织女
3多字错误关关机-关机
4少字错误

爱有天意-假如爱有天意

5形似字错误高梁-高粱
6中文拼音全拼xingfu-幸福
7中文拼音缩写sz-深圳
8语法错误

想象难以-难以想象

ASR纠错,主要是解决1、2、3、4、5几个问题

ASR是实时语音回话,所以对性能要求极高,模型性能要求:

1、可以快速并行纠错。可以解决上线实时处理需求,时延在100ms以内。

备选对比模型:

模型1:fastcorrect、fastcorrect2

模型2:softcorrect

模型3:macbert

本次探讨fastcorrect模型

fast correct 环境准备

conda create -n fast_speech python=3.7 cudnn=8.9.2.26 cudatoolkit=11.3.1

pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113

git clone https://github.com/pytorch/fairseq (可以手动下载指定的稳定版本代码,建议下载0.10.1)

cd fairseq
pip install --editable ./

pip install sentencepiece

**********************数据预处理************************************

*********************数据对齐************************************

align_cal_werdur_v2.py   original_query_file target_query_file  可以将纠错内容进行对齐生成对齐数据集

********************训练数据二进制编码合成************************************

cd FastCorrect/runs

vi data-gen.sh (第9行数据赋值为data-bin)

chmod +x data-gen.sh

./data-gen.sh

**********************生成预训练模型*************************************

cd FastCorrect/runs

vi train_pretrain.sh (第9行数据赋值为data-bin,第12行为data-pretrain,第13行修改增加CUDA_VISIBLE_DEVICES=3,4)

chmod +x train_pretrain.sh

./train_pretrain.sh

**********************下载sentencepiece对应的模型*************************************

我下载的是https://hf-mirror.com/IDEA-CCNL/Erlangshen-DeBERTa-v2-186M-Chinese-SentencePiece/tree/main/spm.model

创建一个目录sentencepiece_model_path 并将模型复制到这个目录下

*********************模型推理*************************************

from fairseq import utils
utils.import_user_module(argparse.Namespace(user_dir='./FastCorrect'))
from FastCorrect.fastcorrect_model import FastCorrectModel

model_name_or_path=saved_model_path

checkpoint_file = "checkpoint_best.pt" 可以指定具体的模型文件(多个版本选择)

data_name_or_path ="" #数据预处理data-gen 生成的训练数据二进制文件夹。默认为data-bin

bpe = "sentencepiece"

sentencepiece_model_path="" #sentencepiece_model_path 包含模型名称

transf_gec = FastCorrectModel.from_pretrained(model_name_or_path, checkpoint_file=checkpoint_file, data_name_or_path=data_name_or_path, bpe=bpe,sentencepiece_model=sentencepiece_model_path)

transf_gec.eval()
transf_gec.cuda()

input_text= remove_ch_spaces(input_text)
standard_input = " ".join(list(input_text))
text = transf_gec.binarize(standard_input)

batched_hypos = transf_gec.generate(text, iter_decode_max_iter=10)

translated = [transf_gec.decode(hypos[0]['tokens']) for hypos in batched_hypos][0]

print(translated )

 结论:训练epoch 为200

对于1、2、5错误,解决较好。对于3、4的多字、少字错误解决不是狠理想。

相关参考链接:

FastCorrect git:https://github.com/microsoft/NeuralSpeech/tree/master/FastCorrect

Fairseq git:https://github.com/facebookresearch/fairseq

Fairseq 文档:https://fairseq.readthedocs.io/en/latest/command_line_tools.html

fairseq训练参数说明:https://www.cnblogs.com/hanlaomo/p/16708102.html

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

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

相关文章

二叉树【Java】

二叉树遍历 前序遍历 中序遍历 后续遍历 代码 前 中 后序遍历 package Trww;public class TreeTraversal {/*12 34 5 6*/public static void main(String[] args) {TreeNode tree new TreeNode(new TreeNode(new TreeNode(4),2,null),1,new TreeNode(new TreeNode(5),3,n…

Lua使用三目运算符取值

按照三目运算符的规则,lua的三目运算符可以写成:a and b or c b为false时,三目运算符是无效的。 提示:0在lua里也是真,condition and 0 or 1 这句代码没问题 如果你确认b为真,那么就用a and b or c&…

maven私服搭建详细教程

1、为什么需要私服 如果在公司中多个项目模块中的的公共类用的都是一样的,那么不可能将这些一样的代码写两遍。所以将其中一个项目中的代码打包成私服,然后在另外一个模块中去进行引用。 除此之外,如果大公司中开发人员较多,大家同…

什么是多模态学习?

1、定义与概念 多模态学习是一种机器学习方法,它利用多种不同的数据模态来训练模型,这些模态可能包括文本、图像、音频、视频等。多模态AI技术融合了多种数据模式,如文本、图片、视频和音频,以提供对场景的更透彻理解。这种技术的…

《ElementPlus 与 ElementUI 差异集合》icon 图标使用(包含:el-button,el-input和el-dropdown 差异对比)

安装 注意 ElementPlus 的 Icon 图标 要额外安装插件 element-plus/icons-vue. npm install element-plus/icons-vue注册 全局注册 定义一个文件 element-icon.js ,注意代码第 6 行。加上了前缀 ElIcon ,避免组件命名重复,且易于理解为 e…

Java开发从入门到精通(七):Java的面向对象编程OOP:常用API

Java大数据开发和安全开发 (一)Java的常用API1.1 Object类1.1 toString1.1 equals方法1.1 对象克隆clone1.1 Objects类1.1 包装类1.1 StringBuilder1.1 StringBuffer1.1 StringJoiner1.1 Math、System、Runtime1.1 BigDecimal1.1 传统时间:Da…

TinTin Web3 动态精选:以太坊坎昆升级利好 Layer2,比特币减半进入倒计时

TinTin 快讯由 TinTinLand 开发者技术社区打造,旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位, 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态,将有助于 TinTinLand 社区的开…

【每日力扣】235. 二叉搜索树的最近公共祖先与39. 组合总和问题描述

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害。 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义…

硬件工程师入门基础知识(零)心法篇

硬件工程师入门基础知识(零)心法篇 1.为什么要当硬件工程师?2.什么是硬件工程师?3.怎么成为合格的硬件工程师?4.优秀的硬件工程师需要具备什么技能和品质?5.硬件工程师的成长路径?6.硬件工程师还有哪些职业可能?1.为什么要当硬件工程师? 很多快要毕业或者刚毕业的同学…

int与integer的区别

int和integer都是用来表示整数的数据类型,但有一些细微的区别。 int是Java中的基本数据类型,它可以存储整数值。int类型在内存中占4个字节,范围为-2,147,483,648到2,147,483,647。int类型使用最频繁,因为它的存储空间较小&#x…

【2024年5月备考新增】《软考真题分章练习 - 5 项目进度管理(高项)》

1、( ) is a technique for estimating the duration or cost of an activity or a project using historical data from a similar activity or project. A.Analogous estimating B. parametric estimating C.Three-Point estimating D. Bottom estimating 2、下图中(单位:…

如何本地搭建hMailServer邮件服务

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

Android中使用intent可以传递哪些类型的数据?

Intent可以传递的数据类型基本上分为四种; (1)基本数据类型(包括int,char,string等类型的数据); //传递String intent.putExtra("key_str","传递简单基础的数据");//获取 str = intent.getStringExtra("key_str"); (2)Bundle类型 …

C语言——预处理

宏定义 作用进行文本替换 #define 文本1 替换为 #define a 5 取消宏定义 #undef 取消宏定义 #define a 5 printf ("%d" ,a); #undef a printf ("%d" ,a);//在调用宏a时将报错 文件预处理 #include<>//现在系统目录中找&#x…

免密ssh密钥登录Linux该如何设置

我们在使用ssh客户端远程连接Linux服务器时&#xff0c;为了考虑安全方面的因素&#xff0c;通常使用密钥的方式来登录。密钥分为公钥和私钥&#xff0c;这两把密钥可以互为加解密。公钥是公开的&#xff0c;私钥是由个人自己持有&#xff0c;并且必须妥善保管和注意保密。 Li…

《圣斗士星矢》AI制作真人大电影宣传片

《圣斗士星矢》AI制作真人大电影宣传片 The ancient gods awaken, a battle of light and shadow unfolds.古神觉醒&#xff0c;光明与黑暗之战一触即发。 Heroes stand, facing the abyss of evil.英雄挺立&#xff0c;直面邪恶深渊。 The stars align, the chosen ones ris…

Linux:kubernetes(k8s)有状态的服务部署(14)

之前我都是对无状态进行的一个操作&#xff0c;我们想扩容就扩容&#xff0c;想缩容就缩容&#xff0c;根本不用去考虑他的一个网络环境&#xff0c;本地储存环境啥的一个状态 当我们做有状态的服务的操作&#xff0c;肯定要申请一个持久化的一个空间&#xff0c;以及网络&…

nginx代理

nginx代理 前言1、nginx下载下载路径下载稳定版本解析安装到指定目录下2、Nginx服务的启动和停止启动启动成功看我们的配置的端口是多少启动成功关闭nginx3、nginx报错日志路径4、nginx.conf的配置4.1通过root配置文件的存放地址4.2接口代理前言 nginx在平时项目部署中是一个经…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:GridItem)

网格容器中单项内容容器。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。仅支持作为Grid组件的子组件使用。 子组件 可以包含单个子组件。 接口 GridItem GridItem(value?: GridItemOptions)…

合作测试开发日志1

2024/3/16 创建了DreamWind项目&#xff0c;用于开发测试 搭建后端 userService.js const Service require("egg").Service;class UserInfoService extends Service {//1.登录验证&#xff08;根据用户名和密码进行查询&#xff09;async QueryUserByUserName…