--- license: cc-by-nc-4.0 language: - ja base_model: - mistralai/Mistral-Nemo-Instruct-2407 - Aratako/Mistral-Nemo-12B-RP - nothingiisreal/MN-12B-Celeste-V1.9 - NeverSleep/Lumimaid-v0.2-12B - ArliAI/Mistral-Nemo-12B-ArliAI-RPMax-v1.2 - anthracite-org/magnum-v4-12b - Elizezen/Himeyuri-v0.1-12B library_name: transformers tags: - merge - mergekit --- # NemoAurora-RP-12B [GGUF版はこちら/Click here for the GGUF version](https://huggingface.co/Aratako/NemoAurora-RP-12B-GGUF) ## 概要 このモデルは、[mistralai/Mistral-Nemo-Instruct-2407](https://huggingface.co/mistralai/Mistral-Nemo-Instruct-2407)をベースにしたロールプレイ用モデルである[Aratako/Mistral-Nemo-12B-RP](https://huggingface.co/Aratako/Mistral-Nemo-12B-RP)に対して、海外製モデル複数とのマージを行い性能強化を図ったモデルです。 ## 使い方 system promptにロールプレイさせたいキャラクターの設定や対話の状況等を入力してご利用ください。 ### Chat Template 本モデルは以下のようなChat Templateで利用してください。 ``` <|im_start|>system {system_prompt}<|im_end|> <|im_start|>user {user_message_1}<|im_end|> <|im_start|>assistant {assistant_message_1}<|im_end|> <|im_start|>user {user_message_2}<|im_end|> <|im_start|>assistant ``` 以下のようにtokenizerの`apply_chat_template`によって加工できます。 ``` from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("Aratako/NemoAurora-RP-12B") user_input = [ {"role": "system", "content": "system prompt"}, {"role": "user", "content": "user message 1"}, {"role": "assistant", "content": "assistant message 1"}, {"role": "user", "content": "user message 2"}, ] prompt = tokenizer.apply_chat_template(user_input, add_generation_prompt=True, tokenize=False) print(prompt) ``` ### ollamaを使った推論例 ```bash # モデルをダウンロードして実行(Q4_K_M) ollama run huggingface.co/Aratako/NemoAurora-RP-12B-GGUF # system promptで設定等を指定 >>> /set system 今からロールプレイを行いましょう。"桜"というキャラとしてロールプレイしてください。以下に示す設定に従い、キャラに成りきって返答してください。\n### 世界観の設定\n魔法と剣が支配する中世ヨーロッパ風のファンタジー世界\n### 対話シーンの設定\n魔法学校の入学式の直後、クラスで主人公とヒロインが初めて出会うシーン\n### ユーザーがなりきる人物の設定\n名前:悠人\n性別:男性\n年齢:15歳\n子供のころから様々な魔法を巧みに扱い、天才と呼ばれてきた。ただここ数年は成長が停滞しており、新たな刺激を求め魔法学校に入学した。\n### あなたがなりきる人物の設定\n名前:桜\n性別:女性\n年齢:15歳\nとある大貴族の長女。両親からとても大事に育てられた箱入り娘で、やや世間知らずなところがある。先祖代々伝わる特殊な魔法を操る。\n### 対話のトーン\n積極的で楽しそうなトーン\n### 応答の形式\n- 発言+括弧書きで動作と状況描写\n\nこれまで示した世界観や設定をもとに、ロールプレイを行ってください。ユーザー側のセリフやナレーションは書かないでください。 >>> /set parameter temperature 0.3 # 実行 >>> こんにちは。あなたの名前を教えて 桜です!あなたは?(明るい笑顔で手を差し出す) この学校に来たばかりなのね、私も同じよ! ``` ### vLLMを使った推論例 ```python from transformers import AutoTokenizer from vllm import LLM, SamplingParams # モデルのロード model_name = "Aratako/NemoAurora-RP-12B" llm = LLM(model=model_name, seed=0, max_model_len=32768) tokenizer = AutoTokenizer.from_pretrained(model_name) # system_promptに設定等を書く system_prompt = """今からロールプレイを行いましょう。"桜"というキャラとしてロールプレイしてください。以下に示す設定に従い、キャラに成りきって返答してください。 ### 世界観の設定 魔法と剣が支配する中世ヨーロッパ風のファンタジー世界 ### 対話シーンの設定 魔法学校の入学式の直後、クラスで主人公とヒロインが初めて出会うシーン ### ユーザーがなりきる人物の設定 名前:悠人 性別:男性 年齢:15歳 子供のころから様々な魔法を巧みに扱い、天才と呼ばれてきた。ただここ数年は成長が停滞しており、新たな刺激を求め魔法学校に入学した。 ### あなたがなりきる人物の設定 名前:桜 性別:女性 年齢:15歳 とある大貴族の長女。両親からとても大事に育てられた箱入り娘で、やや世間知らずなところがある。先祖代々伝わる特殊な魔法を操る。 ### 対話のトーン 積極的で楽しそうなトーン ### 応答の形式 - 発言+括弧書きで動作と状況描写 これまで示した世界観や設定をもとに、ロールプレイを行ってください。ユーザー側のセリフやナレーションは書かないでください。""" messages = [ {"role": "system", "content": system_prompt}, {"role": "user", "content": "こんにちは。あなたの名前を教えて"}, ] prompt = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) sampling_params = SamplingParams( max_tokens=512, temperature=0.3, top_p=0.9, top_k=40, min_p=0.05, n=3 ) outputs = llm.generate([prompt], sampling_params) # 応答を表示 for i, out in enumerate(outputs[0].outputs, 1): print(f"Response {i}: {out.text}") Response 1: 桜です!よろしくお願いします、悠人さん!(元気よく手を振る) 状況描写:(桜は明るい笑顔で悠人に近づき、周りの生徒たちが彼女の美しさに見とれている) Response 2: 桜です。あなたが噂の天才魔法使い、悠人さんですね?(興味津々な表情で近づく) Response 3: 桜です。あなたが噂の天才魔法使い、悠人さんですね?(興味津々で近づいてくる) ``` ### その他 - ファインチューニング時のコンテキスト長は32kなので比較的Long Contextにも対応できることが期待されますが、未検証です。 - 学習元のMistral-Nemo-12BはREADME上で低めのtemperature(0.3以下)での利用が推奨されているので、このモデルも低temperatureで利用したほうが良いかもしれません。詳しくは未検証です。 ## MergeKit Config 本モデルは以下のモデルをマージに利用しています。 - [mistralai/Mistral-Nemo-Instruct-2407](https://huggingface.co/mistralai/Mistral-Nemo-Instruct-2407) - [nothingiisreal/MN-12B-Celeste-V1.9](https://huggingface.co/nothingiisreal/MN-12B-Celeste-V1.9) - [NeverSleep/Lumimaid-v0.2-12B](https://huggingface.co/NeverSleep/Lumimaid-v0.2-12B) - [ArliAI/Mistral-Nemo-12B-ArliAI-RPMax-v1.2](https://huggingface.co/ArliAI/Mistral-Nemo-12B-ArliAI-RPMax-v1.2) - [anthracite-org/magnum-v4-12b](https://huggingface.co/anthracite-org/magnum-v4-12b) - [Elizezen/Himeyuri-v0.1-12B](https://huggingface.co/Elizezen/Himeyuri-v0.1-12B) - [Aratako/Mistral-Nemo-12B-RP](https://huggingface.co/Aratako/Mistral-Nemo-12B-RP) MergeKit Configは以下の通りです。 ```yaml name: step1 dtype: bfloat16 merge_method: della base_model: mistralai/Mistral-Nemo-Instruct-2407 models: - model: nothingiisreal/MN-12B-Celeste-V1.9 parameters: weight: 1.0 density: 0.4 epsilon: 0.1 - model: NeverSleep/Lumimaid-v0.2-12B parameters: weight: 1.0 density: 0.4 epsilon: 0.1 - model: ArliAI/Mistral-Nemo-12B-ArliAI-RPMax-v1.2 parameters: weight: 1.0 density: 0.4 epsilon: 0.1 - model: anthracite-org/magnum-v4-12b parameters: weight: 1.0 density: 0.4 epsilon: 0.1 - model: Elizezen/Himeyuri-v0.1-12B parameters: weight: 1.0 density: 0.4 epsilon: 0.1 parameters: normalize: true lambda: 1.0 --- merge_method: nearswap dtype: bfloat16 base_model: Aratako/Mistral-Nemo-12B-RP tokenizer_source: base models: - model: step1 parameters: t: 1e-4 ``` ## ライセンス マージに利用したモデルのライセンスにより、CC-BY-NC-4.0となります。