docs(diarization): подтверждено смешение в ASR-сегментах
- Зачем: - требовалось проверить долю смешанных ASR-сегментов на трёх записях, включая разговоры на двоих. - Что: - добавлен отчёт с долями сегментов и времени для трёх рабочих созвонов. - обвязка замеров переведена на откалиброванный порог 0,89. - исследовательский скрипт приведён к формату ruff. - Проверка: - выполнены три полных прогона bench_conflict.py с WeSpeaker и порогом 0,89. - uv run ruff check и ruff format --check прошли успешно.
This commit is contained in:
@@ -41,17 +41,18 @@ curl -sSL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-rec
|
||||
export PYTHONIOENCODING=utf-8
|
||||
|
||||
uv run python .scratch/diarization/bench_asr.py "<путь к записи>"
|
||||
uv run --with sherpa-onnx python .scratch/diarization/bench_diar.py "<путь>" 8 0.9
|
||||
uv run --with sherpa-onnx python .scratch/diarization/bench_diar.py "<путь>" 8 0.89
|
||||
uv run --with sherpa-onnx python .scratch/diarization/bench_sweep.py "<путь>"
|
||||
uv run --with sherpa-onnx python .scratch/diarization/bench_conflict.py "<путь>"
|
||||
```
|
||||
|
||||
## Что стоит знать до запуска
|
||||
|
||||
- **Порог кластеризации не откалиброван.** По умолчанию стоит 0,9 — значение из
|
||||
разведки, подобранное на одной записи и на ней же проверенное. На пороге 0,5
|
||||
из примеров sherpa-onnx получалось 29 говорящих вместо трёх. Калибровка — это
|
||||
тикет #10, до его закрытия любое значение считается временным.
|
||||
- **Порог кластеризации откалиброван.** По умолчанию стоит 0,89 — единственное
|
||||
проверенное значение, которое без знания числа участников дало правильные
|
||||
3 / 2 / 2 кластера на трёх калибровочных фрагментах. Решение и ограничения
|
||||
описаны в
|
||||
[отчёте о калибровке](../../docs/benchmarks/2026-08-14-diarization-calibration.md).
|
||||
- **Свип дорогой.** Каждая конфигурация — полный прогон сегментации и
|
||||
эмбеддингов, около 2,5 минут на 26-минутную запись, и время от настроек
|
||||
кластеризации практически не зависит. Свип вести на коротком фрагменте.
|
||||
|
||||
@@ -74,7 +74,13 @@ def main(audio_path: str, threshold: float, threads: int) -> None:
|
||||
continue
|
||||
major = max(per_speaker, key=lambda k: per_speaker[k])
|
||||
rows.append(
|
||||
(seg, major, per_speaker[major] / total, total - per_speaker[major], dict(per_speaker))
|
||||
(
|
||||
seg,
|
||||
major,
|
||||
per_speaker[major] / total,
|
||||
total - per_speaker[major],
|
||||
dict(per_speaker),
|
||||
)
|
||||
)
|
||||
|
||||
n = len(rows)
|
||||
@@ -95,7 +101,9 @@ def main(audio_path: str, threshold: float, threads: int) -> None:
|
||||
(f"с чужой репликой (>={INTERJECTION_S:.0f} с)", lost),
|
||||
("без говорящего вообще", unattributed),
|
||||
):
|
||||
print(f" {label:<34} {len(group):4d} {len(group) / n * 100:5.1f}% {minutes(group):5.1f} мин")
|
||||
print(
|
||||
f" {label:<34} {len(group):4d} {len(group) / n * 100:5.1f}% {minutes(group):5.1f} мин"
|
||||
)
|
||||
|
||||
print()
|
||||
for level in PURITY_LEVELS:
|
||||
@@ -107,9 +115,12 @@ def main(audio_path: str, threshold: float, threads: int) -> None:
|
||||
|
||||
print("\n" + "=" * 64)
|
||||
print("ХУДШИЕ 12 СЕГМЕНТОВ (больше всего чужой речи внутри):")
|
||||
for seg, major, purity, others, per_speaker in sorted(attributed, key=lambda r: -r[3])[:12]:
|
||||
for seg, major, purity, others, per_speaker in sorted(
|
||||
attributed, key=lambda r: -r[3]
|
||||
)[:12]:
|
||||
share = ", ".join(
|
||||
f"spk{k}={v:.1f}с" for k, v in sorted(per_speaker.items(), key=lambda x: -x[1])
|
||||
f"spk{k}={v:.1f}с"
|
||||
for k, v in sorted(per_speaker.items(), key=lambda x: -x[1])
|
||||
)
|
||||
print(
|
||||
f"\n [{seg.start:7.1f}-{seg.end:7.1f}] ({seg.end - seg.start:4.1f} с) "
|
||||
|
||||
@@ -22,9 +22,9 @@ EMBEDDING = MODELS / "wespeaker_en_voxceleb_resnet34_LM.onnx"
|
||||
|
||||
SAMPLE_RATE = 16_000
|
||||
|
||||
# Настройки разведки 2026-08-12. Порог 0.9 дал верное число говорящих на
|
||||
# контрольной записи; на 0.5 из примеров sherpa-onnx получалось 29 вместо трёх.
|
||||
DISCOVERY_THRESHOLD = 0.9
|
||||
# Конфигурация, выбранная калибровкой 2026-08-14 на трёх записях.
|
||||
# На 0.5 из примеров sherpa-onnx получалось 29 говорящих вместо трёх.
|
||||
DISCOVERY_THRESHOLD = 0.89
|
||||
DEFAULT_THREADS = 8
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user