-
2020-06-15 10:05:58
chatterbot
https://chatterbot.readthedocs.io/en/stable/更多相关内容 -
chatterbot-corpus:多语言对话语料库
2021-04-12 12:49:41ChatterBot语言培训语料库 这些模块用于快速训练ChatterBot以响应不同语言的各种输入。 尽管ChatterBot的许多内容都设计为独立于语言,但仍然可以使用这些培训集来初始化一个新的数据库,并使机器人可以产生的各种... -
ChatterBot
2021-02-16 19:34:36ChatterBot ChatterBot是一个基于Python的基于机器学习的对话对话框引擎,可以根据已知对话的集合生成响应。 ChatterBot的语言独立设计使其可以接受任何语言的培训。 典型输入的示例如下所示: 用户:早上好! 你... -
ChatterBot是一个能够自我训练学习多种语言的聊天机器人-python
2021-06-18 18:53:08ChatterBot是一个能够自我训练学习多种语言的聊天机器人 ChatterBot ChatterBot 是一种基于机器学习的对话式对话引擎,使用 Python 构建,可以根据已知对话的集合生成响应。 ChatterBot 的语言独立设计允许它被训练... -
基于Python+Django+Chatterbot的网页聊天机器人
2021-06-16 17:27:58内含机器人实例,爬虫爬取语料库,聊天机器人通过Django进行部署 建议使用Pycharm编译器 建议使用Python3.6.4 需要安装chatterbot第三方库,具体可以百度 -
ChatterBot_Corpus_Project:Chatterbot是一个Python库,可以轻松生成对用户输入的自动响应
2021-04-02 18:40:57关于ChatterBot ChatterBot是一个Python库,可以轻松生成对用户输入的自动响应。 ChatterBot使用多种机器学习算法来产生不同类型的响应。 这使开发人员可以轻松创建聊天机器人并自动进行与用户的对话。 有关... -
flask-chatterbot:使用Flask的ChatterBot的简单样板
2021-02-05 02:30:36确保已安装Python,Flask,SQLAlchemy和ChatterBot(手动pip install -r requirements.txt或运行pip install -r requirements.txt )。 使用python app.py运行app.py。 该演示将在直播 如何将其部署到Web服务器?... -
hng-chatbot:一个使用python,chatterbot和flask构建的聊天机器人
2021-05-03 09:50:54一个使用python,chatterbot和flask构建的聊天机器人 建于 HTML5 自举 CSS3 萨斯 Python 烧瓶 项目介绍 聊天机器人利用AI对输入进行随机响应。 回答范围涉及技术,健康,心理学等主题。 截屏 入门 :rocket: ... -
ChatterBot-master聊天机器人
2019-07-16 23:30:04ChatterBot是一个基于机器学习的会话对话引擎,用Python构建,可以根据已知对话的集合生成响应。ChatterBot的语言独立设计允许它被训练成说任何语言。一个未经训练的ChatterBot实例开始时不知道如何通信。每次用户... -
chatterbot:一个基于Ruby的简单Twitter Twitter Bot Framework,使用OAuth进行身份验证
2021-04-23 07:06:04这是Chatterbot 2.0。 该库的旧版本进行了一些重大更改,并且不再支持MySQL。 如果您正在寻找旧版本,可以尝试 Chatterbot是一个用于在Twitter上制作机器人的Ruby库。 这对于快速发展机器人创意非常有用。 它处理... -
ChatterBot-开源
2021-04-27 05:52:04该项目的目的是创建一个程序,该程序通过使用进化算法来学习使用不同的语言。 -
ChatterBot:机器学习,用于创建聊天机器人的对话引擎-开源
2021-05-29 08:28:42ChatterBot 是一个 Python 库,可以轻松生成对用户输入的自动响应。 ChatterBot 使用一系列机器学习算法来生成不同类型的响应。 这使开发人员可以轻松创建聊天机器人并自动与用户进行对话。 有关 ChatterBot 背后的... -
Python-ChatterBot是一个能够自我训练学习多种语言的聊天机器人
2019-08-09 17:42:16ChatterBot是一个能够自我训练学习多种语言的聊天机器人 -
ChatterBot自定义MongoDB路径
2020-12-22 23:47:50默认数据库为Slite3,已经不能满足需求,需改为mongodb ... storage_adapter='chatterbot.storage.MongoDatabaseAdapter', filters=[ 'chatterbot.filters.RepetitiveResponseFilter' ], datab -
Python库 | ChatterBot-0.8.5.tar.gz
2022-04-07 07:12:39资源分类:Python库 所属语言:Python 资源全名:ChatterBot-0.8.5.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059 -
bartholomeusAI:用chatterbot + tkinter制作的聊天机器人
2021-04-07 19:07:46用chatterbot + tkinter制作的交互式聊天机器人! 安装 # install python3 and python3-pip if they are not installed # install the requirements $ python3 -m pip install -r requirements.txt 调试“属性错误”... -
ChatBot:使用ChatterBot和nltk库从头开始使用Chatbot。 这是我在暑期实习中完成的工作
2021-05-27 18:05:53在运行之前,请安装chatterbot。 pip安装chatterbot pip install chatterbot-corpus 如果遇到错误,请尝试在终端中检查python版本,它必须是python3。 您还可以使用python3如下所述 pip3安装chatterbot pip3安装... -
chatbot_flask_chatterbot
2021-02-21 07:42:15chatbot_flask_chatterbot -
Chatterbot:虚拟助手与数据库集成-开源
2021-05-08 03:31:53近年来,用于模拟人与人之间互动的软件的需求正在增长。 该软件被称为虚拟助手,并在移动平台上获得了新的动力。 这项工作探索了自AI诞生以来聊天机器人的发展,并提出了将AIML语言与公司数据库集成在一起的解决方案... -
ChatterBot:ChatterBot是用于创建聊天机器人的机器学习会话对话引擎。
2021-01-28 14:25:01ChatterBot ChatterBot是一个基于Python的基于机器学习的对话对话框引擎,可以根据已知对话的集合生成响应。 ChatterBot的语言独立设计使其可以接受任何语言的培训。 典型输入的示例如下所示: 用户:早上好! 你... -
ChatterBot 是一个 Python 库,用于简化聊天机器人的开发。.zip
2019-09-17 19:02:45ChatterBot 是一个 Python 库,用于简化聊天机器人的开发。 ,ChatterBot 是一个 Python 库,用于简化聊天机器人的开发。ChatterBot 使用... -
Voice-Integration-ChatBot-using-Chatterbot-in-Python:在Python中使用chatterbot的ChatBot
2021-05-02 16:40:21在Python中使用Chatterbot进行语音聊天 在Python中使用chatterbot进行语音ChatBot 跟随我的脚步 默认确保您知道pyton 1.安装python 2或更高版本 2.在右上角为该项目加注星标 3.打开您的终端并导入pytssx和... -
ChatterBot + Spacy/Jieba + Nonebot 打造免费qq可调教机器人
2021-04-17 01:40:24所以想要用Chatterbot进行中文的处理的话,一定要自己下一个Tag,把Jieba里的词性分析和Spacy的match上,然后用ChatterBot就可以了 import string from chatterbot import languages from spacy.lang.zh import ...自从上次弄明白了qq bot机器人的架构之后,就一直很想真正的写一个小机器人,但真正弄的时候发现就算QQ bot可以用Nonebot/Http Coolq通信之后,其实想要写一个可以对话的机器人还是比较困难。
最直接的方法当时是直接用Tuling Api,这个免费版本一天只有100次的家伙。
但除了上限不说,这个最大的问题在于封闭的model提供的API完全没有成长性(尊贵豪华版的可能有?),总之就算你辛辛苦苦教他说话,也没用的。
唯一可行的就是自己从头写一个Model进行训练了,这方面很显然需要涉及到NLP,数据库等等,以及如何和Nonebot集成等等,工作量想象就是很大,一直也懒得去弄(毕竟这就是个娱乐
然后趁着三天放假的时间,花心思看了一下上次看到的那个ChatterBot 库,然后集合Spacy和Jieba的框架,弄了一个可以训练的Model,结合Nonebot,虽然还是看起来很蠢,但总之看到了如果长期训练下去——会稍微聪明一点的AI。
下面简单说一下难点。
ChatterBot 用pip安装的时候,因为我在Vultr上面的主机上内存不够,总是因为spacy 2.1.9的问题挂掉了,上面显示的不是Memory Error 而是Killed
解决方法:
在安装的目录下面吧Spacy>=2.1 <2.2的requirement 删掉,变成Spacy。
这样他就会直接安装Spacy,而Spacy 2.2.3解决了Memory Issue,哪怕memory不够也可以直接安装
然后是用的时候会发现Chatterbot没办法Create,这是因为Spacy的model直接load的是“en”,我们需要下一个2.2版本兼容的en_web_sm model,然后link到en上面
·
pip install https://github.com/explosion/spacy-models/releases/download/en\_core\_web\_sm-2.2.0/en_core_web_sm-2.2.0.tar.gz#egg=en_core_web_sm `
pip -m spacy en\_core\_web\_sm en
然后就可以 create了。(但其实这一步没弄好也无所谓,因为我们用的是Jieba和Spacy内置的Chinese model 不需要这个训练好的en模型)
总之在解决了安装之后,按照教程走,一个简单的能回答的robot肯定可以实现了。但仔细观察后发现这个robot对于中文的回答非常的蠢,只有一模一样的回答才能给出答案
类似于 训练“你的名字是什么” 回答 “千夏”。
然后遇到了“你的名字是”,就完全不知道怎么回答了。
稍微思考了一下,这应该就是NLP的问题了。观察了一下Chattbot Source code里面的tagger(https://github.com/gunthercox/ChatterBot/blob/master/chatterbot/tagging.py),
self.nlp = spacy.load(self.language.ISO_639_1.lower())`
document = self.nlp(text)
这两行就是真正进行NLP的地方,对于一句话,这会用来标注每个词的词性,然后去掉Stop word(https://en.wikipedia.org/wiki/Stop_words)后才会进行数据库进行index。
下一次搜索的时候,不会根据一模一样的原文,单纯是根据这个除去stop word以后剩余词的词性和意思的mapping来搜索。
所以“I like to eat pasta”
a.storage.tagger.get_text_index_string("I want to eat a paste")
'VERB:eat VERB:paste`
a.storage.tagger.get_text_index_string("I wish to eat a paste")
'VERB:eat VERB:paste'
可以看到对于上面两句话,进过NLP去掉stop word和词性分析后,两句话完全一样,所以这个model对于这两句话的回复也会一模一样,因为search_text完全一样。
所以为什么中文不行就知道了吧?Chatterbot 或者说Spacy完全不知道中文的词性处理和终止词是哪些。
所以想要用Chatterbot进行中文的处理的话,一定要自己下一个Tag,把Jieba里的词性分析和Spacy的match上,然后用ChatterBot就可以了
import string
from chatterbot import languages
from spacy.lang.zh import Chinese
from spacy.tokens import Doc
import jieba.posseg as pseg
import re
from chatterbot import languages
class JiebaChinese(Chinese):
def __init__(self, pseg):
super(JiebaChinese, self).__init__()
self.pseg = pseg
def custom_spacy_pipe(self, vocab, words, flags):
doc = Doc(vocab, words=words, spaces=[False]*len(words))
for ix, token in enumerate(doc):
token.tag_ = flags[ix]
doc.is_tagged = True
return doc
def jieba_tokenize(self, text):
text = text.strip().replace(' ', '')
words, flags = zip(*self.pseg.lcut(text))
return self.custom_spacy_pipe(self.vocab, words, flags)
def make_doc(self, text):
return self.jieba_tokenize(text)
def remove_punctuation(text):
return re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*():;《)《
"", text)
class ChineseTagger(object):
def __init__(self, language):
self.language = language or languages.ZHS
self.nlp = JiebaChinese(pseg)
print("Initialized Chinese Tagger")
def get_text_index_string(self, text):
bigram_pairs = []
if len(text) <= 2:
text_without_punctuation = remove_punctuation(text)
if len(text_without_punctuation) >= 2:
text = text_without_punctuation
document = self.nlp(text)
if len(text) <= 2:
bigram_pairs = [ token.lemma_.lower() for token in document ]
else:
tokens = [ token for token in document
if token.is_alpha and not token.is_stop ]
if len(tokens) < 2:
tokens = [ token for token in document if token.is_alpha ]
if tokens[0].is_alpha and not tokens[0].is_stop:
bigram_pairs.append('{}:{}'.format(
tokens[0].tag_, tokens[0].lemma_.lower()))
for index in range(1, len(tokens)):
bigram_pairs.append('{}:{}'.format(
tokens[index - 1].tag_,
tokens[index].lemma_.lower()
))
if not bigram_pairs:
bigram_pairs = [token.lemma_.lower() for token in document]
return ' '.join(bigram_pairs)
这样的结果如下
a.storage.tagger.get_text_index_string("我想吃一个披萨")
'v:想 v:吃 v:披萨'
a.storage.tagger.get_text_index_string("我很想吃一个披萨了")
'v:想 v:吃 v:披萨'
(聪明的孩子可能注意到了,披萨不是v啊,这是因为每个词的意思是和前一个词的词性map,这貌似也是NLP中比较常用的方法貌似)
可以看到,这样的结果就对了,不需要每个字都一模一样,差不多相似也能给出相同的match结果。
除了上面这两个不大不小的问题之外,其他的就是一些我想要实现的功能方面的架构稍微说一下。
首先,因为完全没有词库肯定刚开始基本上啥话都说不出来,我用Nonebot实现了一个当Chatterbot不能回复,就pass给图灵API,用图灵API回答,然后chatterbot偷学他的答复的策略。
@on_command('tuling')
async def tuling(session: CommandSession):
message = session.state.get('message')
reply_chatter = await call_chatter(session, message)
if reply_chatter:
print("Get reply from chatter bot for ", message)
await session.send(escape(reply_chatter))
return
reply_tuling = await call_tuling_api(session, message)
if reply_tuling:
print("Get reply from tuling for ", message)
await session.send(escape(reply_tuling))
return
else:
print("Didn't got reply from tuling for ", message)
reply = EXPR_DONT_UNDERSTAND
reply.append(message)
await session.send(render_expression(reply))
return
效果还挺好的,有时候基本发现不了到底是图灵API回复还是小机器人回复(毕竟小机器人也是偷学图灵的嘛)
稍微需要说的一点,虽然现在图灵API每个机器人上限很低,但我们完全可以多弄几个小机器人,每次random选择一个机器人send requst就好了啊。我弄了5个机器人,也就是500每天了,基本上完全够用了。
另一个需要注意的就是因为机器人天天偷学图灵API的回答,有些回答真的蠢的难以直视。我就忍不住在SQL数据库的Schema上加了一条Boolean作为Verified。我自己添加的语料是Verified,其他所有的都是Not Verified,然后我可以在QQ定期让小机器人列出所有的Not Verified的东西,然后一条条核对需要不需要。
这方面基本上不是很难,就是地方比较多比较麻烦。需要对ChatterBot的code比较熟悉才行。最后的改动主要是在storage/sql_storage.py, ext/sqlalchemy_app/models.py, 以及conversation.py.
变动如下
models.py
verified = Column(
Boolean,
nullable=False,
default=False
)
conversation.py
statement_field_names = [
...
'verified',
]
__slots__ = (
...
'verified',
)
self.verified = kwargs.get('verified', False)
sql_storage.py
def remove_id(self, statement_id):
Statement = self.get_model('statement')
session = self.Session()
query = session.query(Statement).filter_by(id=statement_id)
record = query.first()
session.delete(record)
self._session_finish(session)
def update(self, statement):
...
record.search_text = self.tagger.get_text_index_string(statement.text)
record.verified = statement.verified
...
然后在nonebot里用async写一个可以maintain session state的command就行。
最终效果如图
训练过程 (手动训练,也可以自动根据群里大家的聊天偷窥学习)
检查数据库,看从群里偷学的和从图灵偷学的靠谱么
总之,长期下去肯定会变得越来越可爱的> <
总体来说,这个小机器人难度不是很大,但因为有比较强的可成长性,还是蛮好玩的(两天时间也不算白花了hhh
-
聊天机器人-ChatterBot初试
2021-08-21 10:59:14ChatterBot是一个基于Python的开源聊天机器人框架。ChatterBot支持中文,且可以在对话中实时改进。 一个未经训练的ChatterBot实例开始时不知道如何通信。每次用户输入语句时,库都会保存他们输入的文本以及语句响应...聊天机器人
ChatterBot
ChatterBot是一个基于Python的开源聊天机器人框架。ChatterBot支持中文,且可以在对话中实时改进。
一个未经训练的ChatterBot 实例开始时不知道如何通信。每次用户输入语句时,库都会保存他们输入的文本以及语句响应的文本。当ChatterBot收到更多输入时,它可以回复的响应数量以及与输入语句相关的每个响应的准确性都会增加。
程序通过搜索与输入匹配的最接近的匹配已知语句来选择最接近的匹配响应,然后从选择对该语句的已知响应中选择响应。
详细内容可查看其官方文档:https://chatterbot.readthedocs.io/en/stable/quickstart.html
安装ChatterBot
安装ChatterBot是很简单的:pip install chatterbot
基本概念
编辑距离(Levenshtein距离)
是指两个字符串之间, 由一个转成另一个所需要的最少编辑操作次数。允许的编辑操作包括:将一个字符替换成另一个字符、插入一个字符、删除一个字符。
适配器(Adapter)
一个好的聊天机器人框架应该具有清晰、模块化、耦合度低、部件可插拔与拓展的特点。作为一个好的聊天机器人,Chatterbot也是如此。为此Chatterbot使用了Adapter的概念。ChatterBot每个部分都设计了不同的“适配器”(Adapter),分为逻辑适配器和存储适配器。逻辑适配器确定ChatterBot如何选择对给定输入语句的响应的逻辑,包括:最佳匹配适配器、时间逻辑适配器、数学评估适配器、特定响应适配器。存储适配器提供了一个接口,允许ChatterBot连接到不同的存储技术,包括:SQL存储适配器、MongoDB存储适配器。
预处理器(Preprocessors)
预处理器可以修改聊天机器人在逻辑adaper处理语句之前收到的输入语句。ChatterBot内置了几个预处理器:clean_whitespace、unescape_html、convert_to_ascii。你也可以创建自己的预处理器。
过滤器(Filters)
过滤器是创建可以传递给ChatterBot存储适配器的查询的有效方法。过滤器将减少聊天机器人在选择响应时必须处理的语句数量。
流程图
最基本的流程图应该是这样的,首先获得输入的字符串(很多种方式:终端、API等),然后同时被各个逻辑Adapter进行处理,取置信度最高的Response返回。
有时候需要对输入进行预处理:
ChatterBot的使用
基础版本
# -*- coding: utf-8 -*- from chatterbot import ChatBot from chatterbot.trainers import ListTrainer # 构建ChatBot并指定Adapter bot = ChatBot( 'Default Response Example Bot', storage_adapter='chatterbot.storage.SQLStorageAdapter', logic_adapters=[ { 'import_path': 'chatterbot.logic.BestMatch', 'default_response':'嗯' } ] ) trainer=ListTrainer(bot) trainer.train([ '在吗?', '嗯', '在干嘛呢?', '吃饭', '咋这么晚才吃呢', '嗯', '明天出去玩吗', '有事', '我想去迪士尼', '哦', '晚安', '哦' ]) while True: print(bot.get_response(input("user:")))
运行结果:
需要解释一下上面的程序:
刚开始说明文件的编码方式,如果你需要用到中文,请务必写上。
然后import需要的模块。
通过ChatBot实例化一个聊天机器人,第一参数是聊天机器人的名字,storage_adapter指定存储适配器为SQL方式,logic_adapters指定逻辑适配器为最佳匹配方式,默认回复为”嗯”。
trainer=ListTrainer(bot)将以List集合作为训练数据训练聊天机器人,train方法开始训练。
Get_response()函数得到结果。
适配器的使用
from chatterbot import ChatBot bot = ChatBot( 'Math & Time Bot', logic_adapters=[ 'chatterbot.logic.MathematicalEvaluation', 'chatterbot.logic.TimeLogicAdapter' ] ) # Print an example of getting one math based response response = bot.get_response('What is 4 + 9?') print(response) # Print an example of getting one time based response response = bot.get_response('What time is it?') print(response)
运行结果:
使用自带语料库
# -*- coding: utf-8 -*- from chatterbot import ChatBot from chatterbot.trainers import ChatterBotCorpusTrainer chatbot = ChatBot("ChineseChatBot") trainer=ChatterBotCorpusTrainer(chatbot) # 使用中文语料库训练它 trainer.train("chatterbot.corpus.chinese") # 开始对话 while True: print(chatbot.get_response(input(">")))
运行结果:
分析:
这个语料库是自带的,回答的也不知道是什么玩意
-
windows 安装chatterbot
2022-01-28 16:18:05pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple chatterbot 安装文件 pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple chatterbot 安装 pip install --user -i ...pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple chatterbot
安装文件
pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.0.0/en_core_web_sm-3.0.0.tar.gz
注意修改下 tagger 指定的語言模型源碼 原來是en
安装
pip install --user chatterbot_corpus
解决 'torch' 没有 'autocast_mode'属性问题
安装torch1.6以上版本,本地安装1.8
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch==1.8.0
ok上面安裝完 就可以了
-
IRCBNX Chatterbot:为 IRC 重制原始 BNX Chatterbot-开源
2021-07-09 13:47:24IRCBNX Chatterbot 是一个用 C++ 编写的适度 IRC 机器人,基于原始的 Battle.net 文本网关机器人 BNX Chatterbot。 与原版一样,它具有基于规则的响应系统、访问系统和多个审核功能。 -
Chatterbot Flask在Linux部署
2020-10-27 18:33:29Chatterbot Flask框架在Linux部署 小学期大作业是做一个电商网站,所以利用了chatterbot作为人工智能客服。 在Linux上使用了使用flask + nginx + Gunicorn进行部署 在Linux上安装chatterbot Flask项目 chatterbot... -
IRCBNX Chatterbot:IRC的原始BNX Chatterbot的翻版-开源
2021-05-08 02:38:47IRCBNX Chatterbot是用C ++编写的审核IRC机器人,它基于原始的Battle.net文本网关机器人BNX Chatterbot。 像原始版本一样,它具有基于规则的响应系统,访问系统以及一些审核功能。