/ Модель

Характеристики

Лицензия
Apache 2.0
Базовая модель
whisper-tiny
Библиотека
transformers
Опубликована
7 сен 2026

semantic-vad-eot-whisper-tiny

Классификация аудиоАудио → label

Компактная модель на базе Whisper-tiny определяет по аудио, закончил ли говорящий реплику, чтобы голосовой агент мог своевременно ответить.

0скачиваний за 30 дней0лайковвеса обновлены2 окт 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

Semantic-VAD whisper-tiny — модель Scicom-intl для определения окончания реплики в голосовых агентах по аудио без транскрипции. На вход подаются признаки log-mel для последних 8 секунд аудио с частотой 16 кГц; модель возвращает вероятность того, что говорящий закончил фразу. В основе — энкодер Whisper-tiny с небольшой классификационной головой; доступны веса PyTorch и экспорты ONNX, включая динамически квантованный int8-вариант размером около 10 МБ.

Модель предназначена для потоковой обработки звонков и голосовых интерфейсов: агент может решить, когда отвечать, не дожидаясь распознавания речи. По данным карточки, один прогноз на одном CPU-потоке занимает около 30 мс, а вычислительная нагрузка на один звонок составляет менее 1% ядра при типичной частоте проверок. В тестах LiveKit модель показывает компромисс между задержкой ответа и ошибочным прерыванием пауз; опубликованные результаты охватывают 14 языков.

Лицензия — Apache-2.0. Модель классифицирует аудио по наличию завершённой реплики, но не распознаёт речь и не выдаёт транскрипт. В README отмечено, что int8 ONNX даёт вероятности, отличающиеся от PyTorch в среднем на 0,017 и максимум на 0,047; для короткого фрагмента вход дополняется нулями до окна 8 секунд.

Сценарии применения

  • определение конца реплики во время телефонного звонка
  • выбор момента ответа голосового агента
  • снижение задержки в голосовом диалоге
  • отличение конца фразы от паузы внутри речи
  • обработка аудио в голосовом агенте на CPU

Ограничения

Модель выдаёт вероятность завершения реплики, а не текстовую расшифровку; для входа требуется подготовить 80-мерные log-mel признаки окна до 8 секунд при 16 кГц. В int8 ONNX результаты могут заметно отличаться от PyTorch.

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Semantic-VAD whisper-tiny

An audio-only end-of-turn detector for voice agents. Give it the last 8 s of the caller's audio at 16 kHz and it returns the probability that the caller has finished speaking. It needs no transcript, so it can answer the moment a pause begins.

It is a Whisper-tiny encoder (8 M parameters) with a small head, shipped as int8 ONNX (10 MB) for one CPU thread and as PyTorch weights. It is the cheapest of the family and the one to run inside an agent process.

Results

The charts below put every model of the family next to the open detectors, at the budgets LiveKit's eot-bench reports: the fewest interruptions a model can reach within 300 ms and 600 ms of average waiting, and the shortest wait it can reach while interrupting at most 5 % and 10 % of pauses.

Best false-cutoff rate at a 300 / 600 ms latency budget, eot-bench-data

Best false-cutoff rate at a 300 / 600 ms latency budget, telephony test

Best mean latency at a 5 / 10 % false-cutoff budget, eot-bench-data

Best mean latency at a 5 / 10 % false-cutoff budget, telephony test

ROC AUC, eot-bench-data

ROC AUC, telephony test

Every operating point

Each curve is the best trade a policy can reach: how long a finished turn waits against how many pauses get interrupted. Lower left is better.

Latency against cut-offs on eot-bench-data

Latency against cut-offs on the telephony test

Per language on eot-bench-data, the new model's int8 export is better than the 2026-09-07 release's in all 14 languages:

False cut-offs at 300 ms per language

What changed on 2026-10-03

This revision replaces the release of 2026-09-07, which is kept on the branch release-2026-09-07. It is better on both test sets, on every number, in int8 and in PyTorch:

telephony test: cut-offs at 300 mstelephony: latency at 5 %telephony AUCeot-bench-data: cut-offs at 300 mseot-bench-data: latency at 5 %eot-bench-data AUC
this model, int8 ONNX44.7 %1,836 ms0.84128.4 %896 ms0.867
this model, PyTorch45.3 %1,834 ms0.84227.9 %894 ms0.870
previous release, int8 ONNX50.7 %2,000 ms0.80833.2 %919 ms0.837
previous release, PyTorch50.0 %1,983 ms0.81132.3 %904 ms0.846
LiveKit Turn Detector v1not run14.8 %688 ms0.941
LiveKit Turn Detector v1-mini, audio61.6 %2,043 ms0.74829.9 %924 ms0.840
SmartTurn v3.2, CPU int869.6 %2,274 ms0.67039.0 %914 ms0.789
Scicom Semantic VAD, large, GPU40.7 %1,779 ms0.86115.8 %718 ms0.937
silence timer only77.6 %2,020 ms54.9 %1,100 ms

Lower is better for cut-offs and latency, higher for AUC.

  • Cut-offs at 300 ms: the share of mid-turn pauses the agent would interrupt if it may wait 300 ms on average after a finished turn. Latency at 5 %: the mean wait after a finished turn if at most 5 % of pauses may be interrupted. AUC at 0.2 s into each pause. All three come from LiveKit's eot-bench: every silence of at least 0.1 s, every policy of threshold, action delay and timeout, the best policy at each budget.
  • eot-bench-data: LiveKit's own 14-language set (livekit/eot-bench-data, validation), scored on the same span set as LiveKit's published runs.
  • The previous release's telephony numbers are slightly flattering: its checkpoint was chosen by early stopping on a sample of the telephony test split. This model never saw that split before it was scored.

In short, as shipped in int8: 6.0 points fewer interruptions on telephony and 164 ms less waiting there, and 4.8 points fewer on LiveKit's set.

Usage

ONNX on one CPU thread, no torch needed:

import numpy as np, onnxruntime as ort
from huggingface_hub import hf_hub_download
from transformers import WhisperFeatureExtractor

REPO, SR, WINDOW = "Scicom-intl/semantic-vad-eot-whisper-tiny", 16000, 8 * 16000
opts = ort.SessionOptions(); opts.intra_op_num_threads = 1
sess = ort.InferenceSession(hf_hub_download(REPO, "onnx/model.int8.onnx"), opts, providers=["CPUExecutionProvider"])
fe = WhisperFeatureExtractor(feature_size=80, sampling_rate=SR, chunk_length=8)

def p_end_of_turn(pcm: np.ndarray) -> float:
    """pcm: float32 in [-1, 1] at 16 kHz, the caller's audio up to now (any length)."""
    pcm = np.asarray(pcm, dtype=np.float32)
    if pcm.size and np.abs(pcm).max() > 1.5:   # int16-scale samples to unit float
        pcm = pcm / 32768.0
    pcm = pcm[-WINDOW:] if len(pcm) >= WINDOW else np.pad(pcm, (WINDOW - len(pcm), 0))
    feats = fe([pcm], sampling_rate=SR, return_tensors="np", padding="max_length", max_length=WINDOW,
               truncation=True, do_normalize=False)["input_features"].astype(np.float32)
    return float(sess.run(None, {"input_features": feats})[0].reshape(-1)[0])

Threshold: 0.5. eot-bench's best policies for this model's int8 export use 0.53 to 0.57 at the 300 ms budget, close to the previous release's 0.54 to 0.60.

LiveKit Agents: wrap p_end_of_turn as the predict(pcm) backend of STT-API's SemanticVAD turn detector. LiveKit hands the backend int16-scale samples; the snippet rescales them.

To go back to the previous release, pass revision="release-2026-09-07" to hf_hub_download.

Serving cost

About 30 ms per prediction on one CPU thread (int8, 28.5 ms at export, 34 ms in our serving runs). A call asks the detector about 0.15 times a second, so under 1 % of one core per call. A 164-core node sustains about 1,670 predictions a second with 64 single-thread processes, and a 4-core node about 120. The cost does not depend on how much audio you send; the window is always 8 s.

Files

filewhat
onnx/model.int8.onnxMatMul-only dynamic int8, 10 MB; probability differs from PyTorch by 0.017 on average, 0.047 at most
onnx/model.fp32.onnxfp32 export, 32 MB; within 9e-7 of PyTorch
onnx/export_report.jsonsizes, parity against PyTorch, latency at export
encoder/the fine-tuned encoder, HF format (config.json, model.safetensors)
eot_head.pt{"state_dict": LayerNorm, Linear(384, 256), GELU, Linear(256, 1), "pooling": "last5"}
eot_window.json, preprocessor_config.jsonthe input contract: 8 s window, 80 mel bins, 16 kHz, no mel normalisation, mean of the last 5 encoder frames

Input: input_features [batch, 80, 800] float32, the Whisper log-mel of the last 8 s of audio, left-padded with zeros when shorter, do_normalize=False. Output: probability [batch, 1], already through the sigmoid.

License

Apache-2.0, like the Whisper encoder it fine-tunes.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · transformers · audio-classification

Нельзя запустить

В репозитории нет config.json: не понять архитектуру модели.

Ревизия весов
ffb8958

0 моделей