Skip to content

Ovozlar va so‘zlovchilar ​

Chalkashtirish oson bo‘lgan uch xil narsa:

  • Yozuv so‘zlovchisi bu bitta yozuv ichidagi ovoz raqami: segments[].speaker = 0, 1, 2… Keyingi yozuvda o‘sha odam boshqa raqam ostida bo‘lishi mumkin.
  • Loyiha ovozi bu odamning loyihaning barcha yozuvlaridagi doimiy raqami: #100, #101… «Ovozdan tanish» opsiyasi yoqilganda paydo bo‘ladi.
  • Ism bu loyiha ovozini qanday nomlaganingiz: «Azimbek (menejer)». Ism majburiy emas: ismsiz ovoz ham taniladi.

Ovozlar raqamni qanday oladi ​

Yozuv «Ovozdan tanish» yoqilgan holda qayta ishlanganda:

  1. Yozuvning har bir so‘zlovchisi uchun ovoz izi hisoblanadi.
  2. Iz loyiha ovozlari bilan taqqoslanadi. Mos keldi: so‘zlovchi shu ovozning raqamini oladi, holat matched.
  3. Mos kelmadi, so‘zlovchining nutqi esa 10 soniya va undan ko‘p: keyingi raqam bilan yangi loyiha ovozi ro‘yxatga olinadi, holat new.
  4. Nutq 10 soniyadan kam: holat unknown, raqam yo‘q. Bir necha soniyadan olingan iz ishonchsiz, biz u bo‘yicha ovoz ochmaymiz.

Yozuv so‘zlovchilarining loyiha ovozlari bilan bog‘lanishi voices da:

json
"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}
]

speaker bu segments[].speaker dagi raqam, voice_id loyiha ovozining raqami, speaker_id so‘zlovchilar API si uchun identifikatori.

Ovoz qancha yashaydi ​

Bir marta eshitilgan har bir ovozni abadiy saqlash shart emas, shuning uchun ovozning turi bor va u kind da ko‘rinadi:

TurBu nimaQancha yashaydi
candidateBir marta eshitilgan ovozOxirgi uchrashuvdan 30 kun, keyin yo‘qoladi
recurringUch va undan ko‘p yozuvda eshitilganO‘chirilmaguncha saqlanadi
namedIsm berilgan ovozO‘chirilmaguncha saqlanadi

Yana uchragan nomzod last_seen_at ni yangilaydi va hisob qaytadan boshlanadi; uchinchi yozuvda u takrorlanuvchiga aylanadi va muddat olib tashlanadi. Ism muddatni darhol olib tashlaydi: ovozga ism berildi — u qoladi. Shuning uchun xodimning ovozini uchinchi yozuvni kutmay, birinchi safar nomlagan ma’qul.

expires_at ovoz qachon yo‘qolishini aytadi; recurring va named da u bo‘sh.

Ism berish ​

Kabinetning «So‘zlovchilar» bo‘limi loyihaning barcha ovozlarini ko‘rsatadi: nomlanganlar va avtomatik tanilgan «Ovoz #100». «Ism berish» tugmasi raqamni ismga aylantiradi. API orqali: PATCH /v1/speakers/{id} bilan {"name": "…"}.

Parchalarni bir odam sifatida belgilash ​

Ba’zan so‘zlovchilar bo‘yicha ajratish xato qiladi: bir odam ikki raqamga tushadi yoki aksincha. Yozuv natijasida «Bir odamning bo‘laklarini belgilash» rejimi bor: aniq bir odamga tegishli replikalarni tanlang va bu kim ekanini ko‘rsating: mavjud ovoz yoki yangi ism. Tanlangan replikalardan iz hisoblanadi va shu ovozga qo‘shiladi. Qancha ko‘p nutq tanlansa, shuncha ishonchli; 10 soniyadan kam bo‘lsa kabinet ogohlantiradi.

API orqali: POST /v1/speakers/{id}/enroll bilan {"job_id": "…", "segment_indexes": [3, 5, 8]}. Replikalar raqamini ko‘rsatish kifoya: iz saqlangan yozuvdan bizning tomonda hisoblanadi. Izlarning o‘zi javobda yo‘q — bu biometriya va har ovozga yuzlab son, ular bilan bevosita ishlashning hojati yo‘q.

Ovoz namunasini yuklash ​

«So‘zlovchilar» bo‘limida bir odamning qisqa yozuvini (masalan, menejer nutqidan 20–30 soniya) yuklab, uni darhol ovozga bog‘lash mumkin. Yozuv oddiy vazifa sifatida taniladi, ya’ni boshqalar qatori balansni sarflaydi.

Bitta loyihada bir nechta biznes ​

Bitta loyiha orqali ko‘p bizneslarga xizmat ko‘rsatadigan integrator har bir yozuvning biznesini uning tenanti sifatida ko‘rsatadi: "tenant": "biz-86233275". Ikki tenantning ovozlari hech qachon taqqoslanmaydi va birga raqamlanmaydi: ovozlar uchun tenant alohida loyihadir, har birida raqamlash #100 dan boshlanadi. tenant siz yozuv avvalgidek loyihaning o‘z ovozlari bilan ishlaydi.

Buni o‘xshashlik chegarasi bilan qilib bo‘lmaydi. Bir xil ofis liniyalari, garnituralar va kodeklar turli bizneslar xodimlarini bir-biriga o‘xshatib qo‘yadi: haqiqiy qo‘ng‘iroqlarda boshqa biznes menejerlari yozib olingan menejer ovoziga 0,87 gacha yaqinlashgan.

Faqat xodimlar ​

Qo‘ng‘iroqni qaysi xodim liniyasi olib borganini bilsangiz (CRM dagi foydalanuvchi), uni yozuv bilan birga yuboring:

json
"settings": {
  "speaker_roles": true,
  "tenant": "biz-86233275",
  "known_speakers": [{"external_id": "crm-9612766", "role": "manager"}]
}

external_id bu liniyaning sizdagi identifikatori, A–Z a–z 0–9 . _ : @ - belgilaridan 1–128 ta. Liniya bitta odam yoki unda smenalar bo‘yicha ishlaydigan to‘rttagacha odam bo‘lishi mumkin. role bu manager (yana operator yoki supervisor), name majburiy emas, bitta yozuvda to‘rttadan ko‘p liniya bo‘lmaydi. known_speakers uchun tenant shart: usiz yuklash 400 tenant_required bilan rad etiladi, shunda unutilgan tenant bir biznes mijozlarini boshqa biznes xodimlari bilan hech qachon taqqoslamaydi.

known_speakers bilan yozuv faqat tenant xodimlari bilan taqqoslanadi:

  • Faqat xodimlar taniladi va raqam oladi. Mijoz hech qachon ro‘yxatga olinmaydi, yozuvning ovoz izlari esa uning natijasi saqlanishidan oldin tashlab yuboriladi.
  • So‘zlovchi liniya xodimi deb hisoblanadi, agar liniya ovozlaridan biriga yaqinligi kamida 0,65 bo‘lsa va qo‘ng‘iroqdagi boshqa so‘zlovchinikidan kamida 0,05 yuqori bo‘lsa.
  • identity kim ekanini aytadi: {"status": "matched", "external_id": "crm-9612766", "role": "manager", "voice": 2, "expected": true, "score": 0.91, "threshold": 0.65, "runner_up": 0.39, "voice_id": 100}. voice liniyaning qaysi odami ekanini 1 dan 4 gacha aytadi; ularning ismlarini biz bilmaymiz. expected: false ovoz nomlangan liniyaga emas, o‘sha biznesning boshqa liniyasiga tegishli ekanini bildiradi. Bu hukm emas, CRM ni tekshirish uchun ishora: ovoz hamkasblarni xodim va mijozdan ko‘ra ancha yomonroq ajratadi.
  • Boshqa holatlar: not_enrolled (nomlangan liniyaning hali ovozi yo‘q), not_matched (xodimlardan hech kim emas), insufficient_speech.
  • Rollar known_speakers bilan birga yoqiladi. Aynan bitta tomoni tanilgan ikki tomonli qo‘ng‘iroq rollarni ovozdan oladi: bu tomon liniyaning rolini, ikkinchisi client ni oladi. options_report.roles.source nima hal qilganini aytadi (voice, text yoki none), roles.text esa yonida matn modelining o‘z javobini agrees bilan saqlaydi.

"enroll": "off" allaqachon o‘rganilgan ovozlarni taniydi va yangi narsa o‘rganmaydi.

Liniya ovozlari qanday o‘rganiladi ​

Namuna yuklash shart emas. Liniya nomlangan har bir qo‘ng‘iroqdan matn modeli menejer deb atagan tomonni olamiz. Shu tarzda liniyaning oxirgi 20 ta qo‘ng‘irog‘idan ikkitasida eshitilgan ovoz uning ovozlaridan biriga aylanadi; liniyada eng ko‘p eshitilgan to‘rttagacha ovoz bo‘ladi. Mijoz ovozi qo‘ng‘iroqdan qo‘ng‘iroqqa takrorlanmaydi, shuning uchun matn modeli mijozni menejer deb olganida ham u liniya ovoziga aylanmaydi. Liniyaga yangi kelgan odam uchinchi qo‘ng‘irog‘idan taniladi, uning qo‘ng‘iroqlarini olmay qo‘ygan odam esa oyna siljigani sari chiqib ketadi. Liniyada ovoz paydo bo‘lguncha rollar ovozsizdagidek matndan olinadi.

Nima saqlanadi: liniyaning oxirgi 20 ta qo‘ng‘irog‘ining har biri uchun vazifa raqami va o‘sha tomon qayerda gapirgani, ovoz izi esa faqat u liniya ovozlaridan biriga tegishli bo‘lgandagina. Hali takrorlanmagan tomon kerak bo‘lganda saqlangan yozuvdan qayta hisoblanadi, shuning uchun matn modeli xato tanlagan mijozning izi saqlanmaydi.

Agar 20 ta qo‘ng‘iroqda birorta ovoz takrorlanmasa, liniya inconsistent holatini oladi. Haqiqiy qo‘ng‘iroqlarda liniya xodimlari taxminan 100 ta qo‘ng‘iroqdan 95 tasida tanilgan — liniyada bitta odam bo‘lganda ham, bir necha odam smenalar bilan ishlaganda ham, stereoda ham, monoda ham — mijozni esa ovoz 100 ta qo‘ng‘iroqdan 1 tasidan kamrog‘ida xodim deb bilgan. Odamlari doim almashib turgan CRM hisoblarida tanish taxminan 100 tadan 80 tagacha tushadi, mijoz 100 tadan 7–10 ta qo‘ng‘iroqda xodim deb olinadi va ovoz rollarni buzganidan ko‘p tuzatmaydi. Shuning uchun known_speakers ni faqat shaxsiy hisoblar va doimiy smenalar uchun yuboring.

Matn modeli noto‘g‘ri tomonni tanlagan qo‘ng‘iroqni tuzatish uchun: POST /v1/tenants/{tenant}/staff/{external_id}/enroll bilan {"job_id": "…", "speaker_index": 1}. Liniyalar ro‘yxati ovozlari bilan va o‘chirish: API.

Ovoz bu biometrik ma’lumot ​

Ovozlarni faqat odamlarning roziligi bilan qo‘shing. Ovozni o‘chirish uning barcha izlarini o‘chiradi: DELETE /v1/speakers/{id}. Bir ovozda 10 tadan ko‘p iz, bir loyihada 500 tadan ko‘p ovoz bo‘lmaydi.

Liniyani o‘chirish, DELETE /v1/tenants/{tenant}/staff/{external_id}, uning barcha ovozlarini, ularning izlarini va eslab qolingan qo‘ng‘iroqlarni darhol olib tashlaydi; …/voices/{n} uning bitta odamini olib tashlaydi. DELETE /v1/tenants/{tenant} bitta biznesga tegishli hamma narsani, uning saqlangan natijalari ichidagi izlarni ham o‘chiradi. O‘chirilgan yozuv har bir liniya oynasidan chiqadi. Yozuvlarning o‘zi har qanday vazifadagidek saqlanadi, natija esa 30 kundan keyin muddati tugaguncha liniya identifikatori bilan identity ni saqlaydi.