当前位置: 首页 > news >正文

部分意图分类【LLM+RAG】

在生成人工智能领域工作最有价值的事情之一就是发现新兴技术如何融入新的解决方案。 举个例子:在为北美顶级金融服务公司之一设计对话式人工智能助手时,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

相关文章:

部分意图分类【LLM+RAG】

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

1277. 统计全为 1 的正方形子矩阵

1277. 统计全为 1 的正方形子矩阵 题目链接&#xff1a;1277. 统计全为 1 的正方形子矩阵 代码如下&#xff1a; class Solution { public:int countSquares(vector<vector<int>>& matrix) {if(matrix.size()0||matrix[0].size()0) return 0;//dp[i][j]代表…...

Python 3 时间序列可视化指南

简介 时间序列分析属于统计学的一个分支&#xff0c;涉及对有序的、通常是时间性的数据进行研究。当适当应用时&#xff0c;时间序列分析可以揭示意想不到的趋势&#xff0c;提取有用的统计数据&#xff0c;甚至预测未来的趋势。因此&#xff0c;它被应用于许多领域&#xff0…...

[算法前沿]--059-大语言模型Fine-tuning踩坑经验之谈

前言 由于 ChatGPT 和 GPT4 兴起,如何让人人都用上这种大模型,是目前 AI 领域最活跃的事情。当下开源的 LLM(Large language model)非常多,可谓是百模大战。面对诸多开源本地模型,根据自己的需求,选择适合自己的基座模型和参数量很重要。选择完后需要对训练数据进行预处…...

【Docker】01 Docker安装与配置

文章目录 一、Docker二、离线安装Docker三、联网安装Docker3.1 下载YUM软件库文件3.2 安装epel-release3.3 安装yum-utils3.4 设置镜像仓库3.5 查看docker-ce所有版本3.6 安装Docker3.7 启动Docker3.8 查看Docker信息3.9 启动第一个容器 四、一些配置4.1 登录DockerHub4.2 镜像…...

Unity3d Shader篇(六)— BlinnPhong高光反射着色器

文章目录 前言一、BlinnPhong高光反射着色器是什么&#xff1f;1. BlinnPhong高光反射着色器的工作原理2. BlinnPhong高光反射着色器的优缺点优点缺点 3. 公式 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数 三…...

Go-zero微服务个人探究之路(十二)定时任务的选择调研

前言 很多时候后台需要做定时任务的需求&#xff0c;笔者的项目采用go-zero框架微服务框架&#xff0c;需要做定时任务&#xff0c;于是做了如下方法调研&#xff0c;共有大概三种主要选择 方案 难度总体由容易到复杂 go的timer库 通过Go的标准库time中的Ticker和Tick功能…...

Java中,List、Map和Set的区别是什么?

在Java中&#xff0c;List、Map和Set是三种常用的集合类型&#xff0c;它们之间的主要区别如下&#xff1a; 1、List List是有序集合&#xff0c;它可以包含重复元素。 List中的元素是按照插入顺序排列的&#xff0c;可以通过索引访问每个元素。 Java中常见的List实现类有A…...

Google刚刚推出了图神经网络Tensorflow-GNN

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

链表基础知识汇总

链表 链表是一种基本的数据结构&#xff0c;是由一系列节点组成的集合。每个节点包含两个部分&#xff1a;值和指向下一个节点的指针。链表中的节点可以动态地添加、删除&#xff0c;其大小可以根据需要进行扩展或缩小。 链表通常用于处理不固定长度的数据结构&#xff0c;具有…...

Educational Codeforces Round 2(远古edu计划)

A. 恶心模拟。。 模拟一下分类即可 数字类&#xff0c;数字0&#xff0c;或者都是数字 字母类&#xff0c;字母空的也是字母&#xff0c;有字母就是字母 #include<bits/stdc.h> #define INF 1e9 using namespace std; typedef long long ll; const int N2e59; strin…...

【Tauri】(1):使用Tauri1.5版本,进行桌面应用开发,在windows,linux进行桌面GUI应用程序开发,可以打包成功,使用 vite 最方便

1&#xff0c;视频地址&#xff1a; https://www.bilibili.com/video/BV1Pz421d7s4/ 【Tauri】&#xff08;1&#xff09;&#xff1a;使用Tauri1.5版本&#xff0c;进行桌面应用开发&#xff0c;在windows&#xff0c;linux进行桌面GUI应用程序开发&#xff0c;可以打包成功&…...

「Linux」软件安装

MySQL5.7在CentOS安装 安装 配置yum仓库 更新密钥&#xff1a;rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022安装MySQL yum库&#xff1a;rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm使用yum安装MySQL&#xff1a;yum -y in…...

Ubuntu Desktop - Terminal 输出全部选中 + 复制

Ubuntu Desktop - Terminal 输出全部选中 复制 1. Terminal2. Terminal 最大化3. Edit -> Select All4. Copy & PasteReferences 1. Terminal 2. Terminal 最大化 3. Edit -> Select All 4. Copy & Paste Edit -> Copy or Shift Ctrl C Edit -> Paste…...

Java 三大并大特性-可见性介绍(结合代码、分析源码)

目录 ​编辑 一、可见性概念 1.1 概念 二、可见性问题由来 2.1 由来分析 三、可见性代码例子 3.1 代码 3.2 执行结果 四、Java 中保证可见性的手段 4.1 volatile 4.1.1 优化代码 4.1.2 测试结果 4.1.3 volatile原理分析 4.1.3.1 查看字节码 4.1.3.2 hotspot 层面…...

【漏洞复现】狮子鱼CMS某SQL注入漏洞01

Nx01 产品简介 狮子鱼CMS&#xff08;Content Management System&#xff09;是一种网站管理系统&#xff0c;它旨在帮助用户更轻松地创建和管理网站。该系统拥有用户友好的界面和丰富的功能&#xff0c;包括页面管理、博客、新闻、产品展示等。通过简单直观的管理界面&#xf…...

《Java 简易速速上手小册》第6章:Java 并发编程(2024 最新版)

文章目录 6.1 线程的创建和管理 - 召唤你的士兵6.1.1 基础知识6.1.2 重点案例&#xff1a;实现一个简单的计数器6.1.3 拓展案例 1&#xff1a;定时器线程6.1.4 拓展案例 2&#xff1a;使用 Executor 框架管理线程 6.2 同步机制 - 维持军队的秩序6.2.1 基础知识6.2.2 重点案例&a…...

C++初阶:容器(Containers)list常用接口详解

介绍完了vector类的相关内容后&#xff0c;接下来进入新的篇章&#xff0c;容器list介绍&#xff1a; 文章目录 1.list的初步介绍2.list的定义&#xff08;constructor&#xff09;3.list迭代器&#xff08; iterator &#xff09;4.string的三种遍历4.1迭代器4.2范围for循环 5…...

HARRYPOTTER: FAWKES

攻击机 192.168.223.128 目标机192.168.223.143 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.143 开启了21 22 80 2222 9898 五个端口&#xff0c;其中21端口可以匿名FTP登录&#xff0c;好像有点说法,百度搜索一下发现可以用anonymous登录…...

嵌入式Qt 第一个Qt项目

一.创建Qt项目 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框&#xff0c;选择Qt Widgets Application 选择【Choose】按钮&#xff0c;弹出如下对话框 设置项目名称和路径&#xff0c;按照向导进行下一步 选…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...