当前位置:   article > 正文

【自然语言处理篇】--Chatterbot聊天机器人_自然语言处理医疗机构聊天机器人代码

自然语言处理医疗机构聊天机器人代码

一、前述

ChatterBot是一个基于机器学习的聊天机器人引擎,构建在python上,主要特点是可以自可以从已有的对话中进行学(jiyi)习(pipei)。

二、具体

1、安装

是的,安装超级简单,用pip就可以啦

pip install chatterbot

2、流程

大家已经知道chatterbot的聊天逻辑和输入输出以及存储,是由各种adapter来限定的,我们先看看流程图,一会软再一起看点例子,看看怎么用。

 

 

3、每个部分都设计了不同的“适配器”(Adapter)。

机器人应答逻辑 => Logic Adapters
Closest Match Adapter  字符串模糊匹配(编辑距离)

Closest Meaning Adapter  借助nltk的WordNet,近义词评估
Time Logic Adapter 处理涉及时间的提问
Mathematical Evaluation Adapter 涉及数学运算

存储器后端 => Storage Adapters
 Read Only Mode 只读模式,当有输入数据到chatterbot的时候,数
据库并不会发生改变
 Json Database Adapter 用以存储对话数据的接口,对话数据以Json格式
进行存储。
Mongo Database Adapter  以MongoDB database方式来存储对话数据

输入形式 => Input Adapters

Variable input type adapter 允许chatter bot接收不同类型的输入的,如strings,dictionaries和Statements
Terminal adapter 使得ChatterBot可以通过终端进行对话
 HipChat Adapter 使得ChatterBot 可以从HipChat聊天室获取输入语句,通过HipChat 和 ChatterBot 进行对话
Speech recognition 语音识别输入,详见chatterbot-voice

输出形式 => Output Adapters
Output format adapter支持text,json和object格式的输出
Terminal adapter
HipChat Adapter
Mailgun adapter允许chat bot基于Mailgun API进行邮件的发送
Speech synthesisTTS(Text to speech)部分,详见chatterbot-voice

4、代码

基础版本

  1. # -*- coding: utf-8 -*-
  2. from chatterbot import ChatBot
  3. # 构建ChatBot并指定Adapter
  4. bot = ChatBot(
  5. 'Default Response Example Bot',
  6. storage_adapter='chatterbot.storage.JsonFileStorageAdapter',#存储的Adapter
  7. logic_adapters=[
  8. {
  9. 'import_path': 'chatterbot.logic.BestMatch'#回话逻辑
  10. },
  11. {
  12. 'import_path': 'chatterbot.logic.LowConfidenceAdapter',#回话逻辑
  13. 'threshold': 0.65,#低于置信度,则默认回答
  14. 'default_response': 'I am sorry, but I do not understand.'
  15. }
  16. ],
  17. trainer='chatterbot.trainers.ListTrainer'#给定的语料是个列表
  18. )
  19. # 手动给定一点语料用于训练
  20. bot.train([
  21. 'How can I help you?',
  22. 'I want to create a chat bot',
  23. 'Have you read the documentation?',
  24. 'No, I have not',
  25. 'This should help get you started: http://chatterbot.rtfd.org/en/latest/quickstart.html'
  26. ])
  27. # 给定问题并取回结果
  28. question = 'How do I make an omelette?'
  29. print(question)
  30. response = bot.get_response(question)
  31. print(response)
  32. print("\n")
  33. question = 'how to make a chat bot?'
  34. print(question)
  35. response = bot.get_response(question)
  36. print(response)

 

结果:

  1. How do I make an omelette?
  2. I am sorry, but I do not understand.
  3. how to make a chat bot?
  4. Have you read the documentation?

 

处理时间和数学计算的Adapter

  1. # -*- coding: utf-8 -*-
  2. from chatterbot import ChatBot
  3. bot = ChatBot(
  4. "Math & Time Bot",
  5. logic_adapters=[
  6. "chatterbot.logic.MathematicalEvaluation",
  7. "chatterbot.logic.TimeLogicAdapter"
  8. ],
  9. input_adapter="chatterbot.input.VariableInputTypeAdapter",
  10. output_adapter="chatterbot.output.OutputAdapter"
  11. )
  12. # 进行数学计算
  13. question = "What is 4 + 9?"
  14. print(question)
  15. response = bot.get_response(question)
  16. print(response)
  17. print("\n")
  18. # 回答和时间相关的问题
  19. question = "What time is it?"
  20. print(question)
  21. response = bot.get_response(question)
  22. print(response)

 

 结果:

  1. What is 4 + 9?
  2. ( 4 + 9 ) = 13
  3. What time is it?
  4. The current time is 05:08 PM

 导出语料到json文件

  1. # -*- coding: utf-8 -*-
  2. from chatterbot import ChatBot
  3. '''
  4. 如果一个已经训练好的chatbot,你想取出它的语料,用于别的chatbot构建,可以这么做
  5. '''
  6. chatbot = ChatBot(
  7. 'Export Example Bot',
  8. trainer='chatterbot.trainers.ChatterBotCorpusTrainer'
  9. )
  10. # 训练一下咯
  11. chatbot.train('chatterbot.corpus.english')
  12. # 把语料导出到json文件中
  13. chatbot.trainer.export_for_training('./my_export.json')

反馈式学习聊天机器人

  1. # -*- coding: utf-8 -*-
  2. from chatterbot import ChatBot
  3. import logging
  4. """
  5. 反馈式的聊天机器人,会根据你的反馈进行学习
  6. """
  7. # 把下面这行前的注释去掉,可以把一些信息写入日志中
  8. # logging.basicConfig(level=logging.INFO)
  9. # 创建一个聊天机器人
  10. bot = ChatBot(
  11. 'Feedback Learning Bot',
  12. storage_adapter='chatterbot.storage.JsonFileStorageAdapter',
  13. logic_adapters=[
  14. 'chatterbot.logic.BestMatch'
  15. ],
  16. input_adapter='chatterbot.input.TerminalAdapter',#命令行端
  17. output_adapter='chatterbot.output.TerminalAdapter'
  18. )
  19. DEFAULT_SESSION_ID = bot.default_session.id
  20. def get_feedback():
  21. from chatterbot.utils import input_function
  22. text = input_function()
  23. if 'Yes' in text:
  24. return True
  25. elif 'No' in text:
  26. return False
  27. else:
  28. print('Please type either "Yes" or "No"')
  29. return get_feedback()
  30. print('Type something to begin...')
  31. # 每次用户有输入内容,这个循环就会开始执行
  32. while True:
  33. try:
  34. input_statement = bot.input.process_input_statement()
  35. statement, response = bot.generate_response(input_statement, DEFAULT_SESSION_ID)
  36. print('\n Is "{}" this a coherent response to "{}"? \n'.format(response, input_statement))
  37. if get_feedback():
  38. bot.learn_response(response,input_statement)
  39. bot.output.process_response(response)
  40. # 更新chatbot的历史聊天数据
  41. bot.conversation_sessions.update(
  42. bot.default_session.id_string,
  43. (statement, response, )
  44. )
  45. # 直到按ctrl-c 或者 ctrl-d 才会退出
  46. except (KeyboardInterrupt, EOFError, SystemExit):
  47. break

 使用Ubuntu数据集构建聊天机器人

  1. from chatterbot import ChatBot
  2. import logging
  3. '''
  4. 这是一个使用Ubuntu语料构建聊天机器人的例子
  5. '''
  6. # 允许打日志
  7. logging.basicConfig(level=logging.INFO)
  8. chatbot = ChatBot(
  9. 'Example Bot',
  10. trainer='chatterbot.trainers.UbuntuCorpusTrainer'
  11. )
  12. # 使用Ubuntu数据集开始训练
  13. chatbot.train()
  14. # 我们来看看训练后的机器人的应答
  15. response = chatbot.get_response('How are you doing today?')
  16. print(response)

借助微软的聊天机器人

 

  1. # -*- coding: utf-8 -*-
  2. from chatterbot import ChatBot
  3. from settings import Microsoft
  4. '''
  5. 关于获取微软的user access token请参考以下的文档
  6. https://docs.botframework.com/en-us/restapi/directline/
  7. '''
  8. chatbot = ChatBot(
  9. 'MicrosoftBot',
  10. directline_host = Microsoft['directline_host'],
  11. direct_line_token_or_secret = Microsoft['direct_line_token_or_secret'],
  12. conversation_id = Microsoft['conversation_id'],
  13. input_adapter='chatterbot.input.Microsoft',
  14. output_adapter='chatterbot.output.Microsoft',
  15. trainer='chatterbot.trainers.ChatterBotCorpusTrainer'
  16. )
  17. chatbot.train('chatterbot.corpus.english')
  18. # 是的,会一直聊下去
  19. while True:
  20. try:
  21. response = chatbot.get_response(None)
  22. # 直到按ctrl-c 或者 ctrl-d 才会退出
  23. except (KeyboardInterrupt, EOFError, SystemExit):
  24. break

HipChat聊天室Adapter

  1. # -*- coding: utf-8 -*-
  2. from chatterbot import ChatBot
  3. from settings import HIPCHAT
  4. '''
  5. 炫酷一点,你可以接到一个HipChat聊天室,你需要一个user token,下面文档会告诉你怎么做
  6. https://developer.atlassian.com/hipchat/guide/hipchat-rest-api/api-access-tokens
  7. '''
  8. chatbot = ChatBot(
  9. 'HipChatBot',
  10. hipchat_host=HIPCHAT['HOST'],
  11. hipchat_room=HIPCHAT['ROOM'],
  12. hipchat_access_token=HIPCHAT['ACCESS_TOKEN'],
  13. input_adapter='chatterbot.input.HipChat',
  14. output_adapter='chatterbot.output.HipChat',
  15. trainer='chatterbot.trainers.ChatterBotCorpusTrainer'
  16. )
  17. chatbot.train('chatterbot.corpus.english')
  18. # 没错,while True,会一直聊下去!
  19. while True:
  20. try:
  21. response = chatbot.get_response(None)
  22. # 直到按ctrl-c 或者 ctrl-d 才会退出
  23. except (KeyboardInterrupt, EOFError, SystemExit):
  24. break

邮件回复的聊天系统

  1. # -*- coding: utf-8 -*-
  2. from chatterbot import ChatBot
  3. from settings import MAILGUN
  4. '''
  5. 这个功能需要你新建一个文件settings.py,并在里面写入如下的配置:
  6. MAILGUN = {
  7. "CONSUMER_KEY": "my-mailgun-api-key",
  8. "API_ENDPOINT": "https://api.mailgun.net/v3/my-domain.com/messages"
  9. }
  10. '''
  11. # 下面这个部分可以改成你自己的邮箱
  12. FROM_EMAIL = "mailgun@salvius.org"
  13. RECIPIENTS = ["gunthercx@gmail.com"]
  14. bot = ChatBot(
  15. "Mailgun Example Bot",
  16. mailgun_from_address=FROM_EMAIL,
  17. mailgun_api_key=MAILGUN["CONSUMER_KEY"],
  18. mailgun_api_endpoint=MAILGUN["API_ENDPOINT"],
  19. mailgun_recipients=RECIPIENTS,
  20. input_adapter="chatterbot.input.Mailgun",
  21. output_adapter="chatterbot.output.Mailgun",
  22. storage_adapter="chatterbot.storage.JsonFileStorageAdapter",
  23. database="../database.db"
  24. )
  25. # 简单的邮件回复
  26. response = bot.get_response("How are you?")
  27. print("Check your inbox at ", RECIPIENTS)

一个中文的例子

注意chatterbot,中文聊天机器人的场景下一定要用python3.X,用python2.7会有编码问题。

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. #手动设置一些语料
  4. from chatterbot import ChatBot
  5. from chatterbot.trainers import ListTrainer
  6. Chinese_bot = ChatBot("Training demo")
  7. Chinese_bot.set_trainer(ListTrainer)
  8. Chinese_bot.train([
  9. '你好',
  10. '你好',
  11. '有什么能帮你的?',
  12. '想买数据科学的课程',
  13. '具体是数据科学哪块呢?'
  14. '机器学习',
  15. ])
  16. # 测试一下
  17. question = '你好'
  18. print(question)
  19. response = Chinese_bot.get_response(question)
  20. print(response)
  21. print("\n")
  22. question = '请问哪里能买数据科学的课程'
  23. print(question)
  24. response = Chinese_bot.get_response(question)
  25. print(response)

结果:

  1. 你好
  2. 你好
  3. 请问哪里能买数据科学的课程
  4. 具体是数据科学哪块呢?

利用已经提供好的小中文语料库

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. from chatterbot import ChatBot
  4. from chatterbot.trainers import ChatterBotCorpusTrainer
  5. chatbot = ChatBot("ChineseChatBot")
  6. chatbot.set_trainer(ChatterBotCorpusTrainer)
  7. # 使用中文语料库训练它
  8. chatbot.train("chatterbot.corpus.chinese")
  9. # 开始对话
  10. while True:
  11. print(chatbot.get_response(input(">")))

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号