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 incontra la parola "meteo", vuoi che trascriva la parola come "meteo" più spesso rispetto a "se". In questo caso, potresti utilizzare l'adattamento del modello per differenziare Speech-to-Text nel riconoscimento del "meteo".

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

  • Migliora 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.

  • Espansione del vocabolario delle parole riconosciute da Speech-to-Text. Speech-to-Text include un vocabolario molto ampio. Tuttavia, se i dati audio contengono spesso parole che sono 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 verificare 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 la 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 di più parole, Speech-to-Text ha maggiori probabilità di riconoscere queste parole in sequenza. Fornendo una frase aumenta anche la probabilità di riconoscere parti della frase, incluse le singole parole. Consulta la pagina sui limiti dei contenuti per conoscere i limiti relativi al numero e alle dimensioni di queste frasi.

Facoltativamente, puoi ottimizzare il livello di adattamento del modello utilizzando la funzionalità di aumento dell'adattamento del modello.

Migliorare il riconoscimento utilizzando i corsi

Le classi rappresentano concetti comuni che ricorrono nel linguaggio naturale, ad esempio le unità monetarie e le date di calendario. Una classe consente di migliorare l'accuratezza 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 pronunciano il loro indirizzo. Potresti avere la registrazione audio di una persona che dice: "Casa mia è al 123 di Main Street, la quarta casa a 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 elencare 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 "Via Roma 123" e "Via Roma 12" 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 di classe supportati per vedere quali sono disponibili per la tua lingua. Ad esempio, per migliorare la trascrizione dei numeri 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. 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 è utile nei casi in cui l'audio contenga una frase simile ma non identica, ad esempio "Mi trovo in 123 Main Street". Per facilitare il riconoscimento di frasi simili, è importante includere anche il token di classe da solo: ["my address is $ADDRESSNUM", "$ADDRESSNUM"]. Se utilizzi un token di classe non valido o non corretto, Speech-to-Text ignora il token senza attivare un errore, ma utilizza comunque il resto della frase per contesto.

Classi personalizzate

Puoi anche creare il tuo CustomClass, una classe composta dal tuo elenco personalizzato di elementi o valori correlati. Ad esempio, se 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 per identificare correttamente questi nomi quando vengono visualizzati 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 allo stesso modo dei token di classe predefiniti. Un elemento phrase può includere sia token di classi predefiniti sia classi personalizzate.

Grammatiche ABNF

Puoi anche utilizzare le grammatiche in formato Backus-Naur (ABNF) aumentato per specificare pattern di parole. L'inclusione di una grammatica ABNF nell'adattamento del modello della richiesta aumenterà 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 a risorse CustomClass e PhraseSet. Per scoprire di più sulla sintassi per questo campo, consulta Speech Recognition Grammar Specification e code sample di seguito.

Perfeziona i risultati della trascrizione con il boosting

Per impostazione predefinita, l'adattamento del modello dovrebbe fornire già un effetto sufficiente nella maggior parte dei casi. La funzionalità Boost di adattamento del modello consente di aumentare il bias del modello di riconoscimento assegnando più peso ad alcune frasi rispetto ad altre. Ti consigliamo di implementare il boosting 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 su "andare alla fiera di paese", con la parola "fiera" che ricorre più spesso di "fare". In questo caso, puoi utilizzare l'adattamento del modello per aumentare la probabilità che il modello 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 "lair".

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

Nozioni di base su Boost

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

Ad esempio, potresti assegnare un valore di boosting 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 boosting, il modello di riconoscimento avrà maggiori probabilità di riconoscere la frase nella sua interezza, parola per parola.

Se non ottieni i risultati voluti eseguendo il boosting di una frase con più parole, ti consigliamo di aggiungere tutti i bigram (due parole, in ordine) che la costituiscono come elementi phrase aggiuntivi e di assegnare a ciascuno un valore di boosting. Continuando con l'esempio precedente, potresti valutare l'aggiunta di altri bigram e n-grammi (più di due parole), ad esempio "il mio preferito", "la mia mostra preferita", "esposizione preferita", "la mia mostra preferita all'American Museum of Natural History", "Museo americano di storia naturale", "balenottera azzurra" e così via. Il modello di riconoscimento di Speech-to-Text avrà quindi maggiori probabilità di riconoscere nell'audio frasi correlate che contengono parti della frase in evidenza originale ma che non corrispondono parola per parola.

Imposta valori di boosting

I valori di boosting devono essere valori in virgola mobile maggiori di 0. Il limite massimo pratico per i valori di boosting è 20. Per ottenere risultati ottimali, prova i risultati della trascrizione aumentando o diminuendo i valori di boosting fino a ottenere risultati precisi della trascrizione.

Valori di boosting più elevati possono comportare meno falsi negativi, ovvero nei casi in cui la parola o la frase si trovava nell'audio, ma non è stata riconosciuta correttamente da Speech-to-Text. Tuttavia, il boosting può anche aumentare la probabilità di falsi positivi, ovvero i casi in cui la parola o la frase è presente nella trascrizione anche se non è 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 indicherà la configurazione di adattamento che ha causato il timeout. Quando si verifica un timeout, l'adattamento del modello non ha effetto sulla trascrizione restituita.

Caso d'uso di esempio che utilizza l'adattamento del modello

L'esempio seguente illustra il processo di utilizzo dell'adattamento del modello per trascrivere una registrazione audio di una persona che dice "Chiamami fionity e oh oh, che cos'è la ionità". In questo caso è importante che il modello identifichi "fionità" e "ionità" correttamente.

Il seguente comando esegue il riconoscimento sull'audio senza adattamento del modello. La trascrizione risultante non è corretta: "chiamami tè Fiona e cavolo, cosa ho 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 utilizzando 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 di 10 a ciascuna di queste:

    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}]}'
    

    Il documento PhraseSet è stato aggiornato e ora è:

    {
      "phrases":[
         {
              "value":"ionity",
              "boost":10
           },
           {
              "value":"fionity",
              "boost":10
           }
        ]
     }
    
  4. Riconoscere l'audio, questa volta tramite l'adattamento del modello e l'elemento PhraseSetcreato in precedenza. Ora i risultati trascritti sono corretti: "Chiamami fionity and oh oh Dio cosa abbiamo 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 utilizzando 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:

    {
       "phraseSetId":"test-phrase-set-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. Riconosci il clip audio di prova. Il campo CustomClass è vuoto, quindi la trascrizione restituita non è ancora corretta: "Chiamami tè Fiona e oh oh, cosa abbiamo 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":
    {"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"}]}'
    

    In questo modo la classe personalizzata viene aggiornata come segue:

    {
       "items":[
          {
             "value":"ionity"
          },
          {
             "value":"fionity"
          }
       ]
    }
    
  5. Riconoscere l'audio di esempio, questa volta con "fionity" e "ionity" nella CustomClass. Ora la trascrizione è corretta: "Chiamami fionity e oh cahi che 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": {"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"
       }
    }
    

Fai riferimento a un 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. Riconoscere l'audio usando la risorsa PhraseSet (che si riferisce all'CustomClass). La trascrizione è corretta: "Chiamami fionity e oh oh, cosa abbiamo 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:

    {
       "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 utilizzando un ABNF Grammar

  1. Riconoscere l'audio usando 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à considerata come la 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