TSM - Speech-to-text pentru Web

Ionuț Iacob - Frontend Software Developer @ Kronsoft Development


De obicei, există tentația de "reinventa roata" când se lucrează la un proiect. Poate e din cauza dorinței de a implementa o funcționalitate mai interesantă sau din cauza unei politici mai restrictive legate de utilizarea dependințelor externe care descurajează utilizarea acestora.

Când ar trebui ales un serviciu/ bibliotecă în locul unei implementări noi? Nu există un răspuns simplu și depinde de context, disponibilitatea acestor soluții externe, licențe, timp de dezvoltare și de altele.

Însă când discuția este despre soluții disponibile pentru problema transcrierii vocii în text (Speech-to-text), cred că este mult mai ușor de decis. Principalele motive sunt:

Context

Analiza soluțiilor Speech-to-text disponibile este realizată doar pentru soluțiile disponibile pentru aplicații Web (soluțiile desktop cum ar fi Dragon Professional nu sunt analizate) și pentru soluții care oferă posibilitatea transcrierii mai multor limbi (Rev nu este analizat deoarece oferă doar limba engleză).

Aplicațiile web sunt centrul acestei analize deoarece acest context de utilizare apare din ce în ce mai frecvent din cauza creșterii complexității soluțiilor web. Aceste aplicații pot simula sau înlocui acum funcționalități specifice (Speech-to-text în cazul curent) unui desktop și pot oferi mai multă valoare de business unui produs.

Deși partea de client web a avansat mult în ultimii ani, procesarea problemelor complexe (cum ar fi Speech-to-text) este realizată de cele mai multe ori de server.

Soluții

Soluții Cloud (SaaS)

Tabelul de mai jos reprezintă unele dintre cele mai populare soluții cloud care oferă opțiuni de transcriere a vocii în text. Tabelul conține și câteva metrici relevante pentru fiecare soluție.

Din comparația de mai sus, au fost alese primele două opțiuni (pe baza raportului preț/ calitate) pentru o analiză legată de integrarea acestor servicii.

Detalii legate de integrarea Google Speech-to-text API

API-ul de la Google oferă opțiuni de autentificare limitate. De obicei, serviciile Google Cloud oferă posibilitatea autentificării prin trei modalități, însă pentru serviciul de Speech-to-text, doar două modalități sunt disponibile:

Pentru cele mai multe cazuri, autentificarea individuală de către client nu este o soluție.

Acest lucru înseamnă că soluția de la Google necesită un wrapper în partea de server care să funcționeze ca un intermediar între aplicația web și serviciul de transcriere.

Alte detalii:

Detalii legate de integrarea Microsoft Azure Speech-to-text API

Soluția oferită de Microsoft este similară în privința funcționalităților aduse cu cea de la Google. Diferența majoră este că oferă o acuratețe puțin mai scăzută la un preț mai bun.

Dispune de opțiuni multiple de autentificare, printre care și opțiunea care lipsește de la Google și anume:

Alte detalii:

Soluții On-Premise

Există și soluții on-premise disponibile, soluții care au avantaje/ dezavantaje:

Cele două variante de soluții on-premise alese sunt doar o parte din opțiunile disponibile, dar sunt cele mai populare.

Se observă că acuratețea acestor soluții gratuite scade din cauza lipsei de 'antrenament' a algoritmilor din spate și necesită timp suplimentar pentru îmbunătățirea acestora.

Soluții în Browser web

Aceste soluții aduc o implementare nativă inclusă în anumite browsere web fiind în concordanță cu API-ul nativ Web Speech API.

Cu toate că această funcționalitate există în specificațiile oficiale, implementarea propriu-zisă se află în puține browsere așa cum apare în lista de compatibilitate.

În practică însă, singura soluție funcțională la momentul redactării acestui articol este cea din Chrome.

Soluția oferită de Chrome (și Chrome for Android) are câteva particularități specifice:

Un exemplu de aplicație web care folosește cu succes acest tip de soluție este Dictation.io.

Exemplu de implementare

Pentru acest capitol este folosit ca exemplu următorul caz: un formular simplu, unde utilizatorul poate introduce informațiile atât folosind tastatura cât și dictând conținutul în engleză.

În exemplul de față am ales implementarea nativă din browserul Chrome datorită mai multor motive:

Aplicația descrisă mai sus are următorul format:

Aplicația poate fi accesată și testată la adresa: https://ionut-iacob-kronsoft.github.io/stt-ng10-example/.

Aplicație Web (Angular 10)

Aplicația descrisă mai sus a fost implementată într-un proiect nou de Angular 10. Componenta nouă care facilitează accesul la funcționalitatea de Speech-to-text este directiva speechToText.

Această directivă are rolul de a oferi o implementare generică și ușor de reutilizat pentru funcționalitatea de transcriere.

Aceasta funcționează în felul următor:

Codul aplicației poate fi accesat la adresa: https://github.com/ionut-iacob-kronsoft/stt-ng10-example

Concluzie

Speech-to-text este o funcționalitate care a fost perfecționată mult în ultimii ani și sunt o mulțime de servicii disponibile care se pliază pentru orice context.

Suportul pentru aplicațiile Web este în continuă dezvoltare, iar variantele native (e.g. Google Chrome) oferă o modalitate foarte ușoară și gratuită de a integra Speech-to-text în orice aplicație.

API-ul nativ din browsere e o modalitate bună de a testa, valida, idea și a decide dacă o implementare mai complexă este necesară.

Bibliografie

  1. https://developers.google.com/web/updates/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API

  2. https://medium.com/descript/which-automatic-transcription-service-is-the-most-accurate-2018-2e859b23ed19

  3. https://www.techradar.com/news/best-speech-to-text-app

  4. https://alphacephei.com/vosk/accuracy

  5. https://blog.timbunce.org/2018/05/15/a-comparison-of-automatic-speech-recognition-asr-systems/

  6. https://www.twilio.com/blog/speech-recognition-browser-web-speech-api

  7. https://developers.google.com/web/updates/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API

  8. https://undraw.co/