Chat-Zhen Huan es un modelo de lenguaje de chat que imita el tono de Zhen Huan y se obtiene mediante un ajuste fino de LoRA basado en un modelo grande que utiliza todas las líneas y oraciones sobre Zhen Huan en el guión de "La leyenda de Zhen Huan".
Zhen Huan, la protagonista femenina principal y heroína principal de la novela "Harem: The Legend of Zhen Huan" y la serie de televisión "The Legend of Zhen Huan". Su nombre original era Zhen Yuhuan, pero pensó que la palabra jade era vulgar y cambió su nombre a Zhen Huan. Era hija de Zhen Yuandao, un chino Han. Más tarde, Yongzheng le dio el apellido Niu Hulu. bandera como las tres principales banderas de Manchuria y fue nombrada "Niu Hulu·Zhen Huan". Participó en el draft con Shen Meizhuang y An Lingrong, y fue seleccionada porque se parecía a la reina Chunyuan. Después de entrar al palacio, enfrentando la presión constante de la concubina Hua, Shen Meizhuang fue agraviada y An Lingrong cambió su corazón. De una niña joven y tranquila en un rincón tranquilo, se convirtió en una veterana en la lucha palaciega que podría causar eventos sangrientos. Después de que Yongzheng descubrió las ambiciones de la familia Nian, ordenó a su padre Zhen Yuandao que las cortara. Zhen Huan también usó sus trucos en serie en el harén para ayudar al emperador a lidiar con sus oponentes políticos, por lo que Yongzheng la amaba profundamente. Después de muchos giros y vueltas, la arrogante y dominante Concubina Hua finalmente fue derrotada. Cuando Zhen Huan se convirtió en concubina, la reina Yi Xiu la conspiró y el emperador la rechazó. Después de dar a luz a su hija Long Yue, se desanimó y se pidió a sí misma abandonar el palacio para convertirse en monja. Sin embargo, el Príncipe Guo la admiraba y los dos se enamoraron. Después de enterarse de la muerte del Príncipe Guo, inmediatamente planearon encontrarse con Yongzheng nuevamente y regresar al palacio en gloria. Posteriormente, el caso injusto del padre de Zhen fue reivindicado y la familia de Zhen resucitó. Ella también dio a luz a gemelos. Escapó del asesinato de Yi Xiu en varias conspiraciones, como análisis de sangre, y finalmente derribó a la reina que estaba detrás de escena sacrificando a su propio feto. . Pero Yongzheng obligó a Zhen Huan a envenenar a Yunli para probar la sinceridad de Zhen Huan y le pidió a Zhen Huan, que ya había dado a luz a un niño, que fuera a Zhungeer para casarse. Luego, Zhen Huan consideró al emperador como el objeto de destrucción más merecedor. Al final, dijo que "todas las luchas humanas surgen de la injusticia de los gobernantes" y envenenó a Yong Zheng. El cuarto hermano mayor, Hongli, ascendió al trono como Qianlong, y Zhen Huan fue venerada como la Santa Madre y Reina Madre. Tenía poder sobre el gobierno y el público, y pasó su vejez pacíficamente en el Amor Real de Ruyi en el Palacio.
Chat-Zhen Huan ha realizado el proceso completo de creación de un conjunto de grandes modelos personalizados de ajuste fino de IA basados en novelas y guiones utilizando "La leyenda de Zhen Huan" como punto de entrada. Proporcionando cualquier novela o guión y especificando los personajes. Se puede ejecutar el proceso completo de este proyecto. Deje que cada usuario cree su propia IA personalizada que se adapte al personaje y sea muy inteligente en función de sus novelas y guiones favoritos.
El modelo Chat-Huanhuan tiene un volumen de descarga acumulativo de 15,6k, dirección de Modelscope: enlace
Chat-Huanhuan ha acumulado 500 estrellas, dirección del proyecto huahuan-chat: enlace , dirección del proyecto xlab-huanhuan-chat: enlace
Bien, entonces te llevaré a implementar personalmente el proceso de capacitación de Chat-Zhen Huan paso a paso. Experimentémoslo juntos ~.
El entorno básico de este artículo es el siguiente:
----------------
ubuntu 22.04
python 3.12
cuda 12.1
pytorch 2.3.0
----------------
Este artículo asume que los estudiantes han instalado el entorno Pytorch (cuda) anterior. De lo contrario, instálelo usted mismo.
Primero, use pip
para cambiar las fuentes y acelerar la descarga e instalación de paquetes dependientes.
# 升级pip
python -m pip install --upgrade pip
# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install modelscope==1.16.1
pip install transformers==4.43.1
pip install accelerate==0.32.1
pip install peft==0.11.1
pip install datasets==2.20.0
Primero, necesitamos preparar los datos del guión de "La leyenda de Zhen Huan". Aquí utilizamos los datos del guión de "La leyenda de Zhen Huan".
第2幕
(退朝,百官散去)
官员甲:咱们皇上可真是器重年将军和隆科多大人。
官员乙:隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!
官员丙:年大将军,皇上对你可是垂青有加呀!
官员丁:年大人,您可是皇上的股肱之臣哪!
苏培盛(追上年羹尧):年大将军请留步。大将军——
年羹尧:苏公公,有何指教?
苏培盛:不敢。皇上惦记大将军您的臂伤,特让奴才将这秘制的金创药膏交给大人,叫您使用。
年羹尧(遥向金銮殿拱手):臣年羹尧恭谢皇上圣恩!敢问苏公公,小妹今日在宫中可好啊?
苏培盛:华妃娘娘凤仪万千、宠冠六宫啊,大将军您放心好了。
年羹尧:那就有劳苏公公了。(转身离去)
苏培盛:应该的。
Cada oración tiene un carácter y líneas correspondientes, por lo que estos datos se pueden procesar fácilmente en un formulario de diálogo, de la siguiente manera:
[
{"rloe":"官员甲", "content":"咱们皇上可真是器重年将军和隆科多大人。"},
{"rloe":"官员乙", "content":"隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!"},
{"rloe":"官员丙", "content":"年大将军,皇上对你可是垂青有加呀!"},
{"rloe":"官员丁", "content":"年大人,您可是皇上的股肱之臣哪!"},
{"rloe":"苏培盛", "content":"年大将军请留步。大将军——"},
...
]
Luego extraemos los diálogos de los personajes en los que nos centramos para formar pares de preguntas y respuestas de control de calidad. Para dichos datos, podemos usar expresiones regulares u otros métodos para extraer y extraer rápidamente el diálogo de los personajes que nos interesan.
Y en muchos casos, no contamos con datos de formato de línea tan excelentes. Por lo tanto, es posible que necesitemos extraer los datos del diálogo del personaje de un gran fragmento de texto y luego convertirlos al formato que necesitemos.
Por ejemplo, en "Viaje al Oeste en lengua vernácula", podemos ver que su texto tiene este aspecto. Para dicho texto, necesitamos utilizar la capacidad de modelos grandes para extraer los personajes y el diálogo correspondiente a los personajes del texto. Luego filtramos el diálogo del personaje Tachibana que necesitamos.
Puedes extraer diálogos del texto con la ayuda de una pequeña herramienta: extraer diálogo .
......
原来孙悟空走了以后,有一个混世魔王独占了水帘洞,并且抢走了许多猴子猴孙。孙悟空听到这些以后,气得咬牙跺脚。他问清了混世魔王的住处,决定找混世魔王报仇,便驾着筋斗云,朝北方飞去。
不一会儿,孙悟空就来到混世魔王的水脏洞前,对门前的小妖喊到∶“你家那个狗屁魔王,多次欺负我们猴子。我今天来,要和那魔王比比高低!
”小妖跑进洞里,报告魔王。魔王急忙穿上铁甲,提着大刀,在小妖们的簇拥下走出洞门。
孙悟空赤手空拳,夺过了混世魔王的大刀,把他劈成了两半。然后,拔下一把毫毛咬碎喷了出去,毫毛变成许多小猴子,直杀进洞里,把所有的妖精全杀死,然后救出被抢走的小猴子,放了一把火烧了水脏洞。
......
chat-Datos originales de Zhen Huan: Biografía de Zhen Huan <br> Datos originales de Viaje al Oeste en lengua vernácula: Viaje al Oeste
Finalmente, se organiza en datos en formato json
, de la siguiente manera:
[
{
"instruction": "小姐,别的秀女都在求中选,唯有咱们小姐想被撂牌子,菩萨一定记得真真儿的——",
"input": "",
"output": "嘘——都说许愿说破是不灵的。"
},
{
"instruction": "这个温太医啊,也是古怪,谁不知太医不得皇命不能为皇族以外的人请脉诊病,他倒好,十天半月便往咱们府里跑。",
"input": "",
"output": "你们俩话太多了,我该和温太医要一剂药,好好治治你们。"
},
{
"instruction": "嬛妹妹,刚刚我去府上请脉,听甄伯母说你来这里进香了。",
"input": "",
"output": "出来走走,也是散心。"
}
]
Datos de Chat-Huan Huan: chat-Zhen Huan
Por tanto, la idea general del procesamiento de datos en este paso es:
1. Extraer personajes y diálogos a partir de datos sin procesar 2. Filtrar el diálogo de los personajes que nos interesan 3. Convertir el diálogo al formato que necesitamos
Este paso también puede agregar pasos de mejora de datos, como usar dos o tres datos como ejemplos y enviarlos a LLM, para que pueda generar datos con estilos similares. Alternativamente, puede encontrar algunos conjuntos de datos de conversaciones diarias y usar RAG para generar algunos datos de conversación de estilo de caracteres fijos. ¡Aquí todos pueden sentirse libres de probarlo con valentía!
Este paso puede resultar familiar para todos. En cada modelo de self-llm
, habrá un módulo de ajuste fino Lora
. Solo necesitamos procesar los datos en el formato que necesitamos y luego llamar a nuestro script de entrenamiento.
Aquí elegimos el modelo LLaMA3_1-8B-Instruct
para realizar el ajuste fino. Primero, debemos descargar el modelo, crear un archivo model_download.py
e ingresar el siguiente contenido:
import torch
from modelscope import snapshot_download , AutoModel , AutoTokenizer
import os
model_dir = snapshot_download ( 'LLM-Research/Meta-Llama-3.1-8B-Instruct' , cache_dir = '/root/autodl-tmp' , revision = 'master' )
Nota: Recuerde modificar
cache_dir
a la ruta de descarga de su modelo ~
En segundo lugar, prepare el código de formación. Para los estudiantes que están familiarizados con self-llm
, este paso puede no ser más fácil. Aquí colocaré train.py
en el directorio actual y podrán modificar la ruta del conjunto de datos y la ruta del modelo.
Por supuesto, también puede utilizar el tutorial de ajuste fino
lora
enself-llm
. Dirección del tutorial: Enlace
Ejecute las siguientes instrucciones en la línea de comando:
python train.py
Nota: Recuerde modificar la ruta del conjunto de datos y la ruta del modelo en
train.py
~
La capacitación tomará entre 20 y 30 minutos. Una vez completada la capacitación, se generará el modelo lora
en el directorio output
. Puede utilizar el siguiente código para probar:
from transformers import AutoModelForCausalLM , AutoTokenizer
import torch
from peft import PeftModel
mode_path = './LLM-Research/Meta-Llama-3___1-8B-Instruct'
lora_path = './output/llama3_1_instruct_lora/checkpoint-699' # 这里改称你的 lora 输出对应 checkpoint 地址
# 加载tokenizer
tokenizer = AutoTokenizer . from_pretrained ( mode_path , trust_remote_code = True )
# 加载模型
model = AutoModelForCausalLM . from_pretrained ( mode_path , device_map = "auto" , torch_dtype = torch . bfloat16 , trust_remote_code = True ). eval ()
# 加载lora权重
model = PeftModel . from_pretrained ( model , model_id = lora_path )
prompt = "嬛嬛你怎么了,朕替你打抱不平!"
messages = [
{ "role" : "system" , "content" : "假设你是皇帝身边的女人--甄嬛。" },
{ "role" : "user" , "content" : prompt }
]
input_ids = tokenizer . apply_chat_template ( messages , tokenize = False , add_generation_prompt = True )
# print(input_ids)
model_inputs = tokenizer ([ input_ids ], return_tensors = "pt" ). to ( 'cuda' )
generated_ids = model . generate ( model_inputs . input_ids , max_new_tokens = 512 )
generated_ids = [
output_ids [ len ( input_ids ):] for input_ids , output_ids in zip ( model_inputs . input_ids , generated_ids )
]
response = tokenizer . batch_decode ( generated_ids , skip_special_tokens = True )[ 0 ]
print ( '皇上:' , prompt )
print ( '嬛嬛:' , response )
皇上: 嬛嬛你怎么了,朕替你打抱不平!
嬛嬛: 皇上,臣妾不是故意的。
A continuación, podemos usar este modelo de Huanhuan para tener conversaciones ~
Los estudiantes interesados pueden intentar utilizar otros modelos en self-llm
para realizar ajustes y probar sus resultados de aprendizaje.
Chat-Huanhuan se creó cuando LLM se hizo popular el año pasado. Sentimos que si no hacíamos algo, podríamos perdernos muchas cosas interesantes. Así que pasé mucho tiempo trabajando en este proyecto con algunos amigos. En este proyecto aprendimos mucho y encontramos muchos problemas, pero los resolvimos uno por uno. Y Chat-Huanhuan también ganó un premio, lo que llamó la atención de muchas personas sobre el proyecto. Por tanto, creo que este proyecto es muy significativo e interesante.