Перейти к содержимому

Обучение речевых и аудиомоделей на вашей разметке

Обучите диаризацию дикторов на исправленных репликах RTTM, дообучите Whisper на исправленных транскриптах и обучите детекторы звуков на рамках, нарисованных на спектрограммах.

Новое в v2.14.0

Этот учебник обучает речевые и аудиомодели на ответах, которые разметчики дают в Potato, и возвращает вывод каждой модели разметчикам как предварительные метки. Страница написана для владельца исследования, который уже исправляет в Potato транскрипты, реплики дикторов или звуки животных и хочет получить модель, которая учится на этих исправлениях. Основной путь импортирует файл диаризации дикторов, поручает разметчикам исправить реплики дикторов, обучает модель диаризации на исправленных репликах и экспортирует исправления в RTTM. Затем три более коротких раздела дообучают Whisper на исправленных репликах транскрипта, обучают детектор рамок на спектрограммах и обучают теггер звуковых событий на волновой форме. О цикле обучения в целом сначала прочитайте обзор обучения моделей, а если вы ещё ни разу не начинали запуск, то и Обучите первую модель.

Четыре аудиотренера

Каждый тренер учится на схеме одного вида, а страница Training предлагает схему только подходящим для неё тренерам:

ТренерУчится наМодельОценка на отложенных объектахУстановка
diarizationярус дикторов схемы tiered_annotation или схема audio_annotation, метки которой это дикторыречевой энкодер, по умолчанию WavLMdiarization accuracy (1 − DER)potato-annotation[train-audio]
whisper-asrреплики, которые разметчики исправили в схеме speech_transcriptWhisper, по умолчанию whisper-smallword accuracy (1 − WER)potato-annotation[train-audio]
torchvision-detect, ultralytics-detectрамки схемы spectrogram_annotationдетектор Faster R-CNN или YOLO на отрисованных спектрограммахmAP при IoU 0.5potato-annotation[train-vision] или pip install ultralytics (AGPL-3.0)
hf-audio-taggerразмеченные сегменты схемы audio_annotationречевой энкодер, по умолчанию wav2vec 2.0segment F1 при IoU 0.5potato-annotation[train-audio]

Каждый аудиотренер читает записи из файлов на диске сервера, которые открывает soundfile, например WAV, FLAC или OGG, а также MP3 с недавней libsndfile. Путь вида /media/meet000.wav называет файл в папке media/ каталога задачи, откуда страница разметки воспроизводит записи. Объект, запись которого задана URL http(s), исключается из обучения с предупреждением. Скачайте удалённые записи в media/ до обучения. Справочник тренеров перечисляет каждый параметр.

Установите тренеров в окружение, в котором работает Potato:

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

Группа [train-audio] ставит PyTorch, transformers и soundfile. Детекторам спектрограмм вместо неё нужна [train-vision], либо pip install "potato-annotation[train]" для всех текстовых, графических, аудио- и LLM-тренеров сразу. Тренер, у которого не хватает пакетов, остаётся на странице Training как "not installed" вместе с командой, которая ставит эти пакеты.

Импорт диаризации как файла RTTM

Диаризация дикторов делит запись на реплики по тому, кто говорит. pyannote и NeMo записывают диаризации в RTTM, текстовом формате с одной строкой SPEAKER на реплику, а dscore и md-eval оценивают файлы RTTM. Строка называет идентификатор файла записи, канал, начало и длительность реплики в секундах и диктора:

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 и записи в одну папку, назвав каждую запись по идентификатору файла (meet000.wav для meet000), и импортируйте папку:

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 создаёт схему audio_annotation с именем speakers, метки которой это дикторы. tiered создаёт схему tiered_annotation с именем tiers и одним ярусом speaker. Используйте tiered для исследования, в котором потом идёт расшифровка реплика за репликой.
  • --speaker-map переименовывает дикторов, а диктор, которого карта не называет, сохраняет имя из RTTM. Используйте карту, только когда имя означает одного и того же человека во всех записях. Диаризатор нумерует дикторов внутри каждого файла, и SPEAKER_00 в одном интервью и SPEAKER_00 в следующем могут быть разными людьми.
  • --media-dir DIR называет папку с записями, когда записи лежат не рядом с файлами RTTM.

Импортёр читает только строки SPEAKER и считает остальные типы строк пропущенными. Реплики нулевой длины, реплики с отрицательным началом, реплики без имени диктора (<NA>) и реплика, указанная дважды, тоже пропускаются. RTTM разделяет поля пробелами, и имя диктора с пробелом импортёр читает только до пробела с предупреждением. Импорт проекта описывает импорт полностью.

Конфигурация диаризации

Созданная конфигурация уже показывает импортированные реплики как предварительную разметку. Добавьте ключ администратора и блок model_training в конец config.yaml. Полный файл ниже проходит 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 импорта. Potato отказывается запускаться, если включённый блок pre_annotation называет поле, отличное от writeback.field, потому что тогда ни одна предварительная метка обучения не появилась бы. Не добавляйте writeback в конфигурацию, пока у первого запуска нет оценки на отложенных объектах, которую стоит показывать разметчикам.

Исправление реплик дикторов

Запустите сервер из папки проекта:

bash
cd interviews
potato start config.yaml -p 8000

Каждая запись открывается с репликами диаризатора, нарисованными на волновой форме. Разметчики сдвигают границы реплики, меняют диктора реплики, удаляют реплику с шумом и рисуют реплики, которые диаризатор пропустил. Предварительная разметка сохраняется, только когда разметчик сохраняет объект. У объекта, который никто не открывал, нет ответа, и он не участвует в обучении. Разметка диаризации дикторов описывает элементы управления волновой формой и сочетания клавиш.

Тренеру diarization нужно не менее 4 размеченных записей в выборке train, а разбиение по умолчанию отдаёт в train около 70% размеченных записей. Исправьте не менее 8 записей до первого запуска, а для оценки, которой можно доверять, больше.

Обучение модели диаризации

Откройте http://localhost:8000/admin, введите ключ администратора и перейдите на /admin/training. Выберите тренера diarization и схему speakers. Страница Training предлагает для той же схемы и 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 и закрытых весов 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-plusКонтрольная точка WavLM или wav2vec 2.0 либо локальный путь

Удалённое обучение отправляет запуск на GPU-сервер по ssh или на кластер SLURM.

Чтение оценки диаризации

Страница запуска и GET /admin/training/api/status сообщают оценку запуска на отложенных записях. Для diarization главная оценка это diarization_accuracy, определяемая как 1 минус доля ошибок диаризации (DER) с нижней границей 0. DER складывает пропущенную речь, ложную тревогу и путаницу дикторов и делит сумму на размеченную речь. Potato измеряет DER на сетке 10 мс без допуска, при наилучшем взаимно однозначном соответствии предсказанных и размеченных дикторов. Запуск также отдельно сообщает три вида ошибок. Прочитайте три числа, чтобы понять, пропускает ли модель речь, выдумывает ли речь или путает дикторов. 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 даёт число. В тестовом проекте отчёт сообщил "Published 7 prediction(s) as prelabels." для 3 записей val и 4 неисправленных записей, а записи в выборке 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 это имя записи без расширения. Затем 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

Импорт записывает схему tiered_annotation с именем tiers и одним ярусом speaker. Добавьте admin_api_key и model_training, как выше, с schemas: [tiers] в writeback, и конфигурация пройдёт 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] ставит faster-whisper, а WhisperX устанавливается отдельно (pip install whisperx) и приносит собственный PyTorch. Potato переходит на faster-whisper, когда WhisperX отсутствует, не импортируется, не может работать на устройстве или не может загрузить модель, а итоговая сводка называет движок для каждого файла. --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 тестовых записях WhisperX с tiny.en ошибся в 11 из 36 реплик, например "Epsilanti" вместо Ypsilanti, "Cary Town" вместо Kerrytown и пропущенное "I" в начале реплики.

Обучение и сравнение с транскриптом

Выберите на странице Training whisper-asr и схему transcript и нажмите Train now. Главная оценка это word_accuracy, то есть 1 минус доля ошибочных слов (WER) по исправленным репликам. Запуск также сообщает wer_asr, WER исходного транскрипта на тех же репликах, а реплика, которую модель оставила без изменений, оценивается как текст транскрипта. Сравните два числа до публикации чего-либо. Дообученную модель стоит показывать разметчикам, только когда WER модели ниже wer_asr.

Тестовый запуск, на котором основана эта страница, показывает, зачем нужно сравнение. При 8 исправленных репликах в train, min_instances, сниженном до 4, и openai/whisper-tiny, обученном 3 эпохи, запуск показал WER на test 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, а средняя вероятность токенов модели служит уверенностью в предложении. Предложения заполняют поля исправлений, и разметчик оставляет, правит или очищает каждое предложение.

Расшифровка новых записей дообученной моделью

По умолчанию запуск также записывает среди своих артефактов ct2/, копию модели в int8 для CTranslate2. Копии нужен пакет ctranslate2, который группа [transcribe] ставит вместе с 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 оба загружают эту копию. Страница запуска показывает идентификатор каждого запуска, а Конфигурация описывает папки запусков.

Поиск звуков на спектрограммах

В схеме 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 кГц заканчивается на 8 кГц, и max_freq: 8000 показывает всю полосу. Значение score_threshold по умолчанию 0.25 сохраняет больше догадок детектора. В тестовом проекте из 24 записей torchvision-detect с порогом по умолчанию предсказал 34 рамки для 10 размеченных звуков в записях test, и каждая лишняя рамка это ещё одна рамка, которую разметчику придётся удалить.

Каждая строка данных называет свою запись, как в {"id": "site_00", "audio_url": "/media/site_00.wav"}. Детектор обучается только на записях, где есть хотя бы одна рамка, потому что запись без рамок выглядит так же, как запись, которую никто не проверял. Детекторам по умолчанию нужно 20 размеченных записей в выборке train (min_instances).

torchvision-detect дообучает Faster R-CNN от весов COCO из torchvision, а ultralytics-detect обучает детектор YOLO. Детектор YOLO быстрее обучается и работает. Ultralytics распространяется под AGPL-3.0, и модель, обученная и распространяемая с Ultralytics, подпадает под условия AGPL. Страница Training просит подтвердить лицензию перед запуском ultralytics-detect, а запуск через API требует "accept_licence": true. Оба детектора оцениваются по mAP при IoU 0.5 на отрисованной спектрограмме, и оба записывают предсказанные рамки обратно в start_s, end_s, low_hz и high_hz, помеченные как вывод модели, чтобы заполнить виджет. Модели для изображений описывает параметры детекторов и разбиение на плитки.

Теггирование звуковых событий с hf-audio-tagger

hf-audio-tagger учится на размеченных временных сегментах схемы audio_annotation, таких как речь, музыка, звуки животных или кашель. Тренер дообучает речевой энкодер, по умолчанию facebook/wav2vec2-base, чтобы тот говорил, какие метки активны в каждом кадре длиной около 20 мс. Каждая метка оценивается отдельно. Поэтому перекрывающиеся сегменты с разными метками изучаются так, как размечены. Предсказанные сегменты возвращаются как редактируемые области на волновой форме. Конфигурация ниже проходит 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

Теггер считает любой участок записи, который не отметил ни один разметчик, "no label here". Это допущение подходит исследованию, в котором разметчики отмечают каждое событие, и описание схемы выше просит "every call". Если разметчики отмечают только часть событий, модель учится пропускать остальные. Главная оценка это segment F1, где предсказанный сегмент совпадает с размеченным сегментом с той же меткой при IoU не менее 0.5, а запуск также сообщает средний IoU совпавших сегментов. Тренеру по умолчанию нужно 10 размеченных записей в выборке train.

ПараметрПо умолчаниюДействие
window_s10Секунд звука в одном окне обучения и предсказания
threshold0.5Вероятность кадра, при которой метка активна
min_gap_s, min_duration_s0.1, 0.1Более короткая пауза внутри сегмента закрывается, а более короткий сегмент отбрасывается
freeze_feature_encodertrueОставляет свёрточные слои признаков энкодера неизменными

Страница Training предлагает для схемы audio_annotation и hf-audio-tagger, и diarization. Выбирайте hf-audio-tagger, когда метка называет вид звука и означает одно и то же во всех записях. Выбирайте diarization, когда метки это дикторы, имена которых локальны для каждой записи.

Запуски, на которых основана эта страница

Команды и конфигурации на этой странице были выполнены на Potato 2.14.0 на ноутбуке с названными ниже небольшими моделями. Путь диаризации прошёл целиком, от импорта RTTM из 16 синтетических записей двух дикторов, в которых у 20% реплик был указан неверный диктор, через исправления в 12 записях, запуск diarization и обратную запись до экспорта segments. В запуске вместо WavLM использовался однослойный тестовый энкодер. Поэтому оценка этого запуска ничего не говорит о реальной речи. Раздел о Whisper использовал 12 записей синтезированной речи, расшифрованных WhisperX с tiny.en и дообученных от openai/whisper-tiny. Разделы о спектрограммах и теггере использовали 24 синтетические записи тонов на 3 кГц и 6 кГц. Каждый блок конфигурации проходит 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