|
import pandas as pd |
|
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, Trainer, TrainingArguments |
|
from Features.chat_interface import start_chat_interface |
|
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, Trainer, TrainingArguments |
|
from Features.chat_interface import start_chat_interface |
|
import start_chat_interface, generate_response |
|
import os |
|
|
|
|
|
data = pd.read_csv("your_chatbot_data.csv") |
|
data = data[["user_input", "chatbot_response"]] |
|
data_path = "data/chatbot_data.csv" |
|
data = pd.read_csv(data_path) |
|
|
|
|
|
model_name = "microsoft/DialoGPT-medium" |
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
model = AutoModelForSeq2SeqLM.from_pretrained(model_name) |
|
|
|
|
|
def preprocess(examples): |
|
inputs = [ex + tokenizer.eos_token for ex in examples["user_input"]] |
|
targets = examples["chatbot_response"] |
|
model_inputs = tokenizer(inputs, max_length=128, truncation=True, padding=True) |
|
|
|
with tokenizer.as_target_tokenizer(): |
|
model_inputs["labels"] = tokenizer(targets, max_length=128, truncation=True, padding=True).input_ids |
|
|
|
return model_inputs |
|
|
|
tokenized_data = data.apply(preprocess, axis=1) |
|
|
|
|
|
training_args = TrainingArguments( |
|
"my-chatbot", |
|
evaluation_strategy="steps", |
|
learning_rate=2e-5, |
|
per_device_train_batch_size=8, |
|
per_device_eval_batch_size=8, |
|
num_train_epochs=3, |
|
weight_decay=0.01, |
|
save_steps=500, |
|
push_to_hub=True, |
|
) |
|
|
|
trainer = Trainer( |
|
model=model, |
|
args=training_args, |
|
train_dataset=tokenized_data, |
|
eval_dataset=tokenized_data, |
|
) |
|
|
|
trainer.train() |
|
|
|
|
|
def generate_response(user_input): |
|
input_ids = tokenizer.encode(user_input + tokenizer.eos_token, return_tensors='pt') |
|
output_sequences = model.generate(input_ids=input_ids) |
|
response = tokenizer.decode(output_sequences[0], skip_special_tokens=True) |
|
return response |
|
|