日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發布時間:2024/1/11 windows 41 coder
生活随笔 收集整理的這篇文章主要介紹了 中文语音识别转文字的王者,阿里达摩院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 更優秀。

總結

以上是生活随笔為你收集整理的中文语音识别转文字的王者,阿里达摩院FunAsr足可与Whisper相颉顽的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。