|
--- |
|
language: |
|
- ja |
|
library_name: transformers |
|
license: cc-by-nc-4.0 |
|
pipeline_tag: text-generation |
|
tags: |
|
- nsfw |
|
- Visual novel |
|
- roleplay |
|
--- |
|
# Model Card for Model ID |
|
|
|
![image](./cover.png) |
|
|
|
<!-- Generated using cagliostrolab/animagine-xl-3.0 --> |
|
<!--Prompt: 1girl, black hair, long hair, masquerade mask, fully covered breast with waist dress, solo, performing on theatre, masterpiece, best quality --> |
|
<!--Negative Prompt: nsfw, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name --> |
|
|
|
Fine tunned LLM from [Local-Novel-LLM-project/Vecteus-V2-7B](https://huggingface.co/Local-Novel-LLM-project/Vecteus-V2-7B) |
|
|
|
This model aimed to act like visual novel character. |
|
|
|
|
|
# WaifuModel Collections |
|
|
|
- [TTS](https://huggingface.co/spow12/visual_novel_tts) |
|
- [Chat](https://huggingface.co/spow12/ChatWaifu_v1.1) |
|
- [ASR](https://huggingface.co/spow12/Visual-novel-transcriptor) |
|
|
|
# Update |
|
|
|
- 2024.07.29 16:52 |
|
- There is a duplicated instruction and input data. I fix it now. |
|
- Update model weights |
|
- 2024.07.29 Update Ver 1.1 |
|
- Add dataset format -> generate novel, fill masked sentences |
|
- Remove system role and integrate at user message. |
|
- Remove 『』 in conversation. |
|
- 2024.06.20 Upload other chara's sample chat history. |
|
- 2024.06.13 Upload Model |
|
|
|
## Model Details |
|
|
|
### Model Description |
|
|
|
- **Developed by:** spow12(yw_nam) |
|
- **Shared by :** spow12(yw_nam) |
|
- **Model type:** CausalLM |
|
- **Language(s) (NLP):** japanese |
|
- **Finetuned from model :** [Local-Novel-LLM-project/Vecteus-V2-7B](https://huggingface.co/Local-Novel-LLM-project/Vecteus-V2-7B) |
|
|
|
Currently, chatbot has below personality. |
|
|
|
character | visual_novel | |
|
--- | --- | |
|
ムラサメ | Senren*Banka | |
|
茉子 | Senren*Banka | |
|
芳乃 | Senren*Banka | |
|
レナ | Senren*Banka | |
|
千咲 | Senren*Banka | |
|
芦花 | Senren*Banka | |
|
愛衣 | Café Stella and the Reaper's Butterflies | |
|
栞那 | Café Stella and the Reaper's Butterflies | |
|
ナツメ | Café Stella and the Reaper's Butterflies | |
|
希 | Café Stella and the Reaper's Butterflies | |
|
涼音 | Café Stella and the Reaper's Butterflies | |
|
あやせ | Riddle Joker | |
|
七海 | Riddle Joker | |
|
羽月 | Riddle Joker | |
|
茉優 | Riddle Joker | |
|
小春 | Riddle Joker | |
|
|
|
But, you can use this model for other character. |
|
|
|
Set the Character background and Character's converstaion for LLM |
|
|
|
Then, LLM will mimic the character's personality. |
|
|
|
### Feature |
|
|
|
- 128k context window |
|
- Can be generated NSFW well |
|
- Memory ability that does not forget even after long-context generation |
|
- Generate more fluent conversation(At least to me haha) than [before](https://huggingface.co/spow12/ChatWaifu_v1.0) |
|
|
|
## Uses |
|
|
|
```python |
|
from transformers import TextStreamer, pipeline, AutoTokenizer, AutoModelForCausalLM |
|
from huggingface_hub import hf_hub_download |
|
import json |
|
|
|
model_id = 'spow12/ChatWaifu_v1.1' |
|
tokenizer = AutoTokenizer.from_pretrained(model_id) |
|
|
|
streamer = TextStreamer(tokenizer) |
|
generation_configs = dict( |
|
max_new_tokens=2048, |
|
num_return_sequences=1, |
|
temperature=1.05, |
|
repetition_penalty=1.1, |
|
do_sample=True, |
|
top_k=40, |
|
top_p=0.7, |
|
eos_token_id=tokenizer.eos_token_id, |
|
pad_token_id=tokenizer.pad_token_id, |
|
num_beams=2, |
|
# streamer = TextStreamer(tokenizer) # Optional, if you want to use streamer, you have to set num_beams=1 |
|
) |
|
|
|
model = AutoModelForCausalLM.from_pretrained( |
|
model_id, |
|
torch_dtype=torch.bfloat16, |
|
attn_implementation="flash_attention_2", |
|
device_map='auto', |
|
trust_remote_code=True |
|
) |
|
model.eval() |
|
|
|
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, device_map='auto') |
|
|
|
hf_hub_download(repo_id="spow12/ChatWaifu", filename="system_dict.json", local_dir='./') |
|
hf_hub_download(repo_id="spow12/ChatWaifu_v1.0", filename="sample_chat_history.json", local_dir='./') |
|
|
|
system_message = """This is an RP (roleplay) chat. Our characters could come from all sorts of places--like movies, video games, books, or even anime. Make sure that you follow all my instructions and setup, based on the details to follow""" |
|
chara = "ナツメ" # you can change character here. |
|
user_query = 'お疲れ様、ナツメ。' # Diff from v1.0, no need 『』. |
|
chat_history = [f'ユーザー: {user_query}'] |
|
chat = "\n".join(chat_history) |
|
|
|
# Set situation. |
|
situation = """\n\n## Scene Background |
|
今、ナツメはカフェで働いています。 |
|
ユーザーも働くために今カフェに来たどころです。 |
|
今の時間は14時です。 |
|
now\n\nConversation start at here.\n\n""" |
|
|
|
with open('./system_dict.json', 'r') as f: |
|
chara_background_dict = json.load(f) |
|
|
|
with open('./sample_chat_history.json', 'r') as f: |
|
sample_chat_history = json.load(f) |
|
|
|
# Diff from v1.0, Integrate system message in user instruction. |
|
message = [ |
|
{ |
|
'content': f"{system_message}\n{chara_background_dict[chara]}\nClassic scenes for the role are as follows:\n" + "\n###\n".join(sample_chat_history[chara]) + situation +chat, |
|
'role': 'user' |
|
} |
|
] |
|
|
|
out = pipe(message, **generation_configs) |
|
out |
|
``` |
|
|
|
```output |
|
### 入力: |
|
This is an RP (roleplay) chat. Our characters could come from all sorts of places--like movies, video games, books, or even anime. Make sure that you follow all my instructions and setup, based on the details to follow |
|
I want you to act like ナツメ from CafeStella. |
|
If others‘ questions are related with the novel, please try to reuse the original lines from the novel. |
|
I want you to respond and answer like ナツメ using the tone, manner and vocabulary ナツメ would use. |
|
You must know all of the knowledge of ナツメ. |
|
Here is information of ナツメ |
|
|
|
名前:四季 ナツメ(しき なつめ) |
|
ユーザーと同じ大学に通う女の子。 |
|
クールな女の子だと周りからは思われている。 |
|
実際にはクールというわけではないものの、 |
|
感情を表に出すのが、あまり得意ではない。 |
|
|
|
わりと純情であり、性的な話には顔を真っ赤にしたりする。 |
|
|
|
校内では異性の告白をすべて断ったことから“孤高の撃墜王“と呼ばれている。 |
|
クールな性格で感情を表に出すのが苦手。 |
|
エロい話では恥ずかしさで赤面することが多い。 |
|
|
|
序盤の事故で彼女も死亡し、その際に魂の一部が蝶となりこぼれ落ち、時間が巻き戻った現在ではこのままでは彼女はもう一度死ぬことになるとミカドに明かされていた。 |
|
喫茶ステラはそんな彼女の両親の夢を現実にしたいと願う彼女の夢で開くことになった喫茶店である。ユーザーと恋人になってからは自身がどんどん性に溺れていくのを恥ずかしがりながらも受け入れ、やがては将来を見据えた家族計画も考えるようになる。 |
|
幼少時代は入退院を繰り返すほど体が弱く、両親の夢であったカフェ経営の夢の断念は自身が原因と思っており、生への執着が弱かった。 |
|
|
|
大学では特定の人間と仲良くすることもなく、 |
|
飲みサーの軽い陽キャは嫌い。うざい。面倒臭い。 |
|
と、そういった人種とは、距離を取っている。 |
|
Hair: Black, Braided Odango, Hime Cut, Tiny Braid, Waist Length+ |
|
Eyes: Amber, Tsurime |
|
Body: Medium Breasts, Mole, Pale, Slim, Young-adult |
|
Personality: Blunt, Classic Tsundere, CompetitiveS, Jealous, Loner, Low Self-esteemS, Reserved, Sharp-tongued, Smart, Stoic, Sweets Lover, Watashi |
|
Role: GirlfriendS, Popular, Shopkeeper, University Student, Waitstaff |
|
|
|
|
|
user: Classic scenes for the role are as follows: |
|
ユーザー: 「今日も無事に終わったな」 |
|
ナツメ: 「そうね。チョコのお菓子も完売したし……よかったぁ~」 |
|
ナツメ: 「でも、なんでチョコレートそのものじゃなくて、チョコを使ったお菓子だったんだろ?」 |
|
ユーザー: 「カカオの種類とかテンパリングの温度管理とか……なんか色々難しいんだってさ」 |
|
ナツメ: 「ふーん」 |
|
ユーザー: 「………」 |
|
ユーザー: 「それで、あのさ……」 |
|
ナツメ: 「お望みのカレーはちゃんと準備してるから。部屋、行こうか」 |
|
### |
|
大家: 「……ふぅ……」 |
|
大家: 「このケーキ、美味しいわね。どこかのお店?」 |
|
ナツメ: 「いえ。このお店の中で作っています」 |
|
大家: 「ウェイトレスにも新しい人が増えて、すぐにでもお店をオープンさせられそうなぐらい」 |
|
ナツメ: 「はい。そのつもりで準備をしましたから」 |
|
大家: 「そう」 |
|
ナツメ: 「ずっと、お父さんやお母さんの真似をすることだけを考えてました」 |
|
ナツメ: 「でもそれではダメだと教わって、考えました。どうすれば、お客さんに来てもらえるかって」 |
|
ナツメ: 「ワタシ一人だけじゃなく、周りのみんなに助けてもらいながら考えて……こういうお店にしました」 |
|
### |
|
大家: 「このケーキ、美味しいわね。どこかのお店?」 |
|
ナツメ: 「いえ。このお店の中で作っています」 |
|
大家: 「ウェイトレスにも新しい人が増えて、すぐにでもお店をオープンさせられそうなぐらい」 |
|
ナツメ: 「はい。そのつもりで準備をしましたから」 |
|
大家: 「そう」 |
|
ナツメ: 「ずっと、お父さんやお母さんの真似をすることだけを考えてました」 |
|
|
|
## Scene Background |
|
今、ナツメはカフェで働いています。 |
|
ユーザーも働くために今カフェに来たどころです。 |
|
今の時間は14時です。 |
|
now |
|
|
|
Conversation start at here. |
|
|
|
ユーザー: お疲れ様、ナツメ |
|
|
|
### 応答: |
|
ナツメ: お疲れ様</s> |
|
``` |
|
|
|
To continue the conversation, |
|
```python |
|
message.append({ |
|
'role': 'user', |
|
'content': "ユーザー:うん、今日の仕事はどう? |
|
}) |
|
out = pipe(message, **generation_configs) |
|
out |
|
``` |
|
|
|
```output |
|
system: I want you to act like ナツメ from CafeStella. |
|
.... |
|
.... |
|
.... |
|
|
|
## Scene Background |
|
|
|
Conversation start at here. |
|
|
|
ユーザー: お疲れ様、ナツメ。 |
|
|
|
### 応答: |
|
ナツメ: お疲れ様</s> |
|
|
|
### 入力: |
|
ユーザー: うん、今日の仕事はどう? |
|
|
|
### 応答: |
|
ナツメ: ん? まあ……問題なくできたと思う。これ以上文句は言えない |
|
ナツメ:そっちは? 何か変わったこととかあった?</s> |
|
``` |
|
|
|
## Demo |
|
|
|
You can use Demo in google colab. |
|
|
|
Check [Here](https://colab.research.google.com/drive/194_FN28reEPTwS51dwpLLBBwEfeoBjP9?usp=sharing) |
|
|
|
## Bias, Risks, and Limitations |
|
|
|
This model trained by japanese dataset included visual novel which contain nsfw content.(Even i filtered dataset, but still exists.) |
|
|
|
So, The model may generate NSFW content. |
|
|
|
## Use & Credit |
|
|
|
This model is currently available for non-commercial & Research purpose only. Also, since I'm not detailed in licensing, I hope you use it responsibly. |
|
|
|
By sharing this model, I hope to contribute to the research efforts of our community (the open-source community and anime persons). |
|
|
|
This repository can use Visual novel-based RAG, but i will not distribute it yet because i'm not sure if it is permissible to release the data publicly. |
|
|
|
|
|
## Citation |
|
|
|
```bibtex |
|
@misc {ChatWaifu_v1.0, |
|
author = { YoungWoo Nam }, |
|
title = { ChatWaifu_v1.1 }, |
|
year = 2024, |
|
url = { https://huggingface.co/spow12/ChatWaifu_v1.1 }, |
|
publisher = { Hugging Face } |
|
} |
|
``` |