Карта: диаризация спикеров в транскрипте #8

Closed
opened 2026-08-12 15:03:00 +03:00 by ddmitry · 2 comments
Owner

Destination

Принятый ADR по диаризации и спека, по которым можно писать код: закрыты движок,
единица привязки спикера к тексту, калибровка кластеризации, формат вывода, UX и
поведение на OpenVINO-пути. Реализация лежит за границей карты и заводится
отдельно.

Notes

Домен: local-transcriber — локальная транскрипция аудио и видео, без
облака и ключей. Язык документации, комментариев и сообщений коммитов — русский,
идентификаторы кода — английские.

Что прочитать перед работой над любым тикетом:

  • CONTEXT.md — каноническая терминология;
  • docs/benchmarks/2026-08-12-diarization-feasibility.md — разведочный замер,
    с которого началась карта;
  • ADR-007 — принятое архитектурное решение;
  • спецификация — согласованная форма первой реализации;
  • docs/adr/006-onnx-asr-backend.md — почему ONNX-путь стал дефолтным и какая
    планка доказательности принята в проекте (три записи, независимая оценка);
  • docs/agents/issue-tracker.md — как устроены операции карты в этом трекере.

Навыки: /grilling и /domain-modeling по умолчанию, /research для
research-тикетов, /prototype для prototype-тикетов,
/brainstorm-with-docs при сведении решений в ADR и спеку.

Стандарты этой карты:

  • одна удачная цифра на одной записи решением не считается; планка — три записи,
    как в ADR-006;
  • Ryzen 7 8845H годится для итераций; приёмка стоимости выполнена на доступном
    слабом Intel baseline — Core i7-6820HQ. Конкретный Core i5 11-го поколения
    остаётся непроверенным, потому что такого устройства нет;
  • новые термины сразу заносятся в CONTEXT.md, а не копятся.

Decisions so far

Модели диаризации в батч-режиме: время жизни и память — один batch-owned объект создаётся после prescan, последовательно переиспользуется для всех файлов и освобождается при завершении команды; условной выгрузки нет.

Нужен ли кеш результата диаризации — постоянного кеша нет: разметка говорящих живёт только в текущем прогоне, итоговый артефакт — Markdown; --force пересчитывает всё, --verbose не создаёт диагностических файлов.

Параллельный запуск ASR и диаризации: политика и бюджет CPU — первая реализация последовательна: ASR → диаризация → сведение → Markdown; --threads целиком применяется к каждому активному CPU-проходу. Параллельность отложена до стабилизации в отдельную задачу с порогом выигрыша 20%.

UX диаризации: флаг, число участников, зависимость и поведение на OpenVINO — первая версия включается через --diarize/--speakers N, sherpa-onnx ставится обязательно, модели скачиваются лениво; все backend должны отдавать слова с временной привязкой. Ошибки конкретного файла сохраняют обычный Markdown с явным предупреждением; hardware-aware default отложен в #23.

Not yet specified

Out of scope

  • Реализация и приёмка новых AMD, Apple и browser-путей — lifecycle и модельные возможности разведаны в «Куда движутся ONNX Runtime и OpenVINO: сравнение жизненного цикла», но интеграция и бенчмарки не нужны для ADR/спеки диаризации на целевом Intel-пути.
  • Консолидация проекта на ONNX Runtime целиком — переход на сборку с
    DirectML или OpenVINO EP вместо OpenVINO GenAI. Отдельная работа: она зависит
    от того, что покажет research о жизненном цикле движков, требует замеров на
    Intel-железе и переоценки всех профилей. В этой карте остаётся только узкое
    решение о поведении диаризации на --device openvino-*.
  • Сопоставление Speaker N с именами участников. Бэклог сознательно держит
    это вне ядра CLI: работа поверх готового транскрипта, максимум рецепт в README.
  • Реализация диаризации в CLI — код, тесты и README ведутся в отдельной задаче.
## Destination Принятый ADR по диаризации и спека, по которым можно писать код: закрыты движок, единица привязки спикера к тексту, калибровка кластеризации, формат вывода, UX и поведение на OpenVINO-пути. Реализация лежит за границей карты и заводится отдельно. ## Notes **Домен:** `local-transcriber` — локальная транскрипция аудио и видео, без облака и ключей. Язык документации, комментариев и сообщений коммитов — русский, идентификаторы кода — английские. **Что прочитать перед работой над любым тикетом:** - `CONTEXT.md` — каноническая терминология; - `docs/benchmarks/2026-08-12-diarization-feasibility.md` — разведочный замер, с которого началась карта; - [ADR-007](https://git.dementev.space/ddmitry/local-transcriber/src/commit/b8347004da998489382d8d2add8a3dc49b7629b9/docs/adr/007-word-level-speaker-diarization.md) — принятое архитектурное решение; - [спецификация](https://git.dementev.space/ddmitry/local-transcriber/src/commit/b8347004da998489382d8d2add8a3dc49b7629b9/docs/specs/2026-08-14-speaker-diarization.md) — согласованная форма первой реализации; - `docs/adr/006-onnx-asr-backend.md` — почему ONNX-путь стал дефолтным и какая планка доказательности принята в проекте (три записи, независимая оценка); - `docs/agents/issue-tracker.md` — как устроены операции карты в этом трекере. **Навыки:** `/grilling` и `/domain-modeling` по умолчанию, `/research` для research-тикетов, `/prototype` для prototype-тикетов, `/brainstorm-with-docs` при сведении решений в ADR и спеку. **Стандарты этой карты:** - одна удачная цифра на одной записи решением не считается; планка — три записи, как в ADR-006; - Ryzen 7 8845H годится для итераций; приёмка стоимости выполнена на доступном слабом Intel baseline — Core i7-6820HQ. Конкретный Core i5 11-го поколения остаётся непроверенным, потому что такого устройства нет; - новые термины сразу заносятся в `CONTEXT.md`, а не копятся. ## Decisions so far <!-- индекс: одна строка на закрытый тикет --> - [Куда движутся ONNX Runtime и OpenVINO: сравнение жизненного цикла](https://git.dementev.space/ddmitry/local-transcriber/issues/9) — ORT CPU остаётся переносимым baseline; Intel-путь устойчивее через нативный OpenVINO, а WinML/MIGraphX/CoreML/WebGPU требуют model-specific offload и golden tests. - [Проверить границы диаризации на слух](https://git.dementev.space/ddmitry/local-transcriber/issues/12) — разметка пригодна для грубой оценки смешения, но не как эталон границ: есть ложный остаточный кластер, редкие пропуски и неполные перекрытия. - [Калибровка диаризации: порог кластеризации и модель эмбеддингов на русской речи](https://git.dementev.space/ddmitry/local-transcriber/issues/10) — дефолт: WeSpeaker ResNet34 LM + порог 0,89; явное число участников — страховка, CAMPPlus zh/en оставлен кандидатом только для режима с известным числом спикеров. - [Чистота ASR-сегментов: подтвердить долю загрязнённых на трёх записях](https://git.dementev.space/ddmitry/local-transcriber/issues/11) — смешение воспроизводится на разговорах на двоих, но реже: 6–7% сегментов и 12–17% времени против 27% и 51% на встрече втроём. - [Производительность диаризации на целевом Intel Core i5](https://git.dementev.space/ddmitry/local-transcriber/issues/13) — на доступном Core i7-6820HQ с урезанным питанием последовательная обработка часа занимает около 23 минут; стоимость приемлема для явной опциональной функции, конкретный i5 не проверен. - [Выбрать единицу привязки спикера к тексту](https://git.dementev.space/ddmitry/local-transcriber/issues/14) — диаризацию делаем как opt-in-функцию; говорящий назначается слову с временной привязкой, а независимые проходы ASR и диаризации сводятся после завершения обоих. - [Формат транскрипта со спикерами](https://git.dementev.space/ddmitry/local-transcriber/issues/15) — линейные реплики `[MM:SS] Speaker N: текст`; таймкод только в начале и до секунд, смена говорящего ломает абзац, малые кластеры сохраняются с предупреждением. • [Модели диаризации в батч-режиме: время жизни и память](https://git.dementev.space/ddmitry/local-transcriber/issues/19) — один batch-owned объект создаётся после prescan, последовательно переиспользуется для всех файлов и освобождается при завершении команды; условной выгрузки нет. • [Нужен ли кеш результата диаризации](https://git.dementev.space/ddmitry/local-transcriber/issues/20) — постоянного кеша нет: разметка говорящих живёт только в текущем прогоне, итоговый артефакт — Markdown; `--force` пересчитывает всё, `--verbose` не создаёт диагностических файлов. • [Параллельный запуск ASR и диаризации: политика и бюджет CPU](https://git.dementev.space/ddmitry/local-transcriber/issues/21) — первая реализация последовательна: ASR → диаризация → сведение → Markdown; `--threads` целиком применяется к каждому активному CPU-проходу. Параллельность отложена до стабилизации в [отдельную задачу](https://git.dementev.space/ddmitry/local-transcriber/issues/22) с порогом выигрыша 20%. • [UX диаризации: флаг, число участников, зависимость и поведение на OpenVINO](https://git.dementev.space/ddmitry/local-transcriber/issues/16) — первая версия включается через `--diarize`/`--speakers N`, `sherpa-onnx` ставится обязательно, модели скачиваются лениво; все backend должны отдавать слова с временной привязкой. Ошибки конкретного файла сохраняют обычный Markdown с явным предупреждением; hardware-aware default отложен в [#23](https://git.dementev.space/ddmitry/local-transcriber/issues/23). - [Свести решения карты в ADR и спеку](https://git.dementev.space/ddmitry/local-transcriber/issues/17) — решения оформлены в ADR-007, спецификацию и доменный словарь; реализация вынесена в [отдельную задачу](https://git.dementev.space/ddmitry/local-transcriber/issues/24). ## Not yet specified ## Out of scope - **Реализация и приёмка новых AMD, Apple и browser-путей** — lifecycle и модельные возможности разведаны в [«Куда движутся ONNX Runtime и OpenVINO: сравнение жизненного цикла»](https://git.dementev.space/ddmitry/local-transcriber/issues/9), но интеграция и бенчмарки не нужны для ADR/спеки диаризации на целевом Intel-пути. - **Консолидация проекта на ONNX Runtime целиком** — переход на сборку с DirectML или OpenVINO EP вместо OpenVINO GenAI. Отдельная работа: она зависит от того, что покажет research о жизненном цикле движков, требует замеров на Intel-железе и переоценки всех профилей. В этой карте остаётся только узкое решение о поведении диаризации на `--device openvino-*`. - **Сопоставление `Speaker N` с именами участников.** Бэклог сознательно держит это вне ядра CLI: работа поверх готового транскрипта, максимум рецепт в README. - **Реализация диаризации в CLI** — код, тесты и README ведутся в [отдельной задаче](https://git.dementev.space/ddmitry/local-transcriber/issues/24).
ddmitry added the wayfinder:map label 2026-08-12 15:03:00 +03:00
Author
Owner

Задача «Калибровка диаризации: порог кластеризации и модель эмбеддингов на русской речи» закрыта. Решение зафиксировано в Decisions so far: автоматический дефолт — WeSpeaker ResNet34 LM с порогом 0,89; явное число участников используется как страховка.

Задача [«Калибровка диаризации: порог кластеризации и модель эмбеддингов на русской речи»](https://git.dementev.space/ddmitry/local-transcriber/issues/10) закрыта. Решение зафиксировано в `Decisions so far`: автоматический дефолт — WeSpeaker ResNet34 LM с порогом 0,89; явное число участников используется как страховка.
Author
Owner

Артефакты закрытой задачи №10 опубликованы в draft PR #18. PR охватывает текущий материал карты и остаётся черновиком, пока карта №8 открыта.

Артефакты закрытой задачи №10 опубликованы в draft PR [#18](https://git.dementev.space/ddmitry/local-transcriber/pulls/18). PR охватывает текущий материал карты и остаётся черновиком, пока карта №8 открыта.
Sign in to join this conversation.