音轉(zhuǎn)寫進(jìn)階:whisperX 詞級(jí)時(shí)間戳與說(shuō)話人分離實(shí)戰(zhàn))
一篇文章搞定語(yǔ)音轉(zhuǎn)寫進(jìn)階whisperX 詞級(jí)時(shí)間戳與說(shuō)話人分離實(shí)戰(zhàn)【免費(fèi)下載鏈接】whisperXWhisperX: Automatic Speech Recognition with Word-level Timestamps ( Diarization)項(xiàng)目地址: https://gitcode.com/gh_mirrors/wh/whisperX「預(yù)算翻一倍」這句話到底是誰(shuí)在第幾分鐘說(shuō)的上周的周會(huì)錄音只有 32 分鐘同事老王卻來(lái)回聽(tīng)了兩個(gè)多小時(shí)。不是他聽(tīng)力有問(wèn)題而是普通語(yǔ)音識(shí)別工具只告訴他有人說(shuō)了這句話卻不告訴他是誰(shuí)說(shuō)的、具體在哪一秒說(shuō)的。這正是 whisperX 這類開(kāi)源語(yǔ)音識(shí)別工具存在的意義它不止把音頻變成文字還能給每一個(gè)詞標(biāo)上精確時(shí)間戳并自動(dòng)區(qū)分不同的說(shuō)話人。本文用一次真實(shí)的會(huì)議錄音處理過(guò)程帶你從安裝走到進(jìn)階 API 調(diào)用全程不需要深厚的算法背景。一個(gè)下午的教訓(xùn)為什么普通轉(zhuǎn)寫救不了會(huì)議錄音whisperX 脫胎于 OpenAI 的 Whisper 模型但它專治 Whisper 的三個(gè)老大難時(shí)間戳太粗Whisper 只給句子級(jí)時(shí)間戳整體偏移幾秒是常事。whisperX 引入音素級(jí)強(qiáng)制對(duì)齊把時(shí)間精度細(xì)化到單個(gè)單詞一個(gè)詞對(duì)應(yīng)音頻上哪一秒一目了然。不支持批量Whisper 原生無(wú)法批量推理處理長(zhǎng)音頻慢得讓人心焦。whisperX 換用 faster-whisper 后端并先用語(yǔ)音活動(dòng)檢測(cè)VAD切出有效語(yǔ)音段再分批喂給模型官方給出的數(shù)據(jù)是 large-v2 模型下可達(dá)約 70 倍實(shí)時(shí)速度。分不清誰(shuí)在說(shuō)話這正是老王最痛的一點(diǎn)。whisperX 接入 pyannote.audio 的說(shuō)話人分離Speaker Diarization能力自動(dòng)把音頻里不同的聲音切成不同片段分別標(biāo)成 SPEAKER_00、SPEAKER_01……它不負(fù)責(zé)認(rèn)出張三李四只負(fù)責(zé)把不同的人分開(kāi)編號(hào)。圖 1whisperX 的處理流水線。原始音頻先經(jīng)過(guò) VAD 切分合并補(bǔ)零到 30 秒批量送入 Whisper 識(shí)別再借助音素模型做強(qiáng)制對(duì)齊最終輸出詞級(jí)時(shí)間戳。開(kāi)工前的裝備清單環(huán)境、依賴與一個(gè) HF Token動(dòng)筆跑命令之前先照單備齊這幾樣?xùn)|西能省下大量排錯(cuò)時(shí)間Python 3.10項(xiàng)目 README 明確建議的版本用其他版本風(fēng)險(xiǎn)自負(fù)。ffmpeg音頻解碼的基礎(chǔ)依賴缺了它連音頻都讀不進(jìn)來(lái)。合適的硬件large-v2 模型搭配 beam_size5 大約需要 8GB 以內(nèi)顯存沒(méi)有 GPU 也能跑后面會(huì)說(shuō)到 CPU 方案。獲取項(xiàng)目代碼并安裝依賴git clone https://gitcode.com/gh_mirrors/wh/whisperX cd whisperX pip install -r requirements.txt不想用開(kāi)發(fā)版的話直接pip install whisperx裝穩(wěn)定版也可以。依賴清單在項(xiàng)目的 requirements.txt 里核心角色有三個(gè)torch/torchaudio 負(fù)責(zé)推理計(jì)算faster-whisper 負(fù)責(zé)批量轉(zhuǎn)寫pandas 負(fù)責(zé)把說(shuō)話人時(shí)間線整理成表格nltk 則用來(lái)把結(jié)果按句子切分。還有一樣容易被忽略的準(zhǔn)備工作Hugging Face Access Token--hf_token。說(shuō)話人分離依賴的 pyannote 系列模型是門控模型需要先到 Hugging Face 上同意對(duì)應(yīng)模型的用戶協(xié)議并生成一個(gè)只讀 token否則--diarize會(huì)在加載模型時(shí)直接報(bào)錯(cuò)——這一步卡住了不少初學(xué)者。第一次實(shí)戰(zhàn)一行命令輸出帶發(fā)言人標(biāo)簽的字幕假設(shè)會(huì)議錄音存放在 audio_files/my_meeting.wav你估計(jì)現(xiàn)場(chǎng)有 2 到 4 個(gè)人那么只需一條命令python -m whisperx audio_files/my_meeting.wav --model medium --diarize --min_speakers 2 --max_speakers 4幾個(gè)關(guān)鍵參數(shù)的速查表--modelWhisper 模型尺寸可選 tiny/base/small/medium/large-v2越大越準(zhǔn)也越慢日常推薦 medium 起步。--diarize開(kāi)啟說(shuō)話人分離的總開(kāi)關(guān)對(duì)應(yīng) whisperx/transcribe.py 里的處理邏輯。--min_speakers/--max_speakers限定說(shuō)話人數(shù)量范圍。如果你確定只有兩個(gè)人干脆都寫成 2識(shí)別精度最高。--device默認(rèn)有 GPU 自動(dòng)走 cuda純 CPU 機(jī)器建議追加--compute_type int8速度與顯存占用更友好。想讓字幕里每個(gè)詞在被說(shuō)出時(shí)高亮顯示可以再加--highlight_words True在 srt/vtt 里會(huì)有下劃線逐詞掃過(guò)的視覺(jué)效果非常直觀??炊敵鏊膫€(gè)文件分別能干什么默認(rèn)的--output_format all會(huì)在當(dāng)前目錄生成全套結(jié)果也可以用--output_dir指定存放位置它們各有分工.srt / .vtt標(biāo)準(zhǔn)字幕文件每一句前面帶[SPEAKER_00]之類的標(biāo)簽直接拖進(jìn)播放器就是分人字幕。.json結(jié)構(gòu)化數(shù)據(jù)包含每個(gè)詞的時(shí)間戳與置信度加上--return_char_alignments True還能拿到字符級(jí)對(duì)齊信息。.txt純文本轉(zhuǎn)寫結(jié)果適合快速?gòu)?fù)制引用。.tsv表格格式方便丟進(jìn) Excel 里做二次統(tǒng)計(jì)。舉一個(gè)最實(shí)用的玩法拿到 .json 之后按speaker字段過(guò)濾就能把某一位發(fā)言人的所有句子抽出來(lái)拼成一份個(gè)人發(fā)言集——做會(huì)議紀(jì)要和訪談?wù)浂伎克?。進(jìn)階玩法用 Python 拆開(kāi)流水線自己控制每一步命令行適合快速出活想精細(xì)控制就得走 Python API。whisperX 把整條流水線拆成了四步入口全部集中在 whisperx/init.pyimport whisperx device cuda audio_file audio.mp3 batch_size 16 compute_type float16 # 顯存緊張可換 int8 # 1. 批量語(yǔ)音識(shí)別 model whisperx.load_model(large-v2, device, compute_typecompute_type) audio whisperx.load_audio(audio_file) result model.transcribe(audio, batch_sizebatch_size) # 2. 詞級(jí)時(shí)間戳強(qiáng)制對(duì)齊 model_a, metadata whisperx.load_align_model(language_coderesult[language], devicedevice) result whisperx.align(result[segments], model_a, metadata, audio, device) # 3. 說(shuō)話人分離 diarize_model whisperx.DiarizationPipeline(use_auth_tokenYOUR_HF_TOKEN, devicedevice) diarize_segments diarize_model(audio) # 4. 把說(shuō)話人標(biāo)簽貼到每一句話、每一個(gè)詞上 result whisperx.assign_word_speakers(diarize_segments, result)想理解背后的原理打開(kāi) whisperx/diarize.py 就夠了兩個(gè)核心部件都很直觀DiarizationPipeline 類封裝了 pyannote 的 speaker-diarization-3.1 模型輸入音頻后返回一張 DataFrame記錄每個(gè)說(shuō)話片段的起止時(shí)間和 SPEAKER 編號(hào)。assign_word_speakers 函數(shù)逐一計(jì)算每個(gè)轉(zhuǎn)寫片段與各說(shuō)話人片段的時(shí)間重疊量誰(shuí)重疊的時(shí)長(zhǎng)最多這段話就判給誰(shuí)。一句話概括這套算法時(shí)間重疊投票。誰(shuí)的聲音覆蓋了這句話的大部分時(shí)長(zhǎng)誰(shuí)就是這句話的主人。效果不達(dá)標(biāo)按這份排查清單逐項(xiàng)檢查先建立合理預(yù)期說(shuō)話人分離本身就不是 100% 完美的技術(shù)兩人同時(shí)開(kāi)口這類重疊語(yǔ)音是幾乎所有系統(tǒng)的硬傷whisperX 也不例外。遇到問(wèn)題按下面的順序逐個(gè)排查說(shuō)話人數(shù)量對(duì)不上知道確切人數(shù)就直接寫死--min_speakers 2 --max_speakers 2這類寫法最穩(wěn)。標(biāo)簽張冠李戴分離結(jié)果只給編號(hào)不給身份編號(hào)和真人的對(duì)應(yīng)關(guān)系需要自己根據(jù)內(nèi)容確認(rèn)太短的片段本來(lái)就容易判錯(cuò)。時(shí)間戳和字幕對(duì)不齊換更大的模型--model large-v2或者顯式指定--align_model。個(gè)別詞沒(méi)有時(shí)間戳像 2014.、£13.60 這類字符不在對(duì)齊模型詞典里屬于項(xiàng)目已知限制不是你的操作問(wèn)題。明顯的語(yǔ)音被當(dāng)成靜音把--vad_onset從默認(rèn)的 0.500 往下調(diào)。顯存告急三件套組合拳——--batch_size 4、--compute_type int8、--model base。中文等非英語(yǔ)錄音加上--language zh并建議配合--model large。whisperX 對(duì)中、英、法、德、西、意、日、荷、烏、葡等語(yǔ)言內(nèi)置了默認(rèn)對(duì)齊模型其他語(yǔ)種則需要自己到模型庫(kù)找合適的音素模型。會(huì)開(kāi)完了這些場(chǎng)景同樣能用上處理完老王的會(huì)議錄音你會(huì)發(fā)現(xiàn)這套流程的適用面遠(yuǎn)比想象中寬會(huì)議紀(jì)要自動(dòng)化跑一遍--diarize把 srt 按說(shuō)話人拆開(kāi)自動(dòng)生成逐人觀點(diǎn)清單比逐段聽(tīng)錄音快一個(gè)量級(jí)。播客內(nèi)容二次創(chuàng)作用 json 按 speaker 篩選快速圈出嘉賓的金句片段配合詞級(jí)時(shí)間戳直接定位剪輯點(diǎn)幾分鐘就能搭出金句集錦的素材池。課程與訪談復(fù)習(xí)長(zhǎng)訪談變成帶時(shí)間軸的誰(shuí)說(shuō)了什么回頭找某一句話不再需要反復(fù)拖動(dòng)進(jìn)度條??缯Z(yǔ)言研究--task translate能把非英語(yǔ)音頻直接轉(zhuǎn)成英文字幕不過(guò)要留意翻譯模式不支持對(duì)齊。收尾去源碼里繼續(xù)挖whisperX 最值得讀的幾處代碼命令行全部參數(shù)在 whisperx/transcribe.pyPython API 入口在 whisperx/init.py說(shuō)話人分離核心邏輯在 whisperx/diarize.py多語(yǔ)言使用示例在 EXAMPLES.md。裝好環(huán)境、跑通第一遍之后剩下的就是按需調(diào)整參數(shù)的事了。最后用一句話總結(jié)普通語(yǔ)音識(shí)別只告訴你說(shuō)了什么whisperX 再補(bǔ)上什么時(shí)候說(shuō)、是誰(shuí)說(shuō)的——這兩塊拼齊一段音頻才算真正變成了可檢索、可編輯、可復(fù)用的文字資產(chǎn)。【免費(fèi)下載鏈接】whisperXWhisperX: Automatic Speech Recognition with Word-level Timestamps ( Diarization)項(xiàng)目地址: https://gitcode.com/gh_mirrors/wh/whisperX創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考