FunASR — 中文語音辨識,以前要拼四個工具,現在一行 API 全包
想在自己的 Mac 上,把一段三小時的會議錄音變成一份能直接讀的逐字稿,過去你得先當一次系統整合商。
先抓 OpenAI 的 Whisper 來轉文字。轉完一看,中文的字錯率大概 5%,每隔幾句就要回去校一個同音字;而且它吐出來的是一坨沒有標點的長文,得再接一個標點恢復模型把句子斷開。逐字稿要標「誰在講話」,Whisper 不管這件事,你還得另外裝 pyannote 做說話人分離。錄音有三小時這麼長,丟整段進去會爆記憶體,所以前面還得先放一個 VAD 把沒人講話的空白段切掉。
四五個工具,四五種輸入輸出格式,你花在「把它們縫成一條線」的時間,比花在辨識本身還多。這才是中文語音辨識真正惱人的地方——不是哪個模型不夠強,是沒有人把這條線幫你接好。
pip install funasr。這一行,就是來把上面那整段流程收掉的。
一個容器,不是一個模型
FunASR 是阿里巴巴達摩院開源的語音辨識工具包,GitHub 上 15K 顆星,程式碼走 MIT 授權。它最該先理解的一點是:它不是「又一個語音模型」,而是一個容器。
裡面裝了一整排各司其職的模型——Paraformer 負責辨識、SenseVoice 管情緒和語種、fsmn-vad 切音訊、ct-punc 補標點、cam++ 分辨說話人。你不用分別去學每個模型怎麼呼叫,全部透過同一個 AutoModel 的介面組裝。要哪幾塊,就在參數裡點哪幾塊。
把它想成樂高,比想成「一個更聰明的 Whisper」更貼近真相。Whisper 是一塊做工很好的積木,但你想拼出一台車,得自己去別的盒子翻輪子、翻車門。FunASR 是直接給你一盒,輪子車門引擎都在同一盒裡,接口還都對得上。
同一條線,逐段對照
把開頭那條手工 pipeline 攤開,一段一段看 FunASR 怎麼換掉它,差距會自己浮出來。
切長音訊這一步。 以前你要自己判斷哪裡是停頓、哪裡可以切,或裝個 VAD 自己調參數。現在它內建 fsmn-vad,這個模型只有 0.4M 大,做的事很單純——把整段錄音裡「有人在講話」的片段框出來,中間的沉默丟掉。就像剪片之前先把沒聲音的空檔全砍掉,後面的辨識只處理真的有內容的部分,三小時的錄音也不會把記憶體撐爆。
辨識這一步,是落差最大的地方。 Paraformer 的中文字錯率是 1.68%,Whisper 是 5.14%——精度差了大概三倍。這個數字背後其實藏著一個架構選擇。Whisper 是自迴歸的,吐字像接龍,得先吐出前一個字,才知道下一個字怎麼接,所以慢;Paraformer 是非自迴歸的,比較像一次把整句的空格全填滿,不用一個字等一個字。結果就是它又準又快——10 秒的音訊在 CPU 上幾秒就辨識完,Apple Silicon 上掛 device="mps" 走內顯更舒服。
補標點、分說話人這兩步,以前是兩個獨立專案,現在是兩個參數。 在 AutoModel 裡多填 punc_model 和 spk_model,整條線就從「辨識」升級成「辨識 + 斷句 + 標出誰在講」。
1 | from funasr import AutoModel |
開頭那段「先 Whisper、再標點、再 pyannote、前面還要墊 VAD」的四五個工具,到這裡是一個 AutoModel 加四個參數。你不用自己寫任何一行 pipeline 邏輯,模型之間怎麼接、格式怎麼轉,全包在裡面了。
順手多給你的那塊:情緒
如果只是把舊流程接好,那還只是「省事」。FunASR 有一塊是舊流程根本拼不出來的——SenseVoice 這個模型,辨識的同時會順手告訴你說話的人是什麼情緒、背景有沒有掌聲或笑聲。
1 | res = model.generate(input="call.wav", language="auto") |
這在客服場景特別有用。一整天幾千通通話,以前要派人一通一通聽才挑得出哪幾通客戶在抓狂,現在讓 SenseVoice 把情緒標成 ANGRY 的那些先撈出來,人力直接對焦到該關心的案件上。它支援的語種也廣,SenseVoice-Small 自動偵測 50 多種語言,最新的 Fun-ASR-Nano 撐到 31 語種加 7 種方言。
會踩到的幾個坑
天下沒有免費的午餐,幾個地雷先標起來。模型預設從 ModelScope 下載,那是中國的伺服器,海外拉得慢,加一個 hub="hf" 切到 HuggingFace 就好。MPS 上偶爾會有某個運算報錯,遇到就退回 device="cpu",反正 Paraformer 在 CPU 上也快。雙聲道的音訊可能讓特徵抽取出錯,丟進去前先轉單聲道。還有 Fun-ASR-Nano 雖然最強,但它現在還不支援說話人分離,要分人就乖乖用 paraformer-zh 配 cam++。
組裝成本趨零之後,值錢的東西往哪退
FunASR 真正換掉的,不是那四五個套件。
換掉的是「中文語音辨識是一件系統整合工程」這個前提。當 VAD、辨識、標點、分人、情緒這些零件全部被收進一個 import 後面,會接 pipeline 這件事就不再是門檻了——門檻趨近於零的東西,就不再是你的價值所在。
那價值退到哪?退到上游。退到「你拿這條已經接好的線,去解一個真正值錢的問題」——是要做會議紀錄的自動歸檔,還是客服品質的即時預警,還是把幾百集 podcast 變成可全文搜尋的索引。模型把「怎麼把聲音變成字」這題解掉了,剩下那題「把字變成對誰有用的東西」,它沒辦法替你回答。
下次再看到一個工具號稱「一行就能做到以前要拼半天的事」,別只記得它幫你省了多少時間。真正該問的是:當這件事的組裝成本掉到地板,你原本賴以為生的那點手藝,是不是也跟著一起貶值了?省下來的那些時間,你打算拿去解一個更難、更上游的題目,還是只是把同一件事做得更快?
原文來源:FunASR GitHub
授權:MIT(程式碼)+ FunASR Model License 1.1(模型)










