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
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" }
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"\
Aggiungi le frasi "fionity" e "ionity" a
PhraseSet
e assegna un valoreboost
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 } ] }
Riconoscere l'audio, questa volta usando l'adattamento modello e i
PhraseSet
creati 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
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" }
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"
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" } }
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" } ] }
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
Aggiorna la risorsa
PhraseSet
creata in precedenza per fare riferimento aCustomClass
: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" } }
Riconosci l'audio usando la risorsa
PhraseSet
(che si riferisce alCustomClass
). 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
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"
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
Riconoscere l'audio con l'icona
abnf_grammar
. Questo esempio fa riferimento a una risorsaCustomClass
: projects/project_id/locations/global/customClasses/test-custom-class-1, unCustomClass
incorporato: test-custom-class-2, un token di classe: ADDRESSNUM e una risorsaPhraseSet
: 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
- Scopri come utilizzare l'adattamento del modello in una richiesta a Speech-to-Text.
- Consulta l'elenco dei token delle classi supportati.