心法利器[101] | 从大模型到大模型系统

news2024/9/26 5:20:42

心法利器

本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。

2022年新一版的文章合集已经发布,累计已经60w字了,获取方式看这里:CS的陋室60w字原创算法经验分享-2022版。(2023在路上了!)

往期回顾

  • 心法利器[96] | 写了个向量检索的baseline

  • 心法利器[97] | 判断问题是否真的需要大模型来解决

  • 心法利器[98] | 除了训练,大模型还有很多重要工作

  • 心法利器[99] | 无监督字面相似度cqr/ctr源码

  • 心法利器[100] | 系列100篇了,写作收获和个人成长

在大模型为主题的这个技术版本,通过一些信息的输入或者是prompt的调整,让模型基本就可以朝着我们预期的结果方向输出了,然而凡事终有上限,大模型显然不能解决所有问题,因此现版本在了解大模型上限的情况下,一个以大模型为中心或者是结合了大模型的系统可能是一个更加合适的选择,我们可以以大模型为起点逐步拆解大模型功能或者是增加更多地辅助模块来配合大模型生成,也可以在原有系统中,加入大模型,使之能在系统中产生新的化学反应,或产生新的功能,或带来新的优化。

考虑到目前很多大模型项目其实都是围绕大模型逐步发展迭代而来,本期我给大家讲一些能让大模型系统效果和体验提升的一些思路方案。

场景划分

在大模型做得多了以后,或多或少都会面临以下几个问题:

  • 有些问题不希望模型回复,或者希望模型用特定的方式回复。

  • 不同的问题,希望模型使用不同的策略来回复。

  • 某些问题,模型回复的不好,我手里有正确答案,希望他能用我这个内容来回复。

  • 需要针对某一种领域进行专项的、有针对性的回复,但在此之前需要把这类型的问题先划分出来。

这里其实都会面临一个很重要的问题,那就是——边界。重述一下问题,在特定情况下,我们如果希望模型按照特定某种特殊的方案策略进行回复,此时我们需要一个模块(注意这里我用的是模块,稍后说),来鉴别在用户说什么内容的情况下触发这类回复策略。在上一个版本,即没有“大模型”有关技术的大环境下,通常是搜索或者是对话系统场景,我们会把这种划分的任务叫做意图识别,而抽象成NLP任务那就是文本分类。

此时,这里引出了第一个大模型系统中,可能需要的利用到的模块,即意图识别模块。

来举个例子。客服场景,用户有一类型高频问题就是售后维修的问题,因为客诉比较严重,所以需要针对这个领域的问题进行针对性的优化,甚至是一些定制型的优化,例如需要增加安抚话术等,因此我们需要增加一个意图识别模块,首先保证这类预期得到优化的query能被识别出来。

识别的方式其实挺多的,需要结合query的主要特点、训练数据、性能要求等原因来进行选择了,这也是为什么我这里严谨的说是模块,因为真不只是模型能够解决所有问题,常见的有这些:

  • 基于规则、关键词、正则表达式的快速划分。

  • fasttext、textcnn、bertforclassification等经典而又常用的分类方法。

  • 基于检索的以搜代分方法(心法利器[26] | 以搜代分:文本多分类新思路)。

  • 大模型通过prompt构造分类器。

拥有划分方法后,我们可以结合划分场景的特点,定制不同的回复策略。

回复策略的制定

对话系统,只要做的足够精细,针对不同场景,就会需要考虑不同的回复策略,这也是为什么上面要聊意图识别的理由,而在划分场景后,就可以开始定制每一种意图的回复策略。我来举一些列子给大家解释一下不同的回复策略,协助大家打开思路吧。

拒绝回复

拒绝回复其实很多场景会应用到,例如在面对用户提问的内容并不是目前我们预期支持的领域(客服场景问天气),或者用户所问出现观点类(如何看待俄乌问题)、黄反类问题(这个就不用我举例了吧)、大模型安全(query中带有诱导性错误)时,再就是知识库为空的情况,我们就需要进行拒绝,并给用户一些回复,让用户不至于那么不舒服。常见的策略一般有这些:

  • 一句写死的回复:“哎呀,这方面的问题我还不太懂,需要学习下”。

  • 用大模型生成,例如借助prompt引导生成一些安抚性的回复,“对不起,你问的[]问题,我好像还不太懂。你可以试试问问别的”。

  • 使用推荐问或者追问的策略。(你是否在找以下几个问题XX;你描述的我好像不太懂,能再补充补充吗)

其实也可以看到,也不见得非得用大模型,有时候写死或者做一些推荐问疑似问(前沿重器[12] | 美团搜索引导技术启示),好像也可以。

拆解用户提问后的回复

用户的提问往往蕴含众多信息,我们可以仔细解析用户提问的内容,然后配以适当的策略,来生成合适的回复,举几个例子:

  • 客服场景,可能有用户的投诉抱怨,我们可以先识别出用户的情绪(情绪识别),然后借助角色假设、语气等指令,给出一个带有安抚性质的回复。

  • 某些特定问题,可能有十分重要的关键词,我们必须重复强调,因此我们可以提前提取关键词,然后告诉大模型,必须提及这些词汇。

  • 为应对不同端的用户需求,可能需要对详细程度进行约束,例如手机端就尽量简单,电脑端可以更丰富。

  • 手机端场景,一个类似“播放音乐”的指令,此时除了要给出生成的文字回复(甚至也可以写死),更重要的是生成一个json的接口以便调起手机端软件并播放对应的音乐。

这里可以看到,一方面,我们需要识别出用户提问中带有的各种信息,另一方面我们可以通过prompt等方式,来控制大模型的生成回复,从而形成了很强的多样性。

多轮

多轮应该是很多对话场景面临的关键难题了,而多轮的根本难题在于,如何把关键信息保留并在合适的时间取出并使用。目前的大家可能用的比较多的是直接拼接历史对话,这点并非不好,凭借大模型的能力确实能做到很高程度的多轮对话,但实际上,我们还是可以用很多思路:

  • 简单的,可能并不需要考虑模型回复的内容,只需要拼接用户query。

  • 单独构造DM模块,结合NER做槽位继承。

  • 参考科研界的一些做法,做更加抽象的矩阵DM,然后配合大模型计算。

可见,从大模型中把DM释放出来,可以定制出适合这个场景的对话管理来,可控性可定制性也会更强。有关多轮,我之前也有文章聊过,虽然感觉深度还不太够,不过参考下应该还是有用的:前沿重器[25] | 聊聊对话系统:多轮对话。

知识依赖

要让大模型解决特定领域的问题,总有一个非常重要的痛点,那就是知识的问题,尽管大模型在通用知识里面已经表现出惊人的能力,但在特定领域上,或者对新的知识,非常容易出问题,目前而言常见的解决方案是两种:

  • 微调,通过领域知识点或者领域文档数据,对大模型进行微调。

  • 外挂知识库,通过检索,获取topN知识点,加入到prompt中,协助模型进行回复生成。

对后者,其实我们已经在无疑是地在对模型的功能进行拆解了,原本预期是大模型是有知识的维护和处理能力的,但实际上我们把知识的维护和处理已经拆解出来了。

进一步,既然拆了出来,那其实就有广阔的调整空间了。因为拆出来的任务,就是一个知识库查询,而有关知识库查询的这块的技术,一方面是对话系统的检索式对话,另一方面是经典的搜索,其实都已经在这块积累了大量的经验,内部可以有提槽、意图、多路召回、精排之类的复杂策略,很早的时候有一篇文章对这块内容做了概述,大家可以参考(R&S[21] | 搜索中涉及的算法问题),目前视角看这个总结的依旧是比较全的。

小结

这篇文章可以说是(心法利器[98] | 除了训练,大模型还有很多重要工作)的后续,再告诉大家可以做很多事之后,告诉了大家怎么做,有哪些可以尝试优化的方法,从而把比较统一的大模型升级为功能更完善也更健壮可控的大模型系统。

另外大家应该也可以看到,整个过程其实都在试图压缩大模型的空间,从大模型中拆出来让其他模块专门做各自最擅长的事,我个人的理解这是一个做应用的重要方向,与其对着大模型经常做训练来应对不同的复杂场景,不如逐步把大模型沉淀成统一、稳定的能力,让他在更多地方用起来。正好也预告下一篇,我会给大家介绍一下我理解的大模型在整个成熟系统中的位置和整体架构情况。

d0356c910177d771b655b0e61dad44a1.png

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

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

相关文章

使用ElementPlus实现内嵌表格和内嵌分页

前言 有时遇到这样的需求,就是在表格里面嵌入一个表格,以及要求带有分页,这样在ElementPlus中很好实现。以下使用Vue2语法实现一个简单例子,毕竟Vue3兼容Vue2语法,若想要Vue3版本例子,简单改改就OK了。 一…

数据结构——图的应用

文章目录 前言一、图的应用1. 最小生成树普里姆(Prim)算法克鲁斯卡尔(Kruskal)算法 2. 最短路径Dijkstra算法求单源最短路径 3. 拓扑结构4. 关键路径 总结 前言 图的应用 1.1 最小生成树 1.2 最短路径 1.3 拓扑结构 1.4 关键路径…

【网络教程】揭秘Windows SSH服务端免密登录:告别繁琐,享受安全连接

文章目录 开启Windows下的SSH服务端图形界面安装手动下载安装Windows如何查看系统用户名Windows如何查看本机IP开启免密登录Window生成秘钥Linux下生成秘钥配置公钥视频讲解开启Windows下的SSH服务端 这篇文章演示的环境是Windows11Windows的SSH服务端默认情况下是没有安装的,…

9.项目细节调整

文章目录 学习资料项目整体细节调整处理首页 学习资料 https://www.bilibili.com/video/BV13g411Y7GS/?p24&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e 项目整体细节调整 处理首页 默认的首页 肯定不能给人看。文件在这个位置。 可以删除…

live555 BasicUsageEnvironment目录解读

文章目录 BasicUsageEnvironmentBasicHashTable.cppBasicTaskScheduler.cppBasicTaskScheduler0.cppBasicUsageEnvironment.cppBasicUsageEnvironment0.cppDelayQueue.cpp后续会进行更新 BasicUsageEnvironment ├── BasicHashTable.cpp ├── BasicTaskScheduler0.cpp ├─…

类加载器 - 双亲委派模型

文章目录 回顾一下类加载过程类加载器类加载器介绍类加载器加载规则类加载器总结自定义类加载器 双亲委派模型双亲委派模型介绍双亲委派模型的执行流程双亲委派模型的好处打破双亲委派模型方法 本文参考: 类加载器详解(重点) | JavaGuide(Ja…

多目标优化算法:基于非支配排序的海象优化算法(NSWOA)MATLAB

一、海象优化算法WOA 海象优化算法(Walrus Optimization Algorithm,WOA)由Trojovsk等人于2023年提出,该算法模拟海象的进食,迁移,逃跑和对抗捕食者的过程,WOA包含探索、迁移和开发三个阶段&…

正则表达式学习和高级用法

以下所有的验证都在 在线验证 1. 起始符 / 正则表达式的起始符2. 限定符 匹配前面的子表达式**1次或多次**。例如,zo 能匹配 "zo" 以及"zoo",但不能匹配 "z"。等价于 {1,}。 ? 匹配前面的子表达式**0次或1次**。例如…

二进制 Deploy Kubernetes v1.23.17 超级详细部署

文章目录 1. 预备条件2. 基础配置2.1 配置root远程登录2.2 配置主机名2.3 安装 ansible2.4 配置互信2.5 配置hosts文件2.6 关闭防firewalld火墙2.7 关闭 selinux2.8 关闭交换分区swap2.9 修改内核参数2.10 安装iptables2.11 开启ipvs2.12 配置limits参数2.13 配置 yum2.14 配置…

函数防抖和节流

函数防抖和节流 经典真题 防抖,节流是什么,如何实现 (字节) 什么是函数防抖和节流 JavaScript 中的函数大多数情况下都是由用户主动调用触发的,除非是函数本身的实现不合理,否则一般不会遇到跟性能相关…

DMA简单总结

文章目录 一、基础概念1.1 DMA---Direct Memory Access 直接存储器访问,目的减少CPU资源占用 二、典型DMA硬件模型2.1 基本硬件特性---通道数、源/目标类型,地址与累加方式,数据位宽,搬移长度,循环模式,中断…

在c#中使用CancellationToken取消任务

目录 🚀介绍: 🐤简单举例 🚀IsCancellationRequested 🚀ThrowIfCancellationRequested 🐤在控制器中使用 🚀通过异步方法的参数使用cancellationToken 🚀api结合ThrowIfCancel…

‘XXX’ is already defined @typescript-eslint/no-redeclare 警告 问题解决

上文ReactTypescript项目环境中搭建并使用redux环境 结束是 其实不算完全写完吧 还会留下一个警告 这个报错 好像是说 这两个值已经定义过了 可能很多人 会觉得小问题 但你会发现 无论你名字怎么改都会一直 带着你新的名字继续报错 我们可以多套一层 export namespace Const…

Java8实战-总结29

Java8实战-总结29 并行数据处理与性能并行流将顺序流转换为并行流测量流性能 并行数据处理与性能 到目前为止,Stream接口最重要的好处是可以对这些集合执行操作流水线,能够自动利用计算机上的多个内核。 例如,在Java 7之前,并行…

Python 异常的概念

视频版教程 Python3零基础7天入门实战视频教程 异常是指程序运行的过程中出现了错误,也叫Bug。 案例一: # 定义人类 class Person:# 属性 姓名name None# 属性 年龄age Noneprint(Person().sex)因为Person类没有sex属性,对象访问sex属性…

Go语言开发环境搭建指南:快速上手构建高效的Go开发环境

Go 官网:https://go.dev/dl/ Go 语言中文网:https://studygolang.com/dl 下载 Go 的语言包 进入官方网站 Go 官网 或 Go 语言中文网: 选择下载对应操作系统的安装包: 等待下载完成: 安装 Go 的语言包 双击运行上…

HuggingFace Transformer

NLP简介 HuggingFace简介 hugging face在NLP领域最出名,其提供的模型大多都是基于Transformer的。为了易用性,Hugging Face还为用户提供了以下几个项目: Transformers(github, 官方文档): Transformers提供了上千个预训练好的模型可以用于不…

GitHub 曝出漏洞,或导致 4000 多个存储库遭受劫持攻击

The Hacker News 网站披露,安全研究员发现 GitHub 中存在一个新安全漏洞,该漏洞可能导致数千个存储库面临劫持攻击的风险。据悉,在 2023 年 3 月 1 日漏洞披露后,微软旗下的代码托管平台已于 2023 年 9 月 1 日解决了安全漏洞问题…

无涯教程-JavaScript - FACT函数

描述 The FACT function returns the factorial of a number. The factorial of a number is equal to 1*2*3*...* number. 语法 FACT (number)争论 Argument描述Required/OptionalNumberThe nonnegative number for which you want the f…

LeetCode 39. Combination Sum【回溯,剪枝】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…