对话系统学习,问答型数据库,闲聊型对话数据库

人机交互方式演进

命令行交互 -> GUI图形界面交互-> GUI+触摸.声音等 -> 沉浸式

语义交互

智能硬件 :无人机智能家居

汽车: 车载语音智能汽车

个人助理 : 订餐出行

咨询类机器人: 导诊机器人电商客服

对话系统

|--------|---------------|-----------|---------|
| | 任务型 | 问答型 | 聊天型 |
| 目的 | 完成特定任务 | 回答问题,提供信息 | 闲聊 |
| 领域 | 垂直领域 | 垂直&开放领域 | 开放领域 |
| 以轮数为评价 | 越少越好 | 越少越好 | 越多越好 |
| 应用 | 业务办理,订机票,客户回访 | 客服,培训,搜索等 | 闲聊,情感陪伴 |

以轮数为评价的意思是,类似于游戏的日活,人越喜欢就是互动越频繁

任务型对话

NLU模块

模块分为 领域识别 意图识别 语义槽填充

分类问题 序列标注问题

|----|-------|-----------------|-----------------|
| 领域 | 意图 | 语义槽 | 举例 |
| 火车 | 查询 | 出发地,到达地 | 厦门到福建建阳的火车是几点 |
| 火车 | 预定 | 出发地,到达地,出发时间,车次 | 订一张明天哈尔滨到北京的Z15 |
| 地图 | 路线 | 出发地,到达地 | 南山医院到北大医院路线 |
| 地图 | 位置 | POI | 北京西站在哪 |
| 短信 | 发消息 | 接收人,内容 | 发短信给叶少云晚上要不要出去玩 |
| 短信 | 发生联系人 | 接收人,联系人 | 把哥哥的电话发给殷龙 |

其中领域 和 意图 可以理解为分类问题,语义槽可以理解为序列标注问题 分类问题有两种方式:比如上图 一种 就是 直接6分类到意图 第二种就是先进行领域的分类,然后再二分类 这两者方法需要结合业务情况去考虑,如果分类目标很多就是第二种,同时要用上子模型,就是每个领域都有一个子模型迭代优化不影响其他的

联合学习

分类(意图识别) + 序列标注()语义槽填充

类似于知识图谱的封闭式关系抽取

大模型Function Call

LLM做function call 也可以看做一种意图识别+槽位抽取

用户输入: 我想买北京去上海的机票

LLM输出: {'function':'BuyTicket','params':{'departure':'北京','arrival':'上海'}}

不同function本质上为不同意图,参数就是槽位

对话状态跟踪

就是用户有的时候很难一次性把槽位说全,比如帮我订一张去北京的机票,这句话中没有出发地

对话状态中,用户目标的达成状态,是对于对话现状的一种表示

如图上的过程就是对话状态跟踪

对话策略

根据当前的对话状态决定对话策略

对话策略包括: 反问获取信息,向用户确认,回答

状态->策略

策略矩阵,每种状态选哪种策略

NLG(自然语言生成)

第一种 就是根据大模型,根据槽位的缺失,当成提示词给大模型,然后大模型给出相应的话术

第二种就是 基于模板填槽

整体框架

常见的评估方式

模型层面: 意图识别准确率,槽填充准确率,模型效率

应用层面: 节点到达率,任务达成率,场景覆盖

功能层面: 新场景迁移效率,跨场景交互能力,人工复杂率

对话模拟器(解决测试的问题,任务型对话普遍是多轮的,用户需要不断补充,这样就导致测试很困难)

在实际工作中,比如修改了系统中的某一点东西,对整体都已潜在的影响,为了能测试完整的功能,于是需要对话模拟器不断发起请求,测试某个功能分支

问答型对话机器人

基于faq库

准备很多问答对,然后用户问题来了,做相似度计算找到最相似的,找到就找到答案了,现在也可以用embedding来做,文本转向量的方式

基于知识图谱

nl2sql的方式,同时也可以用大模型来做,给表结构和问题,让大模型做语句,然后执行

基于文档(机器阅读理解) MRC的方法 可以算是RAG的前身

逻辑为由文本片段,答案在文档中这是默认的,然后就会截取片段来作答,这个方法不需要对原始数据加工和处理,前两个,要加工QA,或构建知识图谱

闲聊型对话机器人

  1. 检索式

类似于faq问答,使用语料库进行匹配

  1. 生成式

类似于翻译,使用seq2seq模型做文本生成

  1. 检索+生成结合

  2. 大模型全黑盒处理

LLM多轮对话

常用方式

|---------------------|-------------------------------------|------------------------------------------|
| 常用方式 | 优点 | 缺点 |
| 拼接所有的历史对话,长度不够就进行截断 | 简单直接,完整存储了历史对话记录,对历史对话的理解肯定是对全面的 | token消耗大,内容冗余,超过限制回损失信息 |
| 对历史对话记录总结记录 | 相比直接记录历史对话减少了冗余内容,只抓关键点,大大增强了多轮对话能力 | 摘要效果取决于模型,模型不好可能回大量丢失关键信息且需要额外token去总结摘要 |
| 存储 | 增加记忆数据库,可以存储更多多轮对话的内容,在时间和容量上跨度很大 | 需要构建外部记忆系统,并需要具备对应的检索能力 |
| trunk&retrieval | 综合了上面方法的优点 | 效果取决于检索能力,关键点把握不住会存在语义偏差 |

多轮训练方式

User1是我们问的问题,计算Assistant部分loss,然后拼接起来作输入再预测,计算loss

但是这种做法会出现冗余加浪费

这样做,直接长文本,然后在Assistant计算loss

这里需要mask的设置,如图中的mask设置应该为

预训练数据时根据长度分组

相关推荐
nashane2 小时前
HarmonyOS 6商城开发学习:抢票倒计时与系统日历提醒——票务类场景的完整落地思路
学习·华为·harmonyos
伶俜663 小时前
零基础学 ArkUI 传感器(专题二):从加速度计到指南针,玩转硬件能力
学习·华为·harmonyos
进击的小头4 小时前
第8篇:IGBT 从零到精通:核心原理、关键参数、选型指南与工业级应用要点
经验分享·嵌入式硬件·学习
小陈phd4 小时前
Text2SQL智能体学习笔记(一)——NL2SQL及执行流程介绍
笔记·学习
风栖柳白杨4 小时前
【大模型学习】主流大模型统计
学习
lengxuemo4 小时前
ICC2学习之PG
学习
稷下元歌4 小时前
系统学习plc 基础指令上篇,官方资料课程笔记整 理
笔记·学习
我的xiaodoujiao4 小时前
API 接口自动化测试详细图文教程学习系列25--继续处理testCase中的数据
python·学习·测试工具·pytest