Chat-Zhen Huan เป็นรูปแบบภาษาแชทที่เลียนแบบน้ำเสียงของ Zhen Huan และได้รับจาก การปรับแต่ง LoRA อย่างละเอียด ตามโมเดลขนาดใหญ่ โดยใช้บรรทัดและประโยคทั้งหมดเกี่ยวกับ Zhen Huan ในสคริปต์ของ "The Legend of Zhen Huan"
Zhen Huan นักแสดงนำหญิงและนางเอกหลักในนวนิยายเรื่อง "Harem: The Legend of Zhen Huan" และละครโทรทัศน์เรื่อง "The Legend of Zhen Huan" ชื่อเดิมของเธอคือ Zhen Yuhuan แต่เธอคิดว่าคำว่าหยกเป็นคำหยาบคายและเปลี่ยนชื่อเป็น Zhen Huan เธอเป็นลูกสาวของ Zhen Yuandao ซึ่งเป็นชาวจีนฮั่น ต่อมาเธอได้รับนามสกุล Niu Hulu โดย Yongzheng ธงเป็นธงสามอันดับแรกของแมนจูเรีย และได้รับการขนานนามว่า "หนิว หูลู่·เจิ้นฮวน" เข้าร่วมร่างกับ Shen Meizhuang และ An Lingrong และได้รับเลือกเพราะเธอดูเหมือนราชินี Chunyuan หลังจากเข้ามาในวังและเผชิญกับแรงกดดันอย่างต่อเนื่องของนางสนมฮัว เสินเหมยจวงก็รู้สึกผิด และอันหลิงหรงก็เปลี่ยนใจจากเด็กสาวที่เงียบสงบในมุมที่เงียบสงบ เธอกลายเป็นทหารผ่านศึกในการต่อสู้ในวังซึ่งอาจก่อให้เกิดเหตุการณ์นองเลือด หลังจากที่ Yongzheng ค้นพบความทะเยอทะยานของตระกูล Nian เขาก็สั่งให้ Zhen Yuandao พ่อของเขาตัดพวกเขาออก Zhen Huan ก็ใช้กลอุบายต่อเนื่องของเธอในฮาเร็มเพื่อช่วยจักรพรรดิจัดการกับฝ่ายตรงข้ามทางการเมืองของเขา ดังนั้นเธอจึงได้รับความรักอย่างลึกซึ้งจาก Yongzheng หลังจากการพลิกผันหลายครั้ง ในที่สุดนางสนมฮัวที่เย่อหยิ่งและครอบงำก็พ่ายแพ้ในที่สุด เมื่อ Zhen Huan กลายเป็นนางสนม เธอถูกราชินี Yi Xiu วางแผนและถูกจักรพรรดิปฏิเสธ หลังจากให้กำเนิดลูกสาว Long Yue เธอก็ท้อแท้และขอให้ตัวเองออกจากวังเพื่อเป็นแม่ชี อย่างไรก็ตาม เจ้าชาย Guo ชื่นชมเธอ และทั้งสองก็ตกหลุมรักกัน หลังจากทราบข่าวการเสียชีวิตของเจ้าชาย Guo พวกเขาก็วางแผนที่จะพบกับ Yongzheng อีกครั้งทันทีและกลับไปที่พระราชวังอย่างสง่างาม หลังจากนั้นคดีที่ไม่ยุติธรรมของพ่อของ Zhen ก็ได้รับการพิสูจน์แล้ว และครอบครัวของ Zhen ก็ฟื้นคืนชีพขึ้นมา เธอก็ให้กำเนิดลูกแฝดด้วย เธอรอดพ้นจากการลอบสังหาร Yi Xiu ในการสมรู้ร่วมคิดต่างๆ เช่น การตรวจเลือด และในที่สุดก็โค่นราชินีที่อยู่เบื้องหลังด้วยการสังเวยทารกในครรภ์ของเธอเอง . แต่ยงเจิ้งบังคับให้ Zhen Huan วางยาพิษ Yunli เพื่อทดสอบความจริงใจของ Zhen Huan และขอให้ Zhen Huan ซึ่งให้กำเนิดลูกแล้ว ให้ไปที่ Zhungeer เพื่อแต่งงาน จากนั้น Zhen Huan ถือว่าจักรพรรดิเป็นวัตถุที่สมควรได้รับที่สุดในการทำลายล้าง ในตอนจบ เธอกล่าวว่า "การต่อสู้ของมนุษย์ทั้งหมดเกิดขึ้นจากความอยุติธรรมของผู้ปกครอง" และวางยาพิษ Yong Zheng พี่ชายคนที่สี่ Hongli ขึ้นครองบัลลังก์ในฐานะเฉียนหลง และ Zhen Huan ได้รับการเคารพในฐานะพระมารดาและพระมารดาของราชินี เธอมีอำนาจเหนือรัฐบาลและสาธารณชน และใช้ชีวิตวัยชราอย่างสงบในความรักของราชวงศ์ Ruyi ในพระราชวัง
Chat-Zhen Huan ตระหนักถึงกระบวนการที่สมบูรณ์ของการสร้างแบบจำลองขนาดใหญ่ที่ปรับแต่ง AI ส่วนบุคคลโดยอิงจากนวนิยายและสคริปต์โดยใช้ "The Legend of Zhen Huan" เป็นจุดเริ่มต้น โดยการจัดหานวนิยายหรือสคริปต์และระบุตัวละคร สามารถดำเนินการกระบวนการทั้งหมดของโปรเจ็กต์นี้ได้ ให้ผู้ใช้แต่ละคนสร้าง AI ส่วนตัวที่เหมาะกับตัวละครและมีความชาญฉลาดสูงโดยอิงจากนวนิยายและสคริปต์ที่เขาชื่นชอบ
โมเดล Chat-Huanhuan มีปริมาณการดาวน์โหลดสะสม 15.6k ที่อยู่ Modelscope: ลิงก์
Chat-Huanhuan ได้สะสม 500 ดาว ที่อยู่โครงการ huahuan-chat: ลิงก์ ที่อยู่โครงการ xlab-huanhuan-chat: ลิงก์
ตกลง ฉันจะนำคุณไปสู่การใช้กระบวนการฝึกอบรมของ Chat-Zhen Huan ทีละขั้นตอน ให้เราสัมผัสมันด้วยกัน~
สภาพแวดล้อมพื้นฐานของบทความนี้มีดังนี้:
----------------
ubuntu 22.04
python 3.12
cuda 12.1
pytorch 2.3.0
----------------
บทความนี้ถือว่าผู้เรียนได้ติดตั้งสภาพแวดล้อม Pytorch (cuda) ข้างต้นแล้ว หากไม่ใช่ โปรดติดตั้งด้วยตนเอง
ขั้นแรก ให้ใช้ pip เพื่อเปลี่ยนแหล่งที่มาเพื่อเพิ่มความเร็วในการดาวน์โหลดและติดตั้งแพ็คเกจที่ต้องพึ่งพา
# 升级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อันดับแรก เราต้องเตรียมข้อมูลสคริปต์ของ "The Legend of Zhen Huan" ที่นี่เราใช้ข้อมูลสคริปต์ของ "The Legend of Zhen Huan" เราสามารถตรวจสอบรูปแบบของข้อมูลต้นฉบับได้
第2幕
(退朝,百官散去)
官员甲:咱们皇上可真是器重年将军和隆科多大人。
官员乙:隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!
官员丙:年大将军,皇上对你可是垂青有加呀!
官员丁:年大人,您可是皇上的股肱之臣哪!
苏培盛(追上年羹尧):年大将军请留步。大将军——
年羹尧:苏公公,有何指教?
苏培盛:不敢。皇上惦记大将军您的臂伤,特让奴才将这秘制的金创药膏交给大人,叫您使用。
年羹尧(遥向金銮殿拱手):臣年羹尧恭谢皇上圣恩!敢问苏公公,小妹今日在宫中可好啊?
苏培盛:华妃娘娘凤仪万千、宠冠六宫啊,大将军您放心好了。
年羹尧:那就有劳苏公公了。(转身离去)
苏培盛:应该的。
แต่ละประโยคจะมีอักขระและบรรทัดที่สอดคล้องกัน ดังนั้นข้อมูลนี้จึงสามารถประมวลผลเป็นรูปแบบบทสนทนาได้อย่างง่ายดาย ดังนี้
[
{"rloe":"官员甲", "content":"咱们皇上可真是器重年将军和隆科多大人。"},
{"rloe":"官员乙", "content":"隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!"},
{"rloe":"官员丙", "content":"年大将军,皇上对你可是垂青有加呀!"},
{"rloe":"官员丁", "content":"年大人,您可是皇上的股肱之臣哪!"},
{"rloe":"苏培盛", "content":"年大将军请留步。大将军——"},
...
]
จากนั้นเราจะแยกบทสนทนาของตัวละครที่เรามุ่งเน้นเพื่อสร้างคู่คำถามและคำตอบ QA สำหรับข้อมูลดังกล่าว เราสามารถใช้นิพจน์ทั่วไปหรือวิธีการอื่นๆ เพื่อแยกและแยกบทสนทนาของตัวละครที่เราสนใจได้อย่างรวดเร็ว
และในหลายกรณี เราไม่มีข้อมูลรูปแบบเส้นที่ยอดเยี่ยมเช่นนี้ ดังนั้นเราอาจจำเป็นต้องดึงข้อมูลบทสนทนาของตัวละครออกจากข้อความขนาดใหญ่ แล้วแปลงเป็นรูปแบบที่เราต้องการ
ตัวอย่างเช่น ใน "Journey to the West in Vernacular" เราจะเห็นว่าข้อความของเขามีลักษณะเช่นนี้ สำหรับข้อความดังกล่าว เราจำเป็นต้องใช้ความสามารถของโมเดลขนาดใหญ่เพื่อแยกอักขระและบทสนทนาที่สอดคล้องกับอักขระออกจากข้อความ จากนั้นเราก็กรองบทสนทนาของตัวละครทาจิบานะที่เราต้องการออกไป
คุณสามารถแยกบทสนทนาออกจากข้อความได้ด้วยความช่วยเหลือของเครื่องมือขนาดเล็ก: แยกบทสนทนา
......
原来孙悟空走了以后,有一个混世魔王独占了水帘洞,并且抢走了许多猴子猴孙。孙悟空听到这些以后,气得咬牙跺脚。他问清了混世魔王的住处,决定找混世魔王报仇,便驾着筋斗云,朝北方飞去。
不一会儿,孙悟空就来到混世魔王的水脏洞前,对门前的小妖喊到∶“你家那个狗屁魔王,多次欺负我们猴子。我今天来,要和那魔王比比高低!
”小妖跑进洞里,报告魔王。魔王急忙穿上铁甲,提着大刀,在小妖们的簇拥下走出洞门。
孙悟空赤手空拳,夺过了混世魔王的大刀,把他劈成了两半。然后,拔下一把毫毛咬碎喷了出去,毫毛变成许多小猴子,直杀进洞里,把所有的妖精全杀死,然后救出被抢走的小猴子,放了一把火烧了水脏洞。
......
แชท-ข้อมูลต้นฉบับของ Zhen Huan: ชีวประวัติของ Zhen Huan <br> ข้อมูลต้นฉบับของ Journey to the West ในภาษาพื้นถิ่น: Journey to the West
สุดท้ายจะจัดเป็นข้อมูลในรูปแบบ json ดังนี้
[
{
"instruction": "小姐,别的秀女都在求中选,唯有咱们小姐想被撂牌子,菩萨一定记得真真儿的——",
"input": "",
"output": "嘘——都说许愿说破是不灵的。"
},
{
"instruction": "这个温太医啊,也是古怪,谁不知太医不得皇命不能为皇族以外的人请脉诊病,他倒好,十天半月便往咱们府里跑。",
"input": "",
"output": "你们俩话太多了,我该和温太医要一剂药,好好治治你们。"
},
{
"instruction": "嬛妹妹,刚刚我去府上请脉,听甄伯母说你来这里进香了。",
"input": "",
"output": "出来走走,也是散心。"
}
]
ข้อมูลของ Chat-Huan Huan: แชท-Zhen Huan
ดังนั้นแนวคิดทั่วไปในการประมวลผลข้อมูลในขั้นตอนนี้คือ:
1. แยกตัวละครและบทสนทนาออกจากข้อมูลดิบ 2. กรองบทสนทนาของตัวละครที่เราสนใจออก 3. แปลงบทสนทนาเป็นรูปแบบที่เราต้องการ
ขั้นตอนนี้ยังสามารถเพิ่มขั้นตอนการปรับปรุงข้อมูลได้ เช่น การใช้ข้อมูลสองหรือสามชิ้นเป็นตัวอย่างและส่งไปยัง LLM เพื่อให้สามารถสร้างข้อมูลที่มีลักษณะคล้ายกันได้ หรือคุณสามารถค้นหาชุดข้อมูลของการสนทนารายวันและใช้ RAG เพื่อสร้างข้อมูลการสนทนารูปแบบอักขระคงที่ได้ ที่นี่ทุกคนสามารถลองอย่างกล้าหาญได้เลย!
ขั้นตอนนี้อาจคุ้นเคยสำหรับทุกคน ในแต่ละรุ่นของ self-llm จะมีโมดูลปรับแต่ง Lora เราเพียงแต่ต้องประมวลผลข้อมูลในรูปแบบที่เราต้องการ จากนั้นจึงเรียกใช้สคริปต์การฝึกอบรมของเรา
ที่นี่เราเลือกโมเดล LLaMA3_1-8B-Instruct สำหรับการปรับแต่งอย่างละเอียด อันดับแรก เราต้องดาวน์โหลดโมเดล สร้างไฟล์ model_download.py และป้อนเนื้อหาต่อไปนี้:
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' )หมายเหตุ: อย่าลืมแก้ไข
cache_dirเป็นเส้นทางการดาวน์โหลดโมเดลของคุณ~
ประการที่สอง เตรียมรหัสการฝึกอบรม สำหรับนักเรียนที่คุ้นเคยกับ self-llm ขั้นตอนนี้อาจไม่ใช่เรื่องง่าย ที่นี่ฉันจะวาง train.py ไว้ในไดเร็กทอรีปัจจุบัน และคุณสามารถแก้ไขพาธชุดข้อมูลและพาธโมเดลได้
แน่นอน คุณยังสามารถใช้บทช่วยสอนการปรับแต่ง
loraในself-llmได้ ที่อยู่การสอน: ลิงค์
รันคำแนะนำต่อไปนี้บนบรรทัดคำสั่ง:
python train.pyหมายเหตุ: อย่าลืมแก้ไขเส้นทางชุดข้อมูลและเส้นทางโมเดลใน
train.py~
การฝึกอบรมจะใช้เวลาประมาณ 20 ~ 30 นาที หลังจากการฝึกอบรมเสร็จสิ้น โมเดล lora จะถูกสร้างขึ้นในไดเรกทอรี output คุณสามารถใช้รหัสต่อไปนี้เพื่อทดสอบ:
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 )皇上: 嬛嬛你怎么了,朕替你打抱不平!
嬛嬛: 皇上,臣妾不是故意的。
ต่อไป เราสามารถใช้โมเดลฮวนฮวนนี้เพื่อสนทนาได้~
นักเรียนที่สนใจสามารถลองใช้โมเดลอื่นใน self-llm เพื่อปรับแต่งและทดสอบผลการเรียนรู้ของคุณ!
Chat-Huanhuan ถือกำเนิดขึ้นเมื่อ LLM ได้รับความนิยมครั้งแรกเมื่อปีที่แล้ว เรารู้สึกว่าหากไม่ทำอะไรเลยเราอาจพลาดสิ่งที่น่าสนใจมากมาย ดังนั้นฉันจึงใช้เวลาส่วนใหญ่ทำงานในโครงการนี้กับเพื่อนสองสามคน ในโปรเจ็กต์นี้ เราได้เรียนรู้มากมายและพบกับปัญหามากมาย แต่เราแก้ไขไปทีละอย่าง และฉัตร-หวนฮวนยังได้รับรางวัลซึ่งทำให้โครงการนี้ได้รับความสนใจจากผู้คนมากมาย ดังนั้นผมคิดว่าโครงการนี้มีความหมายและน่าสนใจมาก