Información general
Puedes usar la función adaptación de modelos para ayudar a Transcripción de voz de Cloud a reconocer palabras o frases concretas con más frecuencia que otras opciones que, de otro modo, se habrían sugerido. Por ejemplo, supongamos que tus datos de audio suelen incluir la palabra "tiempo". Cuando Cloud STT detecte la palabra "tiempo", quieres que la transcriba como "tiempo" con más frecuencia que "si". En este caso, puedes usar la adaptación de modelos para que Cloud STT reconozca "tiempo".
La adaptación de modelos es especialmente útil en los siguientes casos prácticos:
Mejorar la precisión de las palabras y frases que aparecen con frecuencia en tus datos de audio. Por ejemplo, puedes alertar al modelo de reconocimiento sobre los comandos de voz que suelen usar tus usuarios.
Ampliar el vocabulario de palabras reconocidas por Cloud STT. Cloud STT incluye un vocabulario muy amplio. Sin embargo, si tus datos de audio suelen contener palabras que no se usan con frecuencia en el lenguaje general (como nombres propios o palabras específicas de un dominio), puedes añadirlas mediante la adaptación del modelo.
Mejorar la precisión de la transcripción de voz cuando el audio proporcionado contiene ruido o no es muy nítido.
Para saber si la función de adaptación de modelos está disponible en tu idioma, consulta la página de idiomas admitidos.
Mejorar el reconocimiento de palabras y frases
Para aumentar la probabilidad de que Cloud STT reconozca la palabra "tiempo" al transcribir tus datos de audio, puedes enviar la palabra "tiempo" en el objeto PhraseSet del recurso SpeechAdaptation.
Si proporcionas una frase de varias palabras, es más probable que Cloud STT reconozca esas palabras en secuencia. Si proporcionas una frase, también aumentará la probabilidad de reconocer partes de la frase, incluidas palabras concretas. Consulta la página Límites de contenido para ver los límites del número y el tamaño de estas frases.
Si quieres, puedes ajustar la intensidad de la adaptación de modelos con la función de refuerzo de la adaptación de modelos.
Mejorar el reconocimiento con clases
Las clases representan conceptos comunes que aparecen en el lenguaje natural, como las unidades monetarias y las fechas del calendario. Las clases te permiten mejorar la precisión de la transcripción de grupos grandes de palabras que se corresponden con un concepto común, pero que no siempre incluyen palabras o frases idénticas.
Por ejemplo, supongamos que tus datos de audio incluyen grabaciones de personas que dicen su dirección postal. Puede que tengas una grabación de audio de alguien diciendo "Mi casa está en la calle Principal, 123, es la cuarta casa de la izquierda". En este caso, quieres que Cloud STT reconozca la primera secuencia de números ("123") como una dirección en lugar de como un ordinal ("ciento veintitrés"). Sin embargo, no todas las personas viven en "123 Main Street". No es práctico enumerar todas las direcciones postales posibles en un recurso PhraseSet. En su lugar, puedes usar una clase para indicar que
se debe reconocer un número de calle independientemente del número real. En
este ejemplo, Cloud STT podría transcribir con mayor precisión
frases como "123 Main Street" y "987 Grand Boulevard" porque ambas
se reconocen como números de dirección.
Tokens de clase
Para usar una clase en la adaptación de modelos, incluye un token de clase en el campo phrases de un recurso PhraseSet. Consulta la lista de tokens de clase admitidos para ver qué tokens están disponibles en tu idioma. Por ejemplo, para mejorar la transcripción de números de direcciones
del audio de origen, proporciona el valor $ADDRESSNUM en tu objeto SpeechContext.
Puedes usar clases como elementos independientes en la matriz phrases o insertar uno o varios tokens de clase en frases de varias palabras más largas. Por ejemplo, puedes indicar un número de dirección en una frase más larga incluyendo el token de clase en una cadena: ["my address is $ADDRESSNUM"]. Sin embargo, esta frase no será útil en los casos en los que el audio contenga una frase similar, pero no idéntica, como "Estoy en la calle Principal, número 123". Para facilitar el reconocimiento de frases similares, es importante incluir también el token de clase por sí solo: ["my address is $ADDRESSNUM",
"$ADDRESSNUM"]. Si usas un token de clase no válido o mal formado, Cloud STT lo ignora sin activar un error, pero sigue usando el resto de la frase para el contexto.
Clases personalizadas
También puedes crear tu propio CustomClass, una clase compuesta por tu lista personalizada de elementos o valores relacionados. Por ejemplo, quieres transcribir datos de audio que probablemente incluyan el nombre de uno de los cientos de restaurantes de una zona. Los nombres de restaurantes son relativamente raros en el habla general y, por lo tanto, es menos probable que el modelo de reconocimiento los elija como respuesta "correcta". Puedes sesgar el modelo de reconocimiento para que identifique correctamente estos nombres cuando aparezcan en tu audio mediante una clase personalizada.
Para usar una clase personalizada, cree un recurso CustomClass
que incluya el nombre de cada restaurante como ClassItem. Las clases personalizadas funcionan de la misma forma que los tokens de clase predefinidos. Un phrase puede incluir tokens de clase predefinidos y clases personalizadas.
Gramáticas ABNF
También puedes usar gramáticas en notación aumentada de Backus-Naur (ABNF) para especificar patrones de palabras. Si se incluye una gramática ABNF en la adaptación del modelo de la solicitud, aumentará la probabilidad de que Cloud STT reconozca todas las palabras que coincidan con la gramática especificada.
Para usar esta función, incluye un objeto ABNF
grammar en el campo SpeechAdaptation de tu solicitud. Las gramáticas ABNF también pueden incluir referencias a recursos CustomClass y PhraseSet. Para obtener más información sobre la sintaxis de este campo, consulta Speech
Recognition Grammar Specification y code
sample en la siguiente sección.
Afinar los resultados de las transcripciones con la función Aumento
De forma predeterminada, la adaptación del modelo ya debería proporcionar un efecto suficiente en la mayoría de los casos. La función Potenciación de la adaptación de modelos te permite aumentar el sesgo del modelo de reconocimiento asignando más peso a algunas frases que a otras. Te recomendamos que implementes la función de refuerzo solo si 1) ya has implementado la adaptación de modelos y 2) quieres ajustar aún más la intensidad de los efectos de la adaptación de modelos en los resultados de tus transcripciones.
Por ejemplo, tienes muchas grabaciones de personas que preguntan por la "tarifa para entrar en la feria del condado", donde la palabra "feria" aparece con más frecuencia que "tarifa". En este caso, puedes usar la adaptación del modelo para aumentar la probabilidad de que el modelo reconozca tanto "fair" como "fare" añadiéndolos como phrases en un recurso PhraseSet. De esta forma, Cloud STT reconocerá "fair" y "fare" con más frecuencia que, por ejemplo, "hare" o "lair".
Sin embargo, "fair" debería reconocerse con más frecuencia que "fare" debido a que aparece con más frecuencia en el audio. Es posible que ya hayas transcrito el audio con la API Cloud Speech-to-Text y hayas detectado un gran número de errores al reconocer la palabra correcta ("fair"). En este caso, puede usar las frases con boost para asignar un valor de impulso más alto a "fair" que a "fare". El valor ponderado más alto asignado a "fair" sesga la API Cloud Speech-to-Text para que elija "fair" con más frecuencia que "fare". Sin valores de refuerzo, el modelo de reconocimiento reconocerá "fair" y "fare" con la misma probabilidad.
Aspectos básicos de las promociones
Cuando usas la función de aumentar, asignas un valor ponderado a los elementos phrase de un recurso PhraseSet. La STT en la nube hace referencia a este valor ponderado al seleccionar una posible transcripción de las palabras de tus datos de audio. Cuanto mayor sea el valor, más probable será que Cloud STT elija esa palabra o frase entre las alternativas posibles.
Por ejemplo, quieres asignar un valor de impulso a la frase "Mi exposición favorita
del Museo Americano de Historia Natural es la ballena azul". Si añades esa frase a un objeto phrase y le asignas un valor de refuerzo, será más probable que el modelo de reconocimiento reconozca esa frase en su totalidad, palabra por palabra.
Si no obtienes los resultados que buscas al potenciar una frase de varias palabras, te recomendamos que añadas todos los bigramas (2 palabras en orden) que componen la frase como elementos phrase adicionales y que asignes valores de potenciación a cada uno. Siguiendo con el ejemplo anterior, podría investigar la posibilidad de añadir bigramas y n-gramas adicionales (más de dos palabras), como "mi favorito", "mi pieza favorita", "pieza favorita", "mi pieza favorita del Museo Americano de Historia Natural", "Museo Americano de Historia Natural" o "ballena azul". De esta forma, el modelo de reconocimiento de Cloud STT tendrá más probabilidades de reconocer frases relacionadas en tu audio que contengan partes de la frase original potenciada, pero que no coincidan palabra por palabra.
Definir valores de impulso
Los valores de impulso deben ser un valor float mayor que 0. El límite máximo práctico de los valores de impulso es 20. Para obtener los mejores resultados, experimenta con tus resultados de transcripción ajustando los valores de refuerzo hasta que obtengas resultados de transcripción precisos.
Si los valores de refuerzo son más altos, se pueden producir menos falsos negativos, que son los casos en los que la palabra o la frase se han dicho en el audio, pero Cloud STT no las ha reconocido correctamente. Sin embargo, la función de refuerzo también puede aumentar la probabilidad de que se produzcan falsos positivos, es decir, casos en los que la palabra o la frase aparecen en la transcripción aunque no se hayan pronunciado en el audio.
Recibir notificaciones de tiempo de espera
Las respuestas de Cloud STT incluyen un campo SpeechAdaptationInfo
que proporciona información sobre el comportamiento de adaptación del modelo durante el reconocimiento. Si se ha producido un tiempo de espera relacionado con la adaptación del modelo, adaptationTimeout será true y timeoutMessage especificará qué configuración de adaptación ha provocado el tiempo de espera. Cuando se produce un tiempo de espera, la adaptación del modelo no afecta a la transcripción devuelta.
Caso práctico de ejemplo con adaptación de modelos
En el siguiente ejemplo se explica el proceso para usar la adaptación de modelos para transcribir una grabación de audio de alguien que dice "llámame fionity y oh, dios mío, ¿qué tenemos aquí, ionity?". En este caso, es importante que el modelo identifique "fionity" e "ionity" correctamente.
El siguiente comando realiza el reconocimiento del audio sin adaptación del modelo. La transcripción resultante es incorrecta: "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"}}'
Solicitud de ejemplo:
{ "config":{ "languageCode":"en-US" }, "audio":{ "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav" } }
Mejorar la transcripción con una PhraseSet
Crea una
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"}'
Solicitud de ejemplo:
{ "phraseSetId":"test-phrase-set-1" }
Obtén la
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"\
Añade las frases "fionity" e "ionity" al
PhraseSety asigna el valorboost10 a cada una: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}]}'
El
PhraseSetse ha actualizado a:{ "phrases":[ { "value":"ionity", "boost":10 }, { "value":"fionity", "boost":10 } ] }
Vuelve a reconocer el audio, esta vez usando la adaptación del modelo y el
PhraseSetque has creado antes. Los resultados de la transcripción ahora son correctos: "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"}}'
Solicitud de ejemplo:
{ "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" } }
Mejorar los resultados de las transcripciones con un CustomClass
Crea una
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"}'
Solicitud de ejemplo:
{ "customClassId": "test-custom-class-1" }
Obtén 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"
Reconocer el clip de audio de prueba. El
CustomClassestá vacío, por lo que la transcripción devuelta sigue siendo incorrecta: "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"}}'
Solicitud de ejemplo:
{ "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" } }
Añade las frases "fionity" e "ionity" a la clase personalizada:
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"}]}'
De esta forma, la clase personalizada se actualizará de la siguiente manera:
{ "items":[ { "value":"ionity" }, { "value":"fionity" } ] }
Reconoce el audio de muestra de nuevo, esta vez con "fionity" e "ionity" en la
CustomClass. La transcripción ahora es correcta: "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": {"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"}}'
Solicitud de ejemplo:
{ "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" } }
Hacer referencia a un CustomClass en un PhraseSet
Actualiza el recurso
PhraseSetque has creado anteriormente para que haga referencia 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}]}'
Solicitud de ejemplo:
{ "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" } }
Reconoce el audio mediante el recurso
PhraseSet(que hace referencia aCustomClass). La transcripción es correcta: "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"}}'
Solicitud de ejemplo:
{ "phrases":[ { "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost":10 } ] }
Elimina el CustomClass y el PhraseSet.
Elimina el
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 el
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"
Mejorar los resultados de las transcripciones con un ABNF Grammar
Reconoce el audio con un
abnf_grammar. En este ejemplo se hace referencia a un recursoCustomClass: projects/project_id/locations/global/customClasses/test-custom-class-1, un recursoCustomClassinsertado: test-custom-class-2, un token de clase: ADDRESSNUM y un recursoPhraseSet: projects/project_id/locations/global/phraseSets/test-phrase-set-1. La primera regla de las cadenas (después de las declaraciones externas) se tratará como la raíz.Solicitud de ejemplo:
{ "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 ;" ] } } } }
Siguientes pasos
- Consulta cómo usar la adaptación de modelos en una solicitud a Cloud STT.
- Consulta la lista de tokens de clase admitidos.