构建聊天机器人:检索seq2seqrlseqgan

Young_Gy Young_Gy     2023-03-01     644

关键词:

本文将简要介绍聊天机器人的四种构建方法:检索、seq2seq、Reinforcement Learning、seqGAN。

聊天机器人的现状

聊天机器人从应用领域分为:

  • 专业型
  • 通用型

从技术上分为:

  • 检索型
  • 生成型

目前聊天机器人在专业领域利用检索的效果较好,正朝着通用领域生成型发展。

检索

检索方法的数据库是很多对话的pair,其原理是将query编码成vector,然后在数据库中找最接近的query,然后将最接近的query的回答输出。注意点如下:

  • query的编码方式LSI:使用词袋模型或tf-idf对数据库中的query集进行编码得到矩阵 A ,行代表word,列代表document;对矩阵进行SVD分解得到A=USVT,其中 V 表示文档在特征空间的特征向量;当新的queryq来临时,对其做变换 S1UTq 得到特征空间的向量,然后用余弦相似性计算与数据库中qeury的相似度即可。这种方法的缺点是当新数据越多的时候误差越大,需要重新计算SVD,同时对于同义词、一词多义等语义特征难以把握。
  • query的编码方式RNN:可以采用两个RNN。第一个RNN对每句话进行编码到一个向量;第二个RNN对第一个RNN的输出继续编码成一个向量。
  • query的编码方式auto-encoder,设定encoder的单元数,encoder前面加embeding等,相当于特征压缩。
  • query编码好之后的问题就转变成了一个retrivel的问题,采用KNN即可,同时可采用KD-Tree、LSH优化检索速度。

seq2seq

seq2seq使用两个RNN,一个作为输入的encoder,一个作为输出的decoder。需要注意的大致包含以下几点:

  • encoder中可以包含上一句,也可以包含上上一句。如果包含多个句子,可以采用启发式的encoder,训练2 step的RNN。第一个RNN负责对每个句子进行建模,第二个RNN负责对第一层RNN的输出进行建模输出变量。
  • decoder每个step可以采用attention
  • train的时候loss为 C=Ct Ct=log(P(xt|x1,...,xt1)) ,最小化loss等价于最大似然 maxP(x|h) h 代表encoder的输入,x代表decoder的输出。

RL

为什么要用强化学习

seq2seq有一些缺点:

  • 只能计算前缀部分的概率(改进可用recursive neural network)
  • 使用最大似然估计模型参数

第一个缺点使seq2seq不容易理解文本,因为AI-requires being able to understand bigger things from knowing about small parts.

第二个缺点使seq2seq的对话不像真实的对话,只考虑当前对话最大似然忽略了对话对未来的影响,容易出现“I don’t know”(因为其概率最大,其他方向的相互抵消);对话重复(不考虑上下文的关系)等问题。

针对第二个缺点,我们了解到概率最高的输出不一定等于好的输出,好的对话需要考虑长久的信息。可以引入强化学习,人为设计相关的reward让机器更好地学习。

强化学习的架构设计

强化学习的本质是根据reward,使模型参数朝着reward增长最大的方向移动。
强化学习的聊天机器人架构设计如下:

其模型本质还是seq2seq,模型参数是 θ ,模型输入是 h ,输出是x,其与seq2seq不同的地方在于模型参数的更新方式:seq2seq按照cross entropy确定损失函数,然后最小化损失函数;DL最大化期望的reward。

期望reward的计算公式如下:

Rθ=hP(h)xPθ(x|h)R(h,x)=EhP(h),xPθ(x|h)[R(h,x)]=1NiR(hi,xi)

我们的优化目标是:

θ=argmaxθRθ

Policy Gradient

在上一节中,我们得到了目标函数与优化目标,这节中,我们考虑如何求目标函数的梯度 Rθ

上一节中得到 Rθ 的方式是通过采样,通过采样的方法自然无法计算梯度实现梯度的传递。解决的思路是:将 Rθ 转化成梯度的采样。具体实现如下:

Rθ=hP(h)xPθ(x|h)R(h,x)=EhP(h),xPθ(x|h)[R(h,x)]=1Nmarkdown基于检索式聊天机器人设计(代码片段)

查看详情

综述|检索式聊天机器人技术

...联网上对话语料的不断积累,闲聊导向对话系统(简称聊天机器人)取得了令人瞩目的进展,受到了学术界的广泛关注,并在产业界进行了初步的尝试。当前,聊天机器人分为检索式聊天机器人和生成式聊天机器人,而检索式聊天机器人... 查看详情

如何构建gmail聊天机器人?

】如何构建gmail聊天机器人?【英文标题】:Howtobuildgmailchatbot?【发布时间】:2012-10-2401:24:14【问题描述】:我想构建一个简单的gmail聊天机器人。机器人读取收件人的聊天消息并做出响应..我已经开发了响应消息的逻辑但现在我... 查看详情

聊天机器人

一、聊天机器人分类(1)按功能分类可分为:问答型聊天机器人、任务型聊天机器人、闲聊型聊天机器人。???实现不同功能的聊天机器人所用技术也不尽相同,例如在做问答型聊天机器人时,我们需要提取问句中的焦点词汇,... 查看详情

论文泛读174基于相关知识和目标的主动检索式聊天机器人

...有主动引导对话的能力。与仅对用户做出反应的一般聊天机器人不同,主动对话系统可用于实现某些目标,例如向用户推荐某些项目。背景知识对于在对话中实现平稳和自然的 查看详情

论文泛读174基于相关知识和目标的主动检索式聊天机器人

...有主动引导对话的能力。与仅对用户做出反应的一般聊天机器人不同,主动对话系统可用于实现某些目标,例如向用户推荐某些项目。背景知识对于在对话中实现平稳和自然的 查看详情

keras深度学习实战(34)——构建聊天机器人(代码片段)

Keras深度学习实战(34)——构建聊天机器人0.前言1.模型与数据集分析1.1命名实体识别1.2数据集分析1.3模型分析2.实现聊天机器人2.1命名实体提取模型2.2意图提取模型2.3模型整合小结系列链接0.前言随着自然语言处理技术... 查看详情

两种开源聊天机器人的性能测试——基于tensorflow的chatbot

...t-retrieval/      它实现一个检索式的机器人。采用检索式架构,有预定好的语料答复库。检索式模型的输入是上下文潜在的答复。模型输出对这 查看详情

使用botkit和rasanlu构建智能聊天机器人

...能力涉及旅游、社交、法律??、支持、销售等领域的新型机器人推出的新闻。根据我最后一次查阅的数据,单单FacebookMessenger就拥有超过11000个机器人,然而到我写这篇文章的时候,估计又已经增加了几千台。第一代的机器人由于... 查看详情

如何在基于botframewokv4构建的团队聊天机器人中启用语音功能

我已经使用Bot框架v4创建了一个聊天机器人,并将其与Teams集成。我想在团队频道中启用语音转文字和文字转语音功能。我已经使用webSpeechPonyfillFactory在Webchat中启用了STT/TTS,并且它的运行正常,现在我想为Teams频道启用它,我该... 查看详情

聊天机器人(chatbot)终极指南:自然语言处理(nlp)和深度机器学习(deepmachinelearning)(代码片段)

...(NLP)以及如何将NLP和深度学习(DeepLearning)应用到聊天机器人(Chatbots)方面的最好的资料。时不时地我会发现一个出色的资源,因此我很快就开始把这些资源编制成列表。不久,我就发现自己开始与bot开发人员和bot社区的其... 查看详情

如何检索 websocket 连接列表?

...间】:2019-08-0311:14:21【问题描述】:我正在开发一个聊天机器人项目,我们在其中打开一个websocket连接来传达聊天消息。有时我们会来回收到重复的消息。我怀疑第二个客户端已启动。我想修改boot()函数,以便它检查现有的websoc... 查看详情

chatbot走进聊天机器人(代码片段)

走进聊天机器人1.目前企业中的常见的聊天机器人2.常见的聊天机器人怎么实现的2.1问答机器人的常见实现手段2.2任务机器人的常见实现思路2.3闲聊机器人的常见实现思路3.企业中的聊天机器人是如何实现的3.1阿里小蜜-电商智能... 查看详情

有开发聊天机器人的教程吗? [关闭]

】有开发聊天机器人的教程吗?[关闭]【英文标题】:Anytutorialsfordevelopingchatbots?[closed]【发布时间】:2012-03-3104:42:10【问题描述】:作为一名工科学生,我想使用python制作一个聊天机器人。因此,我进行了很多搜索,但无法真正... 查看详情

简单的聊天机器人项目[关闭]

】简单的聊天机器人项目[关闭]【英文标题】:Simplechatbotprojects[closed]【发布时间】:2011-05-0623:53:25【问题描述】:我想做的是构建一个简单的机器人,它将存储在数据库中的一组信息发送到我的messanger聊天窗口[聊天服务是gTalk... 查看详情

Microsoft Lync 聊天机器人

】MicrosoftLync聊天机器人【英文标题】:MicrosoftLyncchatbot【发布时间】:2017-02-0116:10:54【问题描述】:我想编写一个。该机器人应该可以在lync上进行搜索,类似于facebook机器人。任何想法或指示都会有所帮助。Microsoftbot框架在Office... 查看详情

使用 Huggingface 变形金刚的聊天机器人

】使用Huggingface变形金刚的聊天机器人【英文标题】:ChatbotusingHuggingfaceTransformers【发布时间】:2021-12-3111:23:54【问题描述】:我想使用HuggingfaceTransformers来实现一个聊天机器人。目前,我有如下所示的代码。Transformer模型已经考... 查看详情

用php构建聊天应用程序[重复]

】用php构建聊天应用程序[重复]【英文标题】:Buildingchatappwithphp[duplicate]【发布时间】:2016-12-0602:51:25【问题描述】:我正在寻找一些使用php构建聊天应用程序的参考资料1。使用AJAX我看到有很多使用javascript/jquery的教程使用setInt... 查看详情