因此,我尝试使用python中著名的“ chatterbot”库构建一个聊天机器人。我开设了一个名为Trainer的课程,用于训练我的聊天机器人。因此,在此类中,我将初始化“ chatterbot”类的实例,然后对其进行训练。因此,为了避免再三地对其进行培训,尽管我要腌制Trainer类的实例。因此,如果它已经存在,则无需重新培训它,因此,我尝试对Trainer类实例进行腌制。我正在使用莳萝库腌制该类实例,但由于它试图腌制我的模型,因此向我显示以下错误:
_pickle.PicklingError:无法腌制>'sqlalchemy.orm.session.Session'>:它与>> sqlalchemy.orm.session.Session
不同
现在,我在代码中的任何地方都看不到我创建了任何类型的会话。但是我相信我在Trainer类中使用的 chatterbot 库必须在其中使用任何类型的会话。实际上,我检查了源代码,它正在使用记录器。因此,可能会造成疼痛。我不知道如何解决这个问题。我尝试更改 chatterbot 库的源代码,并从其中删除了所有记录程序,但是我什么也没做,只是破坏了代码。谁能帮助我解决此问题。我在这里附加所需的代码。
实用程序:
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
培训师
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视图中获取触发。
任何帮助表示赞赏。