Présentation
La fonctionnalité d'adaptation de modèle aide Cloud Speech-to-Text à reconnaître certains mots ou expressions spécifiques plus fréquemment que d'autres options qui pourraient être suggérées. Par exemple, supposons que vos données audio incluent souvent le mot "temps". Lorsque Cloud STT rencontre le mot "temps", vous souhaitez qu'il le transcrive comme "temps" plus souvent que comme "tant". Dans ce cas, vous pouvez utiliser l'adaptation de modèle pour influencer Cloud STT afin qu'il reconnaisse le mot "temps".
L'adaptation de modèle est particulièrement utile dans les cas d'utilisation suivants :
Améliorer la justesse des mots et expressions qui apparaissent très souvent dans vos données audio. Par exemple, vous pouvez alerter le modèle de reconnaissance sur les commandes vocales qui sont fréquemment prononcées par vos utilisateurs.
Élargir le panel de mots reconnus par Cloud STT. Cloud STT comprend un vocabulaire très vaste. Toutefois, si vos données audio contiennent souvent des mots considérés rares dans le langage courant (tels que des noms propres ou spécifiques à un domaine), vous pouvez les ajouter à l'aide de l'adaptation de modèle.
Améliorer la justesse de la transcription vocale lorsque le contenu audio fourni comporte du bruit ou manque de clarté.
Pour savoir si la fonctionnalité d'adaptation de modèle est disponible pour votre langue, consultez la page Langues prises en charges.
Améliorer la reconnaissance des mots et expressions
Pour augmenter la probabilité que Cloud STT reconnaisse le mot "temps" lors de la transcription de vos données audio, vous pouvez transmettre le mot "temps" dans le champ PhraseSet dans une ressource SpeechAdaptation.
Lorsque vous fournissez une expression composée de plusieurs mots, Cloud STT est plus susceptible de reconnaître ces mots dans l'ordre. L'ajout d'une expression augmente également la probabilité de reconnaissance de certaines parties de l'expression, y compris des mots individuels. Consultez la page Limites de contenu pour connaître les limites applicables au nombre et à la taille de ces expressions.
Vous pouvez éventuellement affiner l'adaptation de modèle à l'aide de la fonctionnalité de boost de l'adaptation de modèle.
Améliorer la reconnaissance à l'aide de classes
Les classes représentent des concepts courants du langage naturel, tels que les unités monétaires et les dates. Une classe vous permet d'améliorer la justesse de la transcription pour de grands groupes de mots associés à un concept commun, mais qui n'incluent pas toujours les mêmes mots ou expressions.
Supposons par exemple que vos données audio incluent des enregistrements de personnes donnant leur adresse postale. Vous pourriez disposer d'un enregistrement audio de quelqu'un disant "J'habite au 123 Grande rue, quatrième maison sur la gauche". Dans ce cas, vous souhaitez que Cloud STT reconnaisse la première séquence de chiffres ("123") comme une adresse plutôt que comme un ordinal ("cent vingt-troisième"). Toutefois, tout le monde ne vit pas au "123 Grande rue". Il est impossible de lister toutes les adresses postales possibles dans un objet PhraseSet. À la place, vous pouvez utiliser une classe pour indiquer qu'un numéro de rue doit être reconnu, quel que soit le numéro. Dans cet exemple, Cloud STT pourrait alors transcrire plus précisément des expressions telles que "123 Grande rue" et "987 Grand boulevard", car elles sont toutes deux identifiées comme des numéros d'adresse.
Jetons de classe
Pour utiliser une classe dans l'adaptation de modèle, incluez un jeton de classe dans le champ phrases d'une ressource PhraseSet. Consultez la liste des jetons de classe pris en charge pour connaître les jetons disponibles pour votre langue. Par exemple, pour améliorer la transcription des numéros d'adresses figurant dans le contenu audio source, vous devez fournir la valeur $ADDRESSNUM dans votre objet SpeechContext.
Vous pouvez utiliser des classes en tant qu'éléments autonomes dans le tableau phrases, ou intégrer un ou plusieurs jetons de classe dans des expressions composées de plusieurs mots. Par exemple, vous pouvez indiquer un numéro d'adresse dans une expression plus longue en incluant le jeton de classe dans une chaîne : ["my address is $ADDRESSNUM"]. Toutefois, cette expression ne résout pas le problème lorsque l'audio contient une expression similaire, mais non identique, telle que "Je me trouve au 123 Grande rue". Pour faciliter la reconnaissance des expressions similaires, il est important d'inclure le jeton de classe indépendamment : ["my address is $ADDRESSNUM",
"$ADDRESSNUM"]. Si vous utilisez un jeton de classe non valide ou incorrect, Cloud STT ignore le jeton sans déclencher d'erreur, mais utilise le reste de l'expression pour déterminer le contexte.
Classes personnalisées
Vous pouvez également créer votre propre CustomClass, à savoir une classe constituée de votre propre liste personnalisée d'éléments ou de valeurs associés. Supposons par exemple que vous souhaitez transcrire des données audio susceptibles d'inclure le nom de l'un des centaines de restaurants régionaux disponibles. Les noms des restaurants étant relativement rares, ils sont moins susceptibles d'être considérés comme la "bonne" réponse par le modèle de reconnaissance. À l'aide d'une classe personnalisée, vous pouvez augmenter la pondération du modèle de reconnaissance afin qu'il identifie correctement ces noms lorsqu'ils apparaissent dans votre contenu audio.
Pour utiliser une classe personnalisée, créez une ressource CustomClass qui inclut chaque nom de restaurant en tant que ClassItem. Les classes personnalisées fonctionnent de la même manière que les jetons de classe prédéfinis. Une expression (phrase) peut inclure à la fois des jetons de classe prédéfinis et des classes personnalisées.
Grammaires ABNF
Vous pouvez également utiliser les grammaires sous la forme Backus-Naur augmentée (ABNF) pour spécifier des schémas de mots. L'inclusion d'une grammaire ABNF dans l'adaptation du modèle de la requête augmente la probabilité que Cloud STT reconnaisse tous les mots correspondant à la grammaire spécifiée.
Pour utiliser cette fonctionnalité, incluez un objet ABNF
grammar dans le champ SpeechAdaptation de votre requête. Les grammaires ABNF peuvent également inclure des références aux ressources CustomClass et PhraseSet. Pour en savoir plus sur la syntaxe de ce champ, consultez Speech
Recognition Grammar Specification et notre exemple de code (code
sample) dans la section suivante.
Affiner les résultats de transcription à l'aide du boost
Par défaut, l'adaptation de modèle devrait déjà avoir un effet suffisant dans la plupart des cas. Le boost de l'adaptation de modèle vous permet d'augmenter la pondération du modèle de reconnaissance en attribuant plus d'importance à certaines expressions qu'à d'autres. Nous vous recommandons de n'implémenter la fonctionnalité de boost que si 1) vous avez déjà implémenté l'adaptation de modèle et 2) vous souhaitez ajuster davantage les effets de l'adaptation de modèle dans les résultats de transcription.
Supposons par exemple que vous disposez d'un grand nombre d'enregistrements de personnes interrogées à propos du "coût d'un lifting du cou", dans lesquels le mot "cou" revient plus fréquemment que "coût". Dans ce cas, vous pouvez utiliser l'adaptation de modèle pour augmenter la probabilité que le modèle reconnaisse à la fois "coût" et "cou" en les ajoutant en tant que phrases dans une ressource PhraseSet. Cela indique à Cloud STT de reconnaître "cou" et "coût" plus souvent que "sou" par exemple.
Toutefois, étant donné que "cou" revient plus souvent que "coût", vous souhaitez que le mot "cou" soit reconnu plus fréquemment. Il est possible que vous ayez déjà transcrit votre contenu audio à l'aide de l'API Cloud Speech-to-Text et trouvé un grand nombre d'erreurs de reconnaissance du bon mot ("cou"). Dans ce cas, vous pouvez également utiliser des expressions avec le boost pour attribuer une valeur de boost plus élevée à "cou" par rapport à "coût". Si la valeur pondérée plus élevée est attribuée à "cou", l'API Cloud Speech-to-Text sélectionne "cou" plus fréquemment que "coût". Sans valeurs de boost, le modèle de reconnaissance reconnaît "cou" et "coût" avec une probabilité égale.
Principes de base du boost
Lorsque vous utilisez la fonctionnalité de boost, vous attribuez une valeur pondérée aux éléments phrase d'une ressource PhraseSet. Cloud STT se réfère à cette valeur pondérée lors de la sélection d'une transcription possible pour les mots apparaissant dans vos données audio. Plus la valeur que vous définissez est élevée, plus vous augmentez la probabilité que Cloud STT sélectionne l'expression parmi les solutions possibles.
Supposons que vous souhaitez attribuer une valeur de boost à la phrase "Mon exposition préférée au musée d'Histoire naturelle est la baleine bleue". Si vous ajoutez cette phrase à un objet phrase et que vous attribuez une valeur de boost, le modèle de reconnaissance sera plus susceptible de reconnaître cette phrase dans son intégralité, mot pour mot.
Si vous n'obtenez pas les résultats escomptés, nous vous suggérons d'ajouter tous les bigrammes (deux mots, dans l'ordre) qui constituent l'expression en tant qu'éléments phrase supplémentaires et de leur attribuer à chacun des valeurs de boost. Pour reprendre l'exemple ci-dessus, vous pourriez envisager d'ajouter d'autres bigrammes et N-grammes (plus de deux mots) tels que "mon exposition", "mon exposition préférée", "exposition préférée", "mon exposition préférée au musée d'Histoire naturelle", "musée d'Histoire naturelle", "baleine bleue", etc. Le modèle de reconnaissance Cloud STT est alors plus susceptible de reconnaître dans votre fichier audio les expressions associées qui contiennent des parties de l'expression d'origine dont la valeur a été boostée, mais qui ne correspondent pas pour autant à la recherche mot pour mot.
Définir des valeurs de boost
Les valeurs de boost doivent être des valeurs flottantes supérieures à 0. La limite maximale pratique pour les valeurs de boost est de 20. Pour obtenir des résultats optimaux, augmentez et diminuez vos valeurs de boost jusqu'à obtenir les résultats de transcription que vous souhaitez.
Des valeurs de boost plus élevées peuvent réduire le nombre de faux négatifs, c'est-à-dire d'énoncés prononcés dans le contenu audio mais mal reconnus par Cloud STT. Mais la fonctionnalité de boost peut également augmenter la probabilité de faux positifs, c'est-à-dire d'énoncés qui figurent dans la transcription alors qu'ils n'ont pas été prononcés dans le contenu audio.
Recevoir des notifications de délai d'inactivité
Les réponses Cloud STT incluent un champ SpeechAdaptationInfo qui fournit des informations sur le comportement de l'adaptation de modèle pendant la reconnaissance. Si un délai d'inactivité lié à l'adaptation de modèle s'est produit, la valeur de adaptationTimeout est true, et timeoutMessage spécifie la configuration d'adaptation à l'origine du délai d'inactivité. Lorsqu'un délai d'inactivité se produit, l'adaptation de modèle n'a aucun effet sur la transcription renvoyée.
Exemple de cas d'utilisation avec l'adaptation de modèle
L'exemple suivant vous guide tout au long du processus d'utilisation de l'adaptation de modèle pour transcrire un enregistrement audio de quelqu'un disant "call me fionity and oh my gosh what do we have here ionity". Dans ce cas, il est important que le modèle identifie correctement "fionity" et "ionity".
La commande suivante effectue la reconnaissance du contenu audio sans adaptation de modèle. La transcription qui en résulte est incorrecte : "call me Fiona tea and oh my gosh what do we have here I own a day".
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"}}'
Exemple de requête :
{ "config":{ "languageCode":"en-US" }, "audio":{ "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav" } }
Améliorer la transcription à l'aide d'un PhraseSet
Créez 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"}'
Exemple de requête :
{ "phraseSetId":"test-phrase-set-1" }
Récupérez le
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"\
Ajoutez les expressions "fionity" et "ionity" à
PhraseSetet attribuez-leur chacune une valeurboostde 10 :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}]}'
PhraseSetest maintenant remplacé par :{ "phrases":[ { "value":"ionity", "boost":10 }, { "value":"fionity", "boost":10 } ] }
Effectuez à nouveau la reconnaissance du contenu audio, en utilisant cette fois l'adaptation de modèle et le
PhraseSetcréé précédemment. Les résultats transcrits sont maintenant corrects : "call me fionity and oh my gosh what do we have here ionity".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"}}'
Exemple de requête :
{ "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" } }
Améliorer les résultats de transcription à l'aide d'une CustomClass
Créez une
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"}'
Exemple de requête :
{ "customClassId": "test-custom-class-1" }
Récupérez la
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"
Effectuez la reconnaissance du clip audio de test. La
CustomClassest vide, et la transcription renvoyée est donc toujours incorrecte : "call me Fiona tea and oh my gosh what do we have here I own a day" :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"}}'
Exemple de requête :
{ "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" } }
Ajoutez les expressions "fionity" et "ionity" à la classe personnalisée :
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 personnalisée est mise à jour comme suit :
{ "items":[ { "value":"ionity" }, { "value":"fionity" } ] }
Effectuez à nouveau la reconnaissance de l'échantillon audio, en ajoutant cette fois les expressions "fionity" et "ionity" à la
CustomClass. La transcription est désormais correcte: "call me fionity and oh my gosh what we have here ionity".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"}}'
Exemple de requête :
{ "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" } }
Référencer une CustomClass dans un PhraseSet
Mettez à jour la ressource
PhraseSetcréée précédemment pour référencer laCustomClass: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}]}'
Exemple de requête :
{ "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" } }
Effectuez la reconnaissance du contenu audio à l'aide de la ressource
PhraseSet(qui fait référence à laCustomClass). La transcription est correcte : "call me fionity and oh my gosh what do we have here ionity".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"}}'
Exemple de requête :
{ "phrases":[ { "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost":10 } ] }
Supprimer la CustomClass et le PhraseSet
Supprimez le
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"
Supprimez la
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"
Améliorer les résultats de transcription en utilisant une grammaire ABNF (ABNF Grammar)
Effectuez la reconnaissance du contenu audio en utilisant une
abnf_grammar. Cet exemple fait référence à une ressourceCustomClass(projects/project_id/locations/global/customClasses/test-custom-class-1), une ressourceCustomClassintégrée (test-custom-class-2), un jeton de classe (ADDRESSNUM) et une ressourcePhraseSet(projects/project_id/locations/global/phraseSets/test-phrase-set-1). La première règle dans les chaînes (après les déclarations externes) est traitée comme étant la racine.Exemple de requête :
{ "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 ;" ] } } } }
Étapes suivantes
- Découvrez comment utiliser l'adaptation de modèle dans une requête adressée à Cloud STT.
- Consultez la liste des jetons de classe pris en charge.