Miglioramento dei risultati della trascrizione con l'adattamento del modello

Panoramica

Puoi utilizzare la funzionalità di adattamento del modello per aiutare Speech-to-Text a riconoscere parole o frasi specifiche più spesso rispetto ad altre opzioni che potrebbero essere suggerite altrimenti. Ad esempio, supponiamo che i tuoi dati audio includano spesso la parola "meteo". Quando Speech-to-Text rileva la parola "meteo", vuoi che trascriva la parola come "meteo" più spesso che con "se". In questo caso, puoi usare l'adattamento del modello per bilanciare Speech-to-Text e il riconoscimento del "meteo".

L'adattamento del modello è particolarmente utile nei seguenti casi d'uso:

  • Migliorare l'accuratezza di parole e frasi che ricorrono spesso nei tuoi dati audio. Ad esempio, puoi avvisare il modello di riconoscimento dei comandi vocali generalmente pronunciati dagli utenti.

  • Ampliare il vocabolario delle parole riconosciute da Speech-to-Text. Speech-to-Text include un vocabolario molto ampio. Tuttavia, se i tuoi dati audio spesso contengono parole rare nell'uso generico della lingua (ad esempio nomi propri o parole specifiche del dominio), puoi aggiungerle utilizzando l'adattamento del modello.

  • Migliorare l'accuratezza della trascrizione del parlato quando l'audio fornito contiene rumore o non è molto chiaro.

Per sapere se la funzionalità di adattamento del modello è disponibile per la tua lingua, consulta la pagina di supporto delle lingue.

Migliorare il riconoscimento di parole e frasi

Per aumentare le probabilità che Speech-to-Text riconosca la parola "meteo" quando trascrive i tuoi dati audio, puoi passare la singola parola "meteo" nell'oggetto PhraseSet in una risorsa SpeechAdaptation.

Quando fornisci una frase composta da più parole, è più probabile che Speech-to-Text riconosca le parole in sequenza. Fornendo una frase, aumenta anche le probabilità di riconoscere parti della frase, incluse le singole parole. Consulta la pagina relativa ai limiti dei contenuti per conoscere i limiti relativi al numero e alle dimensioni di queste frasi.

Facoltativamente, puoi perfezionare l'intensità dell'adattamento del modello utilizzando la funzionalità di miglioramento dell'adattamento del modello.

Migliora il riconoscimento utilizzando i corsi

Le classi rappresentano concetti comuni che ricorrono nel linguaggio naturale, come le unità monetarie e le date del calendario. Una classe consente di migliorare la precisione della trascrizione per grandi gruppi di parole che corrispondono a un concetto comune, ma che non includono sempre parole o frasi identiche.

Ad esempio, supponiamo che i tuoi dati audio includano registrazioni di persone che dicono il loro indirizzo. Potresti avere una registrazione audio di qualcuno che dice: "Casa mia è 123 Main Street, la quarta casa sulla sinistra". In questo caso, vuoi che Speech-to-Text riconosca la prima sequenza di numeri ("123") come indirizzo anziché come ordinale ("centoventitré"). Tuttavia, non tutte le persone vivono in "123 Main Street". Non è pratico indicare ogni possibile via in una risorsa PhraseSet. Puoi utilizzare invece una classe per indicare che un numero civico deve essere riconosciuto indipendentemente dal numero effettivo. In questo esempio, Speech-to-Text potrebbe trascrivere in modo più accurato frasi come "123 Main Street" e "987 Grand Boulevard" perché sono entrambe riconosciute come numeri di indirizzo.

Token di classe

Per utilizzare una classe nell'adattamento del modello, includi un token della classe nel campo phrases di una risorsa PhraseSet. Consulta l'elenco dei token delle classi supportati per sapere quali sono disponibili per la tua lingua. Ad esempio, per migliorare la trascrizione dei numeri di indirizzo dall'audio di origine, fornisci il valore $ADDRESSNUM nell'oggetto SpeechContext.

Puoi utilizzare le classi come elementi autonomi nell'array phrases o incorporare uno o più token di classe in frasi più lunghe con più parole. Ad esempio, puoi indicare un numero di indirizzo in una frase più grande includendo il token di classe in una stringa: ["my address is $ADDRESSNUM"]. Tuttavia, questa frase non è di aiuto nei casi in cui l'audio contenga una frase simile ma non identica, ad esempio "Mi trovo all'indirizzo 123 Main Street". Per riconoscere più facilmente frasi simili, è importante includere anche il token della classe da solo: ["my address is $ADDRESSNUM", "$ADDRESSNUM"]. Se utilizzi un token di classe non valido o in un formato non corretto, Speech-to-Text ignora il token senza attivare un errore, ma utilizza comunque il resto della frase per fornire contesto.

Classi personalizzate

Puoi anche creare il tuo CustomClass, una classe composta dal tuo elenco personalizzato di elementi o valori correlati. Ad esempio, vuoi trascrivere dati audio che potrebbero includere il nome di uno qualsiasi delle diverse centinaia di ristoranti regionali. I nomi dei ristoranti sono relativamente rari nel linguaggio generico e pertanto hanno meno probabilità di essere scelti come risposta "corretta" dal modello di riconoscimento. Puoi polarizzare il modello di riconoscimento in modo da identificare correttamente questi nomi quando appaiono nell'audio utilizzando una classe personalizzata.

Per utilizzare una classe personalizzata, crea una risorsa CustomClass che includa il nome di ogni ristorante come ClassItem. Le classi personalizzate funzionano come i token di classe predefiniti. Un elemento phrase può includere sia token di classe predefiniti sia classi personalizzate.

Grammatiche ABNF

Puoi anche usare la grammatica in formato Backus-Naur (ABNF) aumentato per specificare modelli di parole. L'inclusione di una grammatica ABNF nell'adattamento del modello della richiesta aumenta la probabilità che Speech-to-Text riconosca tutte le parole che corrispondono alla grammatica specificata.

Per utilizzare questa funzionalità, includi un oggetto ABNF grammar nel campo SpeechAdaptation della richiesta. Le grammatiche ABNF possono anche includere riferimenti alle risorse CustomClass e PhraseSet. Per scoprire di più sulla sintassi di questo campo, consulta Speech Recognition Grammar Specification e code sample di seguito.

Perfeziona i risultati della trascrizione con l'ottimizzazione

Per impostazione predefinita, l'adattamento del modello dovrebbe già fornire un effetto sufficiente nella maggior parte dei casi. La funzionalità di incremento di adattamento del modello ti consente di aumentare il bias del modello di riconoscimento assegnando più peso ad alcune frasi rispetto ad altre. Ti consigliamo di implementare il booster solo se 1) hai già implementato l'adattamento del modello e 2) vuoi regolare ulteriormente l'intensità degli effetti di adattamento del modello sui risultati della trascrizione.

Ad esempio, hai molte registrazioni di persone che chiedono informazioni sulla "tariffa per entrare alla fiera di contea", dove la parola "fair" è presente più spesso di "fare". In questo caso, puoi utilizzare l'adattamento del modello per aumentare la probabilità che riconosca sia la "fair" sia la "fare" aggiungendole come phrases in una risorsa PhraseSet. In questo modo Speech-to-Text riconoscerà "fair" e "fare" più spesso di, ad esempio, "lepre" o "voce".

Tuttavia, "fair" dovrebbe essere riconosciuto più spesso di "fare" per via delle sue apparizioni più frequenti nell'audio. Potresti aver già trascritto l'audio utilizzando l'API Speech-to-Text e aver trovato un numero elevato di errori nel riconoscere la parola corretta ("fair"). In questo caso, potresti voler utilizzare anche le frasi con boost per assegnare un valore di boost più elevato a "fair" rispetto a "fare". Il valore ponderato più elevato assegnato a "fair" associa l'API Speech-to-Text a scegliere "fair" più spesso di "fare". Senza i valori di boost, il modello riconoscerà "fair" e "fare" con la stessa probabilità.

Nozioni di base su Boost

Quando utilizzi il booster, assegni un valore ponderato a phrase elementi in una risorsa PhraseSet. Speech-to-Text fa riferimento a questo valore ponderato quando selezioni una possibile trascrizione per le parole nei tuoi dati audio. Più alto è il valore, maggiori sono le probabilità che Speech-to-Text scelga quella parola o frase tra le possibili alternative.

Ad esempio, vuoi assegnare un valore di booster alla frase "La mia mostra preferita all'American Museum of Natural History è la balenottera azzurra". Se aggiungi la frase a un oggetto phrase e assegni un valore di potenziamento, il modello di riconoscimento avrà maggiori probabilità di riconoscere la frase nella sua interezza, parola per parola.

Se non ottieni i risultati che stai cercando utilizzando il boosting di una frase composta da più parole, ti consigliamo di aggiungere tutti i bigram (due parole in ordine) che la costituiscono come ulteriori phrase elementi e di assegnare a ciascuno un valore di boosting. Proseguendo con l'esempio riportato sopra, potresti valutare l'aggiunta di ulteriori bigram e n-grammi (più di due parole), ad esempio "la mia preferita", "la mia mostra preferita", "esposizione preferita", "la mia mostra preferita all'American Museum of Natural History", "American Museum of Natural History", "balenottera blu" e così via. Il modello di riconoscimento Speech-to-Text è quindi più propenso a riconoscere nell'audio frasi correlate che contengono parti della frase migliorata originale, ma che non corrispondono a parola per parola.

Imposta valori di boosting

I valori di boost devono essere un valore in virgola mobile maggiore di 0. Il limite massimo pratico per i valori di boosting è 20. Per ottenere risultati ottimali, fai delle prove con i risultati della trascrizione aumentando o diminuendo i valori di aumento fino a ottenere risultati precisi della trascrizione.

Valori di boost più elevati possono comportare meno falsi negativi, nei casi in cui la parola o la frase si è verificata nell'audio, ma non sono state riconosciute correttamente da Speech-to-Text. Tuttavia, il boost può anche aumentare la probabilità di falsi positivi, ovvero nei casi in cui la parola o la frase compare nella trascrizione anche se non era presente nell'audio.

Ricevere notifiche di timeout

Le risposte Speech-to-Text includono un campo SpeechAdaptationInfo, che fornisce informazioni sul comportamento di adattamento del modello durante il riconoscimento. Se si è verificato un timeout relativo all'adattamento del modello, adaptationTimeout sarà true e timeoutMessage specificherà la configurazione di adattamento che ha causato il timeout. Quando si verifica un timeout, l'adattamento del modello non ha effetto sulla trascrizione restituita.

Esempio di caso d'uso in cui viene utilizzato l'adattamento del modello

L'esempio seguente ti accompagna nel processo di adattamento del modello per trascrivere una registrazione audio di una persona che dice "chiamami fionity e oh oh, cosa c'è qui". In questo caso è importante che il modello identifica "fionity" e "ionity" correttamente.

Il seguente comando esegue il riconoscimento sull'audio senza adattamento del modello. La trascrizione risultante non è corretta: "chiamami tè Fiona e oh, caspita, cosa c'è qui, ho un giorno".

   curl -H "Authorization: Bearer $(gcloud auth
   --impersonate-service-account=$SA_EMAIL print-access-token)" -H
   "Content-Type: application/json; charset=utf-8"
   "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
   {"languageCode": "en-US"}, "audio":
   {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
   

Esempio di richiesta:

     {
       "config":{
       "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
     }
   

Migliora la trascrizione usando un PhraseSet

  1. Crea un PhraseSet:

    curl -X POST -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets"
    -d '{"phraseSetId": "test-phrase-set-1"}'
    

    Esempio di richiesta:

    {
       "phraseSetId":"test-phrase-set-1"
    }
    
  2. Scarica PhraseSet:

    curl -X GET -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id>/locations/global/phraseSets/test-phrase-set-1"\
    
  3. Aggiungi le frasi "fionity" e "ionity" a PhraseSet e assegna un valore boost pari a 10 a ciascuna:

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1?updateMask=phrases"\
    -d '{"phrases": [{"value": "ionity", "boost": 10}, {"value": "fionity", "boost": 10}]}'
    

    PhraseSet è stato aggiornato a:

    {
      "phrases":[
         {
              "value":"ionity",
              "boost":10
           },
           {
              "value":"fionity",
              "boost":10
           }
        ]
     }
    
  4. Riconoscere l'audio, questa volta usando l'adattamento modello e i PhraseSetcreati in precedenza. I risultati della trascrizione ora sono corretti: "Chiamami fionity e oh caspita, cosa c'è qui ionità".

    curl -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)"
    -H "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phrase_set_references": ["projects/project_id/locations/global/phraseSets/test-phrase-set-1"]},
    "languageCode": "en-US"}, "audio": {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
    

    Esempio di richiesta:

    {
       "config":{
          "adaptation":{
             "phrase_set_references":[
                "projects/project_id/locations/global/phraseSets/test-phrase-set-1"
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
    }
    

Migliora i risultati della trascrizione usando un CustomClass

  1. Crea un CustomClass:

    curl -X POST -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses"
    -d '{"customClassId": "test-custom-class-1"}'
    

    Esempio di richiesta:

    {
       "customClassId": "test-custom-class-1"
    }
    
  2. Scarica CustomClass:

     curl -X GET -H "Authorization: Bearer $(gcloud auth
     --impersonate-service-account=$SA_EMAIL print-access-token)" -H
     "Content-Type: application/json; charset=utf-8"
     "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1"
     

  3. Riconoscere il clip audio di prova. Il campo CustomClass è vuoto, quindi la trascrizione restituita è ancora errata:

    curl -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phraseSets": [{"phrases": [{"value":
    "${projects/project_idlocations/global/customClasses/test-custom-class-1}",
    "boost": "10"}]}]}, "languageCode": "en-US"}, "audio":
    {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
    

    Esempio di richiesta:

      {
       "config":{
          "adaptation":{
             "phraseSets":[
                {
                   "phrases":[
                      {
                         "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
                         "boost":"10"
                      }
                   ]
                }
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
     }
    
  4. Aggiungi le frasi "fionity" e "ionity" alla classe personalizzata:

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1?updateMask=items"
    -d '{"items": [{"value": "ionity"}, {"value": "fionity"}]}'
    

    La classe personalizzata viene aggiornata come segue:

    {
       "items":[
          {
             "value":"ionity"
          },
          {
             "value":"fionity"
          }
       ]
    }
    
  5. Riconoscere l'audio di esempio, questa volta con "fionity" e "ionity" in CustomClass. Ora la trascrizione è corretta: "chiamami fionity e oh, caspita, cosa c'è qui in questa ionità".

    curl -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phraseSets": [{"phrases": [{"value":
    "${projects/project_id/locations/global/customClasses/test-custom-class-1}",
    "boost": "10"}]}]}, "languageCode": "en-US"}, "audio":
    {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
    

    Esempio di richiesta:

    {
       "config":{
          "adaptation":{
             "phraseSets":[
                {
                   "phrases":[
                      {
    "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
                         "boost":"10"
                      }
                   ]
                }
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
    }
    

Invita CustomClass in un PhraseSet

  1. Aggiorna la risorsa PhraseSet creata in precedenza per fare riferimento a CustomClass:

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1?updateMask=phrases"
    -d '{"phrases": [{"value": "${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost": 10}]}'
    

    Esempio di richiesta:

    {
       "config":{
          "adaptation":{
             "phraseSets":[
                {
                   "phrases":[
                      {
                         "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
                         "boost":"10"
                      }
                   ]
                }
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
    }
    
  2. Riconosci l'audio usando la risorsa PhraseSet (che si riferisce al CustomClass). La trascrizione è corretta: "dammi la verità e oh oh, cosa c'è qui".

    curl -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phrase_set_references":
    ["projects/project_id/locations/global/phraseSets/test-phrase-set-1"]},
    "languageCode": "en-US"}, "audio":
    {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
    

    Esempio di richiesta:

    {
       "phrases":[
          {
             "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
             "boost":10
          }
       ]
    }
    

Elimina CustomClass e PhraseSet

  1. Elimina PhraseSet:

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1"
    
  2. Elimina CustomClass:

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1"
    

Migliora i risultati della trascrizione usando un ABNF Grammar

  1. Riconoscere l'audio con l'icona abnf_grammar. Questo esempio fa riferimento a una risorsa CustomClass: projects/project_id/locations/global/customClasses/test-custom-class-1, un CustomClass incorporato: test-custom-class-2, un token di classe: ADDRESSNUM e una risorsa PhraseSet: projects/project_id/locations/global/phraseSets/test-phrase-set-1. La prima regola nelle stringhe (dopo le dichiarazioni esterne) verrà trattata come radice.

    Esempio di richiesta:

    {
       "config":{
          "adaptation":{
             "abnf_grammar":{
                "abnf_strings": [
                  "external ${projects/project_id/locations/global/phraseSets/test-phrase-set-1}" ,
                  "external ${projects/project_id/locations/global/customClasses/test-custom-class-1}" ,
                  "external ${test-custom-class-2}" ,
                  "external $ADDRESSNUM" ,
                  "$root = $test-phrase-set-1 $name lives in $ADDRESSNUM;" ,
                  "$name = $title $test-custom-class-1 $test-custom-class-2" ,
                  "$title = Mr | Mrs | Miss | Dr | Prof ;"
                ]
             }
          }
       }
    }
    

Passaggi successivi