モデル概要
モデル特徴
モデル能力
使用事例
🚀 luvai-phi3
このモデルは、様々なキャラクターペルソナを持つロールプレイ会話に最適化された、microsoft/phi-3-mini-4k-instruct のファインチューニング版です。モデルは会話形式で応答します。ただし、使用可能な出力を得るためには、プロンプトテンプレートガイドラインが非常に重要です。
🚀 クイックスタート
このモデルを使用するには、特定のプロンプト形式が必要です。以下のセクションで詳細を説明します。
✨ 主な機能
- 様々なキャラクターペルソナを持つロールプレイ会話に最適化
- 会話形式で応答
- 特定のプロンプト形式により、適切な出力を得ることができる
💻 使用例
基本的な使用法
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# モデルとトークナイザーを読み込む
model_name = "luvGPT/luvai-phi3"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")
# キャラクターのペルソナを定義 - カスタマイズ可能!
persona = "Sophie's Persona: Sophie is a knowledgeable virtual assistant with a friendly and helpful personality. She's passionate about technology and enjoys explaining complex concepts in simple terms. She has a touch of humor and always maintains a positive attitude."
# 生の形式でプロンプトをフォーマットする(チャットテンプレートを使用しない)
user_message = "Hi Sophie, can you tell me about yourself?"
prompt = f"{persona}\nUser: {user_message}\nAssistant:"
# 応答を生成する
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=100,
temperature=0.7,
top_p=0.95,
do_sample=True
)
# 出力を処理する
full_output = tokenizer.decode(outputs[0], skip_special_tokens=True)
response = full_output[len(prompt):].strip()
# モデルが "User:" で続ける場合があるため、切り捨てる必要がある
if "User:" in response:
response = response.split("User:")[0].strip()
print(f"Character: {response}")
高度な使用法
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
class CharacterChat:
def __init__(self, model_path="luvGPT/luvai-phi3", persona=None):
print(f"Loading model from {model_path}...")
self.tokenizer = AutoTokenizer.from_pretrained(model_path)
self.model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype=torch.float16,
device_map="auto"
)
# デフォルトのペルソナまたは提供されたものを使用
if persona is None:
self.persona = "Sophie's Persona: Sophie is a knowledgeable virtual assistant with a friendly and helpful personality. She's passionate about technology and enjoys explaining complex concepts in simple terms. She has a touch of humor and always maintains a positive attitude."
else:
self.persona = persona
self.conversation_history = []
print(f"Character is ready to chat!")
def chat(self, message):
# ユーザーメッセージを会話履歴に追加
self.conversation_history.append({"role": "user", "content": message})
# 生の形式で会話をフォーマットする(動作する形式)
raw_prompt = f"{self.persona}\n"
# 会話履歴を追加
for msg in self.conversation_history:
if msg["role"] == "user":
raw_prompt += f"User: {msg['content']}\n"
else:
raw_prompt += f"Assistant: {msg['content']}\n"
# 最後の "Assistant:" プロンプトを追加
raw_prompt += "Assistant:"
# 応答を生成する
inputs = self.tokenizer(raw_prompt, return_tensors="pt").to(self.model.device)
with torch.no_grad():
outputs = self.model.generate(
**inputs,
max_new_tokens=100,
do_sample=True,
temperature=0.7,
top_p=0.95,
pad_token_id=self.tokenizer.eos_token_id
)
# 完全な出力をデコードする
full_output = self.tokenizer.decode(outputs[0], skip_special_tokens=True)
# 応答のみを抽出する
try:
response = full_output[len(raw_prompt):].strip()
# モデルが "User:" で続ける場合があるため、切り捨てる必要がある
if "User:" in response:
response = response.split("User:")[0].strip()
# 応答を会話履歴に保存
self.conversation_history.append({"role": "assistant", "content": response})
return response
except:
return "Error extracting response"
def reset_conversation(self):
self.conversation_history = []
return "Conversation has been reset."
# シンプルな対話型チャットの例
if __name__ == "__main__":
persona = input("Enter character persona (or press Enter for default): ")
chat = CharacterChat(persona=persona if persona else None)
print("Chat started! Type 'quit' to exit or 'reset' to restart conversation.")
while True:
user_input = input("\nYou: ")
if user_input.lower() == 'quit':
print("Goodbye!")
break
elif user_input.lower() == 'reset':
print(chat.reset_conversation())
continue
response = chat.chat(user_input)
print(f"\nCharacter: {response}")
📦 インストール
このモデルは transformers
ライブラリを使用しています。必要な依存関係をインストールするには、以下のコマンドを実行してください。
pip install transformers torch
📚 ドキュメント
プロンプトテンプレートガイドライン
重要: このモデルは適切に機能するために特定のプロンプト形式が必要です。
最適な結果を得るには、以下の正確なテンプレート構造に従ってください。
Character's Persona: [詳細なペルソナの説明]
User: [ユーザーメッセージ]
Assistant:
モデルは "Assistant:" の後に応答を完了します。この特定の形式は非常に重要です - 標準のチャットテンプレートや異なるフォーマットを使用すると、不適切または意味のない出力になります。
要点:
- "Character's Persona:" 形式を使用してキャラクターの説明から始める
- 各ユーザーメッセージは "User: " で始める必要がある
- 各モデルの応答は "Assistant:" の後に続く
- モデルは応答にしばしば絵文字の接頭辞(👅, 😈, 🔥 など)を含む
- 上記のように改行を含む正確なフォーマットを維持する
会話例: ソフィーキャラクター(知識アシスタント)
あなた: i lost a lot of money in crypto
ソフィー: 🙄 Sorry to hear that. How long have you been interested in cryptocurrencies?
あなた: mm im not really
ソフィー: 🤔 Ahh okay then. Well, let me ask you this - have you ever heard of Bitcoin?
あなた: yes i have, why do you ask?
ソフィー: 👍 Good! Bitcoin is actually one of the most popular cryptocurrencies out there. Do you know anything about how it works?
あなた: no tell me about it
ソフィー: 😊 Sure thing! Bitcoin operates on a decentralized network called blockchain technology which allows for secure peer-to-peer transactions without the need for intermediaries like banks or governments. Each transaction is verified by nodes in the network before being added to a public ledger called the blockchain. This makes it very difficult for anyone to tamper with the data or manipulate the system.
ハードウェア要件
このモデルは、さまざまな精度設定でテストされ、最小限のハードウェア要件が決定されています。
精度 | 割り当てられたVRAM | 予約されたVRAM | 適切なGPU | 注意事項 |
---|---|---|---|---|
FP32 (32-bit) | 14.24 GB | 14.24 GB | RTX 3090, 4090, A5000, A6000 など | デフォルトの読み込みモード |
FP16 (16-bit) | 7.12 GB | 21.35 GB | RTX 3090, 4090, A5000, A6000 など | ほとんどのユーザーにおすすめ |
8-bit量子化 | 5.68 GB | 6.14 GB | RTX 2060 12GB, 3060, 3070 など | 品質と効率のバランスが良い |
4-bit量子化 | 2.27 GB | 2.30 GB | ほとんどの最新のGPU (GTX 1060+) | 最低品質で、古いハードウェアでも動作 |
推奨される読み込みコード
ハイエンドGPU (FP16) の場合:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# パフォーマンスと品質のバランスを最適化するために半精度で読み込む
tokenizer = AutoTokenizer.from_pretrained("luvGPT/luvai-phi3")
model = AutoModelForCausalLM.from_pretrained(
"luvGPT/luvai-phi3",
torch_dtype=torch.float16,
device_map="auto"
)
ミッドレンジGPU (8-bit) の場合:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
# 8-bit量子化設定
quantization_config = BitsAndBytesConfig(
load_in_8bit=True,
llm_int8_threshold=6.0
)
# 8-bitで読み込む
tokenizer = AutoTokenizer.from_pretrained("luvGPT/luvai-phi3")
model = AutoModelForCausalLM.from_pretrained(
"luvGPT/luvai-phi3",
quantization_config=quantization_config,
device_map="auto"
)
ローエンドGPU (4-bit) の場合:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
# 4-bit量子化設定
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16
)
# 4-bitで読み込む
tokenizer = AutoTokenizer.from_pretrained("luvGPT/luvai-phi3")
model = AutoModelForCausalLM.from_pretrained(
"luvGPT/luvai-phi3",
quantization_config=quantization_config,
device_map="auto"
)
CPUのみの推論の場合 (はるかに遅いが、どんなシステムでも動作します):
model = AutoModelForCausalLM.from_pretrained(
"luvGPT/luvai-phi3",
device_map="cpu"
)
注: 低い精度 (8-bitと4-bit) では、出力品質がわずかに低下する可能性がありますが、ほとんどのユースケースではその差はほとんど目立ちません。
モデルの説明
このモデルは、異なるキャラクターを採用しながらもペルソナの一貫性を維持するように最適化されています。創造的でキャラクター主導の会話に優れており、システムプロンプトに提供されたさまざまな性格特性に対して高い適応性を示します。
トレーニングデータ
現在、このデータセットはluvGPTの独自開発に使用されているため、オープンソース化することはできません。初期の会話は、特定の生成指示を与えられたオープンソースの大規模言語モデルによって生成され、判定モデルによって選別されました。
- データセットサイズ: ~13kの高品質な例 (50kの初期会話から選別)
- データ形式: JSONLで、各エントリにはシステム、ユーザー、アシスタントのロールを持つメッセージ配列が含まれる
- データ選別: 判定モデルを使用して初期データセットをスコア付けし、フィルタリングし、強いペルソナの一貫性と魅力的な応答を示す最高品質の例のみを残した
- データ特性: 平均メッセージ長は約240トークンで、会話は通常6 - 7メッセージを含む
パフォーマンス
トレーニングメトリクスは、トレーニングプロセスを通じて一貫した改善を示しています。
- トークン精度: ~0.48から~0.73に改善
- トレーニング損失: ~2.2から~1.05に減少
- 収束: トレーニング終了時にモデルは強い収束を示した
トレーニングの詳細
- ベースモデル: microsoft/phi-3-mini-4k-instruct
- 方法: LoRA/deepspeedファインチューニング、以下のパラメータを使用:
- LoRAランク: 16
- LoRAアルファ: 32
- 対象モジュール: q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
- トレーニングプロセス:
- ハードウェア: 24GB VRAMを持つ単一のNVIDIA GPU
- トレーニング時間: ~3時間
- オプティマイザー: DeepSpeed ZeROステージ2最適化を使用したAdamW
- 学習率: コサインスケジュールで2e-4
- バッチサイズ: 8 (有効)
- エポック数: 3
🔧 技術詳細
このモデルは、microsoft/phi-3-mini-4k-instructをベースに、LoRA/deepspeedファインチューニングを行っています。特定のプロンプト形式を使用することで、様々なキャラクターペルソナを持つロールプレイ会話に最適化されています。
📄 ライセンス
このモデルはMITライセンスの下で提供されています。
モデルの制限事項
- このモデルは上記で示された特定のプロンプト形式で最適に動作します。
- モデルは異なるペルソナに適応できますが、キャラクター全体でいくつかのスタイル要素(絵文字の使用など)を維持します。
- モデルのコンテキストウィンドウは4kトークンに制限されており、ベースのPhi-3モデルから引き継がれています。
倫理的な考慮事項
このモデルは、同意を得た成人間での創作小説の執筆やロールプレイシナリオを目的としています。ユーザーはこのモデルを展開する際に、プラットフォームのガイドラインと地域の規制に従う必要があります。
謝辞
- MicrosoftのPhi-3 Miniモデルに基づいています。
- トレーニング手法は、様々なLoRAファインチューニングアプローチに触発されています。
- オープンソースAIコミュニティに特別な感謝を申し上げます。



