Descripción general
En Speech-to-Text, puedes usar la función de adaptación de modelos para ayudar a que se reconozcan palabras o frases específicas con más frecuencia que otras opciones que podrían sugerirse. Por ejemplo, supongamos que tus datos de audio suelen incluir la palabra “clima”. Cuando se encuentra la palabra “clima”, quieres que se transcriba la palabra como “clima” con más frecuencia que "cima" en Speech-to-Text. En este caso, puedes usar la adaptación de modelos para inclinar a que se reconozca "clima" en Speech-to-Text.
La adaptación de modelos es particularmente útil en los siguientes casos prácticos:
Mejora la exactitud de las palabras y frases que aparecen con frecuencia en tus datos de audio. Por ejemplo, puedes enviar una alerta al modelo de reconocimiento sobre los comandos por voz que suelen pronunciar tus usuarios.
Expande el vocabulario de palabras reconocidas con Speech-to-Text. El vocabulario contenido en Speech-to-Text es muy grande. Sin embargo, si tus datos de audio a menudo contienen palabras poco comunes en el lenguaje general (como nombres propios o palabras específicas del dominio), puedes agregarlas mediante la adaptación de modelos.
Mejora la exactitud de la transcripción de voz cuando el audio suministrado contenga ruido o no sea muy claro.
Para ver si la función de adaptación de modelo está disponible en tu idioma, consulta la página de idiomas admitidos.
Mejora el reconocimiento de palabras y frases
En Speech-to-Text, para aumentar la probabilidad de que se reconozca la palabra “clima” cuando se transcriban tus datos de audio, puedes pasar la palabra única “clima” en el objeto PhraseSet
en SpeechAdaptation.
Cuando proporcionas una frase de varias palabras, es más probable que se reconozcan esas palabras en secuencia en Speech-to-Text. Cuando se proporciona una frase, también aumenta la probabilidad de reconocer partes de ella, incluidas las palabras individuales. Consulta la página Límites de contenido para conocer los límites de cantidad y tamaño de estas frases.
De manera opcional, puedes ajustar la intensidad de la adaptación de modelos mediante la función de mejora de la adaptación de modelos.
Mejora el reconocimiento mediante clases
Las clases representan conceptos comunes que ocurren en el lenguaje natural, como unidades monetarias y fechas del calendario. Mediante una clase, puedes mejorar la exactitud de la transcripción para grupos grandes de palabras que se asignan a 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. Podías tener una grabación de audio de alguien que dice: “Mi casa está en 123 Main Street, la cuarta casa a la izquierda”. En este caso, deseas que se reconozca la primera secuencia de números (“123”) como una dirección en lugar de un número ordinal (“centésimo vigésimo tercero”) en Speech-to-Text. Sin embargo, no todas las personas viven en “Main Street 123”. No es práctico enumerar todas las direcciones posibles en un recurso PhraseSet
. En su lugar, puedes usar una clase para indicar que un número de calle debe reconocerse sin importar cuál sea el número. En este ejemplo, Speech-to-Text podría transcribir con mayor exactitud 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 en Tokens de clase admitidos a fin de ver cuáles están disponibles para tu idioma. Por ejemplo, para mejorar la transcripción de los números de dirección de tu audio de origen, proporciona el valor $ADDRESSNUM
en tu objeto SpeechContext
.
Puedes usar clases como elementos independientes en el arreglo phrases
o incorporar uno o más 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 mediante la inclusión del token de clase en una string: ["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 Main Street 123”. Para facilitar el reconocimiento de frases similares, es importante incluir, además, el token de clase de forma independiente: ["my address is $ADDRESSNUM",
"$ADDRESSNUM"]
. Si usas un token de clase no válido o con errores de formato, se ignora el token sin activar un error, pero aún se utiliza el resto de la frase para el contexto en Speech-to-Text.
Clases personalizadas
También puedes crear tu propia CustomClass
, una clase compuesta por tu propia lista personalizada de elementos o valores relacionados. Por ejemplo, puedes transcribir datos de audio que probablemente incluyan el nombre de cualquiera de los cientos de restaurantes regionales. Los nombres de los restaurantes son relativamente poco frecuentes en el lenguaje general y, por lo tanto, es menos probable que el modelo de reconocimiento los elija como respuesta “correcta”. Puedes sesgar el modelo de reconocimiento hacia la identificación correcta de estos nombres cuando aparecen en tu audio con una clase personalizada.
Para usar una clase personalizada, crea un recurso CustomClass
que incluya cada nombre de restaurante como ClassItem
. Las clases personalizadas funcionan de la misma manera que los tokens de clase precompilados. Una phrase
puede incluir tokens de clase precompilados y clases personalizadas.
Gramáticas de ABNF
También puedes usar las gramáticas en forma Backus-Naur aumentada (ABNF) para especificar patrones de palabras. Incluir una gramática ABNF en la adaptación de modelos de la solicitud aumentará la probabilidad de que Speech-to-Text reconozca todas las palabras que coinciden 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 de ABNF también pueden incluir referencias a los recursos CustomClass
y PhraseSet
. Para obtener más información sobre la sintaxis de este campo, consulta Speech Recognition Grammar Specification
y nuestro code sample
a continuación.
Optimiza los resultados de la transcripción con una mejora
De forma predeterminada, la adaptación de modelos ya debe proporcionar un efecto suficiente en la mayoría de los casos. La característica de mejora de la adaptación de modelos te permite aumentar la inclinación del modelo de reconocimiento mediante la asignación de más peso a algunas frases. Te recomendamos que implementes la mejora solo si, 1) ya implementaste la adaptación de modelos y, 2) deseas ajustar aún más la intensidad de los efectos de la adaptación de modelos en los resultados de la transcripción.
Por ejemplo, tienes muchas grabaciones de personas que preguntan si “se normalizaron los vuelos hacia Asia”, en las que la palabra “Asia” aparece con más frecuencia que “hacia”. En este caso, puedes usar la adaptación de modelos para aumentar la probabilidad de que el modelo reconozca “Asia” y “hacia” si las agregas como frases en phrases
en un recurso PhraseSet
. Esta acción le indicará a Speech-to-Text que reconozca “Asia” y “hacia” con más frecuencia que, por ejemplo, “lacia” o “fascia”.
Sin embargo, “Asia” debe reconocerse con más frecuencia que “hacia” debido a sus apariciones más frecuentes en el audio. Es posible que ya hayas transcrito el audio con la API de Speech-to-Text y hayas encontrado una gran cantidad de errores que reconozcan la palabra correcta (“Asia”). En este caso, también puedes usar las frases con mejora para asignar un valor de impulso más alto a “Asia” que “hacia”. El valor ponderada más alto asignado a “Asia” admite la API de Speech-to-Text para seleccionar “Asia” con más frecuencia que “hacia”. Sin los valores de mejora, el modelo de reconocimiento reconocerá “Asia” y “hacia” con la misma probabilidad.
Conceptos básicos de la mejora
Cuando usas la mejora, asignas un valor ponderado a los elementos phrase
de un recurso PhraseSet
. En Speech-to-Text, se hace referencia a este valor ponderado cuando se selecciona una posible transcripción de palabras en tus datos de audio. Cuanto más alto sea el valor, mayor será la probabilidad de que se elija esa palabra o frase entre las posibles alternativas en Speech-to-Text.
Por ejemplo, deseas asignar un valor de mejora a la frase “Mi exposición favorita en el Museo Americano de Historia Natural es la ballena azul”. Si agregas esa frase a un objeto phrase
y asigna un valor de mejora, es más probable que el modelo de reconocimiento reconozca esa frase en su totalidad.
Si no obtienes los resultados que buscas mediante la mejora de una frase de varias palabras, te sugerimos que agregues todos los bigramas (2 palabras, en orden) que compongan la frase como elementos phrase
adicionales y asigna los valores de mejora a cada uno. Siguiendo con el ejemplo anterior, podrías investigar cómo agregar de bigramas y n-gramas adicionales (más de 2 palabras), como “mi favorito”, “mi exposición favorita”, “exposición favorita”, “mi exposición favorita en el Museo Americano de Historia Natural”, “Museo Americano de Historia Natural”, “ballena azul”, etcétera. El modelo de reconocimiento Speech-to-Text es más probable que reconozca frases relacionadas en tu audio que contengan partes de la frase mejorada, pero no coincidan palabra por palabra.
Establece valores de impulso
Los valores de impulso deben ser un número de punto flotante mayor que 0. El límite máximo práctico para los valores de mejora es de 20. Si deseas obtener mejores resultados, experimenta con los resultados de la transcripción mediante el aumento o la disminución de tus valores de mejora hasta que obtengas resultados de transcripción precisos.
Los valores de mejora más altos pueden dar como resultado menos falsos negativos, que son casos en los que la palabra o frase ocurrió en el audio, pero no se reconoció correctamente en Speech-to-Text. Sin embargo, la mejora también puede aumentar la probabilidad de falsos positivos; es decir, casos en los que la palabra o la frase aparecen en la transcripción aunque esto no haya ocurrido en el audio.
Recibe notificaciones de tiempo de espera
Las respuestas de Speech-to-Text incluyen un campo SpeechAdaptationInfo
, que proporciona información sobre el comportamiento de la adaptación del modelo durante el reconocimiento. Si se produjo un tiempo de espera relacionado con la adaptación del modelo, adaptationTimeout
será true
y timeoutMessage
especificará qué configuración de adaptación causó el tiempo de espera. Cuando se agota el tiempo de espera, la adaptación del modelo no tiene efecto en la transcripción que se muestra.
Ejemplo de caso de uso mediante la adaptación de modelos
En el siguiente ejemplo, se explica el proceso para usar la adaptación de modelos a fin de transcribir una grabación de audio de alguien que dice “call me fionity and oh my gosh what do we have here ionity”. En este caso, es importante que el modelo identifique de forma correcta “fionity” y “ionity”.
Con el siguiente comando, se realiza el reconocimiento del audio sin la adaptación de modelos. 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" } }
Mejora la transcripción con un 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 el
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"\
Agrega las frases “fionity” y “ionity” al
PhraseSet
y asigna un valorboost
de 10 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}]}'
PhraseSet
se actualizó a lo siguiente:{ "phrases":[ { "value":"ionity", "boost":10 }, { "value":"fionity", "boost":10 } ] }
Vuelve a reconocer el audio, esta vez con la adaptación de modelos y el
PhraseSet
creado antes. Los resultados transcritos 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" } }
Mejora los resultados de la transcripción con una 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 el
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"
Reconoce el clip de audio de prueba La
CustomClass
está vacía, por lo que la transcripción que se muestra 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" } }
Agrega las frases "fionity" y "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"}]}'
Esto actualiza la clase personalizada a lo siguiente:
{ "items":[ { "value":"ionity" }, { "value":"fionity" } ] }
Vuelve a reconocer el audio de muestra, esta vez con “fionity” y “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" } }
Haz referencia a una CustomClass
en una PhraseSet
Actualiza el recurso
PhraseSet
creado antes para hacer 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 con 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 } ] }
Borra la CustomClass
y la PhraseSet
Borra la
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"
Borra
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"
Mejora los resultados de la transcripción con una 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, unaCustomClass
intercalada: 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 en las strings (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 ;" ] } } } }
¿Qué sigue?
- En Usa la adaptación de modelo, obtén más información para hacerlo en una solicitud a Speech-to-Text.
- Revisa la lista en Tokens de clase admitidos.