Compartir vía


Procedimientos recomendados para el reconocimiento del lenguaje conversacional

Use las instrucciones siguientes para crear los mejores proyectos posibles de reconocimiento del lenguaje conversacional.

Elección de un esquema coherente

El esquema es la definición de las intenciones y las entidades. Hay diferentes enfoques que podría tomar al definir lo que debe crear como una intención frente a una entidad. Hágase estas preguntas:

  • ¿Qué acciones o consultas intento capturar de mi usuario?
  • ¿Qué fragmentos de información son importantes en cada acción?

Normalmente, puede pensar en acciones y consultas como intenciones, mientras que la información necesaria para cumplir esas consultas son entidades.

Por ejemplo, supongamos que quiere que los clientes cancele las suscripciones de varios productos que ofrece a través del bot de chat. Puede crear un cancelar intención con varios ejemplos, como "Cancelar el servicio Contoso" o "Detener cargas por la suscripción de Fabrikam". La intención del usuario aquí es cancelar, y el servicio Contoso o suscripción de Fabrikam son las suscripciones que desean cancelar.

Para continuar, cree una entidad para suscripciones. A continuación, puede modelar todo el proyecto para capturar acciones como intenciones y usar entidades para rellenar esas acciones. Este enfoque le permite cancelar todo lo que defina como una entidad, como otros productos. A continuación, puede tener intenciones para registrarse, renovar y actualizar que usen todas las suscripciones y otras entidades.

El diseño de esquema anterior facilita la ampliación de las funcionalidades existentes (cancelación, actualización o registro) a nuevos destinos mediante la creación de una nueva entidad.

Otro enfoque consiste en modelar la información como intenciones y las acciones como entidades. Vamos a tomar el mismo ejemplo de permitir que los clientes cancelen las suscripciones a través del bot de chat.

Puede crear una intención para cada suscripción disponible, como Contoso, con expresiones como "Cancelar Contoso", "Detener la carga de los servicios de Contoso" y "Cancelar la suscripción de Contoso". A continuación, cree una entidad para capturar la acción cancelar. Puede definir diferentes entidades para cada acción o consolidar acciones como una entidad con un componente de lista para diferenciar entre acciones con claves diferentes.

Este diseño de esquema le facilita la extensión de nuevas acciones a destinos existentes mediante la incorporación de nuevas entidades de acción o componentes de entidad.

Asegúrese de evitar intentar embudo de todos los conceptos en intenciones. Por ejemplo, no intente crear una Cancelar Contoso intención que solo tenga el propósito de esa acción específica. Las intenciones y las entidades deben funcionar conjuntamente para capturar toda la información necesaria del cliente.

También debe evitar mezclar diferentes diseños de esquema. No compile la mitad de la aplicación con acciones como intenciones y la otra mitad con información como intenciones. Para obtener los resultados posibles, asegúrese de que es coherente.

Equilibrar los datos de entrenamiento

En lo que respecta a los datos de entrenamiento, intente mantener el esquema bien equilibrado. La inclusión de grandes cantidades de una intención y muy pocas de otras da como resultado un modelo sesgado hacia intenciones concretas.

Para solucionar este escenario, es posible que tenga que reducir el conjunto de entrenamiento. O bien, es posible que tenga que agregarlo. Para reducir tamaño, puede hacer lo siguiente:

  • Deshacerse de un determinado porcentaje de los datos de entrenamiento aleatoriamente.
  • Analizar el conjunto de datos y quitar entradas duplicadas sobrerrepresentadas, que es más sistemática.

Para agregar al conjunto de entrenamiento, en Language Studio, en la pestaña Etiquetado de datos, seleccione Sugerir expresiones. Reconocimiento del lenguaje conversacional envía una llamada a Azure OpenAI para generar expresiones similares.

Captura de pantalla que muestra una sugerencia de expresión en Language Studio.

También debe buscar "patrones" no deseados en el conjunto de entrenamiento. Por ejemplo, busque si el conjunto de entrenamiento de una intención determinada está en minúsculas o comienza con una frase determinada. En tales casos, el modelo que entrena podría aprender estos sesgos no deseados en el conjunto de entrenamiento en lugar de ser capaces de generalizar.

Se recomienda introducir la diversidad de mayúsculas y minúsculas en el conjunto de formación. Si se espera que el modelo controle las variaciones, asegúrese de tener un conjunto de entrenamiento que también refleje esa diversidad. Por ejemplo, incluya algunas expresiones en mayúsculas y minúsculas adecuadas.

Expresiones de etiqueta claramente

  • Asegúrese de que los conceptos a los que hacen referencia las entidades están bien definidos y separables. Compruebe si puede determinar fácilmente las diferencias de forma confiable. Si no es posible, esta falta de distinción podría indicar que el componente aprendido también tendrá dificultades.

  • Si hay una similitud entre entidades, asegúrese de que hay algún aspecto de los datos que proporcione una señal para la diferencia entre ellas.

    Por ejemplo, si creó un modelo para reservar vuelos, un usuario podría usar una expresión como "Quiero un vuelo de Boston a Seattle." Se espera que la ciudad de origen yciudad de destino sean similares. Una señal para diferenciar ciudad de origen podría ser que la palabra de a menudo precede a ella.

  • Asegúrese de etiquetar todas las instancias de cada entidad en los datos de entrenamiento y pruebas. Un enfoque consiste en usar la función de búsqueda para buscar todas las instancias de una palabra o frase en los datos para comprobar si están etiquetadas correctamente.

  • Etiquete los datos de prueba de las entidades que no tienen componente aprendido y también para las entidades que sí lo hacen. Esta práctica ayuda a garantizar que las métricas de evaluación sean precisas.

Uso del entrenamiento estándar antes del entrenamiento avanzado

Entrenamiento estándar es gratuito y más rápido que el entrenamiento avanzado. Puede ayudarle a comprender rápidamente el efecto de cambiar el conjunto de formación o el esquema mientras compila el modelo. Una vez que esté satisfecho con el esquema, considere la posibilidad de usar el entrenamiento avanzado para obtener la mejor calidad del modelo.

Uso de la característica de evaluación

Al compilar una aplicación, a menudo resulta útil detectar errores al principio. Normalmente, se recomienda agregar un conjunto de pruebas al compilar la aplicación. Los resultados de entrenamiento y evaluación son útiles para identificar errores o problemas en el esquema.

Composición y componentes de aprendizaje automático

Para obtener más información, consulte Tipos de componentes.

Uso del umbral de puntuación Ninguno

Si ve demasiados falsos positivos, como expresiones fuera del contexto que se marcan como intenciones válidas, consulte Umbral de confianza para obtener información sobre cómo afecta a la inferencia.

  • Los componentes de entidad que no son de aprendizaje automático, como listas y expresiones regulares, son por definición no contextuales. Si ve entidades de lista o regex en lugares no deseados, pruebe a etiquetar los sinónimos de lista como componente de aprendizaje automático.
  • En el caso de las entidades, puede usar el componente aprendido como componente Requerido, para restringir cuándo se debe activar una entidad compuesta.

Por ejemplo, supongamos que tiene una entidad denominada Cantidad de Vales que intenta extraer el número de vales que desea reservar para reservar vuelos, para expresiones como "Reservar dos billetes mañana a Cairo."

Normalmente, se agrega un componente precompilado para Quantity.Number que ya extrae todos los números en las expresiones. Sin embargo, si la entidad solo se definió con el componente precompilado, también extrae otros números como parte de la entidad Cantidad de Vales, como "Reservar dos entradas mañana a Cairo a las 3 p. m."

Para resolver este problema, etiquetará un componente aprendido en los datos de entrenamiento de todos los números destinados a ser una cantidad de vales. La entidad ahora tiene dos componentes:

  • Componente precompilado que puede interpretar todos los números.
  • Componente aprendido que predice dónde se encuentra la cantidad de vales en una oración.

Si necesita el componente aprendido, asegúrese de que Cantidad de vales solo se devuelve cuando el componente aprendido lo predice en el contexto correcto. Si también necesita el componente precompilado, puede garantizar que la entidad Cantidad de vales devuelta sea un número y en la posición correcta.

Incoherencias del modelo de direcciones

Si el modelo es demasiado sensible a pequeños cambios gramaticales, como mayúsculas y minúsculas o diacríticos, puede manipular sistemáticamente el conjunto de datos directamente en Language Studio. Para usar estas características, seleccione la pestaña Configuración en el panel izquierdo y busque la sección Configuración avanzada del proyecto.

Captura de pantalla que muestra un ejemplo de configuración avanzada del proyecto.

En primer lugar, puede habilitar la configuración de Habilitar transformación de datos para el uso de mayúsculas y minúsculas, que normaliza el uso de mayúsculas y minúsculas de expresiones al entrenar, probar e implementar el modelo. Si ha migrado desde LUIS, es posible que reconozca que LUIS realizó esta normalización de forma predeterminada. Para acceder a esta característica a través de la API, establezca el parámetro normalizeCasing en true. Observe el ejemplo siguiente:

{
  "projectFileVersion": "2022-10-01-preview",
    ...
    "settings": {
      ...
      "normalizeCasing": true
      ...
    }
...

En segundo lugar, también puede habilitar la configuración de Habilitar el aumento de datos para diacríticos generar variaciones de los datos de entrenamiento para posibles variaciones diacríticas usadas en lenguaje natural. Esta característica está disponible para todos los idiomas. Es especialmente útil para los idiomas alemán y eslavo, donde los usuarios suelen escribir palabras mediante caracteres clásicos en inglés en lugar de los caracteres correctos. Por ejemplo, la frase "Navegar al canal deportivo" en francés es "Accédez à la chaîne sportive." Cuando esta característica está habilitada, la frase "Accedez a la chaine sportive" (sin caracteres diacríticos) también se incluye en el conjunto de datos de entrenamiento.

Si habilita esta característica, aumenta el recuento de expresiones del conjunto de entrenamiento. Por este motivo, es posible que tenga que ajustar el tamaño de los datos de entrenamiento en consecuencia. El número máximo de expresiones actual después del aumento es 25 000. Para acceder a esta característica a través de la API, establezca el parámetro augmentDiacritics en true. Observe el ejemplo siguiente:

{
  "projectFileVersion": "2022-10-01-preview",
    ...
    "settings": {
      ...
      "augmentDiacritics": true
      ...
    }
...

Exceso de confianza del modelo de direcciones

Los clientes pueden usar la versión de la configuración del entrenamiento de LoraNorm si el modelo se confía en exceso de forma incorrecta. Un ejemplo de este comportamiento puede ser como el siguiente escenario en el que el modelo predice la intención incorrecta con una confianza del 100 %. Esta puntuación hace que la configuración del proyecto de umbral de confianza no se pueda usar.

Texto Intención prevista Puntuación de confianza
"¿Quién construyó la Torre Eiffel?" Sports 1.00
"¿Te parece que hoy estoy bien?" QueryWeather 1.00
"Espero que tenga una buena noche." Alarm 1.00

Para abordar este escenario, use la versión de configuración de 2023-04-15 que normaliza las puntuaciones de confianza. La configuración del proyecto de umbral de confianza se puede ajustar para lograr el resultado deseado.

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2023-04-15",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

Una vez enviada la solicitud, puede realizar un seguimiento del progreso del trabajo de entrenamiento en Language Studio como de costumbre.

Nota:

Debe volver a entrenar el modelo después de actualizar la configuración del proyecto de confidenceThreshold. Después, debe volver a publicar la aplicación para que el nuevo umbral surta efecto.

Normalización en la versión del modelo 2023-04-15

Con la versión del modelo 2023-04-15, reconocimiento del lenguaje conversacional proporciona normalización en la capa de inferencia que no afecta al entrenamiento.

La capa de normalización normaliza las puntuaciones de confianza de clasificación en un intervalo limitado. El intervalo seleccionado actualmente es de [-a,a] donde "a" es la raíz cuadrada del número de intenciones. Como resultado, la normalización depende del número de intenciones de la aplicación. Si el número de intenciones es bajo, la capa de normalización tiene un intervalo pequeño con el que trabajar. Con un gran número de intenciones, la normalización es más eficaz.

Si esta normalización no parece ayudar a las intenciones fuera del ámbito en la medida en que se pueda usar el umbral de confianza para filtrar expresiones fuera del ámbito, podría estar relacionada con el número de intenciones de la aplicación. Considere la posibilidad de agregar más intenciones a la aplicación. O bien, si usa una arquitectura orquestada, considere la posibilidad de combinar aplicaciones que pertenecen al mismo dominio.

Depuración de entidades compuestas

Las entidades son funciones que emiten intervalos en la entrada con un tipo asociado. Uno o varios componentes definen la función. Puede marcar los componentes según sea necesario y puede decidir si habilitar la configuración de Combinar componentes. Al combinar componentes, todos los intervalos que se superponen se combinan en un único intervalo. Si no se usa la configuración, se emite cada intervalo de componentes individual.

Para comprender mejor cómo funcionan los componentes individuales, puede deshabilitar la configuración y establecer cada componente en No es necesario. Esta configuración le permite inspeccionar los intervalos individuales emitidos y experimentar con la eliminación de componentes para que solo se generen componentes problemáticos.

Evaluación de un modelo mediante varios conjuntos de pruebas

Los datos de un proyecto de reconocimiento del lenguaje conversacional pueden tener dos conjuntos de datos: un conjunto de pruebas y un conjunto de entrenamiento. Si desea usar varios conjuntos de pruebas para evaluar el modelo, puede hacer lo siguiente:

  • Asigne a los conjuntos de pruebas nombres diferentes (por ejemplo, "test1" y "test2").
  • Exporte el proyecto para obtener un archivo JSON con sus parámetros y configuración.
  • Use el código JSON para importar un nuevo proyecto. Cambie el nombre del segundo conjunto de pruebas deseado a "prueba."
  • Entrene el modelo para ejecutar la evaluación mediante el segundo conjunto de pruebas.

Parámetros personalizados para aplicaciones de destino y aplicaciones secundarias

Si usa aplicaciones orquestadas, es posible que quiera enviar invalidaciones de parámetros personalizados para varias aplicaciones secundarias. El targetProjectParameters campo permite a los usuarios enviar un diccionario que representa los parámetros de cada proyecto de destino. Por ejemplo, considere una aplicación de orquestador denominada Orchestrator orquestación entre una aplicación de reconocimiento del lenguaje conversacional denominada CLU1 y una aplicación de respuesta a preguntas personalizada denominada CQA1. Si desea enviar un parámetro denominado "top" a la aplicación de respuesta a preguntas, puede usar el parámetro anterior.

curl --request POST \
   --url 'https://<your-language-resource>.cognitiveservices.azure.com/language/:analyze-conversations?api-version=2022-10-01-preview' \
   --header 'ocp-apim-subscription-key: <your subscription key>' \
   --data '{
     "kind": "Conversation",
     "analysisInput": {
         "conversationItem": {
             "id": "1",
             "text": "Turn down the volume",
             "modality": "text",
             "language": "en-us",
             "participantId": "1"
         }
     },
     "parameters": {
         "projectName": "Orchestrator",
         "verbose": true,
         "deploymentName": "std",
         "stringIndexType": "TextElement_V8",
"targetProjectParameters": {
            "CQA1": {
                "targetProjectKind": "QuestionAnswering",
                "callingOptions": {
                    "top": 1
                }
             }
         }
     }
 }'

Copia de proyectos entre recursos de lenguaje

A menudo, puede copiar proyectos de reconocimiento de lenguaje conversacional de un recurso a otro mediante el botón Copiar en Language Studio. En algunos casos, puede ser más fácil copiar proyectos mediante la API.

En primer lugar, identifique lo siguiente:

  • Nombre del proyecto de origen.
  • Nombre del proyecto de destino.
  • Recurso de idioma de origen.
  • Recurso de idioma de destino, en el que desea copiarlo.

Llame a la API para autorizar la acción de copia y obtener accessTokens para la operación de copia real más adelante.

curl --request POST \ 
  --url 'https://<target-language-resource>.cognitiveservices.azure.com//language/authoring/analyze-conversations/projects/<source-project-name>/:authorize-copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>' \ 
  --data '{"projectKind":"Conversation","allowOverwrite":false}' 

Llame a la API para completar la operación de copia. Use la respuesta que obtuvo anteriormente como carga útil.

curl --request POST \ 
  --url 'https://<source-language-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<source-project-name>/:copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>\ 
  --data '{ 
"projectKind": "Conversation", 
"targetProjectName": "<target-project-name>", 
"accessToken": "<access-token>", 
"expiresAt": "<expiry-date>", 
"targetResourceId": "<target-resource-id>", 
"targetResourceRegion": "<target-region>" 
}'

Dirección de las expresiones fuera del dominio

Los clientes pueden usar la nueva versión actualizada de la configuración del entrenamiento 2024-08-01-preview (anteriormente 2024-06-01-preview) si la calidad del modelo es baja en las expresiones fuera del dominio. Un ejemplo de este escenario con la configuración del entrenamiento predeterminada puede ser como el ejemplo siguiente, donde el modelo tiene tres intenciones: Sports, QueryWeathery Alarm. Las expresiones de prueba son expresiones fuera de dominio y el modelo las clasifica como InDomain con una puntuación de confianza relativamente alta.

Texto Intención prevista Puntuación de confianza
"¿Quién construyó la Torre Eiffel?" Sports 0.90
"¿Te parece que hoy estoy bien?" QueryWeather 1.00
"Espero que tenga una buena noche." Alarm 0.80

Para solucionar este escenario, use la versión de configuración de 2024-08-01-preview creada específicamente para solucionar este problema, a la vez que mantiene una calidad razonablemente buena en InDomain expresiones.

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2024-08-01-preview",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

Una vez enviada la solicitud, puede realizar un seguimiento del progreso del trabajo de entrenamiento en Language Studio como de costumbre.

Advertencias:

  • El umbral de puntuación Ninguno para la aplicación (umbral de confianza por debajo del cual topIntent está marcado como None) cuando use esta configuración del entrenamiento debe establecerse en 0. Este valor se usa porque esta nueva configuración del entrenamiento atribuye una determinada parte de las probabilidades dentro del dominio a fuera del dominio, con el fin de que el modelo no se tenga demasiada confianza de forma incorrecta sobre las expresiones en el dominio. Como resultado, los usuarios podrían ver puntuaciones de confianza ligeramente reducidas para las expresiones en el dominio en comparación con la configuración del entrenamiento de prod.
  • No se recomienda esta configuración del entrenamiento para aplicaciones con solo dos intenciones, como IntentA y None, por ejemplo.
  • No se recomienda esta configuración del entrenamiento para aplicaciones con un número bajo de expresiones por intención. Se recomienda encarecidamente un mínimo de 25 expresiones por intención.