欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 第一次构建一个对话机器人流程解析(一)

第一次构建一个对话机器人流程解析(一)

2024/10/24 7:26:49 来源:https://blog.csdn.net/jy739761380/article/details/140274375  浏览:    关键词:第一次构建一个对话机器人流程解析(一)

1.问答机器人的组成

1.1 问答机器人的组成结构图

2. 问答机器人的组成-机器人的个人属性

所谓的机器人一般具备有个人的属性,这些属性固定,形成了机器人的个人偏好

在实现过程中,此处使用一个xml配置文件,配置了机器人的个人年龄、性别、职业等内容,同时包含常见有关于机器人属性的问答

服务初始化时,预加载这些属性作为准备;

线上推理时,一般会判断是否是有关于机器人属性的提问,从而进行回答 此处使用模板匹配,进行问题搜索,匹配成功则返回相关的答案

2.1 问答机器人代码实现

import xml.etree.ElementTree as et#python可读取xml工具
template = et.parse('data/robot_template.xml')#加载xmlclass template():def __init__(self):self.template = et.parse(TEMPLATE_PATH)self.robot_info = self.load_robot_info()#加载个人属性self.temp = self.template.findall('temp')#加载问答样式def load_robot_info(self):rebot_info = self.template.find('robot_info')rebot_info_dict = {}for info in rebot_info:rebot_info_dict[info.tag] = info.textreturn rebot_info_dictdef search_answer(self, question):match_temp = Noneflag = Nonefor temp in self.temps:qs = temp.find('question').findall('q')for q in qs:res = re.search(q.text,question)if res:match_temp = tempflag = Truebreakif flag:breakif flag:a_s = choice([i.text for i in match_temp.find('answer').findall('a')])answer = a_s.format(**self.robot_info)return answerelse:return None

3.  问答机器人的组成-基于语料的回答

机器人的对话学习过程中,一般有一些现成的语料,这些语料来源于日常生活的对话

在此处,基于余弦相似度,对用户的提问和已有语料的提问进行匹配,若匹配成功,则表明用户提问与现有语料中有高度相似的提问,从而返回该提问对应的回答

通过这种余弦相似度的匹配,可以构建一个简易的对话系统,但并不准确,且当语料很庞大时,这样的计算是很可怕的,而且准确率很差

在后续的学习过程中会使用更多的语料,通过深度学习模型来生成或者快速检索合适的答案进行回答

3.1 问答机器人的组成-基于语料的回答(预处理)

s1:文本清洗+切词+生成q,a列表

def load_seq_qa():q_list,a_list = [],[]with open(CORPUS_PATH,'r',encoding = 'utf-8') as f:for ind, i in enumerate(f):i = jieba.lcut(i.strip())if ind % 2 == 0:q_list.append(i)else:a_list.append(i)return q_list,a_list

s2:将所得词index化(为后续生成式问答服务)

def build_vocab():q,_ = load_seq_qa()word_dict = set([j for i in q for j in i])word_dict = dict(zip(word_dict,range(len(word_dict))))return word_dict

s3:将所得词embeding化

def build_word_embeding():q,_ = load_seq_qa()word_dict = build_vocab()word_embeding = {}for w in word_dict.keys():word_embeding[w] = []for ind,qs in enumerate(q):for w in qs:word_embeding[w].append(ind)return word_embeding

3.2 问答机器人的组成-基于语料的回答(构建)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com