Chat-Zhen Huanは、Zhen Huan の口調を模倣したチャット言語モデルで、「The Legend of Zhen Huan」の台本にある Zhen Huan に関するすべてのセリフと文章を使用した大規模なモデルに基づいてLoRA 微調整によって得られます。
ジェン・フアン、小説「ジェン・フアンの伝説」およびテレビシリーズ「ジェン・フアンの伝説」の女性主人公であり中心的なヒロイン。彼女の元の名前はジェン・ユアンでしたが、翡翠という言葉が卑劣であると考えたため、彼女は漢民族のジェン・ユアンダオの娘であったため、後に雍正によって牛フルという姓を与えられました。この旗は満州三大国旗に数えられ、「牛芙蓉・鎮環」と名付けられました。沈美荘、安玲榮とともにドラフトに参加し、春原女王に似ているという理由で指名された。宮殿に入った後、華妃の絶え間ない圧力に直面して、沈美荘は不当な扱いを受けました。そして、安玲榮は、静かな片隅にいた若くて静かな少女から、血なまぐさい事件を引き起こす可能性のある宮殿の戦いのベテランになりました。雍正が年家の野望を知った後、父のジェン・ユアンダオに彼らを断ち切るよう命じた。ジェン・フアンもまた、皇帝の政敵への対処を助けるためにハーレムで彼女の一連のトリックを使用したため、彼女は雍正から深く愛された。紆余曲折を経て、傲慢で横暴な華妃はついに敗北した。ジェン・フアンが側室になったとき、イー・シウ王后の陰謀により皇帝に拒絶され、娘のロン・ユエを出産した後、落胆し、尼になるために宮殿を出ようと願い出た。しかし、雍正は郭王に慕われており、二人は郭王の死を知るとすぐに再会し、栄華を誇って宮殿に戻るつもりでいた。その後、ジェンの父親の不当な事件が証明され、ジェンの家族も復活し、血液検査などのさまざまな陰謀でイー・シウの暗殺を逃れ、最終的には自分の胎児を犠牲にして黒幕を倒した。 。しかし、雍正はジェン・フアンの誠意を試すためにユンリを毒殺するよう強要し、すでに子供を産んでいたジェン・フアンに結婚するためにズンゲルに行くよう頼んだ。ジェン・フアンは最後に皇帝を最も破壊に値する対象とみなし、「すべての人間の闘争は支配者の不正から生じる」と述べ、永正を毒殺した。 4番目の兄である紅麗は乾隆として王位に就き、ジェン・ファンは聖母および皇太后として崇められ、政府と国民を支配する権力を持ち、宮殿で如懿の王室の愛の中で穏やかに老後を過ごしました。
Chat-Zhen Huanは、「The Legend of Zhen Huan」を出発点として、小説や脚本に基づいてパーソナライズされたAI微調整大型モデルを作成する完全なプロセスを実現しました。任意の小説や脚本を提供し、キャラクターを指定することで、完成します。このプロジェクトのプロセスは、各ユーザーが自分の好きな小説や脚本に基づいて、キャラクターの性格に合った高度な知能を備えた独自のパーソナライズされた 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 の質問と回答のペアを作成します。このようなデータに対しては、正規表現などを利用して、気になるキャラクターのセリフを素早く抽出して抽出することができます。
そして多くの場合、そのような優れた行形式のデータはありません。そのため、大きなテキストからキャラクターの会話データを抽出し、必要な形式に変換する必要がある場合があります。
たとえば、『Vernacular 西遊記』では、彼の文章は次のようになっていることがわかります。このようなテキストの場合、大規模モデルの機能を使用して、テキストから文字とその文字に対応するダイアログを抽出する必要があります。次に、立花キャラクターに必要なダイアログをフィルタリングします。
小さなツールextract-dialogue を使用して、テキストからダイアログを抽出できます。
......
原来孙悟空走了以后,有一个混世魔王独占了水帘洞,并且抢走了许多猴子猴孙。孙悟空听到这些以后,气得咬牙跺脚。他问清了混世魔王的住处,决定找混世魔王报仇,便驾着筋斗云,朝北方飞去。
不一会儿,孙悟空就来到混世魔王的水脏洞前,对门前的小妖喊到∶“你家那个狗屁魔王,多次欺负我们猴子。我今天来,要和那魔王比比高低!
”小妖跑进洞里,报告魔王。魔王急忙穿上铁甲,提着大刀,在小妖们的簇拥下走出洞门。
孙悟空赤手空拳,夺过了混世魔王的大刀,把他劈成了两半。然后,拔下一把毫毛咬碎喷了出去,毫毛变成许多小猴子,直杀进洞里,把所有的妖精全杀死,然后救出被抢走的小猴子,放了一把火烧了水脏洞。
......
チャット - ジェン・フアンの元データ:ジェン・フアンの伝記
俗語での西遊記の元データ:西遊記
最後に、次のようにjson
形式のデータに整理されます。
[
{
"instruction": "小姐,别的秀女都在求中选,唯有咱们小姐想被撂牌子,菩萨一定记得真真儿的——",
"input": "",
"output": "嘘——都说许愿说破是不灵的。"
},
{
"instruction": "这个温太医啊,也是古怪,谁不知太医不得皇命不能为皇族以外的人请脉诊病,他倒好,十天半月便往咱们府里跑。",
"input": "",
"output": "你们俩话太多了,我该和温太医要一剂药,好好治治你们。"
},
{
"instruction": "嬛妹妹,刚刚我去府上请脉,听甄伯母说你来这里进香了。",
"input": "",
"output": "出来走走,也是散心。"
}
]
チャット-フアン・フアンのデータ:チャット-ジェン・フアン
したがって、このステップでのデータ処理の一般的な考え方は次のとおりです。
1. 生データからキャラクターとセリフを抽出 2. 気になるキャラクターのセリフを除外 3. セリフを必要な形式に変換
このステップでは、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
現在のディレクトリに配置します。データ セットのパスとモデルのパスを変更できます。
もちろん、
self-llm
のlora
微調整チュートリアルを使用することもできます。チュートリアルのアドレス: リンク
コマンドラインで次のコマンドを実行します。
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 )
皇上: 嬛嬛你怎么了,朕替你打抱不平!
嬛嬛: 皇上,臣妾不是故意的。
次に、この Huanhuan モデルを使用して会話をすることができます~
興味のある学生は、 self-llm
で他のモデルを使用して微調整し、学習結果をテストしてみることができます。
Chat-Huanhuan は、昨年 LLM が初めて普及したときに作成されました。私たちは、何かをしなければ、多くの興味深いものを見逃してしまうかもしれないと感じました。そこで私は数人の友人とこのプロジェクトに多くの時間を費やしました。このプロジェクトでは多くのことを学び、多くの問題に遭遇しましたが、一つ一つ解決していきました。また、Chat-Huanhuan 氏も賞を受賞し、このプロジェクトは多くの人々の注目を集めるようになりました。したがって、このプロジェクトは非常に意味があり、興味深いものであると思います。