Chat-Zhen Huan est un modèle de langage de discussion qui imite le ton de Zhen Huan et est obtenu par un réglage fin de LoRA basé sur un grand modèle utilisant toutes les lignes et phrases concernant Zhen Huan dans le script de "La Légende de Zhen Huan".
Zhen Huan, l'héroïne principale et principale du roman "La Légende de Zhen Huan" et de la série télévisée "La Légende de Zhen Huan". Son nom d'origine était Zhen Yuhuan, mais elle a changé son nom en Zhen Huan parce qu'elle pensait que le mot jade était vulgaire. Elle était la fille de Zhen Yuandao, un Chinois Han. Plus tard, Yongzheng lui a donné le nom de famille Niu Hulu. le drapeau était l'un des trois principaux drapeaux de la Mandchourie et a été nommé "Niu Hulu·Zhen Huan". A participé au repêchage avec Shen Meizhuang et An Lingrong et a été sélectionnée parce qu'elle ressemblait à la reine Chunyuan. Après être entrée dans le palais, face à la pression constante de la concubine Hua, Shen Meizhuang a été lésée et An Lingrong a changé d'avis. D'une jeune fille calme dans un coin tranquille, elle est devenue une vétéran des combats de palais qui pouvaient provoquer des événements sanglants. Après que Yongzheng ait découvert les ambitions de la famille Nian, il a ordonné à son père Zhen Yuandao de les couper. Zhen Huan a également utilisé ses astuces en série dans le harem pour aider l'empereur à faire face à ses adversaires politiques, elle était donc profondément aimée par Yongzheng. Après de nombreux rebondissements, la concubine Hua, arrogante et dominatrice, a finalement été vaincue. Lorsque Zhen Huan est devenue concubine, elle a été complotée par la reine Yi Xiu et a été rejetée par l'empereur. Après avoir donné naissance à sa fille Long Yue, elle a été découragée et a demandé à quitter le palais pour devenir religieuse. Cependant, il était admiré par le roi Guo et les deux sont tombés amoureux. Après avoir appris la mort du roi Guo, ils ont immédiatement prévu de rencontrer à nouveau Yongzheng et de retourner au palais dans la gloire. Par la suite, le cas injuste du père de Zhen a été justifié et la famille de Zhen a été ressuscitée. Elle a également donné naissance à des jumeaux. Elle a échappé à l'assassinat de Yi Xiu grâce à diverses conspirations telles que des analyses de sang, et a finalement fait tomber la reine qui était dans les coulisses en sacrifiant son propre fœtus. . Mais Yongzheng a forcé Zhen Huan à empoisonner Yunli pour tester la sincérité de Zhen Huan, et a demandé à Zhen Huan, qui avait déjà donné naissance à un enfant, d'aller à Zhungeer pour se marier. Zhen Huan a alors considéré l'empereur comme l'objet de destruction le plus méritant. Dans la finale, elle a déclaré que « toutes les luttes humaines découlent de l'injustice des dirigeants » et a empoisonné Yong Zheng. Le quatrième frère aîné Hongli monta sur le trône sous le nom de Qianlong, et Zhen Huan était vénérée comme la Sainte Mère et la Reine Mère. Elle avait le pouvoir sur le gouvernement et le public et passa sa vieillesse paisiblement dans l'Amour Royal de Ruyi au Palais.
Chat-Zhen Huan a réalisé le processus complet de création d'un grand modèle personnalisé de réglage fin de l'IA basé sur des romans et des scripts en utilisant "La Légende de Zhen Huan" comme point de départ en fournissant n'importe quel roman ou script et en spécifiant le personnage, le complet. Le processus de ce projet peut être exécuté. Laissez chaque utilisateur créer sa propre IA personnalisée qui correspond à la personnalité du personnage et est très intelligente en fonction de ses romans et scénarios préférés.
Le modèle Chat-Huanhuan a un volume de téléchargement cumulé de 15,6k, adresse Modelscope : Lien
Chat-Huanhuan a accumulé 500 étoiles, adresse du projet huahuan-chat : Lien , adresse du projet xlab-huanhuan-chat : Lien
OK, alors je vais vous amener à mettre en œuvre personnellement le processus de formation de Chat-Zhen Huan, étape par étape, faisons-en l'expérience ensemble ~.
L'environnement de base de cet article est le suivant :
----------------
ubuntu 22.04
python 3.12
cuda 12.1
pytorch 2.3.0
----------------
Cet article suppose que les apprenants ont installé l'environnement Pytorch (cuda) ci-dessus. Sinon, veuillez l'installer vous-même.
Tout d’abord, utilisez pip
pour changer de source afin d’accélérer le téléchargement et l’installation des packages dépendants.
# 升级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
Tout d'abord, nous devons préparer les données de script de "La Légende de Zhen Huan". Ici, nous utilisons les données de script de "La Légende de Zhen Huan". Nous pouvons vérifier le format des données originales.
第2幕
(退朝,百官散去)
官员甲:咱们皇上可真是器重年将军和隆科多大人。
官员乙:隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!
官员丙:年大将军,皇上对你可是垂青有加呀!
官员丁:年大人,您可是皇上的股肱之臣哪!
苏培盛(追上年羹尧):年大将军请留步。大将军——
年羹尧:苏公公,有何指教?
苏培盛:不敢。皇上惦记大将军您的臂伤,特让奴才将这秘制的金创药膏交给大人,叫您使用。
年羹尧(遥向金銮殿拱手):臣年羹尧恭谢皇上圣恩!敢问苏公公,小妹今日在宫中可好啊?
苏培盛:华妃娘娘凤仪万千、宠冠六宫啊,大将军您放心好了。
年羹尧:那就有劳苏公公了。(转身离去)
苏培盛:应该的。
Chaque phrase a un caractère et des lignes correspondantes, ces données peuvent donc être facilement traitées sous forme de dialogue, comme suit :
[
{"rloe":"官员甲", "content":"咱们皇上可真是器重年将军和隆科多大人。"},
{"rloe":"官员乙", "content":"隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!"},
{"rloe":"官员丙", "content":"年大将军,皇上对你可是垂青有加呀!"},
{"rloe":"官员丁", "content":"年大人,您可是皇上的股肱之臣哪!"},
{"rloe":"苏培盛", "content":"年大将军请留步。大将军——"},
...
]
Ensuite, nous extrayons les dialogues des personnages sur lesquels nous nous concentrons pour former des paires de questions et réponses d'assurance qualité. Pour ces données, nous pouvons utiliser des expressions régulières ou d'autres méthodes pour extraire et extraire rapidement le dialogue des personnages qui nous intéressent.
Et dans de nombreux cas, nous ne disposons pas de données au format de ligne aussi excellentes. Nous devrons donc peut-être extraire les données de dialogue du personnage à partir d'un gros morceau de texte, puis les convertir dans le format dont nous avons besoin.
Par exemple, dans « Journey to the West in Vernacular », on peut voir que son texte ressemble à ceci. Pour un tel texte, nous devons utiliser la capacité des grands modèles pour extraire les caractères et les dialogues correspondant aux personnages du texte. Ensuite, nous filtrons le dialogue dont nous avons besoin pour le personnage de Tachibana.
Vous pouvez extraire le dialogue du texte à l'aide d'un petit outil : extract-dialogue .
......
原来孙悟空走了以后,有一个混世魔王独占了水帘洞,并且抢走了许多猴子猴孙。孙悟空听到这些以后,气得咬牙跺脚。他问清了混世魔王的住处,决定找混世魔王报仇,便驾着筋斗云,朝北方飞去。
不一会儿,孙悟空就来到混世魔王的水脏洞前,对门前的小妖喊到∶“你家那个狗屁魔王,多次欺负我们猴子。我今天来,要和那魔王比比高低!
”小妖跑进洞里,报告魔王。魔王急忙穿上铁甲,提着大刀,在小妖们的簇拥下走出洞门。
孙悟空赤手空拳,夺过了混世魔王的大刀,把他劈成了两半。然后,拔下一把毫毛咬碎喷了出去,毫毛变成许多小猴子,直杀进洞里,把所有的妖精全杀死,然后救出被抢走的小猴子,放了一把火烧了水脏洞。
......
chat-Données originales de Zhen Huan : Biographie de Zhen Huan
Données originales de Voyage vers l'Ouest en langue vernaculaire : Voyage vers l'Ouest
Enfin, il est organisé en données au format json
, de la manière suivante :
[
{
"instruction": "小姐,别的秀女都在求中选,唯有咱们小姐想被撂牌子,菩萨一定记得真真儿的——",
"input": "",
"output": "嘘——都说许愿说破是不灵的。"
},
{
"instruction": "这个温太医啊,也是古怪,谁不知太医不得皇命不能为皇族以外的人请脉诊病,他倒好,十天半月便往咱们府里跑。",
"input": "",
"output": "你们俩话太多了,我该和温太医要一剂药,好好治治你们。"
},
{
"instruction": "嬛妹妹,刚刚我去府上请脉,听甄伯母说你来这里进香了。",
"input": "",
"output": "出来走走,也是散心。"
}
]
Données de Chat-Huan Huan : chat-Zhen Huan
Par conséquent, l’idée générale du traitement des données à cette étape est la suivante :
1. Extraire les personnages et les dialogues des données brutes 2. Filtrer les dialogues des personnages qui nous intéressent 3. Convertir les dialogues dans le format dont nous avons besoin
Cette étape peut également ajouter des étapes d'amélioration des données, telles que l'utilisation de deux ou trois éléments de données comme exemples et leur transfert vers LLM, afin qu'il puisse générer des données avec des styles similaires. Alternativement, vous pouvez rechercher des ensembles de données de conversations quotidiennes et utiliser RAG pour générer des données de conversation de style de caractère fixe. Ici, tout le monde peut se sentir libre de l'essayer avec audace !
Cette étape n’est peut-être que trop familière à tout le monde. Dans chaque modèle d' self-llm
, il y aura un module de réglage fin Lora
. Il nous suffit de traiter les données dans le format dont nous avons besoin, puis d'appeler notre script de formation.
Ici, nous choisissons le modèle LLaMA3_1-8B-Instruct
pour un réglage fin. Tout d'abord, nous devons télécharger le modèle, créer un fichier model_download.py
et saisir le contenu suivant :
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' )
Remarque : N'oubliez pas de modifier
cache_dir
par le chemin de téléchargement de votre modèle~
Deuxièmement, préparez le code de formation. Pour les étudiants qui connaissent self-llm
, cette étape n'est peut-être pas plus simple. Ici, je placerai train.py
dans le répertoire actuel et vous pourrez modifier le chemin de l'ensemble de données et le chemin du modèle.
Bien sûr, vous pouvez également utiliser le didacticiel de réglage fin
lora
dansself-llm
. Adresse du tutoriel : Lien
Exécutez les commandes suivantes sur la ligne de commande :
python train.py
Remarque : N'oubliez pas de modifier le chemin de l'ensemble de données et le chemin du modèle dans
train.py
~
La formation prendra environ 20 à 30 minutes. Une fois la formation terminée, le modèle lora
sera généré dans le répertoire output
. Vous pouvez utiliser le code suivant pour tester :
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 )
皇上: 嬛嬛你怎么了,朕替你打抱不平!
嬛嬛: 皇上,臣妾不是故意的。
Ensuite, nous pouvons utiliser ce modèle Huanhuan pour avoir des conversations ~
Les étudiants intéressés peuvent essayer d'utiliser d'autres modèles en self-llm
pour affiner et tester vos résultats d'apprentissage !
Chat-Huanhuan a été créé lorsque le LLM est devenu populaire l'année dernière. Nous avions le sentiment que si nous ne faisions pas quelque chose, nous risquions de manquer beaucoup de choses intéressantes. J'ai donc passé beaucoup de temps à travailler sur ce projet avec quelques amis. Dans ce projet, nous avons beaucoup appris et rencontré de nombreux problèmes, mais nous les avons résolus un par un. Et Chat-Huanhuan a également remporté un prix, ce qui a attiré l'attention de nombreuses personnes sur le projet. Par conséquent, je pense que ce projet est très significatif et intéressant.