|
--- |
|
license: cc-by-sa-4.0 |
|
datasets: |
|
- chargoddard/rpguild |
|
language: |
|
- en |
|
--- |
|
|
|
# RPGPT |
|
|
|
GPT2 model trained on Role Playing datset. |
|
|
|
## Custom Tokens |
|
The model containes 4 custom tokens to diffirentiate between Character, Context and Input data. |
|
The Expected input to the model is therefore: |
|
|
|
```python |
|
"<|CHAR|> Character Info <|CONTEXT|> Dialog or generation context <|INPUT|> User input" |
|
``` |
|
|
|
The model is trained to include Response token to what we consider responce. |
|
Meaning the model output will be: |
|
|
|
```python |
|
"<|CHAR|> Character Info <|CONTEXT|> Dialog or generation context <|INPUT|> User input <|RESPONSE|> Model Response" |
|
``` |
|
|
|
The actual output can be extracted by split function |
|
|
|
```python |
|
model_out = "<|CHAR|> Character Info <|CONTEXT|> Dialog or generation context <|INPUT|> User input <|RESPONSE|> Model Response".split('<|RESPONSE|>')[-1] |
|
``` |
|
|
|
|
|
## Usage |
|
For more easy use, cosider downloading scripts from my repo https://github.com/jinymusim/DialogSystem |
|
Then use the included classes as follows. |
|
|
|
|
|
```python |
|
from utils.dialog_model import DialogModel |
|
from transformers import AutoTokenizer |
|
|
|
model = DialogModel('jinymusim/RPGPT', resize_now=False) |
|
tok = AutoTokenizer.from_pretrained('jinymusim/RPGPT') |
|
tok.model_max_length = 1024 |
|
|
|
char_name ="James Smith" |
|
bio="Age: 30, Gender: Male, Hobies: Training language models" |
|
model.set_character(char_name, bio) |
|
|
|
print(model.generate_self(tok)) # For Random generation |
|
print(model.generate(tok, input("USER>").strip())) # For user input converasion |
|
``` |
|
|
|
Other wise use standard huggingface interface |
|
|
|
```python |
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
|
|
model = AutoModelForCausalLM('jinymusim/RPGPT') |
|
tok = AutoTokenizer.from_pretrained('jinymusim/RPGPT') |
|
tok.model_max_length = 1024 |
|
char_name ="James Smith" |
|
bio="Age: 30, Gender: Male, Hobies: Training language models" |
|
context = [] |
|
input_ids = tok.encode(f"<|CHAR|> {char_name}, Bio: {bio} <|CONTEXT|> {' '.join(context} <|INPUT|> {input('USER>')}") |
|
|
|
response_out = model.generate(input_ids, |
|
max_new_tokens= 150, |
|
do_sample=True, |
|
top_k=50, |
|
early_stopping=True, |
|
eos_token_id=tokenizer.eos_token_id, |
|
pad_token_id=tokenizer.pad_token_id) |
|
|
|
print(response_out) |
|
``` |
|
|
|
|