Los modelos de lenguaje a gran escala (LLM) están ganando más y más atención en estos días, pero su capacidad de aprendizaje cero/de pocos disparos a menudo se evalúa, y creo que no se están utilizando para usarlos para ajustar la clasificación de texto como los modelos previamente capacitados existentes como Bert. Por lo tanto, para averiguar cuánta clasificación de texto es posible con LLM, realizamos un experimento utilizando LLM para la clasificación de texto utilizando el mismo método que la clasificación de texto usando BERT.
El propósito de este experimento es investigar lo que sucede cuando LLM, que a menudo atrae la atención para la capacidad de aprendizaje cero/de pocos disparos, se usa para la clasificación de texto regular.
Bert, que se usaba comúnmente para la clasificación de texto hasta ahora, es un modelo bidireccional, y con frecuencia usaba el token de oración [CLS] para la clasificación de texto. Sin embargo, los LLM, que se usan comúnmente en estos días, como el llama, son modelos unidireccionales. Por lo tanto, en un modelo unidireccional, no tiene sentido tomar el token de oración. Por lo tanto, en esta implementación, utilizamos la representación integrada de tokens de extremo de oraciones para la clasificación de texto, utilizando la clase de transformers ' LlamaForSequenceClassification como referencia. En un modelo de lenguaje unidireccional, el token de fin de estado solo puede considerarse el token de toda la declaración en una serie, por lo que se considera una alternativa apropiada a [CLS] .
Además, dado que el ajuste completo de LLM es extremadamente difícil desde una perspectiva de eficiencia de memoria y computación, usamos Lora, una técnica de ajuste fino que le permite lograr un rendimiento comparable al ajuste fino completo ajustando solo la matriz de bajo rango adicional. NOTA: PEFT se usa para ajustar con material de explicación Lora.
En el experimento de evaluación, clasificaremos nueve valores del Corpus Livedoor News. El contenido experimental es casi el mismo que el tutorial de clasificación de texto del autor utilizando Bert.
En el experimento de evaluación, se utilizaron siete tipos de LLM japoneses. Específicamente, realizamos experimentos en cuatro modelos Rinna 3.6b y modelos Cyberagent 7B, 3B y 1B.
Como una forma de ajustar el hiperparámetro, realizamos experimentos con la tasa de aprendizaje establecida en 1E-4, 3E-4, 5E-4 y 1E-3. También experimentamos con tres tipos de formatos de entrada al modelo. Específicamente, para cada artículo en el Livedoor News Corpus, el título se almacenó en una variable llamada title y el body del artículo, y se inyectó en las siguientes tres plantillas.
| Tipo de plantilla | Apariencia |
|---|---|
| 0 | f "Título: {Title} Nbody: {Body} nlabel:" |
| 1 | f "Título: {Title} Nbody: {Body}" |
| 2 | f "{Title} n {Body}" |
Realizamos experimentos uno por uno para todas las combinaciones de las tasas y plantillas de aprendizaje mencionadas anteriormente, y utilizamos el hiperparámetro con el valor F promedio macro más alto en el conjunto de desarrollo para la evaluación en el conjunto de pruebas finales. El rango R de Lora se fija en 32.
Tenga en cuenta que los resultados experimentales no son precisos porque los experimentos se realizan solo una vez con un solo valor de semilla de número aleatorio y no se realiza una validación cruzada dividida. Por lo tanto, no confíe demasiado en los resultados a continuación, pero eche un vistazo a ellos solo como una referencia.
Los resultados se muestran en la tabla a continuación. Los resultados experimentales se organizan en orden descendente para el valor F promedio macro. Todos los resultados posteriores se pueden ver desde el archivo CSV almacenado en el directorio results .
| Exactitud | Precisión | Recordar | F1 | |
|---|---|---|---|---|
| rinna/japonés-gpt-neox-3.6b-instruction-sft-v2 | 97.96 | 97.77 | 97.76 | 97.75 |
| rinna/japonés-gpt-neox-3.6b | 97.55 | 97.24 | 97.39 | 97.30 |
| rinna/japonés-gpt-neox-3.6b-instrucción-sft | 97.55 | 97.32 | 97.27 | 97.27 |
| rinna/japonés-gpt-neox-3.6b-instruction-opo | 97.55 | 97.03 | 97.37 | 97.18 |
| Cyberagent/Open-Calm-7b | 97.01 | 96.76 | 96.42 | 96.55 |
| Cyberagent/Open-Calm-3b | 96.88 | 96.38 | 96.51 | 96.42 |
| Cyberagent/Open-CalM-1B | 94.43 | 94.24 | 93.80 | 93.98 |
De la tabla, podemos ver que la directiva rinna/japanese-gpt-neox-3.6b-instruction-sft-v2 mostró el valor F más alto. Por otro lado, el modelo relativamente grande a 7b, cyberagent/open-calm-7b tiene un valor F ligeramente más bajo. Para mejorar el rendimiento, puede ser necesario sintonizarlo un poco más, como Rola's R y otros Paras altos.
Por cierto, el valor F de rinna/japanese-gpt-neox-3.6b-instruction-sft-v2 es 97.75 , que es más alto que el valor F de studio-ousia/luke-japanese-large-lite que logró el rendimiento más alto en el tutorial de clasificación de texto utilizando 97.47 , que fue implementado por el autor. Por supuesto, el número de parámetros en el modelo es aproximadamente 9 veces diferente, por lo que no puede ser una comparación simple, pero si desea seguir el rendimiento de la clasificación de texto, el uso de LLM+Lora como alternativa a Bert puede ser una buena opción.
A continuación, rinna/japanese-gpt-neox-3.6b-instruction-sft-v2 cyberagent/open-calm-7b rinna/japanese-gpt-neox-3.6b plantilla para los tres modelos representativos en este experimento se muestran en la tabla a continuación.
| Plantilla | Val. F1 | F1 | |
|---|---|---|---|
| rinna/japonés-gpt-neox-3.6b-instruction-sft-v2 | 2 | 97.27 | 97.75 |
| rinna/japonés-gpt-neox-3.6b-instruction-sft-v2 | 1 | 97.18 | 97.14 |
| rinna/japonés-gpt-neox-3.6b-instruction-sft-v2 | 0 | 97.05 | 96.80 |
| rinna/japonés-gpt-neox-3.6b | 1 | 97.14 | 97.30 |
| rinna/japonés-gpt-neox-3.6b | 2 | 96.92 | 97.36 |
| rinna/japonés-gpt-neox-3.6b | 0 | 96.61 | 96.69 |
| Cyberagent/Open-Calm-7b | 1 | 97.22 | 96.55 |
| Cyberagent/Open-Calm-7b | 0 | 97.07 | 96.56 |
| Cyberagent/Open-Calm-7b | 2 | 96.88 | 96.85 |
En general, la capacidad de inferencia de un LLM está muy influenciada por la plantilla (aviso). Por otro lado, dado que este experimento no es una configuración cero/de pocos disparos, se espera que las diferencias de rendimiento debido a las plantillas puedan reducirse hasta cierto punto. Sin embargo, los resultados muestran que la plantilla ha producido previamente una cierta diferencia en los valores F (aproximadamente 1 punto en los valores F). template_type=0 es una plantilla relativamente compleja, template_type=2 es una plantilla simple que simplemente se concatena con las salidas de línea, pero se puede ver que la simple template_type=2 tiende a tener un mejor rendimiento. Las indicaciones son muy importantes en la configuración cero/de pocos disparos, pero si puede hacer afinaciones finas, puede ser mejor mantener las indicaciones lo más simples posible.
A continuación, veamos el rendimiento de cada tasa de aprendizaje cuando el modelo se fija a rinna/japanese-gpt-neox-3.6b y template_type se fija a 2 .
| LR | Val. F1 | Exactitud | Precisión | Recordar | F1 |
|---|---|---|---|---|---|
| 5E-2 | 2.18 | 12.91 | 1.43 | 11.11 | 2.54 |
| 3E-2 | 2.18 | 12.91 | 1.43 | 11.11 | 2.54 |
| 1e-2 | 2.18 | 12.91 | 1.43 | 11.11 | 2.54 |
| 5E-3 | 24.78 | 32.20 | 36.30 | 30.27 | 28.21 |
| 3E-3 | 2.18 | 12.91 | 1.43 | 11.11 | 2.54 |
| 1e-3 | 96.92 | 97.69 | 97.51 | 97.27 | 97.36 |
| 5E-4 | 96.77 | 98.23 | 98.02 | 97.87 | 97.93 |
| 3E-4 | 96.74 | 96.88 | 96.46 | 96.21 | 96.30 |
| 1e-4 | 94.79 | 97.01 | 96.85 | 96.72 | 96.76 |
| 5E-5 | 94.28 | 95.92 | 95.73 | 95.50 | 95.58 |
| 3E-5 | 93.74 | 94.02 | 93.50 | 93.61 | 93.55 |
| 1e-5 | 78.94 | 81.25 | 80.21 | 79.43 | 79.62 |
De la tabla, se puede ver que aunque una tasa de aprendizaje bastante grande es efectiva para el aprendizaje con Lora, el límite superior es de alrededor de 1e-3 , y si usa una tasa de aprendizaje muy grande como 1e-2 , su aprendizaje no irá bien. Me gustaría ver resultados experimentales en un modelo más amplio, pero al clasificar el uso de LLM+Lora, creo que es una buena idea probar una tasa de aprendizaje de alrededor de 5e-4 como primer movimiento.
Además, veamos las diferencias de rendimiento para cada tamaño de lote cuando el modelo se fija a rinna/japanese-gpt-neox-3.6b , template_type 2 , y r de Lora se fija a 32 .
| tamaño por lotes | LR | Val. F1 | Exactitud | Precisión | Recordar | F1 |
|---|---|---|---|---|---|---|
| 2 | 5E-4 | 97.12 | 98.10 | 98.02 | 97.48 | 97.70 |
| 16 | 1e-3 | 97.12 | 97.83 | 97.77 | 97.37 | 97.52 |
| 32 | 1e-3 | 96.92 | 97.69 | 97.51 | 97.27 | 97.36 |
| 64 | 5E-4 | 96.57 | 97.55 | 97.39 | 97.35 | 97.35 |
| 4 | 5E-4 | 97.08 | 97.42 | 97.37 | 97.01 | 97.15 |
| 8 | 3E-4 | 97.20 | 97.28 | 96.99 | 96.87 | 96.91 |
Esta tabla está organizada en orden descendente para valores F. Como resultado, es posible que exista las diferencias de rendimiento en cierta medida dependiendo del tamaño del lote, pero en este experimento, el experimento se realizó solo una vez con un valor de semilla de número aleatorio, por lo que parece difícil llegar a una conclusión clara. En general, los tamaños de lotes más pequeños tardan más en entrenar y tienden a ser inestables en el rendimiento, por lo que podría ser una buena idea establecer el tamaño del lote en alrededor de 16 o 32 por ahora.
Finalmente, veamos el rendimiento de Lora Per R cuando el modelo se fija a rinna/japanese-gpt-neox-3.6b y template_type se fija a 2 .
| Lora r | LR | Val. F1 | Exactitud | Precisión | Recordar | F1 |
|---|---|---|---|---|---|---|
| 8 | 5E-4 | 97.45 | 97.15 | 96.97 | 96.75 | 96.83 |
| 64 | 1e-3 | 97.22 | 97.28 | 96.96 | 96.85 | 96.89 |
| 16 | 1e-3 | 97.20 | 97.69 | 97.59 | 97.27 | 97.38 |
| 4 | 3E-4 | 97.12 | 97.69 | 97.64 | 97.24 | 97.40 |
| 32 | 1e-3 | 96.92 | 97.69 | 97.51 | 97.27 | 97.36 |
Como resultado, siento que no hay mucha correlación entre los valores F en el conjunto de desarrollo y los valores F en el conjunto de pruebas. Dado que se cree que el valor de la R de Lora es "cuanto más grande sea el modelo, menor es el valor", creo que sería más seguro establecerlo en 32 o más para LLM de tamaño mediano de solo unas pocas B, pero me gustaría probar un poco más de experimento.
En esta implementación, realizamos un experimento utilizando LLM para la clasificación de texto tradicional. Como resultado, al hacer ajustes finos con Lora, podemos lograr un rendimiento bastante alto simplemente ajustando una pequeña cantidad de parámetros, y "usar LLM como alternativa a Bert" también podría considerarse una opción razonable. También hubo una tendencia a que las plantillas aún afecten el rendimiento, incluso al establecer el ajuste fino. Además, al hacer ajustes finos con LORA, la tasa de aprendizaje debe establecerse en un valor bastante grande, y se descubrió que el valor del rango r también probablemente afecta el rendimiento.
Autor: Hayato Tsukagoshi
Correo electrónico: investigació[email protected]
Si desea consultar esta implementación en un documento, etc., use lo siguiente:
@misc {
hayato-tsukagoshi-2023-llm-lora-classification,
title = { {Text Classification with LLMs and LoRA} } ,
author = { Hayato Tsukagoshi } ,
year = { 2023 } ,
publisher = { GitHub } ,
journal = { GitHub repository } ,
howpublished = { url{https://github.com/hppRC/llm-lora-classification} } ,
url = { https://github.com/hppRC/llm-lora-classification } ,
}