Итак, я пытаюсь создать чат-бота, используя знаменитую библиотеку "chatterbot" в python.Я сделал урок под названием Trainer, который тренирует моего чат-бота.Итак, в этом классе я инициализирую экземпляр для класса «болтун», а затем обучаю его.Так что, чтобы не переучивать его снова и снова, я собираюсь привести пример моего класса для тренеров.Поэтому, если он уже существует, мне не нужно его переобучать, и поэтому я пытаюсь выбрать экземпляр класса Trainer.Я использую библиотеку dill для выбора экземпляра класса, но при попытке выбрать мою модель она выдает следующую ошибку:
_pickle.PicklingError: Can't pickle> 'sqlalchemy.orm.session.Session '>: это не тот же объект, что и >> sqlalchemy.orm.session.Session
Теперь я не вижу нигде в своем коде, который я создаллюбой вид сессии.Но я полагаю, что библиотека chatterbot , которую я использую в своем классе Trainer, должна использовать в ней любой вид сессии.Фактически я проверил исходный код, и он использует регистратор.Так что, возможно, это причиняет боль.Я понятия не имею, как решить эту проблему.Я пытался изменить исходный код библиотеки chatterbot и удалял из нее все вхождения регистратора, но ничего не делал, кроме как сломал код.Может кто-нибудь помочь мне, как решить эту проблему.Я прилагаю необходимый код здесь.
utils :
import logging
from pathlib import Path
import pickle
import dill
import os
from .trainer import Trainer
# Method returns the directories in which model objects are stored/saved.
def model_base_dir():
directory = 'MLModel/pickled_models'
parent_directory = os.pardir
return os.path.abspath(os.path.join(parent_directory,directory))
def picked_model(base_dir=None):
if base_dir == None:
logging.exception("Base Directory does not exist !!!")
raise AssertionError("Base Directory does not exist !!!")
model_path = base_dir+'/version1.pickle'
if Path(model_path).is_file():
with open(model_path,'rb') as handle:
model = dill.load(handle)
return model
else:
return None
def save_model(model_obj):
dir = model_base_dir() # Get the directory where model needs to be saved
with open(dir+'/version1.pickle','wb') as f:
dill.dump(model_obj,f)
f.close()
def train_model():
mod_obj = Trainer()
save_model(mod_obj)
return mod_obj
Trainer
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
class Trainer():
def __init__(self):
self.chatbot = ChatBot('Dexter')
self.create_chatbot_trainer(language="chatterbot.corpus.english")
def train_chatbot(self,trainer,language):
return trainer.train(language)
def create_chatbot_trainer(self,language):
self.trainer = ChatterBotCorpusTrainer(self.chatbot)
self.trainer = self.train_chatbot(self.trainer,language)
return self.trainer
def __getstate__(self):
d = self.__dict__.copy()
d.pop('_parents',None)
return d
def response(self,text=""):
if text is None:
return "Sorry, your query is empty"
else:
return self.chatbot.get_response(text)
Train_model () получает триггер из моего представления django.
Любая помощь приветствуется.