前言
上個月買遊戲拿到了 FANZA 的折抵金,為了花掉它買了平常沒在聽的 ASMR,然後發現
嗯,我 N87 聽不懂日文...
這種小眾的東西網路上也沒有譯文,就試了試當紅的 AI 語音辨識
+ 翻譯,成果還不賴。
這篇文章想分享我發現的好東西 —— WhisperX。
WhisperX: Automatic Speech Recognition with Word-level Timestamps (Diarization)
WhisperX 提供高速的自動語音識別,並提供詞級時間戳和講話者分離功能。
(高速指使用 large-v2
模型時可達到 whisper 的 70 倍速)
GitHub: m-bain/whisperX
https://github.com/m-bain/whisperX
- 使用 whisper large-v2 進行批次推論,實現 70 倍速的轉錄速度
- 以 faster-whisper 做後端,對於 large-v2 使用 beam_size=5 只需要 8GB 以下的 GPU 顯存
- 使用 wav2vec2 對齊技術達到單詞級別的時間戳
- 利用 pyannote-audio 中的語者分離功能實現多人語音辨識(包含語者 ID 標籤)
- VAD 預處理,減少幻聽問題並提升批次處理效率而不影響字錯率
一言以蔽之,它會把音檔分割成小片段批次送去 whisper 辨識,再將時間軸對齊到單字的層級上。另外它底下是使用 faster-whisper 模型,號稱能在同樣的辨識率下達到 4 倍快速。
實測是真的很快🚀
上方數據是 large-v2,不過它有支援新的 large-v3
安裝
請按照 GitHub 文件安裝
conda create --name whisperx python=3.10 conda activate whisperx conda install pytorch==2.0.0 torchaudio==2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia pip install git+https://github.com/m-bain/whisperx.git --upgrade或者是...↓
Docker 執行
推薦使用我寫的 Docker image,一行指令啟動,省去折騰 Python 環境的時間 💪
此方法你需要安裝好 Docker Desktop, CUDA Toolkit, NVIDIA Windows Driver,並確保你的 Docker 運行 WSL2 上。
GitHub: jim60105/docker-whisperX
https://github.com/jim60105/docker-whisperX
docker run --gpus all -it -v ".:/app" ghcr.io/jim60105/whisperx:base-en -- --output_format srt audio.mp3 docker run --gpus all -it -v ".:/app" ghcr.io/jim60105/whisperx:large-v2-ja -- --output_format srt audio.mp3 docker run --gpus all -it -v ".:/app" ghcr.io/jim60105/whisperx:no_model -- --model tiny --language en --output_format srt audio.mp3
模型列表
WhisperX 背後是使用 fast-whisper 做轉錄,請在 Hugging Face 上查看模型清單
使用
印出所有的參數和說明,也可以在 GitHub 上查看
whisperx -h
基本的使用方式是直接在程式後帶入音檔檔名
whisperx audio.mp3
其它語言需要帶入參數指令語言。
除了英語以外的其它語言,模型建議要使用到 large
成果才比較能看
whisperx --model large-v3 --language zh audio_zh.mp3
轉錄中文和日文時一定要加上參數
--chunk_size
,5~10
都不錯,如果斷句很怪的話在此範圍調調看。具體用法可以查看這支我提交的 PR
(預設值是驚人的 30)
whisperx --chunk_size 6 audio.mp3
如果你很不幸的想要在 CPU 上執行它,請加上
--device cpu --compute_type int8
whisperx --device cpu --compute_type int8 audio.mp3
若要啟用講者分類功能,請在 --hf_token
參數後面帶入你的 Hugging
Face 存取金鑰,可以從這裡取得。
並且需要接受以下兩個模型的使用者協議:pyannote/segmentation-3.0、pyannote/speaker-diarization-3.1
(登入後在頁面上填寫 Company/Website,然後按 Agree)
使用起來會像這樣
whisperx --diarize --hf_token hf_OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO audio.mp3
--output_format
可指定輸出格式,可選格式有 "all", "srt", "vtt", "txt", "tsv", "json", "aud"
whisperx --output_format srt audio.mp3
想請教一下,若是用這個來做Vtuber 直播 類即時的語音翻譯也是有可能的嗎
回覆刪除直接使用是辦不到,它不支援串流輸入輸出。你需要自己實作語音分段,再送進去識別和翻譯
刪除加上等待時間的話我想是難以稱為「即時」
想請教一下,若要啟用講者分類功能這部分可以在詢問您嗎
回覆刪除可以到這裡問原作者 https://github.com/m-bain/whisperX
刪除