Descripción general
Puedes usar la función de adaptación de modelos para ayudar a Cloud Speech-to-Text a reconocer 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 "hola". Cuando Cloud STT encuentra esta palabra, quieres que la transcriba como "hola" con más frecuencia que "ola". En este caso, puedes usar la adaptación de modelos para orientar a Cloud STT a que reconozca "hola".
La adaptación de modelos resulta útil en los casos de uso que se indican a continuación:
Mejorar la exactitud de las palabras y frases que aparecen con frecuencia en los datos de audio. Por ejemplo, puedes alertar al modelo de reconocimiento sobre los comandos por voz que suelen pronunciar los usuarios.
Expandir el vocabulario de palabras reconocidas por Cloud STT. Este modelo incluye un vocabulario muy amplio. Sin embargo, si tus datos de audio suelen incluir palabras poco comunes en el lenguaje general (como nombres propios o palabras específicas de un dominio), puedes agregarlas con la adaptación de modelos
Mejorar la exactitud de la transcripción de voz cuando el audio proporcionado contiene ruido o no es 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
Para aumentar la probabilidad de que Cloud STT reconozca la palabra
"hola" cuando transcriba tus datos de audio, puedes pasar esta palabra única
por el objeto
PhraseSet
en un
recurso de
SpeechAdaptation.
Cuando proporcionas una frase de varias palabras, es más probable que Cloud STT las reconozca en secuencia. Con esta 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 la cantidad y el tamaño de estas frases.
De manera opcional, puedes ajustar la intensidad de la adaptación de modelos con la función de mejora de la adaptación de modelos.
Mejora el reconocimiento con clases
Las clases representan conceptos comunes que aparecen en el lenguaje natural, como unidades monetarias y fechas del calendario. Con una clase, puedes mejorar la exactitud de la transcripción de 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 mencionan su dirección. Podrías tener una grabación de audio de alguien que dice "Mi
casa está en Calle Principal 123, la cuarta casa a la izquierda". En este caso, querrás
que Cloud STT reconozca la primera secuencia de números ("123") como una
dirección en lugar de un número ordinal ("ciento veintitrés"). Sin embargo, no todas
las personas viven en "Calle Principal 123". No es práctico crear una lista de 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,
Cloud STT podría transcribir con mayor exactitud frases
como "Calle Principal 123" y "Gran Boulevard 987" porque ambas se reconocen como números
de direcciones.
Tokens de clases
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 clases admitidos para 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 array 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 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 incluya una frase similar, pero no idéntica, como: "Estoy en
Calle Principal 123". Para facilitar el reconocimiento de frases similares, es importante
incluir, además, el token de clase por separado: ["my address is $ADDRESSNUM",
"$ADDRESSNUM"]. Si usas un token de clase no válido o con errores de formato,
Cloud STT lo ignorará sin activar un error, pero usará el resto
de la frase para el contexto.
Clases personalizadas
También puedes crear tu propia CustomClass, una clase compuesta por tu lista personalizada
de elementos o valores relacionados. Por ejemplo, puedes transcribir datos de audio que es
probable que incluyan el nombre de cualquiera de cientos de restaurantes
regionales. Los nombres de restaurantes no aparecen con frecuencia en
el lenguaje general y, por lo tanto, es menos probable que el modelo de reconocimiento los elija como respuesta
"correcta". Puedes orientar al modelo de reconocimiento para que identifique correctamente estos
nombres cuando aparezcan en un 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 clases
precompilados. Una phrase puede incluir tokens de clases 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 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 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
en la siguiente sección.
Ajusta los resultados de 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 función de mejora de la adaptación de modelos permite orientar mejor al modelo de reconocimiento asignando más ponderaciones a algunas frases que a otras. 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” agregándolas como phrases a un
recurso PhraseSet. Esta acción le indicará a Cloud STT que reconozca "Asia"
y "hacia" con más frecuencia que, por ejemplo, "lacia" o "fascia".
Sin embargo, "Asia" debe reconocerse más a menudo que "hacia", ya que aparece con más frecuencia en el audio. Es posible que ya hayas transcrito el audio con la API de Cloud Speech-to-Text y hayas encontrado una gran cantidad de errores relacionados con el reconocimiento de la palabra correcta ("Asia"). En este caso, también puedes usar las frases con mejora para asignar un valor de mejora más alto a "Asia" que "hacia". El valor ponderado asignado a "Asia", que es más alto, orienta a la API de Cloud Speech-to-Text para que elija "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 se usa la mejora, se asigna un valor ponderado a los elementos de una phrase
de un recurso PhraseSet. Cloud STT hace referencia a este valor ponderado
cuando elige una transcripción posible de palabras incluidas en los datos de audio. Cuanto más alto sea el valor,
mayor será la probabilidad de que elija esa palabra
o frase entre las alternativas posibles.
Por ejemplo, supongamos que quieres asignar un valor de mejora a la frase
"Mi exposición favorita del Museo Estadounidense de Historia Natural es la ballena azul". Si agregas esa frase
a un objeto phrase y asignas un valor de mejora, es más probable que el modelo de reconocimiento reconozca
esa frase en su totalidad palabra por palabra.
Si no obtienes los resultados que buscas mejorando 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 asignes los valores de mejora a cada uno. Siguiendo
con el ejemplo anterior, podrías investigar cómo agregar bigramas y n-gramas adicionales
(más de 2 palabras), como "mi favorita", "mi exposición favorita", "exposición
favorita", "mi exposición favorita del Museo Estadounidense de Historia
Natural", "Museo Estadounidense de Historia Natural" y "ballena azul". Es más probable que el
modelo de reconocimiento Cloud STT reconozca frases relacionadas en el audio que
incluyan partes de la frase original mejorada, pero no coincidan
palabra por palabra.
Establece valores de mejora
Los valores de mejora 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. Para mejorar la calidad, experimenta con los resultados de la transcripción aumentando o disminuyendo los valores de mejora hasta que obtengas resultados precisos.
Los valores de mejora más altos pueden generar menos falsos negativos, que son casos en los que la palabra o la frase apareció en el audio, pero Cloud STT no la reconoció correctamente. Sin embargo, la mejora también puede aumentar la probabilidad de falsos positivos. Es decir, casos en los que la palabra o la frase aparece en la transcripción aunque no se haya mencionado en el audio.
Recibe notificaciones de tiempo de espera
Las respuestas de Cloud STT
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 produce un tiempo
de espera, la adaptación del modelo no tiene efecto en la transcripción que se devuelve.
Caso de uso de ejemplo sobre la adaptación de modelos
En el ejemplo siguiente, se explica el proceso de adaptación de modelos para transcribir una grabación de audio de una persona que dice "llámame Danilo y oh Dios mío qué tenemos aquí Camilo". En este caso, es importante que el modelo identifique de forma correcta "Danilo" y "Camilo".
Con el siguiente comando, se realiza el reconocimiento del audio sin la adaptación de modelos. La transcripción resultante es incorrecta: "llámame Dani y lo oh Dios mío qué tenemos aquí camínalo".
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 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"}'
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 "Danilo" y "Camilo" al
PhraseSety asigna un valorboostde 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}]}'
PhraseSetse 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
PhraseSetcreado antes. Los resultados transcritos son correctos: "llámame Danilo y oh Dios mío qué tenemos aquí Camilo".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 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"
Reconoce el clip de audio de prueba. La
CustomClassestá vacía, por lo que la transcripción que se devuelve sigue siendo incorrecta: "llámame Dani y lo oh Dios mío qué tenemos aquí camínalo":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 "Camilo" y "Danilo" 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 "Danilo" y "Camilo" en la
CustomClass. La transcripción ahora es correcta: "llámame Danilo y oh Dios mío qué tenemos aquí Camilo".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 un PhraseSet
Actualiza el recurso
PhraseSetcreado 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: "llámame Danilo y oh Dios mío qué tenemos aquí Camilo".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 el PhraseSet
Borra
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 una
abnf_grammar. En este ejemplo, se hace referencia a un recursoCustomClass: projects/project_id/locations/global/customClasses/test-custom-class-1, unaCustomClassintercalada: 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 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 ;" ] } } } }
¿Qué sigue?
- Aprende a usar la adaptación de modelo en una solicitud a Cloud STT.
- Revisa la lista de tokens de clases compatibles.