跳轉到內容

在標註資料上訓練語音和音訊模型

在修正後的 RTTM 說話輪次上訓練說話人分離,在修正後的轉寫上微調 Whisper,並在聲譜圖上所畫的框上訓練叫聲檢測器。

v2.14.0 新增

本教程在標註者於 Potato 中給出的答案上訓練語音和音訊模型,並把每個模型的輸出作為預標籤送回給標註者。本頁面向已經在 Potato 中修正轉寫、說話輪次或動物叫聲的研究負責人,他們想要一個能從這些修正中學習的模型。主線路徑是匯入說話人分離檔案,讓標註者修正說話輪次,在修正後的輪次上訓練說話人分離模型,並把修正結果匯出為 RTTM。隨後三個較短的小節,分別在修正後的轉寫輪次上微調 Whisper,在聲譜圖上訓練框檢測器,以及在波形上訓練聲音事件標註器。關於一般的訓練迴圈,請先讀模型訓練概覽,從未啟動過執行的話,再讀訓練你的第一個模型。

四個音訊訓練器

每個訓練器只從一種方案學習,訓練頁面只為方案提供適合它的訓練器:

訓練器學習物件模型留出得分安裝
diarizationtiered_annotation 方案的說話人層,或標籤為說話人的 audio_annotation 方案語音編碼器,預設為 WavLM分離準確率(1 − DER)potato-annotation[train-audio]
whisper-asr標註者在 speech_transcript 方案中修正過的輪次Whisper,預設為 whisper-small詞準確率(1 − WER)potato-annotation[train-audio]
torchvision-detect、ultralytics-detectspectrogram_annotation 方案的框在渲染的聲譜圖上的 Faster R-CNN 或 YOLO 檢測器IoU 0.5 下的 mAPpotato-annotation[train-vision],或 pip install ultralytics(AGPL-3.0)
hf-audio-taggeraudio_annotation 方案中帶標籤的片段語音編碼器,預設為 wav2vec 2.0IoU 0.5 下的片段 F1potato-annotation[train-audio]

每個音訊訓練器都從伺服器磁碟上 soundfile 能開啟的檔案中讀取錄音,例如 WAV、FLAC 或 OGG,在較新的 libsndfile 下還有 MP3。像 /media/meet000.wav 這樣的路徑指的是任務目錄的 media/ 資料夾裡的檔案,標註頁面就是從這個資料夾播放錄音的。錄音是 http(s) URL 的條目會被排除在訓練之外,並給出警告。請在訓練之前把遠端錄音下載到 media/。訓練器參考列出每個參數。

把訓練器安裝到執行 Potato 的環境中:

bash
pip install "potato-annotation[train-audio]"

[train-audio] extra 會安裝 PyTorch、transformers 和 soundfile。聲譜圖檢測器改用 [train-vision],或者用 pip install "potato-annotation[train]" 一次裝齊全部文本、影像、音訊和 LLM 訓練器。缺少所需包的訓練器會在訓練頁面上保留為“not installed”,並附上安裝這些包的命令。

把說話人分離匯入為 RTTM 檔案

說話人分離按誰在說話把錄音切分成輪次。pyannote 和 NeMo 把分離結果寫成 RTTM,這是一種文本格式,每個輪次一行 SPEAKER,dscore 和 md-eval 用來給 RTTM 檔案打分。每一行給出錄音的檔案 id、聲道、輪次以秒為單位的起點和時長,以及說話人:

text
SPEAKER meet000 1 0.200 1.055 <NA> <NA> SPEAKER_01 <NA> <NA>
SPEAKER meet000 1 1.539 0.755 <NA> <NA> SPEAKER_00 <NA> <NA>

把 RTTM 檔案和錄音放進同一個資料夾,每段錄音按其檔案 id 命名(meet000 對應 meet000.wav),然後匯入該資料夾:

bash
potato import -f rttm -i diarization/ -o interviews \
  --speaker-map "SPEAKER_00=Interviewer,SPEAKER_01=Guest"

匯入器為每段錄音生成一個條目,把錄音複製到 interviews/media/,並寫出 config.yaml、data/diarization.jsonl 和一個 README。在本頁所依據的 16 段錄音的測試項目上,摘要行如下:

text
Imported 16 item(s), 1 question(s), 0 answer(s) from 0 annotator(s), and 16 model suggestion(s) on 16 item(s) from RTTM speaker diarization.

匯入器有三個自己的標誌:

  • --rttm-scheme audio|tiered 選擇輪次落在哪種方案上。預設的 audio 生成名為 speakers 的 audio_annotation 方案,標籤就是各說話人。tiered 生成名為 tiers 的 tiered_annotation 方案,帶一個 speaker 層。如果研究之後要逐輪次轉寫,請使用 tiered。
  • --speaker-map 重新命名說話人,對映中沒有提到的說話人保留 RTTM 中的名字。只有當某個名字在每段錄音裡都指同一個人時,才使用對映。分離器在每個檔案內部給說話人編號,一次訪談中的 SPEAKER_00 和下一次訪談中的 SPEAKER_00 可能是不同的人。
  • --media-dir DIR 在錄音不在 RTTM 檔案旁邊時,指明存放錄音的資料夾。

匯入器只讀取 SPEAKER 行,並把其他行類型計為已跳過。零長度的輪次、起點為負的輪次、沒有說話人名字(<NA>)的輪次,以及重複列出的輪次也會被跳過。RTTM 用空格分隔欄位,匯入器讀取含空格的說話人名字時只讀到空格處,並給出警告。匯入項目完整介紹這種匯入。

說話人分離的配置

生成的配置已經把匯入的輪次顯示為預標註。在 config.yaml 的末尾新增管理員金鑰和 model_training 塊。下面這個完整檔案能通過 python -m potato.validate_cli config.yaml --strict:

yaml
port: 8000
annotation_task_name: diarization (imported)
task_dir: .
output_annotation_dir: annotation_output/
data_files:
- data/diarization.jsonl
item_properties:
  id_key: id
  text_key: text
user_config:
  allow_all_users: true
  users: []
site_dir: default
pre_annotation:
  enabled: true
  field: predictions
  allow_modification: true
annotation_schemes:
- annotation_type: audio_annotation
  name: speakers
  description: Check and correct who speaks when.
  source_field: audio_url
  mode: label
  labels:
  - name: Guest
  - name: Interviewer
admin_api_key: "change-me"
model_training:
  enabled: true

匯入器按字母順序排列說話人標籤,Guest 排在 Interviewer 之前。模型的回寫預設進入條目欄位 predictions,也就是匯入時 pre_annotation 塊所讀取的同一個欄位。已啟用的 pre_annotation 塊指明的欄位與 writeback.field 不同時,Potato 拒絕啟動,因為那樣不會顯示任何訓練預標籤。在第一次執行得到值得展示給標註者的留出得分之前,請不要在配置中寫 writeback。

修正說話輪次

在項目資料夾中啟動伺服器:

bash
cd interviews
potato start config.yaml -p 8000

每段錄音開啟時,分離器的輪次已經畫在波形上。標註者可以移動輪次的邊緣,更改輪次的說話人,刪除噪聲造成的輪次,並畫出分離器漏掉的輪次。只有標註者儲存條目之後,預標註才會被儲存。沒有人開啟過的條目沒有答案,也不會用於訓練。說話人分離標註介紹波形控制元件和鍵盤快捷鍵。

diarization 訓練器要求 train 劃分裡至少有 4 段已標註的錄音,而預設劃分把約 70% 的已標註錄音放進 train。第一次執行之前請至少修正 8 段錄音,要得到可信的留出得分則需要更多。

訓練說話人分離模型

開啟 http://localhost:8000/admin,輸入管理員金鑰,然後進入 /admin/training。把 diarization 選為訓練器,把 speakers 選為方案。對於同一個方案,訓練頁面也提供 hf-audio-tagger。hf-audio-tagger 適合標籤表示聲音種類而不是說話人的情形。對於兩人訪談,把 Parameters 欄位設為:

json
{"max_speakers": 2}

點選 Train now。同一次執行也可以用管理員金鑰通過指令碼啟動:

bash
curl -X POST -H "X-API-Key: change-me" -H "Content-Type: application/json" \
  http://localhost:8000/admin/training/api/runs \
  -d '{"trainer": "diarization", "schemas": ["speakers"], "params": {"max_speakers": 2}}'

diarization 沿用 pyannote 分割模型的做法(Bredin and Laurent, 2021),但不依賴 pyannote 及其受限的權重,並用幀分類器微調 WavLM(microsoft/wavlm-base-plus),最多支援 max_speakers 位說話人。模型每次看到 chunk_s 秒的音訊,預設為 10 秒。每個音訊塊的損失,是在模型的說話人輸出與該塊已標註說話人之間取最佳匹配之下計算的。匹配之所以重要,是因為同一個說話人名字在不同錄音裡指的是不同的人,針對名字的分類器就沒有一致的目標。下面的參數決定預測輪次的形態:

參數預設值作用
max_speakers3單個音訊塊內同時活躍的最多說話人數,最多 6
chunk_s10模型一次看到的秒數
threshold0.5說話人被算作正在說話的幀機率
min_gap_s、min_duration_s0.2、0.2輪次內部更短的間隙會被合上,更短的輪次會被丟棄
model_namemicrosoft/wavlm-base-plusWavLM 或 wav2vec 2.0 檢查點,或本地路徑

遠端訓練會通過 ssh 把執行傳送到 GPU 伺服器,或傳送到 SLURM 叢集。

檢視說話人分離得分

執行頁面和 GET /admin/training/api/status 會報告執行在留出錄音上的得分。對於 diarization,主得分是 diarization_accuracy,定義為 1 減去分離錯誤率(DER),下限為 0。DER 把漏掉的語音、誤報和說話人混淆加起來,再除以已標註的語音量。Potato 在 10 ms 的網格上、不設容差區間,並在預測說話人與已標註說話人之間取最佳一對一對映的條件下測量 DER。執行還會分別報告這三類錯誤。讀這三個數字,就能看出模型是漏掉了語音、憑空生成了語音,還是把說話人弄混了。DER 不管一個輪次叫 Interviewer 還是 SPEAKER_01,只計算說話人是否在正確的時間發生變化。

指標名稱帶有劃分,例如 val_der 或 test_diarization_accuracy。有已標註輪次卻沒有預測的錄音算作錯誤,因此模型無法靠跳過難錄音來抬高得分。

釋出預測的輪次

等留出得分足以支援把模型的輪次展示給標註者之後,把該方案加入 writeback 並重啟伺服器:

yaml
model_training:
  enabled: true
  writeback:
    schemas: [speakers]
    include_unlabeled: true

include_unlabeled: true 還會在尚未有人修正的錄音上做預測。沒有該設定時,執行只在留出的 val 和 test 錄音上預測。重啟之後再訓練一次。GET /admin/training/api/status 中的回寫報告會給出數量。在測試項目上,針對 3 段 val 錄音和 4 段未修正的錄音,報告寫的是“Published 7 prediction(s) as prelabels.”,train 劃分裡的錄音保留了匯入的 RTTM 輪次。

模型在每段錄音內部按首次發言的順序給說話人命名,先使用方案的標籤,然後是 SPEAKER_00、SPEAKER_01,依此類推。因此在每段錄音中最先聽到的說話人,在這個項目裡就是 Guest,無論這個人是不是客人。模型沒有可據以識別人的聲紋嵌入。一個在兩個音訊塊的重疊部分保持沉默、之後又開口的說話人,會得到一個新名字。請告訴標註者檢查每個預測輪次的說話人名字,而不只是檢查輪次的邊緣。迴圈中的模型介紹按置信度從低到高稽核預標籤,以及隨著修正到來而重新訓練。

把修正後的輪次匯出為 RTTM

segments 匯出會把修正後的輪次寫回 RTTM,每位標註者一個檔案:

bash
python -m potato.export --config config.yaml --format segments --output ./export/

匯出會寫出 export/segments.jsonl(每個輪次一行)和 export/rttm/<annotator>.rttm。每個 RTTM 行中的檔案 id 是去掉副檔名的錄音名。之後 pyannote.metrics、dscore 或 md-eval 就能原樣把分離器的原始輸出與修正後的檔案作對照打分。在測試項目上,export/rttm/ana.rttm 的前幾行如下:

text
SPEAKER meet000 1 0.200 1.055 <NA> <NA> Guest <NA> <NA>
SPEAKER meet000 1 1.539 0.755 <NA> <NA> Interviewer <NA> <NA>

說話人層上的說話人分離

標註者要在同一條時間線上新增其他層(例如轉寫層)時,請用 --rttm-scheme tiered 匯入:

bash
potato import -f rttm -i diarization/ -o interviews --rttm-scheme tiered

匯入會寫出名為 tiers 的 tiered_annotation 方案,帶一個 speaker 層。像上面那樣新增 admin_api_key 和 model_training,並在 writeback 下寫 schemas: [tiers],配置就能通過 validate_cli --strict。diarization 在說話人層上訓練,並把預測的輪次寫回同一個層。訓練器選擇名為 speaker 或 speakers 的層。沒有的話,訓練器選擇名字中含“speaker”的那個層,名為 non-speaker 的層不算。最後的退路是唯一帶標籤的那個層。有兩個層符合條件,或者有幾個層帶標籤而沒有一個以說話人命名時,執行會排除這些錄音,並給出點名這些層的警告。

在修正後的轉寫上微調 Whisper

whisper-asr 在標註者修正過的轉寫輪次上微調 Whisper,然後為沒有人檢查過的輪次建議修正。本節從一個沒有轉寫的錄音資料夾開始。

轉寫錄音

把錄音放進項目的 media/ 資料夾,並在伺服器所在的機器上轉寫這些錄音:

bash
pip install "potato-annotation[transcribe]"
potato transcripts media --transcribe --asr-model small.en --asr-word-timestamps \
  --media-url-prefix /media -o data/interviews.json

potato transcripts --transcribe 在 WhisperX 已安裝且能在該機器上執行時執行 WhisperX,否則執行 faster-whisper。[transcribe] extra 安裝 faster-whisper,WhisperX 是單獨安裝的(pip install whisperx),並自帶 PyTorch。WhisperX 缺失、無法匯入、無法在該裝置上執行,或無法載入模型時,Potato 會回退到 faster-whisper,摘要會給出每個檔案所用的引擎。--asr-engine whisperx 或 --asr-engine faster-whisper 只執行一個引擎,不回退。--media-url-prefix /media 把每段錄音的路徑寫成 /media/<file>,也就是標註頁面播放該錄音的地址。

--asr-word-timestamps 通過強制對齊為每個詞計時,並讓 WhisperX 在句末切分片段。在測試錄音上,不帶該標誌時 WhisperX 為每段 10 秒的錄音返回一個輪次,帶該標誌時每段錄音三個輪次。更短的輪次為 whisper-asr 提供更多樣本,而 Whisper 的輸入視窗是 30 秒。轉寫格式和如何標註 Whisper 轉寫介紹轉寫選項、說話人標籤和現有的 Whisper 輸出。

轉寫配置

speech_transcript 方案顯示轉寫的每個輪次,附帶時間跨度和一個修正框。下面這個完整配置能通過 validate_cli --strict:

yaml
annotation_task_name: "Interview transcript correction"
task_dir: .
output_annotation_dir: annotation_output/
data_files:
  - data/interviews.json
item_properties:
  id_key: id
  text_key: conversation
admin_api_key: "change-me"
annotation_schemes:
  - annotation_type: speech_transcript
    name: transcript
    description: "Play each turn and type the right text wherever the transcript is wrong."
    segments_key: conversation
    error_types: [asr_error]
model_training:
  enabled: true
  trainer_params:
    whisper-asr:
      model_name: openai/whisper-small
      language: en

segments_key: conversation 指明 potato transcripts 寫入轉寫所用的欄位。error_types: [asr_error] 只保留一個錯誤標記,因為這項研究只涵蓋轉寫錯誤。language: en 固定訓練和預測所用的語言。不設定時,多語言 Whisper 會根據最多 16 個訓練輪次檢測一次語言,抽樣的輪次中一致的不到四分之三時,執行日誌會給出警告。

作為訓練樣本的修正輪次

每個修正過的輪次是一個樣本,由按該輪次的起點和終點從錄音中切出的音訊,以及修正後的文本組成。沒有人修正的輪次不是樣本,因為方案只儲存標註者動過的輪次,而沒動過的輪次可能是對的,也可能沒人讀過。被標記但沒有修正的輪次同樣不是樣本。長於 30 秒的輪次會被排除,並給出警告。train 劃分裡修正過的輪次少於 10 個時,訓練器拒絕執行。

請修正你開啟的錄音上每個錯誤的輪次,因為留出得分是在修正過的輪次上計算的。在 12 段測試錄音上,使用 tiny.en 的 WhisperX 在 36 個輪次中錯了 11 個,錯誤包括把 Ypsilanti 寫成“Epsilanti”,把 Kerrytown 寫成“Cary Town”,以及輪次開頭丟掉一個“I”。

訓練並與轉寫對比

在訓練頁面上選擇 whisper-asr 和 transcript 方案,然後點選 Train now。主得分是 word_accuracy,即 1 減去修正輪次上的詞錯誤率(WER)。執行還會報告 wer_asr,即原始轉寫在同樣輪次上的 WER,模型沒有改動的輪次按轉寫的文本打分。釋出任何內容之前,請先比較這兩個數字。只有當模型的 WER 低於 wer_asr 時,微調後的模型才值得展示給標註者。

本頁所依據的測試執行說明了這種比較為什麼重要。train 裡有 8 個修正輪次,min_instances 降到 4,openai/whisper-tiny 訓練 3 個 epoch,執行在 test 上的 WER 為 0.31,而原始轉寫是 0.19。達到這一水平的模型會把正確的文本替換成錯誤的文本。請先收集更多修正,或者從更大的檢查點開始,再訓練一次,然後才新增 writeback。

釋出建議的修正

等模型勝過轉寫之後,把方案加入 writeback,重啟並再訓練一次:

yaml
model_training:
  enabled: true
  trainer_params:
    whisper-asr:
      model_name: openai/whisper-small
      language: en
  writeback:
    schemas: [transcript]
    include_unlabeled: true

預測會轉寫每段留出錄音和未標註錄音的每個輪次。新文本與轉寫不同的輪次會成為建議的修正,標記為 asr_error,模型的平均 token 機率作為該建議的置信度。這些建議會填入修正框,標註者對每條建議選擇保留、編輯或清除。

用微調後的模型轉寫新錄音

預設情況下,執行還會在執行的產物中寫出 ct2/,即模型的 int8 CTranslate2 副本。該副本需要 ctranslate2 包,[transcribe] extra 會隨 faster-whisper 一併安裝它。把該副本的路徑傳給 potato transcripts,就可以用微調後的模型轉寫下一批錄音:

bash
potato transcripts media/batch2 --transcribe \
  --asr-model annotation_output/training/runs/<run_id>/artifacts/ct2 \
  --media-url-prefix /media/batch2 -o data/batch2.json

WhisperX 和 faster-whisper 都能載入該副本。執行頁面會顯示每次執行的 id,配置介紹執行資料夾。

在聲譜圖上檢測叫聲

spectrogram_annotation 方案讓標註者圍繞叫聲畫時頻框。torchvision-detect 和 ultralytics-detect 把每段錄音渲染成聲譜圖影像,渲染方式與元件繪製聲譜圖的方式相同,然後在這些框上訓練。渲染把頻率放線上性座標軸上,範圍是方案的 min_freq 到 max_freq,max_freq 未設定時到取樣率的一半,高度 256 畫素,每秒 100 畫素。每個框變成一個影像框。時間和頻率線性對映到畫素,因此框在影像上的 IoU 等於它在秒乘赫茲空間中的 IoU。沒有頻率範圍的框(例如 Audacity 標籤或 BirdNET 行給出的)覆蓋整個頻帶。41 秒或更長的錄音渲染出至少 4,096 畫素寬,會被切成視窗再拼接回來。

框通常來自匯入。potato import 把 Raven 選擇表、Audacity 標籤軌道和 BirdNET-Analyzer 的輸出讀入 spectrogram_annotation 項目,詳見 Potato 中的生物聲學和在聲譜圖上核對 BirdNET 檢測結果。訓練器從標註者畫出或修正過的框中學習,檢測器讀取的是聲譜影像素,而不是 BirdNET 或 Perch 的嵌入。

下面的配置能通過 validate_cli --strict,並把檢測器的 score_threshold 設為 0.5:

yaml
annotation_task_name: "Dawn chorus calls"
task_dir: .
output_annotation_dir: annotation_output/
data_files:
  - data/recordings.jsonl
item_properties:
  id_key: id
  text_key: id
admin_api_key: "change-me"
annotation_schemes:
  - annotation_type: spectrogram_annotation
    name: calls
    description: "Draw a box around each call and pick its type."
    source_field: audio_url
    max_freq: 8000
    labels:
      - name: whistle
      - name: chirp
model_training:
  enabled: true
  trainer_params:
    torchvision-detect:
      score_threshold: 0.5
  writeback:
    schemas: [calls]
    include_unlabeled: true

16 kHz 錄音的頻譜止於 8 kHz,max_freq: 8000 顯示整個頻帶。預設的 score_threshold 為 0.25,會保留檢測器更多的猜測。在 24 段錄音的測試項目上,預設閾值下的 torchvision-detect 在 test 錄音上為 10 個已標註的叫聲預測了 34 個框,每個多出來的框都是標註者還要刪除的又一個框。

每個資料行指明各自的錄音,例如 {"id": "site_00", "audio_url": "/media/site_00.wav"}。檢測器只在至少有一個框的錄音上訓練,因為沒有框的錄音看起來與沒人檢查過的錄音相同。檢測器預設要求 train 劃分裡有 20 段已標註的錄音(min_instances)。

torchvision-detect 從 torchvision 的 COCO 權重微調 Faster R-CNN,ultralytics-detect 訓練 YOLO 檢測器。YOLO 檢測器訓練和執行都更快。Ultralytics 採用 AGPL-3.0 許可,用 Ultralytics 訓練並分發的模型適用 AGPL 的條款。執行 ultralytics-detect 之前,訓練頁面會請你確認許可證,API 執行需要 "accept_licence": true。兩個檢測器都按渲染聲譜圖上 IoU 0.5 的 mAP 打分,並且都以 start_s、end_s、low_hz 和 high_hz 寫回預測的框,標明為模型輸出,用來預填元件。視覺模型介紹檢測器的參數和分塊。

用 hf-audio-tagger 標註聲音事件

hf-audio-tagger 學習 audio_annotation 方案中帶標籤的時間片段,例如語音、音樂、叫聲或咳嗽。該訓練器微調語音編碼器(預設為 facebook/wav2vec2-base),讓它說出約每 20 ms 的每一幀裡哪些標籤處於活躍狀態。每個標籤單獨打分。因此帶不同標籤的重疊片段會按標註的樣子被學習。預測的片段作為可編輯的區域回到波形上。下面的配置能通過 validate_cli --strict:

yaml
annotation_task_name: "Dawn chorus events"
task_dir: .
output_annotation_dir: annotation_output/
data_files:
  - data/recordings.jsonl
item_properties:
  id_key: id
  text_key: id
admin_api_key: "change-me"
annotation_schemes:
  - annotation_type: audio_annotation
    name: events
    description: "Mark every call on the waveform and pick its type."
    source_field: audio_url
    mode: label
    labels:
      - name: whistle
      - name: chirp
model_training:
  enabled: true
  writeback:
    schemas: [events]
    include_unlabeled: true

標註器把錄音中任何沒有被標註者標記的片段視為“這裡沒有標籤”。這個假設適合標註者標記每個事件的研究,上面方案的描述要求的就是“每個叫聲”。標註者只標記部分事件時,模型會學會漏掉其餘的事件。主得分是片段 F1,預測片段與帶同一標籤的已標註片段在 IoU 至少為 0.5 時算作匹配,執行還會報告匹配片段的平均 IoU。該訓練器預設要求 train 劃分裡有 10 段已標註的錄音。

參數預設值作用
window_s10每個訓練和預測視窗的音訊秒數
threshold0.5標籤處於活躍狀態的幀機率
min_gap_s、min_duration_s0.1、0.1片段內部更短的間隙會被合上,更短的片段會被丟棄
freeze_feature_encodertrue保持編碼器的卷積特徵層固定

對於 audio_annotation 方案,訓練頁面同時提供 hf-audio-tagger 和 diarization。標籤表示一種聲音,並且在每段錄音裡含義相同時,請選擇 hf-audio-tagger。標籤是說話人,且說話人的名字只在每段錄音內部有效時,請選擇 diarization。

本頁背後的執行

本頁的命令和配置都是在筆記型電腦上,用下面所說的較小模型,針對 Potato 2.14.0 執行過的。說話人分離路徑從頭到尾都執行過:從匯入 16 段合成的兩人錄音的 RTTM(其中 20% 的輪次被賦予錯誤的說話人),到修正 12 段錄音,再到一次 diarization 執行和回寫,直至 segments 匯出。這次執行用的是單層的測試編碼器,而不是 WavLM。因此這次執行的得分對真實語音沒有任何說明意義。Whisper 一節用了 12 段合成語音的錄音,由使用 tiny.en 的 WhisperX 轉寫,並從 openai/whisper-tiny 微調。聲譜圖和標註器兩節用了 24 段 3 kHz 和 6 kHz 音調的合成錄音。每個配置塊都能通過 python -m potato.validate_cli --strict。

延伸閱讀

參考文獻

  • Bain, M., Huh, J., Han, T., and Zisserman, A. (2023). WhisperX: Time-Accurate Speech Transcription of Long-Form Audio. Interspeech 2023, 4489–4493. doi:10.21437/Interspeech.2023-78
  • Bredin, H., and Laurent, A. (2021). End-To-End Speaker Segmentation for Overlap-Aware Resegmentation. Interspeech 2021, 3111–3115. doi:10.21437/Interspeech.2021-560
  • Chen, S., Wang, C., Chen, Z., Wu, Y., Liu, S., Chen, Z., Li, J., Kanda, N., Yoshioka, T., Xiao, X., Wu, J., Zhou, L., Ren, S., Qian, Y., Qian, Y., Wu, J., Zeng, M., Yu, X., and Wei, F. (2022). WavLM: Large-Scale Self-Supervised Pre-Training for Full Stack Speech Processing. IEEE Journal of Selected Topics in Signal Processing. doi:10.1109/JSTSP.2022.3188113
  • Radford, A., Kim, J. W., Xu, T., Brockman, G., McLeavey, C., and Sutskever, I. (2023). Robust Speech Recognition via Large-Scale Weak Supervision. Proceedings of the 40th International Conference on Machine Learning, PMLR 202, 28492–28518. proceedings.mlr.press