一、预备知识
机器人应答逻辑(Logic Adapter),针对每个部分设计了不同的适配器
- Closet Match Adapter:字符串模糊匹配(编辑距离)
- Closet Meaning Adapter:借助nltk的WordNet,近义词评估
- Time Logic Adapter:处理涉及实践的提问
- Mathematical Evaluation Adapter:涉及数学运算
存储器后段(Storage Adapter)
- Read Only Mode:只读模式
- Json Database Mode:Json格式存储对话数据
- Mongo Database Mode:以MongoDb方式存储对话数据库
输入形式(Input Adapter)
- Variable input type Adapter:允许chatbot接收不同类型的输入
- Terminal Adapter:以终端方式进行对话
- HipChat Adapter:通过HipChat聊天室和chatbo进行对话
- Speech recognition:语音识别输入
输出形式(Output Adapters)
- Output format adapter:支持text,json和object格式的输出
- Terminal adapter
- HipChat Adapter
- Mailgun adapter:允许chat bot基于Mailgun API进行邮件的发送 Speech synthesis
- TTS(Text to speech)部分,详见chatterbot-voice
二、使用ChatterBot构建聊天机器人
1. 首先构建ChatBot并指定Adapter
# -*- coding: utf-8 -*-
from chatterbot import ChatBot
bot = ChatBot(
'Default Response Example Bot',
#置信度低于0.65时回复default_response
logic_adapters=[
{
'import_path': 'chatterbot.logic.BestMatch'
},
{
'import_path': 'chatterbot.logic.LowConfidenceAdapter',
'threshold': 0.65,
'default_response': 'I am sorry, but I do not understand.'
}
],
#指定对话类型是列表
trainer='chatterbot.trainers.ListTrainer'
)
2. 接着手动给定一点语料用于训练
bot.train([
'How can I help you?',
'I want to create a chat bot',
'Have you read the documentation?',
'No, I have not',
'This should help get you started: http://chatterbot.rtfd.org/en/latest/quickstart.html'
])
3. 给定问题并取回结果
question = 'How do I make an omelette?'
print(question)
response = bot.get_response(question)
print(response)
print("\n")
question = 'how to make a chat bot?'
print(question)
response = bot.get_response(question)
print(response)
各自输出:
How do I make an omelette?
I am sorry, but I do not understand.
how to make a chat bot?
Have you read the documentation?
4. 使用chatterbot自带的中文语料库训练
#!/usr/bin/python
# -*- coding: utf-8 -*-
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
chatbot = ChatBot("ChineseChatBot")
chatbot.set_trainer(ChatterBotCorpusTrainer)
# 使用中文语料库训练它
chatbot.train("chatterbot.corpus.chinese")
# 开始对话
while True:
print(chatbot.get_response(input(">")))
试了一下,问答比较二。。。
- seq2seq
- LSTM
THE END.