QuillAIQuillAIDocs
Войти
Основные концепцииДиаризация

Диаризация дикторов

Разделите транскрипт на реплики по говорящим. Включается одним флагом — и каждый сегмент получает метку спикера.

Что это делает

Когда распознавание дикторов включено, API анализирует аудио и относит каждый сегмент к отдельному голосу. Текст транскрипта остаётся тем же, но к каждому элементу result.segments[] добавляется метка спикера — так вы понимаете, кто именно что сказал.

Это разделение, а не идентификация. QuillAI отличает голоса друг от друга внутри одной транскрипции, но не сопоставляет их с реальными людьми и не узнаёт одного и того же человека в разных файлах. Метки — обобщённые: «Speaker 1», «Speaker 2» и т. д.

Как включить

Передайте speaker_recognition: true в теле запроса. По умолчанию — false, поэтому дополнительное время обработки тратится только когда диаризация действительно нужна.

request.shbash
curl -X POST https://api.quillhub.ai/v1/transcriptions \
  -H "Authorization: Bearer $QAI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/interview.mp3",
    "speaker_recognition": true
  }'

Формат ответа

При включённой диаризации у каждого элемента result.segments[] появляется поле speaker рядом со start, end и text. Поле result.text не меняется — это по-прежнему простой склеенный транскрипт, — поэтому для группировки по спикерам используйте result.segments.

response.jsonjson
{
  "id": "trs_01HZX9K7Q2M4YV8BTA6JRN3PDE",
  "status": "completed",
  "result": {
    "text": "Welcome to the show. Thanks for having me. So let's start with your background. Sure, I grew up in Boston and studied computer science.",
    "segments": [
      { "start": 0.00, "end": 2.41, "text": "Welcome to the show.", "speaker": "Speaker 1" },
      { "start": 2.48, "end": 4.12, "text": "Thanks for having me.", "speaker": "Speaker 2" },
      { "start": 4.20, "end": 7.05, "text": "So let's start with your background.", "speaker": "Speaker 1" },
      { "start": 7.15, "end": 9.88, "text": "Sure, I grew up in Boston", "speaker": "Speaker 2" },
      { "start": 9.92, "end": 12.60, "text": "and studied computer science.", "speaker": "Speaker 2" }
    ]
  }
}

Группировка по спикерам

Соседние сегменты одного и того же спикера — это обычно одна реплика. Небольшой редьюсер на клиенте объединяет их в аккуратный список ходов диалога:

group-by-speaker.jsjavascript
// segments: [{ start, end, text, speaker }, ...]
function groupBySpeaker(segments) {
  const groups = [];
  for (const seg of segments) {
    const last = groups[groups.length - 1];
    if (last && last.speaker === seg.speaker) {
      last.lines.push(seg.text);
    } else {
      groups.push({ speaker: seg.speaker, lines: [seg.text] });
    }
  }
  return groups;
}

const turns = groupBySpeaker(result.segments);

Точность и ограничения

  • Лучше всего работает на чистом аудио с ярко различающимися голосами — интервью, подкасты, встречи с отдельными микрофонами.
  • Точность падает при сильных перекрытиях речи, перебиваниях, фоновом шуме или низком битрейте.
  • Метки — обобщённые заглушки («Speaker 1», «Speaker 2», …). Соответствие реальным именам вы расставляете сами.
  • Метки согласованы внутри одной транскрипции, но не между разными. Speaker 1 в файле A никак не связан со Speaker 1 в файле B.

Стоимость

Диаризация добавляет примерно 10–15% ко времени обработки и не тарифицируется отдельно — цена транскрипции одинакова с флагом и без него.