Skip to content

Javob formati

GET /v1/jobs/{id}/result JSON qaytaradi. Barcha opsiyalar bilan stereo qo‘ng‘iroq uchun qisqartirilgan misol:

json
{
  "schema_version": "gapi_task_result.v0",
  "audio_seconds": 282.7,
  "speech_seconds": 230.4,
  "channels": 2,
  "stereo_parties": true,
  "speakers": 2,
  "vocabulary_terms": 4,
  "vocabulary_dropped": false,
  "text": "Assalomu alaykum, Metasell kompaniyasi. …",
  "segments": [
    {
      "index": 0,
      "start": 0.42,
      "end": 3.9,
      "speaker": 1,
      "text": "Assalomu alaykum, Metasell kompaniyasi.",
      "raw_asr_text": "assalomu alaykum metasell kompaniyasi",
      "formatted_text": "Assalomu alaykum, Metasell kompaniyasi.",
      "emotion": {"mood": "neutral", "label": "neutral", "confidence": 0.88, "valence": 0.52, "arousal": 0.31, "dominance": 0.47, "windows": 1,
                  "probabilities": {"neutral": 0.88, "happy": 0.05, "sad": 0.02, "angry": 0.02, "fearful": 0.01, "disgusted": 0.01, "surprised": 0.01}},
      "pii": {"entities": [], "redacted_text": "Assalomu alaykum, Metasell kompaniyasi."}
    }
  ],
  "speaker_info": [
    {
      "index": 0,
      "speech_seconds": 149.2,
      "gender": {"label": "male", "confidence": 0.97},
      "role": "client",
      "identity": {"status": "new", "voice_id": 100, "speaker_id": "e3db…", "name": null},
      "has_voiceprint": true,
      "emotion": {"dominant_mood": "negative", "mood_share": {"negative": 0.46, "neutral": 0.41, "positive": 0.13}, "valence": 0.38, "arousal": 0.61, "dominance": 0.44}
    }
  ],
  "voices": [
    {"label": "SPEAKER_1", "speaker": 0, "voice_id": 100, "name": null, "status": "new"},
    {"label": "SPEAKER_2", "speaker": 1, "voice_id": 101, "name": "Azimbek", "status": "matched", "score": 0.97}
  ],
  "options_report": {"requested": ["gender", "speaker_roles", "speaker_identification", "emotion", "pii"], "errors": {}, "seconds": 1.8},
  "timing": {"decode_seconds": 0.3, "vad_seconds": 0.4, "stt_seconds": 2.1, "total_seconds": 4.9}
}

Matn lotin yozuvida keladi: model o‘zbek tilining lotin yozuvida o‘qitilgan va barcha opsiyalar (tinish belgilari, raqamlar, shaxsiy ma’lumotlar) u bilan ishlaydi. Chiqishda kirill yozuvi yo‘q.

Yuqori daraja

MaydonBu nima
audio_secondsYozuv uzunligi; g dagi yechim shundan hisoblanadi
speech_secondsUnda qancha nutq bor
channels, stereo_partiesFayldagi kanallar; tomonlar kanallar bo‘yicha ajratilgan bo‘lsa true
speakersSo‘zlovchilar bo‘yicha ajratish nechta ovoz topdi
textButun matn ketma-ket
segmentsTartib bo‘yicha replikalar
speaker_infoYozuvning har bir so‘zlovchisi bo‘yicha xulosa
voices«Ovozdan tanish» da loyiha ovozlarining doimiy raqamlari
optionsYozuv aslida qaysi sozlamalar bilan hisoblangani: loyiha ustiga so‘rovning settings i. Bu yerda Opsiyalar sahifasidagi barcha kalitlar bor — stereo_channels_as_speakers, max_speakers, call_direction va fuzzy_itn (raqamlarni erkin normallashtirish; sukut bo‘yicha o‘chiq) ham
vocabulary_terms, vocabulary_droppedVazifa lug‘atdan nechta atama olgani; tozalashdan keyin bittasi ham qolmasa, ikkinchisi true
diarization_errorSo‘zlovchilar bo‘yicha ajratish ishlamagan bo‘lsa true: yozuvda so‘zlovchi raqamlari bo‘lmaydi. Ajratish o‘tgan bo‘lsa, maydon bor va null ga teng
options_reportQaysi opsiyalar so‘ralgan, qaysilari hisoblanmagan va nima uchun
segment_voiceprintsQaysi replikalarda ovoz izi bor: {"dims", "format", "min_seconds", "segments": [indekslar]}. Izlarning o‘zi tashqariga chiqmaydi — bu POST /v1/speakers/{id}/enroll ga segment_indexes bilan berib, ovoz yaratsa bo‘ladigan replikalar ro‘yxati
timingQayta ishlash necha soniya olgan: decode_seconds, vad_seconds, stt_seconds, format_seconds, diarization_seconds, total_seconds. Bular bilan o‘zimizni o‘lchaymiz, sizni emas

options_report nimalar so‘ralganini (requested), nimalar hisoblanmaganini va nega (errors), hamda opsiyalarga qancha soniya ketganini (seconds) ko‘rsatadi. Rollar so‘ralgan bo‘lsa, o‘sha yerda roles ham bo‘ladi — rollar modelining javobi qanday kelgan bo‘lsa shundayligicha, score, first_speaker, status va direction bilan. Bu diagnostika: undagi sonlar satr bo‘lib keladi, tarkibi o‘zgarishi mumkin. Har bir so‘zlovchining rolini speaker_info[].role dan oling.

Yonida xizmat maydonlari turadi — word_timing, formatting, partial. Ular bizning murojaatlarni tahlil qilish uchun: tarkibi o‘zgarishi mumkin, ustiga mantiq qurmang.

Replika

MaydonBu nima
indexTartib raqami, 0 dan
start, endYozuv boshidan soniyalar
speakerYozuv so‘zlovchisining raqami yoki null
textYoqilgan opsiyalar bilan yakuniy matn
raw_asr_textModel qanday eshitgan: kichik harflar, belgilarsiz
formatted_textTinish belgilari va bosh harflar bilan
wordsword_timestamps da vaqt bilan so‘zlar; qarang: quyida
speaker_shareReplika nutqining qancha ulushini ajratishning o‘zi shu so‘zlovchiga bergani, 0 dan 1 gacha; qolgani qo‘shni so‘zlardan o‘tgan. Faqat so‘zlovchilar hisoblangan joyda bo‘ladi
contextual_textLug‘atdan keyingi, tinish belgilari va raqamlardan oldingi matn: raw_asr_text bilan formatted_text orasida
duration_bucket_secondsBizning telemetriyamiz uchun uzunlik savati
emotion«Hissiyotlar» da {"mood", "label", "confidence", "probabilities", "valence", "arousal", "dominance", "windows"}; bir soniyadan qisqa replikada {"label": null, "reason": "too_short"}; qarang: Hissiyot shkalalari
pii«Shaxsiy ma’lumotlar» da {"entities", "redacted_text"}

mood qiymatlari: neutral, negative, distressed, positive, surprised. pii belgilari: NAME, PHONE, ADDRESS, DATE, DOCUMENT_ID, CARD_NUMBER.

So‘z

json
{"text": "Uzum", "raw": "uzim", "formatted": "Uzum", "start": 4.12, "end": 4.51, "speaker": 1, "aligned": "term"}
MaydonBu nima
textLug‘atdan keyingi, tinish belgilaridan oldingi so‘z
rawModel shu o‘rinda nima eshitgani; qo‘shib qo‘yilgan so‘zda bu maydon yo‘q
formattedReplika formatlangach o‘sha so‘z bosh harf va belgilar bilan
start, endYozuv boshidan soniyalar
speakerSo‘zlovchi raqami, so‘zlovchilar hisoblangan bo‘lsa
alignedSo‘zning vaqti qayerdan olingani

aligned ni o‘qish arziydi: exact — modelning aynan shu so‘zdagi kadrlari; term — so‘z lug‘atdan kelgan va atama qidiruvchisining kadrlari bo‘yicha belgilangan, ya’ni bu atama qo‘llangani haqidagi to‘g‘ridan-to‘g‘ri dalil; span — qayta yozilgan bo‘lakdan tegishli ulush; chunk — bu bo‘lakka model yaroqli so‘z bermagan, vaqt butun bo‘lakka umumiy; none — akustik dalilsiz qo‘shilgan, uzunligi nol.

Yozuv so‘zlovchisi

MaydonBu nima
indexSo‘zlovchi raqami, replikalardagi bilan bir xil
speech_secondsU qancha gapirgan
gender{"label": "female" | "male" | "unknown", "confidence", "reason", "windows", "speech_seconds", "probabilities"}. unknown da confidence null bo‘ladi, reason esa nega ekanini aytadi
role"client", "manager" yoki "unknown"
identity{"status", "voice_id", "speaker_id", "name", "score", "threshold", "runner_up", "kind"}
has_voiceprintSo‘zlovchining nutqi ovoz izi uchun yetarli bo‘lgan: uni Ovozlar va so‘zlovchilar orqali nomlash mumkin. Izning o‘zi tashqariga chiqmaydi
emotion{"dominant_mood", "mood_share", "valence", "arousal", "dominance"}

identity.status bitta savolga javob beradi: bu odam tanildimi, tanilmasa nega.

StatusNima bo‘ldivoice_id bormi
matchedIz loyiha ovozi bilan mos keldiha, tanish ovoz raqami
newMos kelmadi, lekin nutq yetdi: ovoz shu yozuv bilan qayd etildi va bundan keyin tanaladiha, yangi raqam
unknownMos kelmadi va nutq 10 soniyadan kam — bunday iz bo‘yicha ovoz ochish ishonchsizyo‘q
insufficient_speechIzni umuman hisoblab bo‘lmadi: nutq deyarli yo‘qyo‘q
no_enrolled_voicesLoyihada hali birorta ovoz yo‘q, solishtiradigan narsa yo‘qyo‘q

unknown bilan insufficient_speech farqi shundaki, birinchisida iz bor va solishtirish bo‘ldi, odam shunchaki notanish va ro‘yxatga olishga nutq kam; ikkinchisida hisoblaydigan narsaning o‘zi yo‘q edi.

matched va unknown yonida score — eng yaqin ovozga yaqinlik, 0 dan 1 gacha, va threshold — moslik hisoblanadigan chegara turadi. Agar score muntazam chegaradan sal past bo‘lsa, ovozga izlar yetishmayapti: yaxshi yozuvdan yana bittasini qo‘shing.

O‘sha yerda runner_up ham bor — o‘xshashlik bo‘yicha ikkinchi ovozga yaqinlik (solishtiradigan narsa bo‘lmasa -1). Moslik faqat birinchi ikkinchisini zapas bilan ortda qoldirsa hisoblanadi: ikkita o‘xshash ovoz bir-biridan tasodifan yutmasligi kerak. matched va new da yana kind bor — bu loyihada qanday ovoz ekani: candidate, recurring yoki named, qarang: Ovozlar va so‘zlovchilar.

Hissiyot shkalalari

Hissiyot modeli replikani tinglaydi va bir vaqtning o‘zida ikki usulda javob beradi.

Sinf. label bu modelning yetti sinfidan biri: neutral, happy, sad, angry, fearful, disgusted, surprised. probabilities har birining ehtimolini beradi, confidence tanlanganining ehtimoli. Yetti sinfda 0.5 ishonch allaqachon ishonchli javob; 0.35 dan past bo‘lsa sinfni operatorga ko‘rsatmagan ma’qul. mood bu beshta tushunarli holatga yig‘ilgan sinf: angry va disgusted negative ga, sad va fearful distressed ga, happy positive ga.

0 dan 1 gacha uchta shkala. Ular sinfga bog‘liq emas va holatni uzluksiz tasvirlaydi:

Shkala01Qanday o‘qish
valenceyoqimsizyoqimli0.4 dan past bo‘lsa mijoz norozi, 0.6 dan yuqori bo‘lsa mamnun. Suhbatni baholash uchun eng foydali shkala
arousalxotirjamtaranglashganPast valence bilan yuqori arousal bu asabiylashish yoki bahs, yuqori valence bilan ruhlanish
dominanceishonchsizdadilSuhbatni kim boshqaryapti. Yuqori arousal bilan mijozdagi past qiymat ko‘pincha sarosimani bildiradi

0.5 atrofidagi qiymatlar neytral. Bitta raqamga emas, replikalar bo‘yicha dinamikaga qarang: suhbat davomida mijoz valence ining tushishi uning mutlaq qiymatidan ko‘proq narsani aytadi. windows replika nechta 15 soniyalik oynadan o‘rtachalanganini ko‘rsatadi; qisqa replikalarda u 1 ga teng va baho shovqinliroq.

Bir soniyadan qisqa replika umuman baho olmaydi: raqamlar o‘rniga {"label": null, "reason": "too_short"} keladi — model parchadan taxmin qilmaydi. Bitta so‘zlovchining ketma-ket qisqa replikalari avval bitta oynaga joylashtiriladi, shuning uchun «juda qisqa» ko‘pincha birovning nutqi orasidagi «Ha» kabi yolg‘iz replikaga tushadi.

speaker_info[].emotion da o‘sha uchta shkala so‘zlovchining barcha replikalari bo‘yicha o‘rtachalangan, yonida dominant_mood va mood_share, har bir holatning ulushi. Kabinetda shkalalar chiziqcha ko‘rinishida: replika qatorida qisqa, pleer ostida esa har bir so‘zlovchi uchun karta. Chiziqchaga ko‘rsatkichni olib boring va u qaysi ko‘rsatkich ekanini, uchlari nimani anglatishini va sonning o‘zini aytadi; replika yonida modelning shu emotsiyaga ishonchi ham shu qatorda turadi.

Vazifa tayyor bo‘lmaguncha

GET /v1/jobs/{id}/result faqat tayyor vazifa uchun natija beradi; ketayotganda 409 result_not_ready keladi. Tayyor bo‘lgan replikalar GET /v1/jobs/{id}/events dan olinadi: API ga qarang.