Chat-Zhen Huan é um modelo de linguagem de chat que imita o tom de Zhen Huan e é obtido pelo ajuste fino de LoRA com base em um modelo grande usando todas as falas e frases sobre Zhen Huan no roteiro de "A Lenda de Zhen Huan".
Zhen Huan, a protagonista feminina e heroína principal do romance "A Lenda de Zhen Huan" e da série de TV "A Lenda de Zhen Huan". Seu nome original era Zhen Yuhuan, mas ela mudou seu nome para Zhen Huan porque achou a palavra jade vulgar. Ela era filha de Zhen Yuandao, um chinês Han. Mais tarde, ela recebeu o sobrenome Niu Hulu por Yongzheng. a bandeira como as três principais bandeiras da Manchúria e foi chamada de "Niu Hulu·Zhen Huan". Participou do draft com Shen Meizhuang e An Lingrong, e foi selecionada por se parecer com a Rainha Chunyuan. Depois de entrar no palácio, enfrentando a pressão constante da Concubina Hua, Shen Meizhuang foi injustiçado e An Lingrong mudou seu coração. De uma garota jovem e quieta em um canto tranquilo, ela se tornou uma veterana em lutas no palácio que poderiam causar eventos sangrentos. Depois que Yongzheng descobriu as ambições da família Nian, ele ordenou que seu pai, Zhen Yuandao, os cortasse. Zhen Huan também usou seus truques em série no harém para ajudar o imperador a lidar com seus oponentes políticos, então ela era profundamente amada por Yongzheng. Depois de muitas reviravoltas, a arrogante e dominadora Concubina Hua foi finalmente derrotada. Quando Zhen Huan se tornou concubina, ela foi conspirada pela rainha Yi Xiu e rejeitada pelo imperador. Depois de dar à luz sua filha Long Yue, ela ficou desanimada e pediu a si mesma para deixar o palácio para se tornar freira. No entanto, ele foi admirado pelo Rei Guo e os dois se apaixonaram. Depois de saberem da morte do Rei Guo, eles imediatamente planejaram encontrar Yongzheng novamente e retornar ao palácio em glória. Posteriormente, o caso injusto do pai de Zhen foi justificado e a família de Zhen foi ressuscitada. Ela também deu à luz gêmeos. Ela escapou do assassinato de Yi Xiu em várias conspirações, como exames de sangue, e finalmente derrubou a rainha que estava nos bastidores, sacrificando seu próprio feto. . Mas Yongzheng forçou Zhen Huan a envenenar Yunli para testar a sinceridade de Zhen Huan e pediu a Zhen Huan, que já havia dado à luz uma criança, que fosse a Zhungeer para se casar. Zhen Huan então considerou o imperador o objeto de destruição mais merecedor. No final, ela disse que "todas as lutas humanas surgem da injustiça dos governantes" e envenenou Yong Zheng. O quarto irmão mais velho, Hongli, ascendeu ao trono como Qianlong, e Zhen Huan foi reverenciado como a Santa Mãe e Rainha Mãe. Ela tinha poder sobre o governo e o público e passou sua velhice pacificamente no Amor Real de Ruyi no Palácio.
Chat-Zhen Huan realizou o processo completo de criação de um grande modelo personalizado de ajuste fino de IA baseado em romances e roteiros usando "A Lenda de Zhen Huan" como ponto de partida, fornecendo qualquer romance ou roteiro e especificando o personagem, o completo. O processo deste projeto pode ser executado. Deixe que cada usuário crie sua própria IA personalizada que se adapte à personalidade do personagem e seja altamente inteligente com base em seus romances e roteiros favoritos.
O modelo Chat-Huanhuan tem um volume de download cumulativo de 15,6k, endereço do Modelscope: Link
Chat-Huanhuan acumulou 500 estrelas, endereço do projeto huahuan-chat: Link , endereço do projeto xlab-huanhuan-chat: Link
OK, então vou levá-lo a implementar pessoalmente o processo de treinamento de Chat-Zhen Huan, passo a passo. Vamos experimentá-lo juntos ~.
O ambiente básico deste artigo é o seguinte:
----------------
ubuntu 22.04
python 3.12
cuda 12.1
pytorch 2.3.0
----------------
Este artigo pressupõe que os alunos tenham instalado o ambiente Pytorch (cuda) acima. Caso contrário, instale-o você mesmo.
Primeiro, use pip
para alterar as fontes para acelerar o download e a instalação de pacotes dependentes.
# 升级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
Primeiro, precisamos preparar os dados do script de “The Legend of Zhen Huan”. Aqui usamos os dados do script de “The Legend of Zhen Huan”.
第2幕
(退朝,百官散去)
官员甲:咱们皇上可真是器重年将军和隆科多大人。
官员乙:隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!
官员丙:年大将军,皇上对你可是垂青有加呀!
官员丁:年大人,您可是皇上的股肱之臣哪!
苏培盛(追上年羹尧):年大将军请留步。大将军——
年羹尧:苏公公,有何指教?
苏培盛:不敢。皇上惦记大将军您的臂伤,特让奴才将这秘制的金创药膏交给大人,叫您使用。
年羹尧(遥向金銮殿拱手):臣年羹尧恭谢皇上圣恩!敢问苏公公,小妹今日在宫中可好啊?
苏培盛:华妃娘娘凤仪万千、宠冠六宫啊,大将军您放心好了。
年羹尧:那就有劳苏公公了。(转身离去)
苏培盛:应该的。
Cada frase possui um caractere e linhas correspondentes, portanto esses dados podem ser facilmente processados em forma de diálogo, como segue:
[
{"rloe":"官员甲", "content":"咱们皇上可真是器重年将军和隆科多大人。"},
{"rloe":"官员乙", "content":"隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!"},
{"rloe":"官员丙", "content":"年大将军,皇上对你可是垂青有加呀!"},
{"rloe":"官员丁", "content":"年大人,您可是皇上的股肱之臣哪!"},
{"rloe":"苏培盛", "content":"年大将军请留步。大将军——"},
...
]
Em seguida, extraímos os diálogos dos personagens em que nos concentramos para formar pares de perguntas e respostas de controle de qualidade. Para esses dados, podemos usar expressões regulares ou outros métodos para extrair e extrair rapidamente o diálogo dos personagens de nosso interesse.
E em muitos casos, não temos dados de formato de linha tão excelentes. Portanto, podemos precisar extrair os dados do diálogo do personagem de um grande pedaço de texto e depois convertê-los para o formato que precisamos.
Por exemplo, em “Viagem ao Oeste em Vernáculo”, podemos ver que seu texto se parece com isto. Para tal texto, precisamos usar a capacidade de modelos grandes para extrair do texto os personagens e o diálogo correspondente aos personagens. Em seguida, filtramos o diálogo necessário para o personagem Tachibana.
Você pode extrair diálogos de texto com a ajuda de uma pequena ferramenta: extract-dialogue .
......
原来孙悟空走了以后,有一个混世魔王独占了水帘洞,并且抢走了许多猴子猴孙。孙悟空听到这些以后,气得咬牙跺脚。他问清了混世魔王的住处,决定找混世魔王报仇,便驾着筋斗云,朝北方飞去。
不一会儿,孙悟空就来到混世魔王的水脏洞前,对门前的小妖喊到∶“你家那个狗屁魔王,多次欺负我们猴子。我今天来,要和那魔王比比高低!
”小妖跑进洞里,报告魔王。魔王急忙穿上铁甲,提着大刀,在小妖们的簇拥下走出洞门。
孙悟空赤手空拳,夺过了混世魔王的大刀,把他劈成了两半。然后,拔下一把毫毛咬碎喷了出去,毫毛变成许多小猴子,直杀进洞里,把所有的妖精全杀死,然后救出被抢走的小猴子,放了一把火烧了水脏洞。
......
chat-Dados originais de Zhen Huan: Biografia de Zhen Huan
Dados originais de Jornada ao Oeste em vernáculo: Jornada ao Oeste
Por fim, está organizado em dados no formato json
, da seguinte forma:
[
{
"instruction": "小姐,别的秀女都在求中选,唯有咱们小姐想被撂牌子,菩萨一定记得真真儿的——",
"input": "",
"output": "嘘——都说许愿说破是不灵的。"
},
{
"instruction": "这个温太医啊,也是古怪,谁不知太医不得皇命不能为皇族以外的人请脉诊病,他倒好,十天半月便往咱们府里跑。",
"input": "",
"output": "你们俩话太多了,我该和温太医要一剂药,好好治治你们。"
},
{
"instruction": "嬛妹妹,刚刚我去府上请脉,听甄伯母说你来这里进香了。",
"input": "",
"output": "出来走走,也是散心。"
}
]
Dados de Chat-Huan Huan: chat-Zhen Huan
Portanto, a ideia geral para o processamento de dados nesta etapa é:
1. Extraia personagens e diálogos de dados brutos 2. Filtre o diálogo dos personagens que nos interessam 3. Converta o diálogo no formato que precisamos
Esta etapa também pode adicionar etapas de aprimoramento de dados, como usar dois ou três dados como exemplos e lançá-los para o LLM, para que possa gerar dados com estilos semelhantes. Alternativamente, você pode encontrar alguns conjuntos de dados de conversas diárias e usar RAG para gerar alguns dados de conversa de estilo de caracter fixo. Aqui todos podem ficar à vontade para experimentar com ousadia!
Esta etapa pode ser muito familiar para todos. Em cada modelo de self-llm
, haverá um módulo de ajuste fino Lora
. Precisamos apenas processar os dados no formato que precisamos e então chamar nosso script de treinamento.
Aqui escolhemos o modelo LLaMA3_1-8B-Instruct
para ajuste fino. Primeiro, precisamos baixar o modelo, criar um arquivo model_download.py
e inserir o seguinte conteúdo:
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: Lembre-se de modificar
cache_dir
para o caminho de download do seu modelo ~
Segundo, prepare o código de treinamento. Para alunos familiarizados com self-llm
, esta etapa pode não ser mais fácil. Aqui colocarei train.py
no diretório atual e você poderá modificar o caminho do conjunto de dados e o caminho do modelo.
Claro, você também pode usar o tutorial de ajuste fino
lora
noself-llm
. Endereço do tutorial: Link
Execute os seguintes comandos na linha de comando:
python train.py
Nota: Lembre-se de modificar o caminho do conjunto de dados e o caminho do modelo em
train.py
~
O treinamento levará cerca de 20 a 30 minutos. Após a conclusão do treinamento, o modelo lora
será gerado no diretório output
. Você pode usar o seguinte código para testar:
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 seguir, podemos usar este modelo Huanhuan para conversar ~
Os alunos interessados podem tentar usar outros modelos em self-llm
para ajustar e testar seus resultados de aprendizagem!
O Chat-Huanhuan foi criado quando o LLM se tornou popular no ano passado. Sentimos que, se não fizéssemos algo, poderíamos perder muitas coisas interessantes. Então passei muito tempo trabalhando neste projeto com alguns amigos. Neste projeto aprendemos muito e encontramos muitos problemas, mas resolvemos um por um. E Chat-Huanhuan também ganhou um prêmio, que chamou a atenção de muita gente para o projeto. Portanto, acho que este projeto é muito significativo e interessante.