中文语音识别转文字的王者,阿里达摩院FunAsr足可与Whisper相颉顽

这篇具有很好参考价值的文章主要介绍了中文语音识别转文字的王者,阿里达摩院FunAsr足可与Whisper相颉顽。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

中文语音识别转文字的王者,阿里达摩院FunAsr足可与Whisper相颉顽

君不言语音识别技术则已,言则必称Whisper,没错,OpenAi开源的Whisper确实是世界主流语音识别技术的魁首,但在中文领域,有一个足以和Whisper相颉顽的项目,那就是阿里达摩院自研的FunAsr。

FunAsr主要依托达摩院发布的Paraformer非自回归端到端语音识别模型,它具有高精度、高效率、便捷部署的优点,支持快速构建语音识别服务,最重要的是,FunASR支持标点符号识别、低语音识别、音频-视觉语音识别等功能,也就是说,它不仅可以实现语音转写,还能在转写后进行标注,一石二鸟。

FunAsr和Whisper对比 Medium vs speech_paraformer

首先配置好Python3.10的开发环境,随后在终端运行命令:

pip3 install torch torchaudio  
pip3 intall funasr  
pip3 install modelscope

随后编写测试脚本,这里以Bert-vits2里面的转写环节为例子,我们知道,如果想要克隆一个人的声音,那么必须首先把克隆对象的语音转写为文字,并且标注,标注的意义在于可以增强克隆语音的语气韵律问题。

首先看看whisper是怎么做的:

def transcribe_one(audio_path):
    model = whisper.load_model("medium")  
    # load audio and pad/trim it to fit 30 seconds  
    audio = whisper.load_audio(audio_path)  
    audio = whisper.pad_or_trim(audio)  
  
    # make log-Mel spectrogram and move to the same device as the model  
    mel = whisper.log_mel_spectrogram(audio).to(model.device)  
  
    # detect the spoken language  
    _, probs = model.detect_language(mel)  
    print(f"Detected language: {max(probs, key=probs.get)}")  
    lang = max(probs, key=probs.get)  
    # decode the audio  
    options = whisper.DecodingOptions(beam_size=5)  
    result = whisper.decode(model, mel, options)  
  
    # print the recognized text  
    print(result.text)  
    return lang, result.text

这通过Whisper的gpu模式来进行推理,模型选择medium,硬件要求是最低6G显存,更多关于whisper的配置,请移步:闻其声而知雅意,M1 Mac基于PyTorch(mps/cpu/cuda)的人工智能AI本地语音识别库Whisper(Python3.10),这里不再赘述。

Whisper转写后效果:

./Data\Keira\wavs\Keira_0.wav|Keira|ZH|光动嘴不如亲自做给你看  
./Data\Keira\wavs\Keira_1.wav|Keira|ZH|等我一下呀迫不及待了嘛  
./Data\Keira\wavs\Keira_10.wav|Keira|ZH|你还会帮我吗真没想到你对葡萄酒也这么内行啊  
./Data\Keira\wavs\Keira_11.wav|Keira|ZH|差不多吧好了 聊了这么久我都饿了  
./Data\Keira\wavs\Keira_12.wav|Keira|ZH|还是赶紧开动吧我自己能应付  
./Data\Keira\wavs\Keira_13.wav|Keira|ZH|这些蛋啊 鸡啊 鹅啊 满地都是  
./Data\Keira\wavs\Keira_14.wav|Keira|ZH|再说我的经济状况很快就要改善了  
./Data\Keira\wavs\Keira_15.wav|Keira|ZH|因为我很清楚他的研究有多重要  
./Data\Keira\wavs\Keira_16.wav|Keira|ZH|万一落入心怀不轨的人手里结果不堪设想  
./Data\Keira\wavs\Keira_17.wav|Keira|ZH|再後悔也晚了  
./Data\Keira\wavs\Keira_18.wav|Keira|ZH|抱歉这话题太丧气了  
./Data\Keira\wavs\Keira_19.wav|Keira|ZH|我不應該提起來煞風景的  
./Data\Keira\wavs\Keira_2.wav|Keira|ZH|現在還不是時候  
./Data\Keira\wavs\Keira_20.wav|Keira|ZH|尤其是在我們的浪漫晚餐上  
./Data\Keira\wavs\Keira_21.wav|Keira|ZH|你知道森瑞卡尼亚人管那个星座叫什么吗  
./Data\Keira\wavs\Keira_22.wav|Keira|ZH|不對哦是個含義完全不一樣的名字  
./Data\Keira\wavs\Keira_23.wav|Keira|ZH|事实上有点下流  
./Data\Keira\wavs\Keira_24.wav|Keira|ZH|靠近一点我悄悄告诉你  
./Data\Keira\wavs\Keira_3.wav|Keira|ZH|好了,趕緊出去  
./Data\Keira\wavs\Keira_4.wav|Keira|ZH|你还挺乖的嘛现在差不多准备好了  
./Data\Keira\wavs\Keira_5.wav|Keira|ZH|我不是說差不多好了嗎  
./Data\Keira\wavs\Keira_6.wav|Keira|ZH|别打岔 看仔细了  
./Data\Keira\wavs\Keira_7.wav|Keira|ZH|那是没错但那样我就不会把你请到这儿来了  
./Data\Keira\wavs\Keira_8.wav|Keira|ZH|现在明白我为什么要那些材料了吧  
./Data\Keira\wavs\Keira_9.wav|Keira|ZH|如果我说 去树林里帮我取些食材 我要做晚餐

可以看到,medium模型对于中文的泛化效果一般,大多数素材都没有标注,但仅限于Whisper的medium模型。

现在我们来看看阿里的FunAsr:

from modelscope.pipelines import pipeline  
from modelscope.utils.constant import Tasks  
  
  
  
from modelscope.hub.snapshot_download import snapshot_download  
  
# 指定本地目录  
local_dir_root = "./models_from_modelscope"  
model_dir = snapshot_download('damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch', cache_dir=local_dir_root)  
  
inference_pipeline = pipeline(  
    task=Tasks.auto_speech_recognition,  
    model=model_dir,  
    vad_model='damo/speech_fsmn_vad_zh-cn-16k-common-pytorch',  
    punc_model='damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch',  
    #lm_model='damo/speech_transformer_lm_zh-cn-common-vocab8404-pytorch',  
    #lm_weight=0.15,  
    #beam_size=10,  
)  
param_dict = {}  
param_dict['use_timestamp'] = False

这里首先指定模型目录,否则FunAsr会在C盘下载模型。

随后编写转写逻辑:

def transcribe_one(audio_path):  
      
    rec_result = inference_pipeline(audio_in=audio_path, param_dict=param_dict)  
  
    print(rec_result["text"])  
  
    return "zh", rec_result["text"]

转写后效果:

./Data\Keira\wavs\Keira_0.wav|Keira|ZH|光动嘴不如亲自做给你看。  
./Data\Keira\wavs\Keira_1.wav|Keira|ZH|等我一下呀,迫不及待了吗?  
./Data\Keira\wavs\Keira_10.wav|Keira|ZH|你还会帮我吗?真没想到你对葡萄酒也这么内行啊。  
./Data\Keira\wavs\Keira_11.wav|Keira|ZH|差不多吧。好了,聊了这么久,我都饿了。  
./Data\Keira\wavs\Keira_12.wav|Keira|ZH|还是赶紧开动吧,我自己能应付。  
./Data\Keira\wavs\Keira_13.wav|Keira|ZH|这些蛋啊、鸡啊、鹅啊的满地都是。  
./Data\Keira\wavs\Keira_14.wav|Keira|ZH|再说我的经济状况很快就要改善了。  
./Data\Keira\wavs\Keira_15.wav|Keira|ZH|因为我很清楚他的研究有多重要。  
./Data\Keira\wavs\Keira_16.wav|Keira|ZH|万一落入心怀不轨的人,手里,结果不堪设想。  
./Data\Keira\wavs\Keira_17.wav|Keira|ZH|再后悔也晚了。  
./Data\Keira\wavs\Keira_18.wav|Keira|ZH|哎呀,抱歉,这话题太丧气了。  
./Data\Keira\wavs\Keira_19.wav|Keira|ZH|我不应该提起来煞风景的。  
./Data\Keira\wavs\Keira_2.wav|Keira|ZH|现在还不是时候。  
./Data\Keira\wavs\Keira_20.wav|Keira|ZH|尤其是在我们的浪漫晚餐上。  
./Data\Keira\wavs\Keira_21.wav|Keira|ZH|你知道瑟瑞卡尼亚人管那个星座叫什么吗?  
./Data\Keira\wavs\Keira_22.wav|Keira|ZH|不对哦,是个含义,完全不一样的名字。  
./Data\Keira\wavs\Keira_23.wav|Keira|ZH|事实上有点下流。  
./Data\Keira\wavs\Keira_24.wav|Keira|ZH|靠近一点儿,我悄悄告诉你。  
./Data\Keira\wavs\Keira_3.wav|Keira|ZH|好了,赶紧出去。  
./Data\Keira\wavs\Keira_4.wav|Keira|ZH|你还挺乖的嘛,现在差不多准备好了。  
./Data\Keira\wavs\Keira_5.wav|Keira|ZH|我不是说差不多好了吗?  
./Data\Keira\wavs\Keira_6.wav|Keira|ZH|别打岔看仔细了。  
./Data\Keira\wavs\Keira_7.wav|Keira|ZH|那是没错,但那样我就不会把你请到这儿来了。  
./Data\Keira\wavs\Keira_8.wav|Keira|ZH|现在明白我为什么要那些材料了吧。  
./Data\Keira\wavs\Keira_9.wav|Keira|ZH|如果我说去树林里帮我取些食材,我要做晚餐。

可以看到,几乎不需要修改,而且每一条素材都进行了标注。

对比图如下:

FunAsr和Whisper对比 Large-v2 & Large-v3 vs speech_paraformer

当然,Medium并非whisper的最高水平,现在我们来换成大模型:

def transcribe_one(audio_path):  
    model = whisper.load_model("large-v2")  
  
    # load audio and pad/trim it to fit 30 seconds  
    audio = whisper.load_audio(audio_path)  
    audio = whisper.pad_or_trim(audio)  
  
    # make log-Mel spectrogram and move to the same device as the model  
    mel = whisper.log_mel_spectrogram(audio).to(model.device)  
  
    # detect the spoken language  
    _, probs = model.detect_language(mel)  
    print(f"Detected language: {max(probs, key=probs.get)}")  
    lang = max(probs, key=probs.get)  
    # decode the audio  
    options = whisper.DecodingOptions(beam_size=5)  
    result = whisper.decode(model, mel, options)  
  
    # print the recognized text  
    print(result.text)  
    return lang, result.text

返回结果:

./Data\Keira\wavs\Keira_0.wav|Keira|ZH|光动嘴不如亲自做给你看  
./Data\Keira\wavs\Keira_1.wav|Keira|ZH|等我一下呀迫不及待了嘛  
./Data\Keira\wavs\Keira_10.wav|Keira|ZH|你还会帮我吗真没想到你对葡萄酒也这么内行啊  
./Data\Keira\wavs\Keira_11.wav|Keira|ZH|差不多吧好了 聊了这么久我都饿了  
./Data\Keira\wavs\Keira_12.wav|Keira|ZH|还是赶紧开动吧我自己能应付  
./Data\Keira\wavs\Keira_13.wav|Keira|ZH|这些蛋啊 鸡啊 鹅啊 满地都是  
./Data\Keira\wavs\Keira_14.wav|Keira|ZH|再说我的经济状况很快就要改善了  
./Data\Keira\wavs\Keira_15.wav|Keira|ZH|因为我很清楚他的研究有多重要  
./Data\Keira\wavs\Keira_16.wav|Keira|ZH|万一落入心怀不轨的人手里结果不堪设想  
./Data\Keira\wavs\Keira_17.wav|Keira|ZH|再後悔也晚了  
./Data\Keira\wavs\Keira_18.wav|Keira|ZH|抱歉这话题太丧气了  
./Data\Keira\wavs\Keira_19.wav|Keira|ZH|我不應該提起來煞風景的  
./Data\Keira\wavs\Keira_2.wav|Keira|ZH|現在還不是時候  
./Data\Keira\wavs\Keira_20.wav|Keira|ZH|尤其是在我們的浪漫晚餐上  
./Data\Keira\wavs\Keira_21.wav|Keira|ZH|你知道森瑞卡尼亚人管那个星座叫什么吗  
./Data\Keira\wavs\Keira_22.wav|Keira|ZH|不對哦是個含義完全不一樣的名字  
./Data\Keira\wavs\Keira_23.wav|Keira|ZH|事实上有点下流  
./Data\Keira\wavs\Keira_24.wav|Keira|ZH|靠近一点我悄悄告诉你  
./Data\Keira\wavs\Keira_3.wav|Keira|ZH|好了,趕緊出去  
./Data\Keira\wavs\Keira_4.wav|Keira|ZH|你还挺乖的嘛现在差不多准备好了  
./Data\Keira\wavs\Keira_5.wav|Keira|ZH|我不是說差不多好了嗎  
./Data\Keira\wavs\Keira_6.wav|Keira|ZH|别打岔 看仔细了  
./Data\Keira\wavs\Keira_7.wav|Keira|ZH|那是没错但那样我就不会把你请到这儿来了  
./Data\Keira\wavs\Keira_8.wav|Keira|ZH|现在明白我为什么要那些材料了吧  
./Data\Keira\wavs\Keira_9.wav|Keira|ZH|如果我说 去树林里帮我取些食材 我要做晚餐

整体上的偏差并不大,但标注上略逊FunAsr一筹。

结语

Funasr的模型paraformer-zh受益于60000小时的纯人工标注的数据来训练,中文参数达到220M个,它的两个模块,一个是基于前馈顺序记忆网络(FSMN-VAD)的语音活动检测模型,另外一个是基于可控时延 Transformer(CT-Transformer),相比 OpenAI 的 Whisper 这两块能力还是比较突出的。

很难想象6w小时的数据还是纯手工标注,毕竟阿里财大气粗。

而Whisper 则用了 68w 小时的数据,从这个层面来看,FunASR 似乎没占便宜。但Whisper 针对的是全球市场,68w小时里面有多少中文素材就很难说了,因此 FunASR 的中文语音转写效果确实比 Whisper 更优秀。文章来源地址https://www.toymoban.com/news/detail-778667.html

到了这里,关于中文语音识别转文字的王者,阿里达摩院FunAsr足可与Whisper相颉顽的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu20.04 使用Python实现全过程离线语音识别(包含语音唤醒,语音转文字,指令识别,文字转语音)

      因为手头有一个项目,该项目需要在香橙派上实现语音控制,并且带有语音唤醒功能。简单来说,就是通过唤醒词唤醒香橙派,然后说出相关指令,香橙派去执行指令。   但是,在弄香橙派的时候,自带的麦克风不好使了,单独进行麦克风测试的时候是好使的,但是程

    2024年02月05日
    浏览(23)
  • 【离线文本转语音文件】java spring boot jacob实现文字转语音文件,离线文本转化语音,中英文生成语音,文字朗读,中文生成声音,文字生成声音文件,文字转语音文件,文字变声音。

    输入文字(支持中英文),点击转换生成***.wav文件,点击下载到本地就可。  生成后的音频文件播放,时长1分8秒          这次采用jacob实现,相比百度AI需要联网,本项目定位内网环境实现。所以最终采jacob。 1.环境配置: 本次采用版本jacob-1.19,我们需要下载jacob.jar和dll

    2024年02月16日
    浏览(45)
  • Java 离线语音识别实现语音转文字

    model下载 我们需要实现离线语音识别,那么就得将模型下载到本地电脑。下载地址为官网的 Models 模块: https://alphacephei.com/vosk/models 我们直接找到 Chinese 分类,这里有 2 个模型 将下载的语言模型包,在下面代码中引入 代码 CommonUtils 注意:以上代码只支持.wav格式的音频文件

    2024年02月05日
    浏览(27)
  • uni-app/vue 文字转语音朗读(附小程序语音识别和朗读)uniapp小程序使用文字转语音播报类似支付宝收款播报小程序语音识别和朗读)

    uni-app/vue 文字转语音朗读(小程序语音识别和朗读) 一、第一种方式:直接加语音包 固定的文本 先利用工具生成了 文本语音mp3文件,放入项目中,直接用就好了 这里用到的工具:知意配音 链接地址:https://peiyin.wozhiyi.com/newproduction.html 接下来,代码部分。 在min.js文件里加

    2024年02月07日
    浏览(30)
  • 语音识别(利用python将语音转化为文字)(升级版)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 基于语音识别(1)进行的完善,修改了60秒断触的问题,另外可以更加方便的调用,语音识别1的链接如下: https://blog.csdn.net/m0_46657126/article/details/124531081 https://www.xfyun.cn/ ps:注册账户是完全免费的,因

    2024年02月03日
    浏览(25)
  • 【项目管理】Java离线版语音识别-语音转文字

    系统:Win10 Java:1.8.0_333 IDEA:2020.3.4 Gitee: https://gitee.com/lijinjiang01/SpeechRecognition 最近在做一个鬼畜视频的时候,需要处理大量语音文件,全部都是 wav 格式的,然后我想把这些语音转成文字,不过这些语音有几千条,这时候我就想能不能用 Java 实现。 不过现在主流的语音识别

    2024年02月04日
    浏览(29)
  • whisper 语音识别AI 声音To文字

    Whisper  是一个由 OpenAI 训练并开源的神经网络,功能是语音识别,能把 语音 转换为 文字 ,在英语语音识别方面的稳健性和准确性接近人类水平。 1、Whisper支持语音转录和翻译两项功能并接受各种语音格式,模型中、英、法、德、意、日等主流语言上取得85%以上的准确率,完全

    2024年02月08日
    浏览(28)
  • 使用Python进行语音识别:将音频转为文字

    语音识别是一项将语音信号转换为可理解的文本的技术。在Python中,我们可以使用一些库和工具来实现语音识别,并将音频转换为文本。本文将介绍如何使用Python进行语音识别的过程,并提供相应的源代码。 步骤1:安装所需的库 首先,我们需要安装一些Python库来支持语音识

    2024年02月03日
    浏览(22)
  • vue项目,实现语音识别文字,前后端交互

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 最近实现一个录音上传功能,并且识别语音转为汉字。 js-audio-recorder是基于第三方的vue插件,实现录音,播放等功能。 代码如下(示例): 代码如下(示例): 该处使用的url网络请求的数据。 前端调

    2024年02月12日
    浏览(27)
  • openai开源的whisper在huggingface中使用例子(语音转文字中文)

    openai开源的语音转文字支持多语言在huggingface中使用例子。 目前发现多语言模型large-v2支持中文是繁体,因此需要繁体转简体。 后续编写微调训练例子 GitHub地址: https://github.com/openai/whisper

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包