Chat-Zhen Huan ist ein Chat-Sprachmodell, das den Ton von Zhen Huan imitiert und durch LoRA-Feinabstimmung basierend auf einem großen Modell unter Verwendung aller Zeilen und Sätze über Zhen Huan im Drehbuch von „The Legend of Zhen Huan“ erhalten wird.
Zhen Huan, die weibliche Hauptdarstellerin und Hauptheldin im Roman „Harem: The Legend of Zhen Huan“ und der TV-Serie „The Legend of Zhen Huan“. Ihr ursprünglicher Name war Zhen Yuhuan, aber sie hielt das Wort Jade für vulgär und änderte ihren Namen in Zhen Huan. Später erhielt sie von Yongzheng den Nachnamen Niu Hulu Flagge als die drei wichtigsten Flaggen der Mandschurei und erhielt den Namen „Niu Hulu·Zhen Huan“. Hat zusammen mit Shen Meizhuang und An Lingrong am Draft teilgenommen und wurde ausgewählt, weil sie wie Königin Chunyuan aussah. Nachdem sie den Palast betreten hatte und sich dem ständigen Druck der Konkubine Hua ausgesetzt sah, wurde Shen Meizhuang Unrecht getan, und An Lingrong änderte ihr Herz. Von einem jungen und ruhigen Mädchen in einer ruhigen Ecke wurde sie zu einer Veteranin im Palastkampf, die blutige Ereignisse auslösen konnte. Nachdem Yongzheng die Ambitionen der Familie Nian entdeckt hatte, befahl er seinem Vater Zhen Yuandao, sie abzuschneiden. Auch Zhen Huan nutzte ihre Serientricks im Harem, um dem Kaiser im Umgang mit seinen politischen Gegnern zu helfen, sodass sie von Yongzheng sehr geliebt wurde. Nach vielen Wendungen wurde die arrogante und herrschsüchtige Konkubine Hua schließlich besiegt. Als Zhen Huan Konkubine wurde, wurde sie von Königin Yi Xiu verschworen und vom Kaiser abgelehnt. Nach der Geburt ihrer Tochter Long Yue war sie entmutigt und beschloss, den Palast zu verlassen, um Nonne zu werden. Sie wurde jedoch von Prinz Guo bewundert und die beiden verliebten sich. Nachdem sie von Prinz Guos Tod erfahren hatten, planten sie sofort, Yongzheng wieder zu treffen und in Ruhm in den Palast zurückzukehren. Danach wurde der ungerechte Fall von Zhens Vater bestätigt und Zhens Familie wurde wiederbelebt. Sie entkam der Ermordung von Yi Xu durch verschiedene Verschwörungen, beispielsweise durch Blutuntersuchungen, und stürzte schließlich die Königin, die sich hinter den Kulissen befand, indem sie ihren eigenen Fötus opferte . . Aber Yongzheng zwang Zhen Huan, Yunli zu vergiften, um Zhen Huans Aufrichtigkeit zu testen, und bat Zhen Huan, der bereits ein Kind zur Welt gebracht hatte, nach Zhungeer zu gehen, um zu heiraten. Zhen Huan betrachtete dann den Kaiser als das vernichtungswürdigste Objekt. Im Finale sagte sie, dass „alle menschlichen Kämpfe aus der Ungerechtigkeit der Herrscher entstehen“ und vergiftete Yong Zheng. Der vierte ältere Bruder Hongli bestieg als Qianlong den Thron und Zhen Huan wurde als Heilige Mutter und Königinmutter verehrt. Sie hatte Macht über die Regierung und die Öffentlichkeit und verbrachte ihren Lebensabend friedlich in Ruyis königlicher Liebe im Palast.
Chat-Zhen Huan hat den gesamten Prozess der Erstellung eines personalisierten KI- Feinabstimmungsmodells auf der Grundlage von Romanen und Drehbüchern mithilfe von „The Legend of Zhen Huan“ als Ausgangspunkt realisiert, indem er einen beliebigen Roman oder ein beliebiges Drehbuch bereitstellte und den Charakter vollständig spezifizierte Der Prozess dieses Projekts kann ausgeführt werden. Lassen Sie jeden Benutzer seine eigene personalisierte KI erstellen, die zur Persönlichkeit des Charakters passt und auf der Grundlage seiner Lieblingsromane und -drehbücher hochintelligent ist.
Das Chat-Huanhuan-Modell hat ein kumuliertes Downloadvolumen von 15,6 KB, Modelscope-Adresse: Link
Chat-Huanhuan hat 500 Sterne gesammelt, Huahuan-Chat-Projektadresse: Link , xlab-huanhuan-Chat-Projektadresse: Link
OK, dann führe ich Sie Schritt für Schritt persönlich zur Umsetzung des Trainingsprozesses von Chat-Zhen Huan
Die Grundumgebung dieses Artikels ist wie folgt:
----------------
ubuntu 22.04
python 3.12
cuda 12.1
pytorch 2.3.0
----------------
In diesem Artikel wird davon ausgegangen, dass die Lernenden die oben genannte Pytorch-Umgebung (Cuda) installiert haben. Wenn nicht, installieren Sie sie bitte selbst.
Verwenden Sie zunächst pip , um Quellen zu ändern, um das Herunterladen und Installieren abhängiger Pakete zu beschleunigen.
# 升级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.0Zuerst müssen wir die Skriptdaten von „The Legend of Zhen Huan“ vorbereiten. Hier können wir das Format der Originaldaten überprüfen.
第2幕
(退朝,百官散去)
官员甲:咱们皇上可真是器重年将军和隆科多大人。
官员乙:隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!
官员丙:年大将军,皇上对你可是垂青有加呀!
官员丁:年大人,您可是皇上的股肱之臣哪!
苏培盛(追上年羹尧):年大将军请留步。大将军——
年羹尧:苏公公,有何指教?
苏培盛:不敢。皇上惦记大将军您的臂伤,特让奴才将这秘制的金创药膏交给大人,叫您使用。
年羹尧(遥向金銮殿拱手):臣年羹尧恭谢皇上圣恩!敢问苏公公,小妹今日在宫中可好啊?
苏培盛:华妃娘娘凤仪万千、宠冠六宫啊,大将军您放心好了。
年羹尧:那就有劳苏公公了。(转身离去)
苏培盛:应该的。
Jeder Satz hat ein Zeichen und entsprechende Zeilen, sodass diese Daten wie folgt leicht in eine Dialogform verarbeitet werden können:
[
{"rloe":"官员甲", "content":"咱们皇上可真是器重年将军和隆科多大人。"},
{"rloe":"官员乙", "content":"隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!"},
{"rloe":"官员丙", "content":"年大将军,皇上对你可是垂青有加呀!"},
{"rloe":"官员丁", "content":"年大人,您可是皇上的股肱之臣哪!"},
{"rloe":"苏培盛", "content":"年大将军请留步。大将军——"},
...
]
Dann extrahieren wir die Dialoge der Charaktere, auf die wir uns konzentrieren, um QA-Frage- und Antwortpaare zu bilden. Für solche Daten können wir reguläre Ausdrücke oder andere Methoden verwenden, um den Dialog der für uns wichtigen Charaktere schnell zu extrahieren und zu extrahieren.
Und in vielen Fällen verfügen wir nicht über so hervorragende Zeilenformatdaten. Daher müssen wir möglicherweise die Dialogdaten der Figur aus einem großen Textstück extrahieren und sie dann in das benötigte Format konvertieren.
Beispielsweise können wir in „Journey to the West in Vernacular“ sehen, dass sein Text so aussieht. Für einen solchen Text müssen wir die Fähigkeit großer Modelle nutzen, um die Zeichen und den den Zeichen entsprechenden Dialog aus dem Text zu extrahieren. Dann filtern wir den Tachibana-Charakterdialog heraus, den wir brauchen.
Mit Hilfe eines kleinen Tools können Sie Dialoge aus Text extrahieren: extract-dialogue .
......
原来孙悟空走了以后,有一个混世魔王独占了水帘洞,并且抢走了许多猴子猴孙。孙悟空听到这些以后,气得咬牙跺脚。他问清了混世魔王的住处,决定找混世魔王报仇,便驾着筋斗云,朝北方飞去。
不一会儿,孙悟空就来到混世魔王的水脏洞前,对门前的小妖喊到∶“你家那个狗屁魔王,多次欺负我们猴子。我今天来,要和那魔王比比高低!
”小妖跑进洞里,报告魔王。魔王急忙穿上铁甲,提着大刀,在小妖们的簇拥下走出洞门。
孙悟空赤手空拳,夺过了混世魔王的大刀,把他劈成了两半。然后,拔下一把毫毛咬碎喷了出去,毫毛变成许多小猴子,直杀进洞里,把所有的妖精全杀死,然后救出被抢走的小猴子,放了一把火烧了水脏洞。
......
Chat-Originaldaten von Zhen Huan: Biographie von Zhen Huan <br> Originaldaten von Journey to the West im Volksmund: Journey to the West
Schließlich werden die Daten wie folgt im json -Format organisiert:
[
{
"instruction": "小姐,别的秀女都在求中选,唯有咱们小姐想被撂牌子,菩萨一定记得真真儿的——",
"input": "",
"output": "嘘——都说许愿说破是不灵的。"
},
{
"instruction": "这个温太医啊,也是古怪,谁不知太医不得皇命不能为皇族以外的人请脉诊病,他倒好,十天半月便往咱们府里跑。",
"input": "",
"output": "你们俩话太多了,我该和温太医要一剂药,好好治治你们。"
},
{
"instruction": "嬛妹妹,刚刚我去府上请脉,听甄伯母说你来这里进香了。",
"input": "",
"output": "出来走走,也是散心。"
}
]
Daten von Chat-Huan Huan: chat-Zhen Huan
Daher lautet die allgemeine Idee für die Datenverarbeitung in diesem Schritt:
1. Extrahieren Sie Charaktere und Dialoge aus Rohdaten. 2. Filtern Sie den Dialog der Charaktere heraus, die uns wichtig sind. 3. Konvertieren Sie den Dialog in das Format, das wir benötigen
Dieser Schritt kann auch Datenverbesserungsschritte hinzufügen, z. B. die Verwendung von zwei oder drei Datenelementen als Beispiele und deren Übergabe an LLM, damit Daten mit ähnlichen Stilen generiert werden können. Alternativ können Sie einige Datensätze täglicher Konversationen finden und RAG verwenden, um Konversationsdaten mit festem Zeichenstil zu generieren. Hier kann es jeder mutig ausprobieren!
Dieser Schritt dürfte jedem bekannt sein. In jedem Modell von self-llm gibt es ein Lora -Feinabstimmungsmodul. Wir müssen die Daten nur in das von uns benötigte Format verarbeiten und dann unser Trainingsskript aufrufen.
Hier wählen wir das Modell LLaMA3_1-8B-Instruct zur Feinabstimmung. Zuerst müssen wir das Modell herunterladen, eine model_download.py Datei erstellen und den folgenden Inhalt eingeben:
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' )Hinweis: Denken Sie daran,
cache_dirauf den Downloadpfad Ihres Modells zu ändern
Zweitens bereiten Sie den Trainingscode vor. Für Schüler, die mit self-llm vertraut sind, ist dieser Schritt möglicherweise nicht einfacher. Hier platziere ich train.py im aktuellen Verzeichnis und Sie können den Datensatzpfad und den Modellpfad ändern.
Natürlich können Sie auch das
lora-Tutorial zur Feinabstimmung inself-llmverwenden. Tutorial-Adresse: Link
Führen Sie die folgenden Anweisungen in der Befehlszeile aus:
python train.pyHinweis: Denken Sie daran, den Datensatzpfad und den Modellpfad in
train.py~ zu ändern
Das Training dauert etwa 20 bis 30 Minuten. Nach Abschluss des Trainings wird das lora Modell im output generiert. Zum Testen können Sie den folgenden Code verwenden:
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 )皇上: 嬛嬛你怎么了,朕替你打抱不平!
嬛嬛: 皇上,臣妾不是故意的。
Als nächstes können wir dieses Huanhuan-Modell verwenden, um Gespräche zu führen
Interessierte Studierende können zur Feinabstimmung andere Modelle im self-llm ausprobieren und Ihre Lernergebnisse testen!
Chat-Huanhuan wurde gegründet, als LLM letztes Jahr zum ersten Mal populär wurde. Wir hatten das Gefühl, dass wir viele interessante Dinge verpassen würden, wenn wir nichts unternehmen würden. Deshalb habe ich viel Zeit damit verbracht, mit ein paar Freunden an diesem Projekt zu arbeiten. In diesem Projekt haben wir viel gelernt und sind auf viele Probleme gestoßen, aber wir haben sie nach und nach gelöst. Und Chat-Huanhuan gewann auch eine Auszeichnung, die das Projekt vielen Menschen bekannt machte. Daher halte ich dieses Projekt für sehr sinnvoll und interessant.