Whisper对于中文语音识别与转写中文文本优化的实践(Python3.10)

阿里的FunAsr对Whisper中文领域的转写能力造成了一定的挑战,但实际上,Whisper的使用者完全可以针对中文的语音做一些优化的措施,换句话说,Whisper的“默认”形态可能在中文领域斗不过FunAsr,但是经过中文特殊优化的Whisper就未必了。
中文文本标注优化
Whisper经常被人诟病的一点是对中文语音转写后标点符号的支持不够完备。首先安装whisper:
pip install -U openai-whisper
编写转写脚本:
import whisper
device = "cuda:0" if torch.cuda.is_available() else "cpu"
audio = whisper.load_audio(audio_path)
audio = whisper.pad_or_trim(audio)
model = whisper.load_model("large-v2",download_root="./whisper_model/")
mel = whisper.log_mel_spectrogram(audio).to(model.device)
options = whisper.DecodingOptions(beam_size=5)
result = whisper.decode(model, mel, options)
print(result.text)
程序返回:
Erwin_0.wav|Erwin|ZH|如果这个作战顺利。
Erwin_1.wav|Erwin|ZH|你也许可以趁此机会干掉狩之巨人
Erwin_10.wav|Erwin|ZH|如果到時候我不衝在最前面
Erwin_11.wav|Erwin|ZH|他们根本不会往前冲然后我会第一个去死
Erwin_12.wav|Erwin|ZH|地下室里到底有什么
Erwin_13.wav|Erwin|ZH|也就无从知晓了好想去地下室看一看我之所以能撑着走到今天
Erwin_14.wav|Erwin|ZH|就是因为相信这一天的到来。
Erwin_15.wav|Erwin|ZH|因为艰辛着
Erwin_16.wav|Erwin|ZH|我才想能够得到证实
Erwin_17.wav|Erwin|ZH|我之前無數次的想過,要不然乾脆死了算了。
Erwin_18.wav|Erwin|ZH|可即便如此,我還是想要實現父親的夢想。
Erwin_19.wav|Erwin|ZH|然而现在
Erwin_2.wav|Erwin|ZH|但得拿所有新兵不管選擇哪條路
Erwin_20.wav|Erwin|ZH|她的答案就在我触手可及的地方
Erwin_21.wav|Erwin|ZH|仅在咫尺死去的同伴们也是如此吗
Erwin_22.wav|Erwin|ZH|那些流血的棲身,都是沒有意義的嗎?
Erwin_23.wav|Erwin|ZH|不!不對!
Erwin_24.wav|Erwin|ZH|那些死去士兵的意义将由我们来赋予
Erwin_25.wav|Erwin|ZH|那些勇敢的死者可憐的死者
Erwin_26.wav|Erwin|ZH|是他们的牺牲换来了我们活着的今天
Erwin_27.wav|Erwin|ZH|让我们能站在这里否则今天我们将会死去
Erwin_28.wav|Erwin|ZH|将依依托福给下一个活着的人
Erwin_29.wav|Erwin|ZH|这就是我们与这个残酷的世界
Erwin_3.wav|Erwin|ZH|我们基本都会死吧是的全灭的可能性相当的高
Erwin_30.wav|Erwin|ZH|抗爭的意義
Erwin_4.wav|Erwin|ZH|但事到如今,也只能做好玉石俱焚的觉悟。
Erwin_5.wav|Erwin|ZH|將一切賭在獲勝渺茫的戰術上
Erwin_6.wav|Erwin|ZH|到了这一步
Erwin_7.wav|Erwin|ZH|要让那些年轻人们去死
Erwin_8.wav|Erwin|ZH|就必须像一个一流的诈骗犯一样
Erwin_9.wav|Erwin|ZH|对他们花言巧语一番
可以看到,除了语气特别强烈的素材,大部分都没有进行标点符号的标注。
但事实上,Whisper完全可以针对中文进行标注,只需要添加对应的引导词:
options = whisper.DecodingOptions(beam_size=5,prompt="生于忧患,死于欢乐。不亦快哉!")
这里通过prompt对其进行引导,通过逗号、句号以及感叹号对文本标注,引导后的效果:
Erwin_0.wav|Erwin|ZH|如果这个作战顺利。
Erwin_1.wav|Erwin|ZH|你也许可以趁此机会干掉受之虚人。
Erwin_10.wav|Erwin|ZH|如果到时候我不冲在最前面
Erwin_11.wav|Erwin|ZH|他们根本不会往前冲,然后我会第一个去死。
Erwin_12.wav|Erwin|ZH|地下室里到底有什么?
Erwin_13.wav|Erwin|ZH|好想去地下室看一看,我之所以能撑着走到今天。
Erwin_14.wav|Erwin|ZH|就是因为相信这一天的到来。
Erwin_15.wav|Erwin|ZH|因为艰辛着D
Erwin_16.wav|Erwin|ZH|我的猜想能够得到证实。
Erwin_17.wav|Erwin|ZH|我之前无数次地想过,要不然干脆死了算了。
Erwin_18.wav|Erwin|ZH|可即便如此,我还是想要实现父亲的梦想。
Erwin_19.wav|Erwin|ZH|然而现在
Erwin_2.wav|Erwin|ZH|但得拿所有新兵,不管选择哪条路。
Erwin_20.wav|Erwin|ZH|他的答案就在我触手可及的地方。
Erwin_21.wav|Erwin|ZH|竟在咫尺。死去的同伴们也是如此吗?
Erwin_22.wav|Erwin|ZH|那些流血的牺牲,都是没有意义的吗?
Erwin_23.wav|Erwin|ZH|不!不对!
Erwin_24.wav|Erwin|ZH|那些死去士兵的意义将由我们来赋予!
Erwin_25.wav|Erwin|ZH|那些勇敢的死者,可怜的死者!
Erwin_26.wav|Erwin|ZH|是他们的牺牲换来了我们活着的今天!
Erwin_27.wav|Erwin|ZH|让我们能站在这里,而今天我们将会死去!
Erwin_28.wav|Erwin|ZH|将依依托福给下一个活着的人!
Erwin_29.wav|Erwin|ZH|这就是我们与这个残酷的世界。
Erwin_3.wav|Erwin|ZH|是的,全灭的可能性相当的高。
Erwin_30.wav|Erwin|ZH|抗争的意义!
Erwin_4.wav|Erwin|ZH|但事到如今,也只能做好玉石俱焚的觉悟。
Erwin_5.wav|Erwin|ZH|将一切赌在获胜渺茫的战术上。
Erwin_6.wav|Erwin|ZH|到了这一步
Erwin_7.wav|Erwin|ZH|要让那些年轻人们去死。
Erwin_8.wav|Erwin|ZH|就必须像一个一流的诈骗犯一样。
Erwin_9.wav|Erwin|ZH|对他们花言巧语一番。
通过transformers来调用中文模型
transformers是一个用于自然语言处理(NLP)的开源库,由Hugging Face开发和维护。它提供了各种预训练的模型,包括文本生成、文本分类、命名实体识别等多种NLP任务的模型。transformers库基于Transformer模型架构,这是一种用于处理序列数据的深度学习模型。Transformer模型在NLP领域取得了巨大成功,因为它能够处理长距离依赖关系,并且在各种NLP任务上取得了优异的性能。
使用transformers库,开发人员可以轻松地访问和使用各种预训练的NLP模型,也可以使用该库进行模型的微调和训练。transformers库支持多种主流深度学习框架,包括PyTorch和TensorFlow。
首先安装transformers:
pip install -U transformers
编写转写代码:
from transformers import pipeline
device = "cuda:0" if torch.cuda.is_available() else "cpu"
def transcribe_bela(audio_path):
transcriber = pipeline(
"automatic-speech-recognition",
model="BELLE-2/Belle-whisper-large-v2-zh",
device=device
)
transcriber.model.config.forced_decoder_ids = (
transcriber.tokenizer.get_decoder_prompt_ids(
language="zh",
task="transcribe",
)
)
transcription = transcriber(audio_path)
print(transcription["text"])
return transcription["text"]
这里通过BELLE-2/Belle-whisper-large-v2-zh模型来进行转写,提高中文的识别准确度和效率。
这个模型是在whisper的large-v2模型上针对中文进行了微调,以增强中文语音识别能力, Belle-whisper-large-v2-zh 在中国 ASR 基准测试(包括 AISHELL1、AISHELL2、WENETSPEECH 和 HKUST)上表现出 30-70% 的相对改进。
该模型的官方地址:
https://huggingface.co/BELLE-2/Belle-whisper-large-v2-zh
当然,也不是没有缺陷,BELLE-2模型目前基于AISHELL、WENETSPEECH等数据做的微调,弱化了标点能力。
换句话说,没法通过引导词来打标,但其实也有其他解决方案,即可以基于标点模型 对转写文本加标点。比如这个方案:
https://modelscope.cn/models/damo/punc_ct-transformer_cn-en-common-vocab471067-large/summary
BELLE-2模型的作者相当热心,有问必答,这是笔者对其模型提的Issues:
https://github.com/LianjiaTech/BELLE/issues/571
现在该模型的瓶颈是,如果微调带标点的中文数据,这块开源数据相对比较少,无法进行有效的训练。
除了大模型的中文优化版本,也有针对small模型的中文优化版本:
https://huggingface.co/Jingmiao/whisper-small-chinese_base
结语
Whisper开源模型通过transformers的微调,可以将预训练模型应用于特定的中文NLP任务,从而提高模型在该任务上的性能。微调使模型能够学习适应特定任务的特征和模式,从而实现更好的效果。
Whisper对于中文语音识别与转写中文文本优化的实践(Python3.10)的更多相关文章
- 基于深度学习的中文语音识别系统框架(pluse)
目录 声学模型 GRU-CTC DFCNN DFSMN 语言模型 n-gram CBHG 数据集 本文搭建一个完整的中文语音识别系统,包括声学模型和语言模型,能够将输入的音频信号识别为汉字. 声学模型 ...
- GRU-CTC中文语音识别
目录 基于keras的中文语音识别 音频文件特征提取 文本数据处理 数据格式处理 构建模型 模型训练及解码 aishell数据转化 该项目github地址 基于keras的中文语音识别 该项目实现了G ...
- 使用 WinEdt 来写中文文章or 建模论文
找了几乎两个小时…… 后来发现… WinEdt 是可以用来写中文文章的…而并非只能英文文章或演示文稿… \documentclass{article} \usepackage{CJK} \begin{ ...
- 解决python中write()函数向文件中写中文时出现乱码的问题
今天看<python编程从入门到实践>的第10章文件.异常,在做练习的时候,向文件中写内容,但是写中文就不行,后来在百度上查了众多资料,解决方法如下: 解决:在open()函数中添加一个e ...
- 用LyX写中文幻灯片
虽然在虚拟机装了texlive以备使用,但是在不动CTeX的情况下,是否能使用LyX写中文幻灯片呢.网上只是寥寥几篇大神们在Linux用LyX的博文. 最近把论文交完写幻灯片,于是也把这个想法尝试了一 ...
- python 在图像上写中文字体 (python write Chinese in image)
本人处理图像的时候经常使用opencv的包,但是 cv2.putText 显示不了中文,所以查找了如何在python在图像上写中文的方法,在伟大的Stack Overflow上面找到一个方法,分享给大 ...
- python使用vosk进行中文语音识别
操作系统:Windows10 Python版本:3.9.2 vosk是一个离线开源语音识别工具,它可以识别16种语言,包括中文. 这里记录下使用vosk进行中文识别的过程,以便后续查阅. vosk地址 ...
- 速成KeePass全局自动填表登录QQ与迅雷(包括中文输入法状态时用中文用户名一键登录)
原文:http://bbs.kafan.cn/thread-1637531-1-1.html 使用目的:1 网页和本地客户端登录一站式解决2 通过KeePss修改密码和登录更方便,可以复制粘贴,省了输 ...
- 读取 properties 配置文件含有中文的value内容 导致中文乱码 的解决办法
1.前言 因为装系统的时候把中文写在了系统路径,现在我想把这个路径写在properties里面来读取,可是 发现java 读取会导致中文乱码成 问号????的乱码 ,百度找了好多博客,基本都是一摸一 ...
- Windows server 2012 添加中文语言包(英文转为中文)(离线)
Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...
随机推荐
- 华为云AOM 2.0版本发布
摘要:AOM作为华为云面向租户的统一运维门户,将在7月1日重磅发布2.0版本. 本文分享自华为云社区<华为云AOM发布2.0版本,3大特性亮相>,作者:华为云PaaS小助手. 6月16日华 ...
- 从Encoder-Decoder模型入手,探索语境偏移解决之道
摘要:在本文中,我们展示了CLAS,一个全神经网络组成,端到端的上下文ASR模型,通过映射所有的上下文短语,来融合上下文信息.在实验评估中,我们发现提出的CLAS模型超过了标准的shallow fus ...
- Shell:Lite OS在线调试工具知多少
摘要:Shell作为Huawei Liteos在线调试工具,可以通过串口工具输入输出,支持常用的基本调试功能.同时用户可以新增定制的命令,新增命令需重新编译烧录后才能执行 本文分享自华为云社区< ...
- 字节跳动基于 Apache Hudi 的多流拼接实践方案
字节跳动数据湖团队在实时数仓构建宽表的业务场景中,探索实践出的一种基于 Hudi Payload 的合并机制提出的全新解决方案. 字节跳动数据湖团队在实时数仓构建宽表的业务场景中,探索实践出的一种基于 ...
- sqlalchemy union 联合查询
在最近的工作中遇到一个问题,要将两个字段相似的表里的数据统一起来展示在一个统计页面中.如果是单纯的展示数据那很简单,两个表查出来之后组合一下就完事了,但是有坑的地方就是分页和按照时间搜索,这两个功能决 ...
- NOKOV度量动作捕捉协助完成无人机室内定位研究
随着工业发展.技术进步,无人机的使用在各行各业愈发普遍,开始出现无人机飞行送外卖.智能无人机自主巡检等多方面应用.在这一过程中,无人机飞行定位就成为了重中之重. 西北工业大学无人机特种技术国防科技重点 ...
- COOIS增强
一.订单抬头增强 二.结构添加字段 添加ZGCWL字段 三.BADI增强 四.其他界面增强 不同的界面,选择不同的修改结构 抬头 ct_ioheader 组件 ct_ioopcomp 工序 ct_io ...
- POJ:Dungeon Master(BFS模板题)
原题链接 思路: 正常的思路,只不过是将二维BFS换成三维的,也算是个模板题吧(PS:DFS超容易超时) #include<iostream> #include<queue> ...
- OJ中的语言选项里G++ 与 C++的区别
概念上: C++是一门计算机编程语言,而G++则是C++的编译器. GCC和G++都是GUN的编译器,cc是Unix系统的C Compiler,而gcc则是GNU Compiler Collectio ...
- springboot 实现接收前端发来的图片和视频以及在页面上展示图片和视频
springboot 实现接收前端发来的图片和视频以及在页面上展示图片和视频 一.效果: 1.上传图片 2.显示上传的图片 3.上传的视频 4.显示上传的视频 二.代码 没依赖特殊的包,引入sprin ...