意图识别——全方位解析
任何对话功能的实现,第一个要面对的任务就是意图识别——搞清楚用户到底想要什么,这个功能的准确率直接决定了后续动作和流程的执行:对当前流程而言,错误意图——错误执行——错误结果;对长期运行来看,一轮误判被存入历史对话,后续的判断会基于该历史进行执行,导致多米诺骨牌效应。
业务角度
从业务角度来看,意图识别的准确率有以下几个阈值:
低于90%:基本判定为失效,大量用户流式;
90-95%:基本保证可用,但仍有优化空间;
95%以上:该水平以上每增加1%都是质的飞跃。
架构设计角度
下面将从架构设计角度来分析如何优化意图识别准确率
架构解析
从全链路来看,对话功能的实现可以拆解为:接入层——意图识别层——业务逻辑层——输出层。
接入层:
完成消息接收、预处理(包括数据清洗、上下文组装等工作)等功能;
意图识别层:
是核心部分,完成意图分类、实体抽取、情感分析
意图分类用来判断用户想做什么,可以拆解为三层架构:
关键词匹配——轻量分类——LLM兜底
关键词匹配:基于规则库实现,以智能云商平台项目为例,专门设计一个规则库来判定退货申请,ruleId为AutoReturn支持自动退货,ruleId为StrictReject严格不允许退货,直接跳转到拒绝部分。
轻量分类:混合检索(向量检索+关键词检索,BM25rescore),用于关键词匹配未命中但是语义相近的意图。
LLM兜底:处理低置信度/很罕见的输入,可以结合few-shot做提升。
实体抽取用于提取关键参数,如提取流水中的订单号、用户名、金额等;情感分析用于识别用户态度;预先准备好槽位模板(如order_id,return_reason,product_name等),在确定意图之后加载对应模板,并将提取到的内容加载到模板中
业务逻辑层:
实现对话管理、RAG知识检索、API调用、决策执行
输出层:
生成回复、渲染并推送
优化角度
可以从任务执行的流程来分析可优化的节点:
执行前预处理
1、测试集处理
测试集构建的合理与否会极大地影响意图识别的准确率——测试集往往由内部人员构造,描述的是"希望用户如何表达",真实用户的表达方式与内部假设存在显著差异,所以有时即使离线测出来准确率90%+,但是实际用起来体感很差。
针对这一问题,可以从三个角度来优化:1、借助脚本对样本进行泛化;2、基于历史日志进行改写;3、基于真实日志和对抗样本进行改写。
2、槽位类型
意图识别达到的效果是:可以判断现在什么执行必须向用户询问,考虑到执行操作的风险性,可以将槽位进行类型标记:
如果提取的实体只包含商品数量、商品名等,对应映射的槽位可以标记为默认执行;
如果包含用户地址等信息,对应的槽位类型标记为必填,如果当前槽位不完整,需要获取相关信息必须向用户提问;
如果是支付、转账等操作必须每次都显式要求用户确认。
3、针对用户问题,先检测是单意图还是多意图,如果是多意图,先进行query拆分(LLM精确拆分),后分析子query之间的依赖关系和执顺序。
执行中检测
1、多轮对话管理
为每个意图维护5-10轮对话,根据语境提供的额外信息提升意图识别准确率;并将对话历史结构化保存到RAG向量库中。
2、意图切断
当检测到用户话题急剧转换时,主动隔离上下文,避免无用信息的干扰
执行后复盘
Bad case
周期性的从线上挖掘错误案例,更新case 库
Reference:
https://mp.weixin.qq.com/s/dNqRop-FA3d9KnCundu9DQ
更多推荐
所有评论(0)