任务型charbot

任务型chatbot的基本流程

得到
得到
通知
ASR
NLU
intent
emtity
DST
DPL
NLG
TTS
  • NLU识别Intent和Entity,不同的intent可以设计不同的slot,讲 Entity填充到slot中

  • DST(对话状态跟踪)负责监视对话的状态,同时进行多轮对话来填充完整slot,也起到了上下文对话的影响。DST包含不同的方法包括有限状态机, 也可以使用增强学习和强化学习的方法做DST。

  • DPL 在后端定义出很多的规则,利用当前的intent和slot进行相应的操作(比如订机票操作),当当前状态的slot被填充满会出发DPL调用相应的API,为了可靠性,在正式调用在之前会向用户确认。

  • NLG部分使用规则定义的模板进行相应的回复

  • TTS进行语音合成(使用)

NLU

  • 意图识别
    这是一个分类的问题,可以使用规则的任务,也可以使用深度学习的方法。

  • 实体识别
    识别出intent之后进行实体的识别,填充slot。(但是RASA可以intent和entity同时进行…),使用biLSTM-CRF进行。也可以使用RASA开源模工具进行NLU的操作。

DST

用一个slot表示当前状态, 根据当前的intent1进行填充。但是可能我们在填充当前slot的过程中还没有填充完毕,就进入下一个intent2,所以我们需要记录存储在内存的当中没有释放的出来的intent1。

DPL

根据当前的状态进行相应的动作

f
1
2
3
4
状态
Action

f: 分类, 基于状态,RL

基于状态的转移可以使用FSM工具,它可以根据当前的状态对应的位置输出一个action

比如对于的询问订机票的问题,我们可以这么设计状态转移:
假设slot为【time:[],locations:[]】
那么我们就有4个状态——S=(0,0),S = (0,1), S=(1,0), S=(1,1)

入口
ask time
如果一直ask again
ask again
入口
ask time
ask again
入口
ask location
ask again
入口
S_0
NULL
s1
Exception
Time
Location
s3
OK
s2
没有问清楚就ask_again

回复的时候采用template

actiontext template
ask“请问……”
ask time“please ……”
ask locationi“please ……”

但是这样会套路一样,失去个性化,所以又可以对于同一个actio定义多个template ,回复的 时候随机使用一个template。

但是使用这个FSM会遇到这样的问题
  • 当一直没有得到想好的回答的时候会一直ask again。所以我们要定义其他的规则,一直问就进入一个Exception阶段进行特殊的处理。
  • 对于2个槽就有始终状态,通常我们需要的槽位是很少的。但是当存在多个槽,我们的状态就会指数级增长,这个问题就怎么解决呢↓↓↓

刚才我们是使用节点对应状态,边对应action,现在我们用边对应状态,用节点对应action。 像下面:在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
# 说明 该库是对目前市面上已有的开源中文聊天语料的搜集和系统化整理工作 该库搜集了包含 - chatterbot - 豆瓣多轮 - PTT八卦语料 - 青云语料 - 电视剧对白语料 - 贴吧论坛回帖语料 - 微博语料 - 小黄鸡语料 共8个公开闲聊常用语料和短信,白鹭时代问答等语料。 并对8个常见语料的数据进行了统一化规整和处理,达到直接可以粗略使用的目的。 **使用该项目,即可对所有的聊天语料进行一次性的处理和统一下载,不需要到处自己去搜集下载和分别处理各种不同的格式。* # 环境 python3 # 处理过程 将各个来源的语料按照其原格式进行提取,提取后进行繁体字转换,然后统一变成一轮一轮的对话。 # 使用方法 将解压后的raw_chat_corpus文件夹放到当前目录下 目录结构为 ``` raw_chat_corpus -- language -- process_pipelines -- raw_chat_corpus ---- chatterbot-1k ---- douban-multiturn-100w ---- .... -- main.py -- ... ``` 执行命令即可 ```bash python main.py ``` 或者 ```bash python3 main.py ``` # 生成结果 每个来源的语料分别生成一个独立的*.tsv文件,都放在新生成的clean_chat_corpus文件夹下。 生成结果格式为 tsv格式,每行是一个样本,先是query,再是answer ``` query \t answer ``` # 结果的使用 这个就根据每个人不同的情况自主使用即可 个人对于聊天机器人方向实践也不是很多,以下一篇之前写的知乎专栏供参考 **《从产品完整性的角度浅谈chatbot》** 文章粗略讲解了如下一些方面,介绍了聊天机器人在实际产品化过程中可能遇到的问题和解决办法。 1. chatbot自身人格的设置 1. 产品上线需要考虑的敏感词处理 1. 文本检索模的使用 1. 文本生成模的使用 1. 回答打分机制 1. 万能回答的使用策略 1. 多媒体消息的处理 1. 产品模部署的问题 # 版权说明 本项目为非商业项目,为纯搜集和汇总资料,如有侵权,请在issue下留言。
好的,以下是一个简单的任务对话机器人的Python代码示例,它可以回答一些简单的问题,例如时间,天气和人物介绍。 ```python import datetime import random # 用字典存储问题和答案 qa_dict = { "你叫什么名字?": "我是任务对话机器人,你可以叫我Robot。", "今天是几月几日?": f"今天是{datetime.date.today().strftime('%Y年%m月%d日')}。", "现在几点了?": f"现在是{datetime.datetime.now().strftime('%H:%M')}。", "明天的天气怎么样?": "明天会有雨,请记得带伞。", "能给我介绍一下马克·扎克伯格吗?": "马克·扎克伯格是Facebook公司的创始人之一。", "谁是世界上最富有的人?": "目前世界上最富有的人是亚马逊公司的创始人贝索斯。", "谁是世界上最聪明的人?": "这个问题很难回答,因为聪明有很多方面,不同的人在不同的方面都很聪明。", } # 机器人回答问题的函数 def answer_question(question): if question in qa_dict: return qa_dict[question] else: return "我不知道怎么回答这个问题。" # 与用户交互的主函数 def main(): print("你好,我是任务对话机器人,有什么问题可以问我。") while True: user_input = input("你的问题是:") if user_input == "退出": print("再见!") break else: response = answer_question(user_input) print(response) if __name__ == "__main__": main() ``` 这个示例中,我们使用了一个字典来存储问题和答案的对应关系,然后在 `answer_question` 函数中根据用户输入的问题来返回对应的答案。在 `main` 函数中,我们不断地接收用户输入,然后调用 `answer_question` 函数来回答用户的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值