Чат-Чжэнь Хуань — это модель языка чата, имитирующая тон Чжэнь Хуаня и полученная путем тонкой настройки LoRA на основе большой модели с использованием всех строк и предложений о Чжэнь Хуане в сценарии «Легенды о Чжэнь Хуане».
Чжэнь Хуань, главная женская роль и главная героиня романа «Гарем: Легенда о Чжэнь Хуане» и сериала «Легенда о Чжэнь Хуане». Ее настоящее имя было Чжэнь Юйхуань, но она подумала, что слово «нефрит» было вульгарным, и сменила имя на Чжэнь Хуань. Она была дочерью Чжэнь Юаньдао, ханьского китайца. Позже Юнчжэн дал ей фамилию Ню Хулу. Флаг вошел в тройку лучших флагов Маньчжурии и получил название «Ню Хулу · Чжэнь Хуан». Участвовала в драфте вместе с Шэнь Мэйчжуан и Ань Линжун и была выбрана, потому что была похожа на королеву Чунюань. Войдя во дворец, столкнувшись с постоянным давлением наложницы Хуа, Шэнь Мэйчжуан была оскорблена, и Ан Линжун изменила свое сердце. Из молодой и тихой девушки, живущей в тихом уголке, она стала ветераном дворцовых боев, которые могли вызвать кровавые события. После того, как Юнчжэн обнаружил амбиции семьи Нянь, он приказал своему отцу Чжэнь Юаньдао пресечь их. Чжэнь Хуань также использовала свои серийные трюки в гареме, чтобы помочь императору справиться со своими политическими противниками, поэтому Юнчжэн глубоко любил ее. После многих перипетий высокомерная и властная наложница Хуа наконец была побеждена. Когда Чжэнь Хуань стала наложницей, она была заговорена королевой И Сю и была отвергнута императором. После рождения дочери Лун Юэ она впала в уныние и попросила себя покинуть дворец, чтобы стать монахиней. Однако принц Го восхищался ею, и они влюбились друг в друга. Узнав о смерти принца Го, они немедленно планировали снова встретиться с Юнчжэном и вернуться во дворец во славе. Впоследствии несправедливое дело отца Чжэнь было оправдано, и семья Чжэнь была воскрешена. Она также родила близнецов. Она избежала убийства И Сю с помощью различных заговоров, таких как анализы крови, и, наконец, свергла королеву, которая была за кулисами, принеся в жертву свой собственный плод. . Но Юнчжэн заставил Чжэнь Хуаня отравить Юньли, чтобы проверить искренность Чжэнь Хуаня, и попросил Чжэнь Хуаня, уже родившего ребенка, поехать в Чжунгеэр, чтобы выйти замуж. Затем Чжэнь Хуань считала императора самым достойным объектом разрушения. В финале она сказала, что «все человеческие проблемы возникают из-за несправедливости правителей», и отравила Юн Чжэна. Четвертый старший брат Хунли взошел на трон как Цяньлун, а Чжэнь Хуань почиталась как Святая Мать и Королева-Мать. Она имела власть над правительством и общественностью и мирно провела свою старость в Королевской любви Руйи во дворце.
Чат-Чжэнь Хуан реализовал полный процесс создания набора персонализированных больших моделей с тонкой настройкой искусственного интеллекта на основе романов и сценариев, используя «Легенду о Чжэнь Хуане» в качестве отправной точки. Предоставляя любой роман или сценарий и указывая персонажей, Можно запустить весь процесс этого проекта. Пусть каждый пользователь создаст свой собственный персонализированный ИИ, который соответствует персонажу и обладает высоким интеллектом, на основе его любимых романов и сценариев.
Совокупный объем загрузок модели Чат-Хуанхуань составляет 15,6 тыс., адрес Modelscope: Ссылка.
Chat-Huanhuan-chat накопил 500 звезд, адрес проекта huahuan-chat: ссылка , адрес проекта xlab-huanhuan-chat: ссылка
Хорошо, тогда я поведу вас лично, шаг за шагом, реализовать процесс обучения Чат-Чжэнь Хуана. Давайте испытаем это вместе ~.
Основная среда этой статьи такова:
----------------
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
Сначала нам нужно подготовить данные сценария «Легенды о Чжэнь Хуане». Здесь мы используем данные сценария «Легенды о Чжэнь Хуане». Мы можем проверить формат исходных данных.
第2幕
(退朝,百官散去)
官员甲:咱们皇上可真是器重年将军和隆科多大人。
官员乙:隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!
官员丙:年大将军,皇上对你可是垂青有加呀!
官员丁:年大人,您可是皇上的股肱之臣哪!
苏培盛(追上年羹尧):年大将军请留步。大将军——
年羹尧:苏公公,有何指教?
苏培盛:不敢。皇上惦记大将军您的臂伤,特让奴才将这秘制的金创药膏交给大人,叫您使用。
年羹尧(遥向金銮殿拱手):臣年羹尧恭谢皇上圣恩!敢问苏公公,小妹今日在宫中可好啊?
苏培盛:华妃娘娘凤仪万千、宠冠六宫啊,大将军您放心好了。
年羹尧:那就有劳苏公公了。(转身离去)
苏培盛:应该的。
Каждое предложение имеет символ и соответствующие строки, поэтому эти данные можно легко преобразовать в диалоговую форму следующим образом:
[
{"rloe":"官员甲", "content":"咱们皇上可真是器重年将军和隆科多大人。"},
{"rloe":"官员乙", "content":"隆科多大人,恭喜恭喜啊!您可是国家的大功臣啊!"},
{"rloe":"官员丙", "content":"年大将军,皇上对你可是垂青有加呀!"},
{"rloe":"官员丁", "content":"年大人,您可是皇上的股肱之臣哪!"},
{"rloe":"苏培盛", "content":"年大将军请留步。大将军——"},
...
]
Затем мы извлекаем диалоги персонажей, на которых фокусируемся, чтобы сформировать пары вопросов и ответов для контроля качества. Для таких данных мы можем использовать регулярные выражения или другие методы для быстрого извлечения и извлечения диалогов интересующих нас персонажей.
И во многих случаях у нас нет таких отличных данных о формате строки. Поэтому нам может потребоваться извлечь данные диалога персонажа из большого куска текста, а затем преобразовать их в нужный нам формат.
Например, в «Путешествии на Запад на просторечии» мы видим, что его текст выглядит так. Для такого текста нам нужно использовать возможность больших моделей извлекать из текста персонажей и диалог, соответствующий персонажам. Затем отфильтровываем нужные нам диалоги персонажей Тачибаны.
Вы можете извлечь диалог из текста с помощью небольшого инструмента: extract-dialogue .
......
原来孙悟空走了以后,有一个混世魔王独占了水帘洞,并且抢走了许多猴子猴孙。孙悟空听到这些以后,气得咬牙跺脚。他问清了混世魔王的住处,决定找混世魔王报仇,便驾着筋斗云,朝北方飞去。
不一会儿,孙悟空就来到混世魔王的水脏洞前,对门前的小妖喊到∶“你家那个狗屁魔王,多次欺负我们猴子。我今天来,要和那魔王比比高低!
”小妖跑进洞里,报告魔王。魔王急忙穿上铁甲,提着大刀,在小妖们的簇拥下走出洞门。
孙悟空赤手空拳,夺过了混世魔王的大刀,把他劈成了两半。然后,拔下一把毫毛咬碎喷了出去,毫毛变成许多小猴子,直杀进洞里,把所有的妖精全杀死,然后救出被抢走的小猴子,放了一把火烧了水脏洞。
......
чат-Оригинальные данные Чжэнь Хуаня: Биография Чжэнь Хуаня <br> Оригинальные данные Путешествия на Запад на просторечии: Путешествие на Запад
Наконец, он организован в данные в формате json
следующим образом:
[
{
"instruction": "小姐,别的秀女都在求中选,唯有咱们小姐想被撂牌子,菩萨一定记得真真儿的——",
"input": "",
"output": "嘘——都说许愿说破是不灵的。"
},
{
"instruction": "这个温太医啊,也是古怪,谁不知太医不得皇命不能为皇族以外的人请脉诊病,他倒好,十天半月便往咱们府里跑。",
"input": "",
"output": "你们俩话太多了,我该和温太医要一剂药,好好治治你们。"
},
{
"instruction": "嬛妹妹,刚刚我去府上请脉,听甄伯母说你来这里进香了。",
"input": "",
"output": "出来走走,也是散心。"
}
]
Данные Чат-Хуан Хуан: Чат-Чжэнь Хуан
Поэтому общая идея обработки данных на этом этапе такова:
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 минут. После завершения обучения в output
каталоге будет создана lora
модель. Для тестирования вы можете использовать следующий код:
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 впервые стал популярным в прошлом году. Мы чувствовали, что если что-то не сделаем, то можем пропустить много интересного. Поэтому я провел много времени, работая над этим проектом с несколькими друзьями. В этом проекте мы многому научились и столкнулись со многими проблемами, но решали их одну за другой. Чат-Хуанхуань также получил награду, которая привлекла к проекту внимание многих людей. Поэтому я считаю этот проект очень содержательным и интересным.