Firefly: modelo de idioma grande conversacional chino

De: Yeung PNL

En este artículo, el autor presentará el trabajo sobre el modelo Firefly , un modelo de lenguaje grande conversacional chino. Logramos buenos resultados de generación con cantidades de parámetros de modelo más pequeñas, como 1.4B y 2.6B.

dirección del proyecto:

https://github.com/yangjianxin1/Luciérnaga

Ingrese al grupo NLP —> únase al grupo de intercambio NLP (comentario nips/emnlp/nlpcc ingresa al grupo de contribución correspondiente)

36f650147c538cc576a8acc5f1f33da4.png

01

Descripción del Proyecto

Firefly (流火) es un modelo de idioma grande conversacional chino de código abierto, que se ajusta en conjuntos de datos chinos mediante el ajuste de instrucciones. Al mismo tiempo, se utilizan tecnologías como el recorte de vocabulario, ZeRO y el paralelismo tensorial para reducir de manera efectiva el consumo de memoria y mejorar la eficiencia del entrenamiento. En el entrenamiento, usamos una menor cantidad de parámetros del modelo y menos recursos informáticos.

Construimos una gran cantidad de datos relacionados con la cultura china para mejorar el rendimiento del modelo en esta área, como coplas, poesía, traducción al chino clásico, prosa, novelas de Jin Yong, etc.

Liuying (otro nombre para las luciérnagas) es un símbolo de la cultura tradicional china. Aunque la hierba podrida se llama luciérnaga, tiene un sentido de compasión, pero aunque las luciérnagas son pequeñas, aún pueden iluminar el cielo nocturno con su débil fluorescencia. El nombre de este proyecto está tomado de "Noche de otoño" de Du Mu: una pantalla de pintura fría con velas plateadas en la luz otoñal y un abanico de luces que revolotean luciérnagas . También espero que este proyecto brille como una luciérnaga y contribuya a la comunidad china de código abierto de la PNL.

《咏萤火》 
 唐.李白
雨打灯难灭,
风吹色更明。
若飞天上去,
定作月边星。

El trabajo principal de este proyecto es el siguiente:

    1. Conjunto de datos : firefly-train-1.1M, un conjunto de datos de ajuste fino de alta calidad que contiene 1,1 millones de instrucciones multitarea en chino, incluidos datos de instrucción de 23 tareas comunes de PNL en chino. Para cada tarea, se escriben manualmente varias plantillas de instrucciones para garantizar la alta calidad y riqueza de los datos.

    2. Poda de modelos : Desarrollamos el proyecto LLMPruner - Herramienta de poda de modelos de lenguaje grande. Utilice la tecnología de recorte de vocabulario para recortar el peso del modelo de lenguaje grande multilingüe.Bajo la premisa de retener el conocimiento previo al entrenamiento, puede reducir efectivamente la cantidad de parámetros del modelo, mejorar la eficiencia del entrenamiento y compartir los pesos recortados del modelo Bloom de varias escalas de parámetros.

    3. Distribución de peso : sobre la base de bloom-1b4-zh y bloom-2b6-zh, ajuste las instrucciones para obtener modelos chinos con dos escalas de parámetros: firefly-1b4 y firefly-2b6.

    4. Código de entrenamiento : código de entrenamiento de fuente abierta, admite estrategias de entrenamiento de modelos grandes, como el paralelismo de tensores, ZeRO y la gestión del espacio de memoria heterogénea de Gemini. Solo se puede usar una tarjeta gráfica para entrenar modelos con parámetros 1B-2B.

Los enlaces a varios recursos se detallan al final del artículo.

El modelo se utiliza de la siguiente manera:

from transformers import BloomTokenizerFast, BloomForCausalLM
device = 'cuda'
path = 'YenugNLP/firefly-1b4'


tokenizer = BloomTokenizerFast.from_pretrained(path)
model = BloomForCausalLM.from_pretrained(path)
model.eval()
model = model.to(device)
text = input('User:')
while True:
    text = '<s>{}</s></s>'.format(text)
    input_ids = tokenizer(text, return_tensors="pt").input_ids
    input_ids = input_ids.to(device)
    outputs = model.generate(input_ids, max_new_tokens=200, do_sample=True, top_p=0.8, temperature=0.35,
                             repetition_penalty=1.2, eos_token_id=tokenizer.eos_token_id)
    rets = tokenizer.batch_decode(outputs)
    output = rets[0].strip().replace(text, "").replace('</s>', "")
    print("Firefly:{}".format(output))
    text = input('User:')

02

introducción al método

recorte de modelo

Acerca de LLMPruner, consulte el artículo:

LLMPruner: herramienta de recorte de modelos de lenguaje grande

Enlace del proyecto LLMPruner:

https://github.com/yangjianxin1/LLMPruner

Este proyecto primero usa el proyecto LLMPruner para cortar el vocabulario del modelo Bloom original, y solo elimina el vocabulario chino e inglés de uso común, lo que reduce en gran medida la cantidad de parámetros del modelo y luego lo ajusta.

Bloom es un modelo multilingüe. Debido a la necesidad de ser compatible con varios idiomas, hay hasta 250.000 vocabulario. En el campo chino, la mayoría del vocabulario no se utilizará. Extraemos el vocabulario chino e inglés de uso común del modelo multilingüe eliminando el vocabulario redundante. El vocabulario final se reduce de 25w a 46145, que se reduce al 18,39 % del original. Mientras se conserva el conocimiento previo al entrenamiento, los parámetros se reducen de manera efectiva. para mejorar la eficiencia del entrenamiento.

Sobre la base de bloom-1b4-zh y bloom-2b6-zh, ajustamos las instrucciones y obtuvimos modelos chinos con dos escalas de parámetros: firefly-1b4 y firefly-2b6, que tienen buenos resultados.

El modelo recortado se muestra en la siguiente tabla:

b0c51189c7e835d597a7c733807d0c24.png

conjunto de datos

Recopilamos 23 conjuntos de datos chinos comunes. Para cada tarea, se escribieron manualmente varias plantillas de instrucciones para garantizar la alta calidad y riqueza de los datos. El volumen de datos es de 1,15 millones, formando un conjunto de entrenamiento firefly-train-1.1M. La distribución de datos se muestra en la siguiente figura:

77b2a262c580137627c5b2eb217672d0.png

Sobre esta base, agregamos Belle-train_0.5M_CN y finalmente obtuvimos 1,65 millones de datos de entrenamiento. El formato de cada dato es el siguiente, incluido el tipo de tarea, la entrada y la salida de destino:

{
  "kind": "ClassicalChinese", 
  "input": "将下面句子翻译成现代文:\n石中央又生一树,高百余尺,条干偃阴为五色,翠叶如盘,花径尺余,色深碧,蕊深红,异香成烟,著物霏霏。",
  "target": "大石的中央长着一棵树,一百多尺高,枝干是彩色的,树叶有盘子那样大,花的直径有一尺宽,花瓣深蓝色,花中飘出奇异的香气笼罩着周围,如烟似雾。"
}

La distribución de la longitud del token del conjunto de datos de entrenamiento se muestra en la siguiente figura, y la longitud de la mayoría de los datos es inferior a 600:

06d54a9a2ce79df7af26ee7ad879c861.png

estrategia de entrenamiento

Durante el entrenamiento, para cada muestra, empalmamos la entrada y el objetivo en el siguiente formato y luego lo enviamos al modelo para el entrenamiento.

<s>input</s></s>target</s>

Establecemos la entrada máxima del modelo en 512, la parte de entrada no participa en el cálculo de la pérdida y solo se calcula la función de pérdida de la parte objetivo. La configuración de hiperparámetros para el entrenamiento se muestra en la siguiente tabla.

parámetro luciérnaga-1b4
luciérnaga-2b6
Tamaño del lote dieciséis
8
Tasa de aprendizaje 3e-5
3e-5
paso de calentamiento 3000
3000
LR horario coseno
coseno
Max_seq_length 512
512
Paso de entrenamiento 90k
260k

03

generar efecto

A continuación se muestra el efecto de generación parcial de firefly-1b4.

f1bb1beba3d91a09a5b3a30bb9afefc7.png

54ba72914288c0f844150701b7d6d23c.png

2253cdbf0e6da91eb783c7632b5a00cf.png

Los siguientes son algunos ejemplos más distintivos del modelo Firefly: Firefly tiene un rendimiento excelente para tareas chinas como chino clásico, poesía, coplas, novelas de artes marciales, prosa, letras, generación de redacción y análisis de sentimientos.

a82d1d621fc79a0c78338b8fa091d931.png

ae89aba3cd947ec049fd9e69e010d68b.png

d7ab63a08be2dd77b1b774f4f21ec497.png

5d8162e0625c383fd3a143cae0058f69.png

3e7897fab8947aff840bf2a08661b52b.png

04

epílogo

Después de recortar el vocabulario, los parámetros de nuestro modelo son solo 1.4B y 2.6B, que es mucho más pequeño que ChatGPT y LLaMA y otros modelos con decenas de miles de millones o cientos de miles de millones de parámetros, e incluso mucho más pequeño que la corriente principal actual, como Belle, ChatGLM y otros modelos 7B más o menos. Así que todavía hay los siguientes problemas en efecto:

    1. Para el conocimiento factual, es fácil generar respuestas incorrectas.

    2. Sin un ajuste fino inofensivo, pueden ocurrir comentarios discriminatorios, dañinos y poco éticos.

    3. Todavía falta la capacidad de codificar y razonar.

Con base en las limitaciones de los modelos anteriores, requerimos que los códigos, datos, modelos, etc. de este proyecto solo se utilicen para investigación académica, no con fines comerciales y no con fines que causen daño a la sociedad.

En el futuro, el autor iterará el proyecto desde las siguientes direcciones: enriquecer los datos de entrenamiento y garantizar la calidad de los datos, optimizar el proceso de entrenamiento y probar un modelo con una mayor cantidad de parámetros.

Si utiliza los datos, el código o el modelo de este proyecto, cite este proyecto.

@misc{Firefly,
  author = {Jianxin Yang},
  title = {Firefly(流萤): 中文对话式大语言模型},
  year = {2023},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/yangjianxin1/Firefly}},
}

Dirección del proyecto Firefly:

https://github.com/yangjianxin1/Luciérnaga

Dirección del proyecto LLMPruner:

https://github.com/yangjianxin1/LLMPruner

Dirección de peso de Firefly:

https://huggingface.co/YeungNLP/firefly-1b4

https://huggingface.co/YeungNLP/firefly-2b6

conjunto de datos firefly-train-1.1M:

https://huggingface.co/datasets/YeungNLP/firefly-train-1.1M

Conjunto de datos Belle-train_0.5M_CN:

https://huggingface.co/datasets/BelleGroup/train_0.5M_CN

¡ Tus Me gusta, mirar y seguir son la mayor motivación para que yo persista!


Ingrese al grupo NLP —> únase al grupo de intercambio NLP (comentario nips/emnlp/nlpcc ingresa al grupo de contribución correspondiente)

Únete al planeta, obtendrás:

1.  Actualice 3-5 lecturas de velocidad de papel más recientes y de alta calidad todos los días

2.  Los últimos materiales de aprendizaje introductorio y avanzado

4.  Información de contratación diaria de 1 a 3 para puestos de AI como PNL, búsqueda, promoción y promoción, y CV

fcdb3b34dc67f5e40edf9d8c18576dfb.png

Supongo que te gusta

Origin blog.csdn.net/qq_27590277/article/details/130023524
Recomendado
Clasificación