00:00
A2、网关判断一句话该送去哪个模型,要不要拦截,只要几十毫秒。更具体一点,在我们实测的GPU路径上,共享的底座模型跑一次只要4ms出头,而领域判断、越狱检测这些五个不同维度的分类加起来就再多花不到2ms。这背后靠的是同一套架构向量boot lauro, 接下来几分钟把这套逻辑拆给你看。我们从最基础的问题开始啊,AR怎么判断两句话说的是不是一回事呢?你看这3句话。第一句。帮我请假,第二句,我这周身体不太舒服,可能没法正常来上班,麻烦帮我把本周的请假申请提交一下。第三句,帮我写段代码,第一句和第二句更像,还是第一句和第三句更像呢?大部分人会说第一句和第二句更像,尽管第二句比第一句长了七八倍,说的其实是同一件事,第一句和第三句字数差不多,说的却是两码事。机器要复现这个判断,先得把文字变成向量。一句话在机器眼里就是空间里的一个点,一根从原点出发的箭头。
01:13
怎么算像不像呢?直觉是看两点离多远,也就是欧式距离向量的长度差异。但第二句比第一句长了七八倍,单看长度,第一和第二的差值可能比第一和第三还要大。这就是长度这个指标的坑,它很容易被句子的长短持平这些跟语音无关的因素带偏。工程上更常用的是角度。也就是余弦相似度。看两个向量指向的方向是不是一致,第一和第二的方向几乎一致,夹角很小,第一和第三的方向差的很远。方向代表。再说什么是长度代表?我说的有多啰嗦,语义判断呢?该看方向不要看长度。有了角度这个概念,最直接的做法就是给每个类别存一个代表性的向量新请求,往哪个方向进就归哪类。
02:10
向量解锁方案简单又快,但碰到我最近状态不太好,可能没法正常上班了这种话,到底算请假还是情绪倾诉呢?常尾说法很容易在角度上砌墙,边界一凝,判断就错了。这个问题不是我假设出来的,控的AR网关功能上就遇到了这个选择,它的语音路由配置里,距离度量既可以选鱼弦,也可以选欧式,大部分场景确实只看方向就够了,但又例外,比如两句话都在问这个产品能不能退货呢?一句平淡,另一句带着好几个感叹号说自己3天没人搭理,要投诉到底。方向上这两句话几乎一致,都是在问退货,但只看方向会丢掉后一句里面那些明显更强烈的情绪信号。而这种信号往往决定了该不该马上转人工处理。
03:01
这时候,长度里其实还藏着有用的信息呢。到底该用鱼弦还是欧式控,自己也给不出一个放置四海皆准的答案,干脆呢,就把这个选择权交给用户来配置。但说实话,大多数用户也很难判断该选哪一个,这已经不是选对答案能解决的问题了,是这套方案本身的局限。更麻烦的还有一个问题,不管用哪种距离来度量向量,解锁的前提永远是你得先把所有可能出现的类别都预先想好,纯成一堆代表向量。可现实是,总会有请求完全不属于你预测的任何一类,连其墙都算不上,他压根没被考虑到。与其人工画边界,不如让模型自己学出更贴合真实分布的边界。但训练这样的模型,得先搞清楚他该怎么读文字,这就是单向和双向的分页。全是formal天生分两半,编码器银扣的和解码器抵扣的。
04:03
G BT d sick这些大模型只用解码器,工作方式呢,是自回归,也就是只能往前看,预测下一个字时看不到后面还没说的话。这套机制是为生成而设计的,但如果任务不是生成,是理解一整句话,判断是不是技术问题,有没有恶意,那么就只能往前看,反而是一种限制。因为完整的理解一句话需要同时看到前后文。Butt只用编码器靠双向注意力处理任意一个字的时间,能同时看到前后所有上下文。所以语音路由这类判断请求属于哪一类的任务走的是boot这条路线,生成和理解对应两种不同的读法。不过2018年的boot有它的历史局限,这就要说到今天的主角modern BOT, 老版的boot最多处理512个token。放在今天动辄几千字的PRO这种提示词面前,早就不够用了,而且早期的注意力计算效率也低。2024年底开源的modern boot原生支持8192个token,是老boot的16倍。
05:14
它靠的是滑动窗口注意力和全局注意力的交替。大部分层只看附近一小段文字,计算量小,每隔几层呢?安排一层看全部的文字,把长距离的信息重新汇总,这样就保住了效率。但长距离语义关联的能力理论上会比这个层层全局的模型稍微弱一点,是效率和能力的权衡。有了这个双向长沙下文的底座,下一个问题是怎么让他同时具备判断领域越域敏感信息很多类分类能力呢?还不能太占资源,答案就是捞弱。然而猫登豹的学会新任务最直接的办法就是全量微调几亿个参数,全部重新训练一遍。但这样每加一个新的任务分类,就要存一份几百兆的完整模型,同时挂载几个分类头。领域越狱复杂度显存扛不住lar de自适应思路时呢?适配新任务时,权重需要更新的部分没有那么复杂,可以用一个DE1小矩阵近似把原矩阵W冻结不动,旁边加一条小旁路,先用矩阵A把它压缩到一个很小的维度,这个维度叫e rank, 再用矩阵B把它还原回来原来的纹路。
06:32
Modelbt每层隐藏维度是768 rank设成32,直接更新一个768×768的矩阵,要接近60万的参数,走laa旁路呢?768×32+32×768,不到5万个参数,差了十几倍。一个完整的lar分类设备器参数量大概是735万。底座modelb的是3.4亿,适配器只有底座的2%左右,换成成文件呢,大概28兆,28兆意味着可以同时把十几个不同任务的loro适配器常驻在显存里,共用同一次底座的前项计算各自并行跑出结果,不需要来回切换整个模型。
07:12
这也是为什么开场我们说的五个判断维度加起来值多花不到2ms它可以成立的原因。每个劳O适配器只有几十兆,跟共享的那次底座推理相比啊,几乎可以忽略,所以能做到接近免费的叠加。回到最开始那三句话,Laa做的是本质上就是用很少的参座精细调整底座划出来的语义边界,让它更贴近真实场景里人实际会说的话,预设的向量边界总有兜不住的地方。机器要真正读懂一句话,得靠双向注意力,双向理解,要覆盖足够长的上下文,得靠modern board把窗口从512拉到8192,而要让这一个底座同时具备好几种分类能力还不能动,靠的是lo用十几十兆的旁路撬动几亿参数的底座,这条链路就是语翼识别能在几十毫秒内完成分类的底层逻辑训练,这些lor适配器踩过的坑,原文链接放评论区。
08:13
下期见。
我来说两句