Chat-Zhen Huan هو نموذج لغة دردشة يقلد نغمة Zhen Huan ويتم الحصول عليه من خلال الضبط الدقيق لـ LoRA بناءً على نموذج كبير يستخدم جميع السطور والجمل حول Zhen Huan في نص "The Legend of Zhen Huan".
تشن هوان، البطلة والبطلة الأساسية في رواية "أسطورة تشن هوان" والمسلسل التلفزيوني "أسطورة تشن هوان". كان اسمها الأصلي Zhen Yuhuan، لكنها غيرت اسمها إلى Zhen Huan لأنها اعتقدت أن كلمة jade كانت مبتذلة. وكانت ابنة Zhen Yuandao، وهو صيني من الهان. وفي وقت لاحق، حصلت على لقب Niu Hulu من قبل Yongzheng العلم هو الأعلام الثلاثة الأولى لمنشوريا وكان اسمه "نيو هولو · تشن هوان". شاركت في المسودة مع Shen Meizhuang وAn Lingrong، وتم اختيارها لأنها تشبه الملكة Chunyuan. بعد دخول القصر، وفي مواجهة الضغط المستمر من المحظية هوا، تعرضت شين ميتشوانغ للظلم، وغيرت آن لينغ رونغ قلبها من فتاة شابة وهادئة في زاوية هادئة، أصبحت من المخضرمين في قتال القصر ويمكن أن تسبب أحداثًا دامية. بعد أن اكتشف Yongzheng طموحات عائلة Nian، أمر والده Zhen Yuandao بقطعها. كما استخدمت Zhen Huan حيلها المتسلسلة في الحريم لمساعدة الإمبراطور في التعامل مع خصومه السياسيين، لذلك أحبها Yongzheng بشدة. بعد العديد من التقلبات والمنعطفات، هُزمت المحظية هوا المتغطرسة والمستبدة أخيرًا. عندما أصبحت تشن هوان محظية، تآمرت عليها الملكة يي شيو ورفضها الإمبراطور. بعد أن أنجبت ابنتها لونغ يو، أصيبت بالإحباط وطلبت من نفسها مغادرة القصر لتصبح راهبة. ومع ذلك، فقد نال إعجاب الملك Guo، ووقع الاثنان في الحب بعد أن علموا بوفاة الملك Guo، وخططوا على الفور للقاء Yongzheng مرة أخرى والعودة إلى القصر في المجد. بعد ذلك، تم إثبات قضية والد زين الظالمة وتم إحياء عائلة زين، كما أنجبت توأمان، ونجت من اغتيال يي شيو في مؤامرات مختلفة مثل اختبارات الدم، وأخيراً أسقطت الملكة التي كانت وراء الكواليس بالتضحية بجنينها. . لكن Yongzheng أجبر Zhen Huan على تسميم Yunli لاختبار صدق Zhen Huan، وطلب من Zhen Huan، التي أنجبت طفلاً بالفعل، الذهاب إلى Zhungeer للزواج. ثم اعتبرت تشين هوان الإمبراطور أكثر الأشياء استحقاقًا للتدمير. وفي النهاية، قالت إن "كل صراعات الإنسان تنشأ من ظلم الحكام" وسممت يونغ تشنغ. صعد الأخ الأكبر الرابع هونغلي إلى العرش بصفته تشيان لونغ، وتم تبجيل زين هوان باعتبارها الأم المقدسة والملكة الأم، وكانت تتمتع بسلطة على الحكومة والجمهور، وأمضت شيخوختها بسلام في حب روي الملكي في القصر.
لقد أدرك Chat-Zhen Huan العملية الكاملة لإنشاء نموذج كبير مخصص للذكاء الاصطناعي يعتمد على الروايات والنصوص باستخدام "The Legend of Zhen Huan" كنقطة بداية من خلال تقديم أي رواية أو نص وتحديد الشخصية، بشكل كامل يمكن تشغيل عملية هذا المشروع. اسمح لكل مستخدم بإنشاء الذكاء الاصطناعي الشخصي الخاص به والذي يناسب شخصية الشخصية ويكون ذكيًا للغاية بناءً على رواياته ونصوصه المفضلة.
يحتوي نموذج Chat-Huanhuan على حجم تنزيل تراكمي يبلغ 15.6 كيلو بايت، عنوان Modelscope: Link
حصل 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":"年大将军请留步。大将军——"},
...
]
ثم نستخرج حوارات الشخصيات التي نركز عليها لتكوين أزواج أسئلة وأجوبة ضمان الجودة. بالنسبة لمثل هذه البيانات، يمكننا استخدام التعبيرات العادية أو الطرق الأخرى لاستخراج واستخراج حوار الشخصيات التي نهتم بها بسرعة.
وفي كثير من الحالات، لا نملك مثل هذه البيانات الممتازة بتنسيق الخط. لذلك قد نحتاج إلى استخراج بيانات حوار الشخصية من جزء كبير من النص، ومن ثم تحويلها إلى التنسيق الذي نحتاجه.
على سبيل المثال، في "رحلة إلى الغرب باللغة العامية"، يمكننا أن نرى أن نصه يبدو هكذا. لمثل هذا النص، نحتاج إلى استخدام قدرة النماذج الكبيرة على استخراج الأحرف والحوار المقابل للأحرف من النص. ثم نقوم بتصفية الحوار الذي نحتاجه لشخصية تاتشيبانا.
يمكنك استخراج الحوار من النص بمساعدة أداة صغيرة: extract-dialogue .
......
原来孙悟空走了以后,有一个混世魔王独占了水帘洞,并且抢走了许多猴子猴孙。孙悟空听到这些以后,气得咬牙跺脚。他问清了混世魔王的住处,决定找混世魔王报仇,便驾着筋斗云,朝北方飞去。
不一会儿,孙悟空就来到混世魔王的水脏洞前,对门前的小妖喊到∶“你家那个狗屁魔王,多次欺负我们猴子。我今天来,要和那魔王比比高低!
”小妖跑进洞里,报告魔王。魔王急忙穿上铁甲,提着大刀,在小妖们的簇拥下走出洞门。
孙悟空赤手空拳,夺过了混世魔王的大刀,把他劈成了两半。然后,拔下一把毫毛咬碎喷了出去,毫毛变成许多小猴子,直杀进洞里,把所有的妖精全杀死,然后救出被抢走的小猴子,放了一把火烧了水脏洞。
......
chat-البيانات الأصلية لـ Zhen Huan: سيرة Zhen Huan
البيانات الأصلية لـ 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 )
皇上: 嬛嬛你怎么了,朕替你打抱不平!
嬛嬛: 皇上,臣妾不是故意的。
بعد ذلك، يمكننا استخدام نموذج Huanhuan هذا لإجراء محادثات ~
يمكن للطلاب المهتمين محاولة استخدام نماذج أخرى في self-llm
لتحسين نتائج التعلم واختبارها!
تم إنشاء Chat-Huanhuan عندما أصبحت LLM مشهورة لأول مرة في العام الماضي، وشعرنا أنه إذا لم نفعل شيئًا ما، فقد نفوت الكثير من الأشياء المثيرة للاهتمام. لذلك قضيت الكثير من الوقت في العمل على هذا المشروع مع عدد قليل من الأصدقاء. في هذا المشروع، تعلمنا الكثير وواجهنا العديد من المشاكل، لكننا قمنا بحلها واحدة تلو الأخرى. وحصل Chat-Huanhuan أيضًا على جائزة، مما لفت انتباه الكثير من الناس إلى المشروع. لذلك، أعتقد أن هذا المشروع مفيد للغاية ومثير للاهتمام.