UX диаризации: флаг, число участников, зависимость и поведение на OpenVINO #16

Closed
opened 2026-08-12 15:05:37 +03:00 by ddmitry · 1 comment
Owner

Часть карты: Карта: диаризация спикеров в транскрипте (#8)

Question

Как пользователь включает диаризацию и что происходит там, где она невозможна?

  • имя и форма флага; диаризация выключена по умолчанию, потому что удваивает
    время — подтвердить это как решение;
  • как задаётся число участников: в разведке автоматическая оценка на пороге из
    примеров дала 29 говорящих вместо трёх, так что явная ручка выглядит
    необходимой. Нужна ли она в .transcriber.toml наравне с CLI;
  • ставится ли sherpa-onnx как extra (uv sync --extra diarization) или входит
    в основные зависимости: 33 МБ моделей качаются отдельно, сам пакет около 18 МБ;
  • поведение на --device openvino-*: OpenVINO GenAI 2026.x upstream уже
    отдаёт word-level timestamps, но проектный backend их не экспортирует. Нужно
    ли сначала протянуть их через общий контракт; а для backend/модели без таких
    таймкодов — запрещать диаризацию с внятным сообщением, давать огрублённую с
    предупреждением или переключать устройство. Решение опирается на закрытый
    research о жизненном цикле движков;
  • что происходит на записи, где найден один говорящий, и что — если диаризация
    упала;
  • как это ложится на батч-режим, где модель грузится один раз на все файлы.

Ответ фиксирует интерфейс и поведение во всех перечисленных случаях.

Часть карты: [Карта: диаризация спикеров в транскрипте](https://git.dementev.space/ddmitry/local-transcriber/issues/8) (#8) ## Question Как пользователь включает диаризацию и что происходит там, где она невозможна? - имя и форма флага; диаризация выключена по умолчанию, потому что удваивает время — подтвердить это как решение; - как задаётся число участников: в разведке автоматическая оценка на пороге из примеров дала 29 говорящих вместо трёх, так что явная ручка выглядит необходимой. Нужна ли она в `.transcriber.toml` наравне с CLI; - ставится ли `sherpa-onnx` как extra (`uv sync --extra diarization`) или входит в основные зависимости: 33 МБ моделей качаются отдельно, сам пакет около 18 МБ; - **поведение на `--device openvino-*`**: OpenVINO GenAI 2026.x upstream уже отдаёт word-level timestamps, но проектный backend их не экспортирует. Нужно ли сначала протянуть их через общий контракт; а для backend/модели без таких таймкодов — запрещать диаризацию с внятным сообщением, давать огрублённую с предупреждением или переключать устройство. Решение опирается на закрытый research о жизненном цикле движков; - что происходит на записи, где найден один говорящий, и что — если диаризация упала; - как это ложится на батч-режим, где модель грузится один раз на все файлы. Ответ фиксирует интерфейс и поведение во всех перечисленных случаях.
ddmitry added the wayfinder:grilling label 2026-08-12 15:05:37 +03:00
ddmitry added a new dependency 2026-08-12 15:07:20 +03:00
ddmitry self-assigned this 2026-08-14 15:19:56 +03:00
Author
Owner

Решение

Включение и параметры первой версии

  • Диаризация включается явно CLI-флагом --diarize; в .transcriber.toml настройка пока не добавляется.
  • --speakers N, N >= 1, служит редкой ручной страховкой от ошибки автоматического числа кластеров и сам подразумевает включение диаризации. Без параметра используется автоматический режим: WeSpeaker, порог 0,89, num_clusters=-1.
  • По умолчанию первая версия остаётся без диаризации только на период реализации и стабилизации. Будущий hardware-aware default вынесен в #23.

Установка и модели

  • sherpa-onnx входит в обычные runtime-зависимости: пользователь не выполняет отдельную установку extra.
  • Модели сегментации и эмбеддингов скачиваются и кешируются лениво при первом запросе диаризации.
  • Ошибка загрузки моделей, инициализации batch-owned диаризатора или отсутствие backend capability обнаруживается до ASR и останавливает весь запуск с понятным сообщением.

Временные привязки и устройства

  • Диаризация требует общего контракта слов с временной привязкой. Его нужно протянуть через FasterWhisper, ONNX-ASR и OpenVINO; необходимые timestamp API есть у всех трёх путей.
  • Грубая привязка говорящего ко всему ASR-сегменту запрещена. Устройство автоматически не переключается.
  • Пока выбранный backend не экспортирует временные привязки слов, запрос завершается до дорогой обработки с ясной ошибкой.
  • Оркестрация остаётся последовательной по #21: ASR → диаризация → сведение → Markdown; один диаризатор переиспользуется во всём батче по #19.

Результаты и деградация

  • Если ASR не нашёл речь, диаризация не запускается; сохраняется текущий пустой Markdown с предупреждением, exit code 0.
  • Два и более найденных говорящих дают speaker-транскрипт в формате #15.
  • Если найден только один говорящий, подписи Speaker 1 не выводятся: сохраняется обычный Markdown, в шапке и консоли указывается причина, exit code ненулевой.
  • Отдельные слова без пересечения с разметкой группируются под Speaker ?; их количество указывается в предупреждении, но exit code остаётся 0.
  • Полностью пустая разметка при непустом ASR либо ошибка обработки конкретного файла дают обычный Markdown без спикеров, явное предупреждение в шапке и консоли и ненулевой exit code.
  • В батче деградированный файл сохраняется, отмечается как неуспешная диаризация, обработка остальных файлов продолжается. Повторный прогон выполняется явно через --force.
  • --verbose остаётся консольным логом без отдельных диагностических артефактов по #20.

После стабилизации

#23 определит измеримый критерий «достаточно мощной техники», автоматический режим и явный --no-diarize. Параллельность остаётся отдельной оптимизацией #22 и не входит в это решение.

## Решение ### Включение и параметры первой версии - Диаризация включается явно CLI-флагом `--diarize`; в `.transcriber.toml` настройка пока не добавляется. - `--speakers N`, `N >= 1`, служит редкой ручной страховкой от ошибки автоматического числа кластеров и сам подразумевает включение диаризации. Без параметра используется автоматический режим: WeSpeaker, порог 0,89, `num_clusters=-1`. - По умолчанию первая версия остаётся без диаризации только на период реализации и стабилизации. Будущий hardware-aware default вынесен в #23. ### Установка и модели - `sherpa-onnx` входит в обычные runtime-зависимости: пользователь не выполняет отдельную установку extra. - Модели сегментации и эмбеддингов скачиваются и кешируются лениво при первом запросе диаризации. - Ошибка загрузки моделей, инициализации batch-owned диаризатора или отсутствие backend capability обнаруживается до ASR и останавливает весь запуск с понятным сообщением. ### Временные привязки и устройства - Диаризация требует общего контракта слов с временной привязкой. Его нужно протянуть через FasterWhisper, ONNX-ASR и OpenVINO; необходимые timestamp API есть у всех трёх путей. - Грубая привязка говорящего ко всему ASR-сегменту запрещена. Устройство автоматически не переключается. - Пока выбранный backend не экспортирует временные привязки слов, запрос завершается до дорогой обработки с ясной ошибкой. - Оркестрация остаётся последовательной по #21: ASR → диаризация → сведение → Markdown; один диаризатор переиспользуется во всём батче по #19. ### Результаты и деградация - Если ASR не нашёл речь, диаризация не запускается; сохраняется текущий пустой Markdown с предупреждением, exit code 0. - Два и более найденных говорящих дают speaker-транскрипт в формате #15. - Если найден только один говорящий, подписи `Speaker 1` не выводятся: сохраняется обычный Markdown, в шапке и консоли указывается причина, exit code ненулевой. - Отдельные слова без пересечения с разметкой группируются под `Speaker ?`; их количество указывается в предупреждении, но exit code остаётся 0. - Полностью пустая разметка при непустом ASR либо ошибка обработки конкретного файла дают обычный Markdown без спикеров, явное предупреждение в шапке и консоли и ненулевой exit code. - В батче деградированный файл сохраняется, отмечается как неуспешная диаризация, обработка остальных файлов продолжается. Повторный прогон выполняется явно через `--force`. - `--verbose` остаётся консольным логом без отдельных диагностических артефактов по #20. ### После стабилизации #23 определит измеримый критерий «достаточно мощной техники», автоматический режим и явный `--no-diarize`. Параллельность остаётся отдельной оптимизацией #22 и не входит в это решение.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: ddmitry/local-transcriber#16