深入浅出:多功能 Copilot 智能助手如何借助 LLM 实现精准意图识别

阅读原文

1. Copilot中的意图识别

如果要搭建一个 Copilot 智能助手,比如支持 知识问答数据分析智能托管AIGC 等众多场景或能力,那么最核心的就是基于LLM进行意图识别分发能力,意图识别的准确率直接决定了 Copilot 智能助手的能力上限。

针对丰富且复杂的 query,需要构建足够强的意图识别模型来准确理解 query 背后的意图和深层次的需求,并将其分发至相应的服务模块对 query 进行承接。对此,我们可以通过高质量的数据预处理与增强技术获得大批高质量数据,能够帮助模型学习丰富的语义特征,使其学会识别意图的语义边界,提升意图识别的准确性。

2. 垂域意图识别的挑战

领域封闭性:Copilot智能助手一般都是在特定的业务领域中进行搭建,比如“商家智能助手”,垂域意图范围集中且高度专业化,通用语义模型的泛化能力难以完全满足实际需求,有时意图数量高达几百个且每个都与业务属性密切相关,需要更深的行业语义理解。

语义边界模糊:多种意图之间具有高度相关性(或相似性),意图的语义边界不够清晰。

3. 数据驱动方法论

可以回顾一下,在日常的算法工作中,经常会遇到两类需求:

  1. 规则化:要求模型必须做什么,必须不能做什么。针对这种需求,简单且有效的方法是将规则写入 prompt,让模型遵循硬规则的指令,或者调用函数工具,处理成符合硬规则的结果。
  2. 表现力:要求模型提升某种表现力,但这种表现力较为复杂,难以被简单的规则所描述。例如意图识别就是一种表现力,哪些query应该被分配到哪些意图是难以被简单的硬规则所描述的。而实践证明针对这种表现力的需求,最佳实践是数据驱动

数据驱动实际上是一种思维方式,它告诉我们大部分问题无法通过类似if-else的方法映射地去解决,而是需要 Case-Based Learning,让模型学习通过大量高质量样本学习到能力。这也是大模型和 ImageNet 共通的构建思路。

2006 年,计算机视觉研究仍然是一个缺乏资金,且很少收到外界关注的学科。许多研究人员专注于构建更好的算法。他们坚信,算法是计算机视觉的中心,如果把机器智能与生物智能做类比,那么算法就相当于机器的突触,或者说是大脑中错综复杂的神经回路。有什么比让这些回路变得更好、更快、更强大还要重要的呢?
但李飞飞并不这么认为。彼时,她刚刚获得加州理工大学的博士学位,在伊利诺伊大学厄巴纳-香槟分校担任助理教授的职位。在攻读博士期间,李飞飞意识到了这种研究思路的局限性:如果训练算法的数据不能很好地反映现实世界,那么即使是最好的算法也无法很好地完成工作。
李飞飞的想法是:构建一个能够完全反映真实世界的数据集。

因此,做好意图识别的第一步就是构建一个能够尽可能反映真实世界的意图语义的数据集,特别是各个意图语义的边界,来让模型准确区分意图。此外,这个数据集还需要支持快速的意图迭代节奏,能够保持意图准确的情况下,根据意图迭代点及时变化意图分布,刻画新的意图边界。

3.1 数据增强

通用LLM说在垂域的意图识别数据上的泛化性并不强,本质上是原因是样本不具有多样性,无法刻画意图的语义边界。

为了让模型掌握分类的语义边界,需要一批处于语义边界的 hard sample,即困难样本加入训练集。因此,可以从原有的少量样本(实际业务场景中通过人工标注的几百到上千条)出发,自动扩展出困难样本,并且保证这种自动扩展是低成本且鲁棒的(不会出现意图标签的变化),也就是数据增强。

方法描述增强比例
随机重复分为词级的随机重复和字符级的随机重复。对于词级的随机重复,首先进行分词,随后随机挑选一个词进行重复;对于字符级的随机重复,随机挑选三个字符进行重复。1:2
错别字替换采用《A Hybrid Approach to Automatic Corpus Generation for Chinese Spelling Check》的错别字字典,随机挑选三个字符进行错别字替换。1:1
随机位置替换随机选择邻近的两个字,对这两个字的顺序进行变换1:1
同义改写调用 GPT-4,编写 Prompt 提示大模型同义改写1:3
同义扩写调用 GPT-4,编写 Prompt 提示大模型同义扩写1:3
多句融合随机选择两个意图不同的query,调用 GPT-4,编写Prompt 提示大模型将两个标问改写为一个query,意图标签是2个意图2:1

需要注意的是,为了保证增强样本的意图和原样本一致,可以人工总结一些关键业务实体列表(比如“服务竞争力”、“体验分”等),并在增强过程中避免对这些业务实体进行改变,从而保证关键语义没有被改变。然后经人工筛查验证,保证增强样本的意图一致率。

另外,为了保证一个 query 对应唯一的意图,并且避免模型对单个重复 query 的过拟合,需要对所有样本进行去重,保证每个 query 仅出现1次。

经过上述数据增强方法,样本数可从 几百上千扩展至几万,以下是扩展数据前后的训练Loss变化情况:

样本训练 Loss验证 Loss
增强样本在这里插入图片描述在这里插入图片描述
未增强样本在这里插入图片描述在这里插入图片描述

可以发现:

  1. 未进行数据增强时,训练 loss 在前期快速收敛,然而,由于训练样本少,模型无法在验证集上有好的泛化效果,验证 loss 维持在一个较高的水平(0.057 以上)。而到了训练后期,模型呈现出过拟合的趋势,虽然训练 loss 趋近于 0,但验证 loss 逐步上升至 0.06 左右。
  2. 进行数据增强后,训练 loss 呈现出随着 epoch 阶梯式下降的趋势,这是因为训练集具备多样性,各个样本语义差异大,因此模型仅在“看”过整个训练集后才能对已“看”过的样本做出较好的推理。此外,由于训练集蕴含的规律模式较为丰富,模型在验证集上有较好的泛化性,最佳验证 loss 在 0.036 左右。

上述的结论在全链路评测中也得到了验证,经过数据增强后,模型在各个数据集上的意图准确率都得到了大幅提高。

3.2 负样本构造

在上述增强方法中,我们关注的是意图之间的语义边界,而忽略了 Copilot 的意图识别实际上是封闭域的,应当将意图的外部边界也纳入建模范围内,否则会导致过拟合现象。例如,在对数据集进行 badcase 分析时,你会发现在数据增强后,模型对于特定意图存在过拟合现象。这是因为某类意图的样本占比非常高(比如20%甚至更多),导致当输入一些简短 query 时(意图不明确时),模型会倾向于输出占比高的(20%)样本的意图。针对上述问题,可以专门构造一个“其他”意图,用来承接除业务意图之范围外的开放域 query。

在这里插入图片描述

主要构造方法包括:

  1. 闲聊语料:调用 GPT-4,套取非业务意图的闲聊query,例如:你今天过得怎么样?
  2. 模糊短语:真实的用户query一般都很简短且部分query意图非常模糊,因此,为了针对性优化这些简短模糊的query,可以收集一些高频且表达模糊的短语,具体操作为
    a. 采用 n-grams 进行分词得到短语,其中 n 取 1、2、3
    b. 统计短语的出现频次比例和对应的意图个数
    c. 筛选频次比例 >= 0.001(高频) 且 意图个数 >= 40(意图模糊)的短语作为样本,标注意图为“其他”

经过实践证明,通过上述的负样本优化,可以进一步地提高意图准确率。

3.3 标注提效

为了积累更多真实的样本,可以抽取线上真实的用户query进行批量的标注,主要方法是可以先通过 GPT-4 或者其它开源LLM等进行批量的标注,然后再对部分数据进行人工校验。

在这里插入图片描述

  1. 调用 GPT-4 进行意图标注,并挨个进行人工校验
  2. 调用 GPT-4 和其它多个开源LLM进行意图标注,通过投票方式将多个模型标注一致的样本直接进入样本库,并对模型标注不一致的样本(困难样本)进行人工校验。这个方案本质上和集成学习(Ensemble Learning)的原理差不多。

在标注的过程中,应该更加关注那些容易混淆的困难样本,因为这些困难样本就是在意图语义空间中处于边界的样本,对于意图准确率的提升至关重要,可以通过一种智能筛选的方法以快速筛选困难样本:可以统计各个 query 的语义距离,如果语义距离小于一个阈值(比较相似),但标注的意图不同,则可以认为这两个样本是难以区分的,加入到困难样本池中,最后进行人工重标注。

语义相似度的计算方法很多,例如编辑距离、LLM Embedding余弦距离、BGE余弦距离等,考虑到速度和便利性的话,建议使用编辑距离来计算语义相似度。

4. 训练优化

4.1 训练方式

为了找出高效的训练方法,使用不同的训练方式、不同的批大小、不同的学习率进行了大量实验,最终可以找到合适的训练方式和训练参数设置。

训练方式批大小学习率耗时验证 loss
LoRA321e-41 h0.0066
325e-41 h0.0044
641e-51 h0.014
642e-51 h0.0087
645e-51 h0.0084
641e-41 h0.0076
645e-41 h0.0056
641e-31 h0.0044
1285e-41 h0.0062
1281e-31 h0.0052
SFT(全量)45e-75 h0.0047
81e-73 h0.0056
85e-73 h0.0058
81e-63 h0.0044
82e-63 h0.0044
85e-63 h0.0042
81e-53 h0.0050
165e-72 h 20 mins0.0052
165e-62 h 20 mins0.0029
161e-52 h 20 mins0.0037
325e-72 h 15 mins0.0044
325e-62 h 15 mins0.0034
321e-52 h 15 mins0.0034
645e-72 h 4 mins0.0041
645e-62 h 4 mins0.0045
641e-52 h 4 mins0.0040
1285e-72 h 4 mins0.0042
  1. 相比于 LoRA,SFT(全量) 消耗的算力和时间较多,但是 SFT(全量) 在验证集上的 loss 更低,说明训练效果更好一些。这是因为意图识别所需的样本量较大(~10万),而 LoRA 只引入了低秩矩阵来调整模型,因此其对模型的修改是有限的,相比于全量微调在样本量较大的情况下会损失一些泛化能力。
  2. 当批大小提高时,整体的训练时间也在逐步减少,但是存在效益低减的情况。这是因为批大小的增大虽然能够减少整体所需算力,但是最终会受到 IO 和并行的影响,导致整体 GPU 利用率较低。
  3. 在学习率的选取上,大的学习率可能会导致 loss 不稳定,而小学习率可能会导致欠拟合。通过经验和实验确定,全参微调的学习率应设定在 5e-6 至 1e-5 之间,而LoRA的学习率应设定在 5e-4 左右。

4.2 基座选择

为了验证不同的大模型基座对下游意图识别任务的影响,可以对不同尺寸的大模型基座进行实验

模型验证 Loss
Qwen2.5-7B-Instruct在这里插入图片描述
Qwen2.5-14B-Instruct在这里插入图片描述

可以看到,随着模型尺寸的增大,eval loss 略微下降,这说明模型的泛化能力有略微的提升。从评测指标上来看,随着模型尺寸的增大,准确率略有上升,但上升幅度不大。这种趋势符合《Scaling Laws for Neural Language Models》中描述的缩放定律。

此外,还可以对比相同尺寸的大模型基座对下游意图识别任务的影响

模型验证 Loss
Qwen2.5-7B-Instruct在这里插入图片描述
Qwen2.5-7B在这里插入图片描述

可以发现,相同尺寸的大模型在微调后的表现几乎一致,这说明意图识别仅需要大模型预训练所带来的语义理解能力,而不需要指令微调带来的指令遵循能力。这和意图识别本身的任务特点有关(重点在于语义的理解,而非复杂指令的遵循)。

阅读原文

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

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

相关文章

Jo-im开发:用于WebRTC的ICE中继服务器Coturn搭建

前言 本人计划开发一套具备文本、语音、视频通话功能的IM demo,同时具备多人在线会议功能,按习惯大概会开源版定义名称为Duihao jo-im,本案主要用于实现语音视频通话的基础组件支撑。因为我们选择基于WebRTC实现IM中语音、视频通话&#xff…

【CVE-2024-53375】TP-Link Archer系列路由器认证操作系统命令注入(内附远离和代码利用)

CVE-2024-53375 TP-Link Archer系列路由器认证操作系统命令注入 受影响的设备 使用 HomeShield 功能的 TP-Link 设备容易受到此漏洞的影响。这包括 TP-Link Archer 系列的多款路由器。 经过测试 Archer AXE75(EU)_V1_1.2.2 Build 20240827(发布日期 2024 年 11 月 4 日)…

程控电阻箱应用中需要注意哪些安全事项?

程控电阻箱是一种用于精确控制电路中电流和电压的电子元件,广泛应用于电子实验、测试设备以及精密测量仪器中。在应用程控电阻箱时,为确保安全和设备的正常运行,需要注意以下几个安全事项: 1. 正确连接:确保电阻箱与电…

Promise链式调用

Promise链式调用 上一篇我们实现了通过promise的方式实现获取国家基本信息,本次我们来使用promise链式调用来实现邻国的展现 首先,我们从第一个国家中获取到邻国的国家代码名称 const neighbour data[0].borders[0];然后我们通过fetch来获取邻国信息&a…

Elasticsearch相关知识@1

目录标题 Lucene1. **什么是 Lucene?**2. **Lucene 在 Elasticsearch 中的作用**3. **Lucene 的核心功能**(1) **倒排索引**(2) **分词**(3) **查询解析**(4) **相关性评分** 4. **为什么 Elasticsearch 使用 Lucene?**5. **Lucene 和 Elasticsearch 的区别**6. **总结** 分片…

UE5 渲染管线 学习笔记

兰伯特 SSS为散射的意思 带Bias的可以根据距离自动切换mip的卷积值 而带Level的值mipmaps的定值 #define A8_SAMPLE_MASK .a 这样应该就很好理解了 这个只采样a通道 带Level的参考上面的 朝左上和右下进行模糊 带Bias参考上面

canvas绘制仪表盘刻度盘

canvas画布可以实现在网页上绘制图形的方法,比如图表、图片处理、动画、游戏等。今天我们在vue模板下用canvas实现仪表盘的绘制。 对canvas不熟悉的同学可以先了解下canvas的API文档:canvas API中文网 - Canvas API中文文档首页地图 一、创建模板&#…

Spring Boot 中实现自定义注解记录接口日志功能

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

【超详细实操内容】django的身份验证系统之限制用户访问的三种方式

目录 1、使用request.user.is_authenticated属性 2、装饰器login_required 3、LoginRequiredMixin类 通常情况下,网站都会对用户限制访问,例如,未登录的用户不可访问用户中心页面。Django框架中使用request.user.isauthenticated属性、装饰器loginrequired和LoginRequire…

scss配置全局变量报错[sass] Can‘t find stylesheet to import.

路径没有错误,使用别名即可 后又提示Deprecation Warning: Sass import rules are deprecated and will be removed in Dart Sass 3.0.0. 将import改为use 使用时在$前添加全局变量所在文件,即variable.

基于Qlearning强化学习的机器人路线规划matlab仿真

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 训练过程 测试结果 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论…

9 RCC使用HSE、HSI配置时钟

一、时钟树 RCC:reset clock control,复位和时钟控制器。HSE是外部的高速时钟信号,可以由有源晶振或者无源晶振提供。如果使用HSE或者HSE经过PLL倍频之后的时钟作为系统时钟SYSCLK,当HSE故障时候,不仅HSE会被关闭,PLL…

认识数据结构之——排序

一、 插入排序: 直接插入排序(以排升序为例): 排序思想: 单趟:记录某个位置的值,一个一个和前面的值比较,碰到更大的就往后覆盖,碰到更小的或者相等的就结束,最后将记录的值插入到…

uniapp 微信小程序 功能入口

单行单独展示 效果图 html <view class"shopchoose flex jsb ac" click"routerTo(要跳转的页面)"><view class"flex ac"><image src"/static/dyd.png" mode"aspectFit" class"shopchooseimg"&g…

苍穹外卖-day05redis 缓存的学习

苍穹外卖-day05 课程内容 Redis入门Redis数据类型Redis常用命令在Java中操作Redis店铺营业状态设置 学习目标 了解Redis的作用和安装过程 掌握Redis常用的数据类型 掌握Redis常用命令的使用 能够使用Spring Data Redis相关API操作Redis 能够开发店铺营业状态功能代码 功能实…

Linux之系统管理

一、相关命令 筛选 grep&#xff0c;可以用来进行筛选&#xff0c;例如对目录筛选课写成 # 过滤出带serv的 ls /usr/sbin | grep serv2. 对服务的操作 2.1 centos6版本 service 服务名 start|stop|restart|status # start&#xff1a;开启 # stop&#xff1a;停止 # restart…

什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap

在刚刚过去的 FlutterInProduction 活动里&#xff0c;Flutter 官方除了介绍「历史进程」和「用户案例」之外&#xff0c;也着重提及了未来相关的 roadmap &#xff0c;其中就有 3.27 里的 Swift Package Manager 、 Widget 实时预览 和 Dart 与 native 平台原生语言直接互操作…

Unity录屏插件-使用Recorder录制视频

目录 1.Recorder的下载 2.Recorder面板 2.1常规录制属性 2.2录制器配置 2.2.1添加录制器 2.2.2配置Input属性 2.2.3配置 Output Format 属性 2.2.4配置 Output File 属性 3.Recorder的使用 3.1录制Game View视频 3.1.1Recorder配置与场景搭建 3.1.2开始录制 3.1.3…

Android Vendor Overlay机制

背景介绍&#xff1a; 看Android 15版本更新时&#xff0c;"Android 15 deprecates vendor overlay"。 猜想这个vendor overlay是之前用过的settings overlay&#xff0c; 不过具体是怎么回事呢&#xff1f; 目录 Vendor Overlay介绍 Vendor Overlay工作原理 Ven…

Python 绘图魔法:用turtle库开启你的编程艺术之旅

&#x1f3e0;大家好&#xff0c;我是Yui_&#xff0c;目标成为全栈工程师~&#x1f4ac; &#x1f351;如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f680;如有不懂&#xff0c;可以随时向我提问&#…