部分意图分类【LLM+RAG】

news2024/11/30 10:29:48

在生成人工智能领域工作最有价值的事情之一就是发现新兴技术如何融入新的解决方案。 举个例子:在为北美顶级金融服务公司之一设计对话式人工智能助手时,WillowTree 的数据和人工智能研究团队 (DART) 发现,将意图分类与大型语言模型 (LLM) 结合使用可以提高性能, 安全性和成本。

我们将意图分类和LLM与检索增强生成(RAG)系统的这种交织视为“部分意图分类”。 这种实践及其背后的故事表明,对于人工智能专业人士来说,创造性地思考并不断尝试新的解决方案是多么重要。

毕竟,像 GPT-4 这样强大的 LLM 以及 RAG 系统的开发使开发人员能够创建比依赖传统技术的聊天机器人功能更强大、更自给自足的聊天机器人。 然而,这些新模式和方法仍然存在风险。 它们可能会产生无信息或错误的输出(即人工智能幻觉),或者可能容易被越狱(即利用漏洞生成超出道德界限的内容)。

鉴于对答案可靠性和模型安全性的担忧仍然是业务和技术领导者最关心的问题,我们提出部分意图分类作为这些问题的缓解策略。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包

1、为什么我们转向意图分类

意图映射(intent mapping)使聊天机器人能够对符合特定用户意图的用户提示提供确定性的、精心策划的响应。 这样做为我们提供了对这些通常不可预测的系统的另一种控制手段。 这些用户意图通常涵盖常见问题 (FAQ)。

但意图分类(intent classification)还可以检测恶意或偏离主题的行为——旨在越狱系统或使其脱离其认可主题的提示。 因此,通过引入确定性用例识别,我们创建了针对越狱尝试的强大防御前线。

此外,意图分类还可以通过减少延迟和成本来提高聊天机器人的性能。 这是因为意图分类器仅依赖于提示的嵌入和轻量级模型,而不依赖于任何 LLM 完成。

2、将意图分类应用于金融服务AI助手

为了支持意图分类系统,我们首先需要一组通用意图。 我们可以像生成一组网页常见问题解答一样生成这些内容,甚至可以直接从现有的常见问题解答集合中提取它们。 这个想法是在你的意图集中捕获一组常见的用户提示。 为每个意图生成多个示例是必要的,这样你的模型就有足够的示例可供训练和测试。 考虑相同用户意图的这些变化:

  • “我如何对信用卡收费提出异议?”
  • “我最近的信用卡对账单上有可疑活动。”
  • “我不承认信用卡购买。 我应该怎么办?”

这些意图中的每一个都需要在输入中识别出该意图时返回预定的输出。 在我们的例子中,我们通过检查嵌入的几何可分离性的验证来开始意图分类的实验。

具有五个意图类别(左)和七个意图类别(右)的嵌入的截断 SVD 聚类的比较。 虽然左图显示类别的几何可分离性通常很强,但右图显示,随着添加更多类别,类别在缩小的空间中不易分离。

将 K 均值聚类与奇异值分解 (SVD) 和 t 分布随机邻域嵌入 (t-SNE) 聚类进行比较后,结果表明使用 K 最近邻 (KNN) 模型对原始 1,536 个数据进行分类 维度嵌入可能是有效的。 虽然最初的试验表现出很强的用户意图分类准确性,但重点不仅仅是每次都准确的意图映射。 意图分类器还必须处理不符合给定意图列表的提示。 这些可能是以下提示:

  • 应导致 RAG
  • 尝试越狱系统
  • 尝试将聊天机器人拉出范围

为了使分类器能够处理未将所需意图与策划响应进行映射的提示,除了初始意图集之外,我们还必须创建新的类别:超出范围、越狱以及相关但非意图的提示。 我们不希望我们的聊天机器人处理超出范围和越狱的提示。 从现在起,我们将它们称为“不回答”提示,因为我们不希望聊天机器人回答它们。

至于相关但非意图的提示,这些属于我们的聊天机器人的权限范围,但不符合我们的意图类别。 这些提示应通过聊天机器人架构的其余部分发送,以便通过 RAG 进行答复。 根据这些新类别,我们将原始意图集称为“范围内”意图。

3、针对更大的意图类别进行调整

随着类别的增加,意图分类的准确性下降了。 此外,还提出了超出准确性的考虑因素。 现在,我们需要将不准确的分类分成几个不同的类别,每个类别都有自己的一组后果。 最重要的是,对训练集大小的考虑变得很重要。 更大的训练集可确保更多地覆盖每个意图、相关提示和非答案提示。

当然,完全覆盖是不可能的,并且增加训练集的规模会带来收益递减。 除了生成更多示例的成本和时间之外,增加用于检查用户提示的提示数量也会增加意图分类器的延迟和成本,这是我们想要改进的两个关键痛点。

4、基于启发式的系统增强了信心

在使用这组更加多样化的类别测试 KNN 时,我们发现在某些情况下,适合一个范围内意图的提示被错误地分类为另一个范围内意图,或者相关提示被分类为范围内意图。 还有一些非回答提示被归类为相关提示。 我们解决这些问题的方法是通过两种启发式方法修改分类器。

第一个启发式是模型对给定意图的预测的信心。 如果 KNN 预测提示与我们范围内的意图之一匹配,我们将计算 k 个最近邻与预测意图标签的余弦相似度之和。 这种方法试图测量提示与嵌入空间中预测意图的“接近度”。 如果确定提示足够接近(即,启发式值超过某个预定阈值),意图分类器将返回 KNN 的预测。 否则,预测将被忽略,提示将触发 RAG。

请注意,将其中一些发送到 RAG 会降低范围内意图被正确分类的百分比。 但它也减少了被错误分类为范围内意图的提示的百分比以及被错误分类为错误范围内意图的范围内意图的数量。

第二个启发式衡量模型对提示是非答案提示的置信度。 类似地,该启发式等于标记为非答案提示的 k 个最近邻居的余弦相似度之和。 如果此启发式高于某个阈值,则提示被归类为无答案,并且聊天机器人将返回预定响应,拒绝与用户的提示互动。

这种启发式方法并不需要一定程度的置信度来拒绝提示。 相反,它会拒绝任何会引起一定程度的确信它是非答案提示的提示。

5、仔细观察启发式的影响

下图中的彩色标签仅基于 KNN (k=5) 预测,未考虑阈值。 该图演示了阈值的用途。 例如,粉色和橙色点都是根据 KNN 错误映射到范围内意图的提示。 但如果我们合并显示的阈值,所有这些点都将被发送到 RAG,而不是返回错误的确定性响应。

阈值左侧的蓝点是正确分类的意图,它们也会发送到 RAG,但这只是我们对阈值所做的权衡。 我们还可以看到,我们的意图分类器会拒绝略高于拒绝阈值的紫色点,这将阻止我们的机器人回答这些不需要的提示。

6、精确率-召回率曲线帮助我们优化权衡

平衡上面讨论的权衡对于确定这些启发法的阈值或是否完全使用不同的阈值至关重要。 从最大化准确性的角度思考可能不是最好的方法。 向 RAG 发送真实的意图提示(无论如何它都可能收到足够的响应)以及对实际上并未引发该响应的提示给出预先设定的响应会产生不同的后果。

此外,将范围内的提示分类为越狱尝试并拒绝回答与由于意图分类器错过了而通过系统的其余部分发送越狱提示相比,会产生不同的后果。 通过精确率-召回率曲线可以最好地理解这些权衡。

该图是精确召回曲线的示例。 每个点对应于范围内意图启发式的特定阈值。 这演示了如何降低阈值以增加发现的真实范围内意图的百分比,同时也会降低分类为正确的提示的百分比。

准确率,也称为真阳性率 (TPR),是正确分类的所有真实意图(或越狱/超出范围)提示的百分比。 召回率是被分类为意图(或越狱/超出范围)的所有提示中被正确分类的百分比。 这些需要单独查看意图和越狱/超出范围,因为它们依赖于不同的启发式。

在每种情况下,增加阈值都会导致更少的提示被分类为意图或越狱/超出范围。 此过程将导致精度降低,因为由于阈值较低,更真实的意图提示或真正的越狱/范围外提示将不会被分类。

然而,增加阈值也可能会增加分类器的召回率。 在意图阈值的情况下,需要更高的置信度才能将提示分类为意图。 因此,分类为意图的提示应该更准确,这就是召回率所衡量的。

转向越狱/超出范围阈值的情况,增加它将导致更高的置信度阈值,以自动将提示分类为越狱/超出范围提示。 从理论上讲,这应该会减少错误分类的提示数量。

7、寻找正确的AI解决方案需要一个团队

尽管生成式人工智能仅在过去一年就取得了巨大进步,但依赖生成式人工智能的聊天机器人仍然存在不可预测的因素。 如果你的对话式人工智能助手必须以敏感或精确的公司批准的方式处理一组特定的用户意图,那么部分意图分类是一个值得考虑的强大工具。


原文链接:部分意图分类 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1447605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

钓鱼邮件的发送工具GUI

一.简介 本程序利用Python语言编写,使用Tkinter实现图形化界面,可使用Pyinstaller进行exe打包,程序主界面截图如下: 二.功能 1.支持腾讯企业邮、网易企业邮、阿里企业邮、自建邮服SMTP授权账号(其他邮服&#xff0c…

如果把vue组件动态添加到body上?

tools.js: import Vue from vue/*** param Component 组件实例的选项对象* param props 组件实例中的prop*/ export function create(Component, props) {const comp new (Vue.extend(Component))({ propsData: props }).$mount()document.body.appendChild(comp.$el)comp.re…

知识图谱与语言预训练:深度融合的智能问答时代

目录 前言1 直接使用预训练模型 vs. 知识图谱与预训练相结合1.1 直接使用预训练模型1.2 构建知识图谱后与预训练相结合 2 预训练语言模型的发展历程2.1 Word2Vec和GloVe2.2 ELMo2.3 BERT 3 知识图谱对预训练的助力3.1 弥补低频实体信息的不足3.2 提供领域知识的支持 4 典型知识…

ASCII码和EASCII码对照表

ASCII ASCII,是American Standard Code for Information Interchange的缩写, 是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语。ASCII的局限在于只能显示26个基本拉丁字母、阿拉伯数字和英式标点符号,因此只能用于显示现代美国英语…

车载诊断协议DoIP系列 —— DoIP APP车辆识别和声明请求报文

车载诊断协议DoIP系列 —— DoIP APP车辆识别和声明请求报文 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江…

【C++计算几何】点是否在线段上

题目描述 输入一个点Q和一条线段P1P2的坐标,判断这个点是否在该线段上。 输入 一行,共六个浮点数,依次表示Q,P1和P2的坐标。 输出 一行,一个字符数,“YES”或“NO”分别表示改点在或者不在线段上。 样…

C# CAD2016获取数据操作BlockTableRecord、Polyline、DBObject

一、数据操作说明 //DBObject 基础类 DBObject dbObj (DBObject)tr.GetObject(outerId, OpenMode.ForRead); //Polyline 线段类 Polyline outerPolyline (Polyline)tr.GetObject(outerId, OpenMode.ForRead); //BlockTableRecord 块表类 BlockTableRecord modelSpace (Bloc…

Ubuntu Desktop - Screenshot (截图工具)

Ubuntu Desktop - Screenshot [截图工具] 1. Search your computer -> Screenshot -> Lock to Launcher2. gnome-screenshot3. System Settings -> Keyboard -> ShortcutsReferences 1. Search your computer -> Screenshot -> Lock to Launcher 2. gnome-s…

uniapp API文档地址 以及 HBuilder安装

uniapp API文档地址 以及 HBuilder安装 一、进入 当前网站 uni-app 官网 [uni-app](https://zh.uniapp.dcloud.io/quickstart-hx.html)二、点击截图下载文件 三、 进入 当前网站 (https://www.dcloud.io/hbuilderx.html) 浏览器会识别 也可以自行选择…

寒假学习记录11:grid布局

1. display:grid 2. grid-template-columns: 100px 100px 100px //指定每列的宽度 grid-template-rows: 100px 100px 100px //指定每行的宽度 3. column-gap: 24px //列间距 row-gap: 24px //行间距 gap: 24px //都设置 4.grid-template-areas用法 <!DO…

pythondjangomysql苏州一日游之可视化分析69216-计算机毕业设计项目选题推荐(附源码)

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对旅游服务等问题&#xff0c;对旅游服务进行…

浅析Linux追踪技术之ftrace:Event Tracing

文章目录 概述使用Event Tracing使用set_event接口使用enable接口 Event配置Event formatEvent Filtering过滤规则设置过滤器 Event TriggerTrigger语法 Trace marker相关参考 概述 Event Tracing&#xff08;事件追踪&#xff09;利用在内核代码中加入的各种Tracepoint&#…

2.第一个Electron程序

目录 一、前言二、基本运行结构三、代码详解四、打包 一、前言 原文以及系列文章后续请参考&#xff1a;第一个Electron程序 上一章我们完成了Electron的环境搭建&#xff0c;本章就开始详解如何使用Electron开发一个完整的Electron桌面端程序。 注意开发环境&#xff0c;个…

Ubuntu Desktop 删除文件

Ubuntu Desktop 删除文件 1. right mouse click on the file -> Move to Trash2. right mouse click on the file -> DeleteReferences 1. right mouse click on the file -> Move to Trash ​ 2. right mouse click on the file -> Delete ​​​ References …

【机器学习】数据清洗之处理异常点

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步…

腾讯云4核8G服务器多少钱?646元一年零3个月

腾讯云服务器4核8G配置优惠价格表&#xff0c;轻量应用服务器和CVM云服务器均有活动&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;腾讯云百科txybk.com分…

【教程】C++语言基础学习笔记(九)——指针

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【C语言基础学习】系列文章 第一章 《项目与程序结构》 第二章 《数据类型》 第三章 《运算符》 第四章 《流程控制》 第五章…

js中事件循环的详解

文章目录 一、是什么二、宏任务与微任务微任务宏任务 三、async与awaitasyncawait 四、流程分析 一、是什么 首先&#xff0c;JavaScript是一门单线程的语言&#xff0c;意味着同一时间内只能做一件事&#xff0c;但是这并不意味着单线程就是阻塞&#xff0c;而实现单线程非阻…

爬虫——ajax和selenuim总结

为什么要写这个博客呢&#xff0c;这个代码前面其实都有&#xff0c;就是结束了。明天搞个qq登录&#xff0c;这个就结束了。 当然也会更新小说爬取&#xff0c;和百度翻译&#xff0c;百度小姐姐的爬取&#xff0c;的对比爬取。总结嘛&#xff01;&#xff01;&#xff01;加…