ChatterBot结构简述

来源:互联网 发布:阿里云网站搭建流程 编辑:程序博客网 时间:2024/06/05 21:49
ChatterBot模块简述:
一、安装
直接安装chatterbot
二、快速开始指南
三、Chatterbot工具
四、例子
第2,3,4部分都是展示的一些例子。
一个简单例子展示:
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer


chatbot = ChatBot('Ron Obvious')
conversation = [
    "早上好",
    "嗯呢,早上好!",
    "你最近怎么样",
    "我最近挺好的",
    "你呢",
    "我也挺好的",
]


chatbot.set_trainer(ListTrainer)
chatbot.train(conversation)
response = chatbot.get_response("你最近怎么样")
print(response)#输出我最近挺好的
五、训练
创建了四个训练类,包括ListTrainer、ChatterBotCorpusTrainer、TwitterTrainer、UbuntuCorpusTrainer。
1、ListTrainer:训练样本由用户输入的string类型的语句列表构成,按照语句的先后顺序放在statement(专门存放对话语句的列表)中。
2、ChatterBotCorpusTrainer:训练样本由自身提供的语料库构成,按照语句先后顺序放在statement中。
3、TwitterTrainer:直接调用API。
4、UbuntuCorpusTrainer:处理tsv格式的语料数据文件,提取出每条语句,按照语句先后顺序放在statement中。
总结:ChatterBot之所以能够训练出支持“任何语言”的聊天机器人,是因为其在此过程并不对训练语料做深度加工(如:分词)处理,而是直接将训练语料直接转换成Statement->Response对,并将其存储起来。
类的使用(其中一个):
chatterbot = ChatBot("Training Example")
chatterbot.set_trainer(ChatterBotCorpusTrainer)
chatterbot.train(
    "chatterbot.corpus.english"
)
对应代码部分:trainers.py
六、预处理程序
对输入的内容预处理(包含三个处理函数):
1、clean_whitespace(chatbot, statement):移除输入文本中任何连续的空格字符;
2、unescape_html(chatbot, statement):将转义的html字符转换为未转义的html字符,如:“&lt;b&gt;” 变成“<b>”;
3、convert_to_ascii(chatbot, statement):unicode字符转换成ASCII字符。
函数的使用:
chatbot = ChatBot(
    'MyBot',
    preprocessors=[
        'chatterbot.preprocessors.clean_whitespace']
)
对应代码部分:preprocessors.py
七、逻辑适配器
包括:BestMatch、Time Logic、Mathematical Evaluation、Low Confidence Response、Specific Response
1、BestMatch返回基于已知响应的输入语句最匹配的响应。
2、Time Logic:返回当前时间。
3、Mathematical Evaluation:计算数学相关问题。
4、Low Confidence Response:如果无法以高置信度确定响应,此适配器将返回指定的默认响应。
5、Specific Response:如果聊天机器人收到的输入与该适配器指定的输入文本相匹配,则返回指定的响应。

适配器的使用:
chatbot = ChatBot(
    "My ChatterBot",
    logic_adapters=[
        {
            "import_path": "chatterbot.logic.BestMatch",
            "statement_comparison_function": "chatterbot.comparisons.levenshtein_distance",
            "response_selection_method": "chatterbot.response_selection.get_first_response"
        }
    ]
)
对应代码部分:logic文件夹中包含全部适配器文件
八、九、输入输出适配器
输入终端适配器只读取来自终端的用户的输入。输出端适配打印聊天机器人的反应。
对应代码部分:input文件夹、output文件夹
十、存储适配器
包括SQL Alchemy、MongoDB,用来存储对话。
十一、过滤器
过滤器将减少聊天机器人在选择响应时必须处理的语句数量。
十二、ChatterBot
主类ChatBot是每个ChatterBot适配器之间的连接点。 在这个类中,从输入适配器返回输入语句,由逻辑适配器和存储适配器进行处理和存储,然后传递给输出适配器以返回给用户。
对应代码部分:chatterbot.py
十三、对话
包含Statements、Responses两个类。
1、statements: ChatterBot的语句对象表示聊天机器人从用户接收的输入语句,或者基于某些输入返回的输出语句。此类用来设置置信度参数,在语句返回之前逻辑适配器分配一个置信度分数,用来评判此条语句对于用户输入内容的准确程度;将语句存储在数据库中;一个语句可能对应多个回答,把语句对应回答添加到回答列表中;每个Statement对象都有一个in_response_to引用,指向作为此条语句响应的句子。
2、responses:用来表示两个语句之间的关系,一个response对象表示此条语句是作为另一条语句的回应。返回一个字典:语句内容、出现的时间、出现的次数(初始化为1)。
3、聊天机器人如何选择响应的一个重要部分是基于将两个语句相互比较的能力,提供了一些内置的方法:JaccardSimilarity(杰卡德距离)、LevenshteinDistance(最小编辑距离)、SentimentComparison、SynsetDistance

对应代码部分:conversation文件夹、comparison.py
十四、会话
ChatterBot支持多个并发聊天会话的能力。 聊天会话是聊天机器人与某人交互的地方,并且支持多个聊天会话意味着您的聊天机器人可以同时与不同的人进行多个不同的对话。
十五、公用方法
引入模板、初始化类、下载nltk语料、移除停用词、得到响应时间、产生随机语句、输出进度条
十六、语料
提供yml格式语料(应该是在调用ChatterBotCorpusTrainer类训练时使用)
原创粉丝点击