Ya no puede dejar de entender cómo usar modelos de lenguaje grandes: hacia la IA

Estás leyendo la publicación: Ya no puede dejar de entender cómo usar modelos de lenguaje grandes: hacia la IA

El primer paso consiste en elegir la tarea que queremos que realice nuestro LLM, así como el conjunto de datos y la métrica de evaluación utilizada para esta tarea, utilizando el Biblioteca de conjuntos de datos HuggingFace. Elegiremos un conjunto de datos de referencia conocido: PEGAMENTO (Evaluación de Comprensión del Lenguaje General).

Al navegar por las tareas asociadas con este conjunto de datos (desde su sitio original o su Tarjeta de conjunto de datos HuggingFace), descubrimos 11 tareas diferentes y sus métricas asociadas.

En este artículo, elegiremos la tarea de clasificación de sentimientos con el Banco de árboles de sentimientos de Stanford (), cuya métrica de evaluación asociada es la precisión, es decir la relación entre las predicciones correctas y el total de predicciones hechas.

desde conjuntos de datos importar load_dataset
de evaluar la carga de importación como load_metric

conjunto de datos = load_dataset(“pegamento”, “sst2″, split=”validación”).to_pandas()
métrica = load_metric(“pegamento”, “sst2”)

La segunda parte del cuaderno trata sobre el desarrollo de indicaciones efectivas para los LLM. En otras palabras, ¿cómo hablar con un LLM?

Los LLM son lo que usted les pide que sean.Andrej Karpatia

De hecho, aunque la mayoría de los profesionales del aprendizaje automático han aprendido y están acostumbrados a ajuste de hiperparámetros Para mejorar el rendimiento de un modelo de aprendizaje automático, los LLM tienen que ver con pronta ingenieria, o en términos más simples, ajuste de entrada. Veremos que para mejorar el rendimiento de un modelo LLM, el enfoque más simple es primero mejorar el formato de la solicitud que le enviamos.

Indicación de cero disparos y pocos disparos

Distinguimos dos técnicas principales para incitar a los modelos de lenguaje: incitación de tiro cero [2] y avisos de pocos disparos [1]. Para citar a los autores de Stanford CS 324:

“En indicación de tiro cero, normalmente se especifica una instrucción para la tarea en lenguaje natural. Se espera que el modelo siga la especificación y genere una respuesta correcta, sin ningún ejemplo (de ahí “cero disparos”).

En indicaciones de pocos disparosproporcionamos un algunos ejemplos en el aviso, incluyendo opcionalmente las instrucciones de la tarea también (todo como lenguaje natural). Incluso sin dichas instrucciones, nuestra esperanza es que el LLM pueda usar los ejemplos para completar autorregresivamente lo que sigue para resolver la tarea deseada”.

En este artículo, nos centraremos en las indicaciones de pocos intentos, aunque se puede realizar un trabajo similar para las indicaciones de cero intentos. Como primer paso, observaremos el desempeño del indicador de clasificación de sentimientos propuesto en el cuaderno sobre la tarea seleccionada, utilizando el modelo BLOOM compuesto por 1.7 mil millones parámetros Aunque este modelo ya es grande por definición, ya que es un LLM, sigue siendo relativamente pequeño cuando sabemos que el modelo BLOOM más grande está compuesto por 176 mil millones parámetros

Experimentando indicaciones de pocos disparos con BLOOM

Un indicador propuesto para la tarea de clasificación de sentimientos se escribe de la siguiente manera:

# Aviso 1
f”Reseña: La película fue horrible
Sentimiento: Negativo

Reseña: ¡¡¡La película fue la mejor película que he visto en todo el año!!!
Sentimiento: Positivo

🔥 Recomendado:  Cómo activar flash en tiktok

Reseña: La película fue un desastre
Sentimiento: Negativo

Revisión: {revisión}
Sentimiento:”’

Importamos y bibliotecas para construir nuestro LLM basado en el FLORACIÓN modelo compuesto por 1.700 millones de parámetros: .

antorcha de importación
desde transformadores importar AutoModelForCausalLM, AutoTokenizer,

dispositivo = “cuda:0” si torch.cuda.is_disponible() de lo contrario “cpu”

model_name = “gran ciencia/floración-1b7”
modelo = AutoModelForCausalLM.from_pretrained(model_name, device_map=”auto”, load_in_8bit=True)
tokenizer = AutoTokenizer.from_pretrained(modelo_nombre)
generador = canalización (tarea = “generación de texto”, modelo = modelo, tokenizador = tokenizador)

Creamos un objeto asociado a una tarea. Ahora podemos definir las siguientes funciones para solicitar a nuestro LLM que genere (con la función) un nuevo token (tenga en cuenta el argumento) a partir del mensaje presentado (con la función). Esperamos aquí que el token recién generado sea “Positivo” o “Negativo”.

def prompt_1(revisión: str) -> str:
volver f”Reseña: La película fue horrible
Sentimiento: Negativo

Reseña: ¡¡¡La película fue la mejor película que he visto en todo el año!!!
Sentimiento: Positivo

Reseña: La película fue un desastre
Sentimiento: Negativo

Revisión: {revisión}
Sentimiento:”’

def generar_sentimiento(revisión: str) -> str:
texto_generado = generador(prompt_1(revisar), max_new_tokens=1)[0][‘generated_text’]
devolver texto_generado.split()[-1]

Con las funciones anteriores definidas, ahora podemos generar un token a partir de la solicitud propuesta y convertir el token generado en un valor entero para evaluar el rendimiento de nuestro LLM.

conjunto de datos[“prediction”] = conjunto de datos[“sentence”].apply(generar_sentimiento)
conjunto de datos[“prediction_int”] = conjunto de datos[“prediction”].str.lower().map({“negativo”: 0, “positivo”: 1}).fillna(-1)

precisión = metric.compute (predicciones = conjunto de datos[“prediction_int”]referencias=conjunto de datos[“label”])[“accuracy”]
imprimir (precisión)

Probar este aviso con el modelo en el conjunto de datos de validación da como resultado una precisión de 66,28%que no es sorprendente pero ya es mejor que lanzar una moneda.

Experimentando con diferentes mensajes

Propongamos ahora al LLM otro mensaje breve, con nuevas oraciones que no se refieran a reseñas de películas, pero que expresen un sentimiento positivo o negativo.

# Aviso 2
f”’Revisión: Este ha sido el peor acuerdo comercial en la historia de los acuerdos comerciales, tal vez nunca
Sentimiento: Negativo

Reseña: Asombrosa tarea de introducción sobre cómo usar modelos de lenguaje grandes
Sentimiento: Positivo

Revisión: este código está lleno de errores, es imposible ejecutarlo
Sentimiento: Negativo

Revisión: {revisión}
Sentimiento:”’

Probar este aviso con el modelo en el conjunto de datos de validación da como resultado una precisión de 59,98%, que es una precisión menor que la obtenida con el primer indicador. Esta segunda prueba ya muestra cierta importancia de los ejemplos dados al LLM para comprender la tarea que debe realizar.

En el tercer intento, cambiemos no solo las oraciones utilizadas como ejemplos breves para el LLM, sino también el formato de los ejemplos proporcionados. Aquí, estamos prestando menos atención al formato del aviso, esperando que el LLM complete las oraciones propuestas con “positivo” o “negativo”.

# Aviso 3
f”’El sentimiento de la frase “Odio este mundo”. es negativo

El sentimiento de la frase “¡Los amo a todos!” es positivo

El sentimiento de la oración “Nunca funcionará”. es negativo

El sentimiento de la oración {review} es ”’

Probar este aviso con el modelo en el conjunto de datos de validación da como resultado una precisión de 31,77%, que es una precisión mucho menor que las obtenidas con los dos primeros indicadores probados. Al profundizar en los resultados, incluso observamos que la palabra propuesta no siempre es “positiva” o “negativa”.

🔥 Recomendado:  Cómo instalar complementos de WordPress (Guía para principiantes)

A partir de este apartado, podemos concluir la importancia del mensaje elegido para nuestra tarea de generación de texto LLM.

En este paso final, proponemos comparar el rendimiento de los modelos BLOOM en dos dimensiones: tamaño del modelo (es decir, número de modelo de parámetros) y modelo de objetivos de entrenamiento (dependiendo de la función objetivo y el conjunto de datos de entrenamiento).

Tamaño del modelo

En cuanto al tamaño del modelo, primero compararemos con , este último compuesto por 3 mil millones de parámetros.

Probar el primer indicador con el modelo en el conjunto de datos de validación da como resultado una precisión de 68,69%que es una precisión ligeramente superior a la obtenida con (que fue del 66,28%).

De este experimento, notamos que el rendimiento de nuestro LLM aumenta con el tamaño del modelo.

Modelo de objetivos de formación

En cuanto a los objetivos de entrenamiento del modelo, ahora compararemos el rendimiento de con , este último ha sido afinado en la instrucción, lo que significa que el modelo ha sido entrenado explícitamente para seguir instrucciones.

Probar el primer indicador con el modelo en el conjunto de datos de validación da como resultado una precisión de 73,51%que nuevamente es ligeramente superior a la precisión obtenida con (que fue del 68,69%).

De este experimento, notamos que el rendimiento de nuestro LLM es mejor con modelos ajustados que con modelos pre-entrenados.

Ajuste de instrucciones

El ajuste fino de las instrucciones se describe en detalle en el Generalización multilingüe a través de Multitask Finetuning papel [3]donde también están disponibles todos los resultados obtenidos en los conjuntos de datos de referencia, así como las indicaciones utilizadas para obtener estos resultados.

En la Tabla 7 de este artículo, que muestra todos los resultados experimentales, casi podemos confirmar las observaciones que hicimos en las dos subsecciones anteriores.

En cuanto al aumento del rendimiento con el tamaño del modelo, observamos que para un número determinado de tareas y conjuntos de datos, las actuaciones de los diferentes los modelos son similares independientemente del número de parámetros del modelo. No siempre observamos un rendimiento creciente con el número de parámetros para modelos pre-entrenados, como lo hicimos en nuestro experimento.

Sin embargo, para modelos, no solo observamos, en la mayoría de los casos, un mejor rendimiento que para los modelos pre-entrenados pero no multitarea ajustadospero también observamos un mejora del rendimiento con el número de parámetros. Con modelos multitarea ajustados, parece que los modelos más grandes todavía tienen capacidad de aprendizaje cuando se les proporcionan datos adicionales.

Después de leer el documento mencionado anteriormente y analizar sus resultados, nos gustaría experimentar con modelos multitarea más grandes y ajustados, con el objetivo de obtener resultados aún mejores con cambios mínimos en el código. Sin embargo, la memoria GPU disponible con un Google Colab Notebook gratuito no es suficiente para ejecutar modelos BLOOM multitarea ajustados con 7100 millones de parámetros y más.

Por lo tanto, la segunda forma más fácil de mejorar los resultados de la clasificación parece ser pronta ingenieriacomo experimentamos antes.

Contextualizar y refinar la tarea

Un primer enfoque para mejorar los mensajes desarrollados es contextualizar y ser más precisos en la descripción de la tarea que queremos que realice el modelo de lenguaje autorregresivo. Este primer hallazgo proviene del estudio de las indicaciones utilizadas para entrenar y evaluar los modelos BLOOM, como se describe en el Apéndice del documento BLOOM Multitask Finetuning mencionado anteriormente.

🔥 Recomendado:  Cómo escribir un resumen de un artículo

Aquí hay dos ejemplos de plantillas de solicitud utilizadas para entrenar y evaluar tareas de clasificación de temas para modelos ajustados multitarea de BLOOM:

# pista csl
”’Después de que John escribiera el resumen “{{abst}}”, escribió estas palabras clave “{{ palabra clave |
join(‘, ‘) }}”. ¿Cree que su elección de palabras clave fue correcta? Responda {{
respuestas_opciones[1]}} o {{ respuestas_opciones[0]}}.”’

# csl noticias
”’Dados los temas de {{answer_choices[:-1] | unir(‘, ‘) }}, y {{
respuestas_opciones[-1] }}, especifica cuál de ellos representa mejor lo siguiente
oración:
{{ oración }}
Mejor:”’

Aprovechando estas plantillas, decidí evaluar nuevamente con un mensaje que contextualiza más la tarea que debe realizar el modelo.

# Aviso 4
f”’Dadas oraciones individuales extraídas de reseñas de películas, especifique cuál de los sentimientos “Positivo” o “Negativo” clasifica mejor las siguientes oraciones.

Reseña de la película: La película fue horrible
Mejor clasificación de sentimiento: Negativo

Reseña de la película: ¡La película fue la mejor película que he visto en todo el año!
Mejor clasificación de sentimiento: Positivo

Crítica de la película: La película fue un desastre.
Mejor clasificación de sentimiento: Negativo

Crítica de la película: {crítica}
Clasificación de mejor sentimiento:””

Probar este aviso con el modelo en el conjunto de datos de validación da como resultado una precisión de 77,29%que es, una vez más, ligeramente superior a la precisión obtenida anteriormente (que fue del 73,51 % con el tercer indicador probado).

Aumento del número de disparos

Un segundo enfoque para mejorar las indicaciones desarrolladas es aumentar el número de disparos, es decir, el número de ejemplos de tareas proporcionados como entrada. Ahora evaluaremos de nuevo con el mensaje anterior. Además, aumentaremos el número de ejemplos proporcionados de 3 a 5 (como se muestra a continuación) y luego a 10 (los 5 siguientes más otros 5 que no proporcionamos por la extensión del artículo).

# Aviso 5
f”’Dadas oraciones individuales extraídas de reseñas de películas, especifique cuál de los sentimientos “Positivo” o “Negativo” clasifica mejor las siguientes oraciones.

Reseña de la película: La película fue horrible
Mejor clasificación de sentimiento: Negativo

Reseña de la película: ¡La película fue la mejor película que he visto en todo el año!
Mejor clasificación de sentimiento: Positivo

Crítica de la película: La película fue un desastre.
Mejor clasificación de sentimiento: Negativo

Crítica de la película: Nunca volveré a ver esta película…
Mejor clasificación de sentimiento: Negativo

Reseña de la película: esta película merece su reputación de 5 estrellas.
Mejor clasificación de sentimiento: Positivo

Crítica de la película: {crítica}
Clasificación de mejor sentimiento:””

Probar este indicador (respectivamente con el modelo en el conjunto de datos de validación da como resultado una precisión de 90,48% (respectivamente 92,66%), ¡lo cual es una gran mejora con respecto al obtenido con solo 3 ejemplos!

Tabla de Contenido