Garantizando una selección confiable de estímulos de pocos ejemplos para LLMs

Garantizando selección confiable de estímulos para LLMs

Autores: Chris Mauck, Jonas Mueller

En este artículo, utilizamos el modelo de lenguaje Davinci Large de OpenAI (el modelo que respalda GPT-3/ChatGPT) con ejemplos de pocos disparos en un intento de clasificar la intención de las solicitudes de servicio al cliente en un gran banco. Siguiendo la práctica habitual, obtenemos los ejemplos de pocos disparos para incluir en la plantilla de la solicitud de un conjunto de datos disponible de ejemplos de solicitudes etiquetadas por humanos. Sin embargo, las predicciones del modelo de lenguaje son poco confiables; una inspección detallada revela que esto se debe a que los datos del mundo real son desordenados y propensos a errores. El rendimiento del modelo de lenguaje en esta tarea de clasificación de la intención del servicio al cliente solo mejora marginalmente al modificar manualmente la plantilla de la solicitud para mitigar los datos potencialmente ruidosos. Las predicciones del modelo de lenguaje son significativamente más precisas si en su lugar utilizamos algoritmos de IA centrados en los datos, como Confident Learning, para garantizar que solo se seleccionen ejemplos de pocos disparos de alta calidad para incluir en la plantilla de la solicitud.

   

Veamos cómo podemos seleccionar ejemplos de pocos disparos de alta calidad para solicitar que el modelo de lenguaje produzca predicciones más confiables. La necesidad de asegurar ejemplos de alta calidad en la solicitud de pocos disparos puede parecer obvia, pero muchos ingenieros desconocen que existen algoritmos/software que pueden ayudar a hacer esto de manera más sistemática (de hecho, existe una disciplina científica completa de la IA centrada en los datos). La curación algorítmica de datos tiene muchas ventajas: es completamente automatizada, sistemática y ampliamente aplicable a aplicaciones generales del modelo de lenguaje más allá de la clasificación de la intención.

 

Conjunto de datos de intención bancaria

 

Este artículo estudia una variante de 50 clases del conjunto de datos Banking-77, que contiene consultas de banca en línea anotadas con sus intenciones correspondientes (la etiqueta que se muestra a continuación). Evaluamos modelos que predicen esta etiqueta utilizando un conjunto de datos de prueba fijo que contiene aproximadamente 500 frases, y tenemos un grupo de aproximadamente 1000 frases etiquetadas que consideramos como candidatas para incluir entre nuestros ejemplos de pocos disparos.

   

Puede descargar el grupo de candidatos de ejemplos de pocos disparos y el conjunto de pruebas aquí y aquí. Aquí hay un cuaderno que puede ejecutar para reproducir los resultados mostrados en este artículo.

 

Solicitud de pocos disparos

 

La solicitud de pocos disparos (también conocida como aprendizaje en contexto) es una técnica de PLN que permite a los modelos preentrenados realizar tareas complejas sin ningún entrenamiento explícito (es decir, actualizaciones de los parámetros del modelo). En la solicitud de pocos disparos, proporcionamos al modelo un número limitado de pares de entrada-salida, como parte de una plantilla de solicitud que se incluye en la solicitud utilizada para instruir al modelo sobre cómo manejar una entrada específica. El contexto adicional proporcionado por la plantilla de solicitud ayuda al modelo a inferir mejor qué tipos de salidas se desean. Por ejemplo, dada la entrada: “¿San Francisco está en California?”, un modelo de lenguaje entenderá mejor qué tipo de salida se desea si esta solicitud se amplía con una plantilla fija de manera que la nueva solicitud sea algo como:

Texto: ¿Está Boston en Massachusetts?

Etiqueta: Sí

Texto: ¿Está Denver en California?

Etiqueta: No

Texto: ¿Está San Francisco en California?

Etiqueta:

La solicitud de pocos disparos es particularmente útil en escenarios de clasificación de texto donde las clases son específicas del dominio (como suele ser el caso en aplicaciones de servicio al cliente en diferentes empresas).

   

En nuestro caso, tenemos un conjunto de datos con 50 posibles clases (intenciones) para proporcionar contexto, de modo que el modelo de lenguaje preentrenado de OpenAI pueda aprender la diferencia entre las clases en contexto. Usando LangChain, seleccionamos un ejemplo aleatorio de cada una de las 50 clases (de nuestro grupo de ejemplos candidatos etiquetados) y construimos una plantilla de solicitud de 50 disparos. También agregamos una cadena que lista las clases posibles antes de los ejemplos de pocos disparos para asegurar que la salida del modelo de lenguaje sea una clase válida (es decir, una categoría de intención).

La plantilla de solicitud de 50 disparos anterior se utiliza como entrada para el modelo de lenguaje para que clasifique cada uno de los ejemplos en el conjunto de pruebas (el texto objetivo anterior es la única parte de esta entrada que cambia entre diferentes ejemplos de prueba). Estas predicciones se comparan con las etiquetas verdaderas para evaluar la precisión del modelo de lenguaje producido utilizando una plantilla de solicitud de pocos disparos seleccionada.

 

Rendimiento del modelo de línea base

 

# Este método maneja:
# - recopilación de cada uno de los ejemplos de prueba
# - formato del comando
# - consulta a la API de LLM
# - análisis del resultado
def eval_prompt(examples_pool, test, prefix="", use_examples=True):
    texts = test.text.values
    responses = []
    examples = get_examples(examples_pool, seed) if use_examples else []
    for i in range(len(texts)):
        text = texts[i]
        prompt = get_prompt(examples_pool, text, examples, prefix)
        resp = get_response(prompt)
        responses.append(resp)
    return responses

 

# Evaluar el comando de 50 ejemplos mostrado anteriormente.
preds = eval_prompt(examples_pool, test)
evaluate_preds(preds, test)
>>> Exactitud del modelo: 59.6%

 

Al ejecutar cada uno de los ejemplos de prueba a través del LLM con el comando de 50 ejemplos mostrado anteriormente, obtenemos una exactitud del 59.6%, lo cual no está mal para un problema de 50 clases. Sin embargo, esto no es del todo satisfactorio para la aplicación de servicio al cliente de nuestro banco, así que echemos un vistazo más de cerca al conjunto de datos (es decir, al conjunto) de ejemplos candidatos. ¡Cuando el aprendizaje automático tiene un rendimiento deficiente, a menudo es culpa de los datos!

 

Problemas en nuestros datos

 

Al inspeccionar detenidamente el conjunto de ejemplos candidatos del cual se extrajo nuestro comando de pocos ejemplos, encontramos frases etiquetadas incorrectamente y valores atípicos ocultos en los datos. Aquí hay algunos ejemplos que claramente fueron anotados de manera incorrecta.

   

Investigaciones anteriores han observado que muchos conjuntos de datos populares contienen ejemplos etiquetados incorrectamente debido a que los equipos de anotación de datos no son perfectos.

También es común que los conjuntos de datos de servicio al cliente contengan ejemplos fuera de alcance que se incluyeron accidentalmente. Aquí vemos algunos ejemplos extraños que no corresponden a solicitudes válidas de servicio al cliente bancario.

 

 

¿Por qué importan estos problemas?

 

A medida que aumenta el tamaño del contexto para los LLM, es cada vez más común que los comandos incluyan muchos ejemplos. Por lo tanto, puede que no sea posible validar manualmente todos los ejemplos en su comando de pocos ejemplos, especialmente con un gran número de clases (o si carece de conocimiento de dominio sobre ellos). Si la fuente de datos de estos ejemplos de pocos ejemplos contiene problemas como los mostrados anteriormente (como muchos conjuntos de datos del mundo real), entonces ejemplos erróneos pueden encontrar su camino en sus comandos. El resto del artículo examina el impacto de este problema y cómo podemos mitigarlo.

 

¿Podemos advertir al LLM que los ejemplos pueden contener ruido?

 

¿Qué pasa si simplemente incluimos una “advertencia de renuncia” en el comando que le indica al LLM que algunas etiquetas en los ejemplos de pocos ejemplos proporcionados pueden ser incorrectas? Aquí consideramos la siguiente modificación a nuestra plantilla de comando, que todavía incluye los mismos 50 ejemplos de pocos ejemplos que antes.

   

prefix = 'Tenga en cuenta que algunas etiquetas en los ejemplos pueden contener ruido y haber sido especificadas incorrectamente.'
preds = eval_prompt(examples_pool, test, prefix=prefix)
evaluate_preds(preds, test)
>>> Exactitud del modelo: 62.0%

 

Usando el comando anterior, logramos una exactitud del 62%. Un poco mejor, ¡pero aún no lo suficientemente bueno como para usar el LLM para la clasificación de intenciones en el sistema de servicio al cliente de nuestro banco!

 

¿Podemos eliminar por completo los ejemplos ruidosos?

 

Dado que no podemos confiar en las etiquetas en el conjunto de ejemplos de pocos ejemplos, ¿qué pasa si simplemente los eliminamos por completo del comando y solo confiamos en el potente LLM? En lugar de comandos de pocos ejemplos, estamos realizando comandos de cero ejemplos en los que el único ejemplo incluido en el comando es aquel que se supone que el LLM debe clasificar. Los comandos de cero ejemplos confían completamente en el conocimiento preentrenado del LLM para obtener las salidas correctas.

   

preds = eval_prompt(examples_pool, test, use_examples=False)
evaluate_preds(preds, test)
>>> Precisión del Modelo: 67.4%

 

¡Después de eliminar por completo los ejemplos de poca calidad de few-shot, logramos una precisión del 67.4%, que es la mejor que hemos obtenido hasta ahora!

Parece que los ejemplos de few-shot ruidosos realmente pueden perjudicar el rendimiento del modelo en lugar de impulsarlo como se supone que deben hacerlo.

 

¿Podemos identificar y corregir los ejemplos ruidosos?

 

En lugar de modificar el prompt o eliminar los ejemplos por completo, la forma más inteligente (aunque más compleja) de mejorar nuestro conjunto de datos sería encontrar y corregir los problemas de etiquetado manualmente. Esto elimina simultáneamente un punto de datos ruidoso que está perjudicando al modelo y agrega uno preciso que debería mejorar su rendimiento a través de few-shot prompting, pero hacer tales correcciones manualmente es engorroso. Aquí, en cambio, corregimos los datos sin esfuerzo utilizando Cleanlab Studio, una plataforma que implementa algoritmos de Confident Learning para encontrar y corregir automáticamente problemas de etiquetado.

   

Después de reemplazar las etiquetas estimadas como malas por aquellas estimadas como más adecuadas a través de Confident Learning, volvemos a ejecutar el prompt original de 50 ejemplos a través del LLM con cada ejemplo de prueba, pero esta vez usamos la etiqueta corregida automáticamente que asegura que proporcionamos al LLM 50 ejemplos de alta calidad en su few-shot prompt.

# Ejemplos de origen con las etiquetas corregidas.
clean_pool = pd.read_csv("studio_examples_pool.csv")
clean_examples = get_examples(clean_pool)

# Evaluar el prompt original de 50 ejemplos usando ejemplos de alta calidad.
preds = eval_prompt(clean_examples, test)
evaluate_preds(preds, test)
>>> Precisión del Modelo: 72.0%

 

Después de hacer esto, logramos una precisión del 72%, lo cual es bastante impresionante para el problema de las 50 clases.

Ahora hemos demostrado que los ejemplos de few-shot ruidosos pueden disminuir considerablemente el rendimiento del LLM y que no es óptimo cambiar manualmente el prompt (mediante la adición de advertencias o la eliminación de ejemplos). Para lograr el mejor rendimiento, también debes intentar corregir tus ejemplos utilizando técnicas de IA centradas en datos como Confident Learning.

 

Importancia de la IA centrada en datos

 

Este artículo destaca la importancia de garantizar una selección confiable de prompts de few-shot para modelos de lenguaje, centrándose específicamente en la clasificación de intenciones de servicio al cliente en el ámbito bancario. A través de la exploración de un gran conjunto de datos de solicitudes de servicio al cliente de un banco y la aplicación de técnicas de few-shot prompting utilizando el Davinci LLM, nos encontramos con desafíos derivados de ejemplos de few-shot ruidosos y erróneos. Demostramos que modificar el prompt o eliminar ejemplos por sí solos no puede garantizar un rendimiento óptimo del modelo. En cambio, los algoritmos de IA centrados en datos como Confident Learning implementados en herramientas como Cleanlab Studio resultaron ser más efectivos para identificar y rectificar problemas de etiquetado, lo que dio como resultado una precisión significativamente mejorada. Este estudio enfatiza el papel de la curación algorítmica de datos para obtener prompts de few-shot confiables y resalta la utilidad de tales técnicas para mejorar el rendimiento del modelo de lenguaje en varios dominios.     Chris Mauck es Científico de Datos en Cleanlab.  

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Aprendizaje Automático

Meta AI presenta I-JEPA revolucionario Un gran salto innovador en la visión por computadora que emula el aprendizaje y el razonamiento humano y animal.

Los humanos recogen una gran cantidad de información de fondo sobre el mundo simplemente observándolo. El equipo de M...

Aprendizaje Automático

Tienes que ajustar esas dimensiones DreamEditor es un modelo de IA que edita escenas en 3D utilizando indicaciones de texto.

El dominio de visión por computadora 3D se ha inundado de NeRF en los últimos años. Surgieron como una técnica innova...

Inteligencia Artificial

Investigación de AI de SalesForce ha desarrollado ProGen Un gran avance en la ingeniería de proteínas mediante el uso de inteligencia artificial.

El desarrollo de proteínas funcionales ha sido durante mucho tiempo una búsqueda crítica en diversos campos científic...

Inteligencia Artificial

Todas tus publicaciones en línea ahora pertenecen a la IA, afirma Google

En una actualización reciente de su política de privacidad, Google, reconocida a menudo por sus robustas herramientas...

Inteligencia Artificial

Aprendizaje de Diferencia Temporal y la importancia de la exploración Una guía ilustrada

Recientemente, los algoritmos de Aprendizaje por Reforzamiento (RL) han ganado mucha atención al resolver problemas d...

Inteligencia Artificial

Conoce a MPT-7B un nuevo modelo de lenguaje de código abierto entrenado en 1T tokens de texto y código seleccionados por MosaicML.

MosaicML ha lanzado recientemente una herramienta revolucionaria, MPT-7B, para transformar la forma en que las empres...