【数据架构】将LLM应用于企业数据:概念、关注点和热点
视频号
微信公众号
知识星球
要求GPT-4在押韵的同时证明存在无穷多的素数,它就能实现。但如果问一下你的球队上个季度的表现和计划,结果会惨败。这说明了大型语言模型(“LLM”)的一个根本挑战:它们很好地掌握了一般的公共知识(如素数理论),但完全不知道专有的非公开信息(您的团队上个季度是如何做到的)[1]而且专有信息对绝大多数企业使用工作流至关重要。一个了解公共互联网的模型很可爱,但对大多数组织来说,它的原始形式用处不大。
在过去的一年里,我有幸与许多将LLM应用于企业用例的组织合作。这篇文章详细介绍了任何踏上这段旅程的人都应该知道的关键概念和关注点,以及我认为LLM将如何发展以及对ML产品战略的影响。它面向的是产品经理、设计师、工程师和其他读者,他们对LLM如何“在引擎盖下”工作知之甚少或一无所知,但对学习概念感兴趣,而不涉及技术细节。
四个概念
提示工程、上下文窗口和嵌入
使LLM对专有数据进行推理的最简单方法是在模型的提示中提供专有数据。大多数LLM都会正确回答以下问题:“我们有两个客户,A和B,他们分别花了10万美元和20万美元。谁是我们最大的客户,他们花了多少钱?”我们刚刚完成了一些基本的提示工程,在查询(第二句)前加上上下文(第一句)。
但在现实世界中,我们可能有成千上万或数百万的客户。考虑到上下文中包含的每个单词都需要花钱,我们如何决定哪些信息应该进入上下文?这就是嵌入的用武之地。嵌入是一种将文本转换为数字向量的方法,其中相似的文本生成相似的向量(在N维空间中“紧密相连”的向量)。[2] 我们可能会嵌入网站文本、文档,甚至可能是SharePoint、Google Docs或Notion的整个语料库。然后,对于每个用户提示,我们将其嵌入,并从我们的文本语料库中找到与提示向量最相似的向量。
例如,如果我们在维基百科上嵌入了关于动物的页面,而用户问了一个关于狩猎的问题,我们的搜索会对维基百科上关于狮子、斑马和长颈鹿的文章进行高度排名。这使我们能够识别与提示最相似的文本块,从而最有可能回答它。[3]我们将这些最相似的文字块包括在提示前的上下文中,这样提示就有望包含LLM回答问题所需的所有信息。
微调
嵌入的一个缺点是,对LLM的每次调用都需要在传递提示时传递所有上下文。LLM甚至连最基本的企业特定概念都没有“记忆”。由于大多数基于云的LLM提供商对每个提示令牌收费,这可能会很快变得昂贵。[4]
微调允许LLM理解特定于企业的概念,而无需在每个提示中包含这些概念。我们采用了一个基础模型,该模型已经对数十亿个学习参数中的一般知识进行了编码,并调整这些参数以反映特定的企业知识,同时仍然保留基本的一般知识。[5] 当我们使用新的微调模型生成推论时,我们可以“免费”获得企业知识。
与嵌入/提示工程(底层模型是第三方黑盒)相比,微调更接近于经典的机器学习,ML团队从头开始创建自己的模型。微调需要一个带有标记观测值的训练数据集;微调模型对训练数据的质量和数量高度敏感。我们还需要做出配置决策(时期数量、学习率等),安排长期的培训工作,并跟踪模型版本。一些基础模型提供程序提供了一些抽象掉这种复杂性的API,有些则没有。
虽然微调模型的推断可能更便宜,但昂贵的培训工作可能会超过这一点。[6] 一些基础模型提供商(如OpenAI)只支持对滞后边缘模型进行微调(因此不支持ChatGPT或GPT-4)。
Evals
LLM提出的一个新颖而重大的挑战是测量复杂输出的质量。经典的ML团队已经尝试了真实的方法来测量简单输出的准确性,比如数字预测或分类。但LLM的大多数企业用例都涉及生成数万到数千个单词的响应。复杂到需要十多个单词的概念通常可以用多种方式表达。因此,即使我们有一个经过人工验证的“专家”响应,将模型响应与专家响应进行精确的字符串匹配也是一个过于严格的测试,并且会低估模型响应的质量。
由OpenAI开源的 Evals框架是解决这个问题的一种方法。该框架需要一个标记的测试集(其中提示与“专家”响应相匹配),但它允许在模型和专家响应之间进行广泛类型的比较。例如,是模型生成的答案:专家答案的子集或超集;事实上与专家的答案相当;比专家的答案简洁多少?需要注意的是,Evals使用LLM执行这些检查。如果“checker”LLM中存在缺陷,则eval结果本身可能不准确。
对抗性例子
如果您在生产中使用LLM,您需要确信它能够安全地处理被误导或恶意的用户输入。对于大多数企业来说,出发点是确保该模型不会传播虚假信息。这意味着一个系统知道自己的局限性,知道什么时候该说“我不知道”。这里有很多战术方法。它可以通过即时工程来完成,并使用即时语言,如“如果无法用上面提供的上下文回答问题,请回答‘我不知道’”)。可以通过提供范围外的培训示例进行微调,专家的回答是“我不知道”。
企业还需要防范恶意用户输入,例如即时黑客攻击。限制系统可接受的输入和输出的格式和长度可以是一个简单有效的开始。如果你只为内部用户服务,那么预防措施是个好主意,如果你为外部用户服务,预防措施也是必不可少的。
三个关注点
偏见永久化
最受欢迎的LLM(OpenAI/GPT-4、Google/Bard)的开发人员已经努力将他们的模型与人类偏好相一致,并部署了复杂的调节层。如果你让GPT-4或巴德给你讲一个种族主义或厌女的笑话,他们会礼貌地拒绝。[7]
这是个好消息。坏消息是,这种针对社会偏见的温和并不一定能防止制度偏见。想象一下,我们的客户支持团队有对特定类型客户无礼的历史。如果历史上的客户支持对话被天真地用来构建一个新的人工智能系统(例如,通过微调),该系统很可能会复制这种偏见。
如果你正在使用过去的数据来训练人工智能模型(无论是经典模型还是生成模型),请仔细检查哪些过去的情况你想延续到未来,哪些不想。有时,在不直接使用过去的数据的情况下,设置原则并根据这些原则工作更容易(例如,通过即时工程)。
模型锁定
除非你一直生活在岩石下,否则你知道生成人工智能模型的发展速度非常快。给定一个企业用例,目前最好的LLM可能不是六个月内的最佳解决方案,几乎可以肯定也不会是六年内的最佳方案。聪明的ML团队知道他们在某个时刻需要切换模型。
但是还有另外两个主要的原因来构建简单的LLM“交换”。首先,许多基础模型提供商一直在努力支持呈指数级增长的用户量,导致服务中断和降级。在系统中构建后备基础模型是个好主意。其次,在系统中测试多个基础模型(“赛马”)以了解哪一个表现最好是非常有用的。根据上面关于Evals的部分,通常很难通过分析来衡量模型质量,所以有时你只想运行两个模型,并对响应进行定性比较。
数据泄露
阅读您正在考虑使用的任何基础模型的条款和条件。如果模型提供者有权在未来的模型培训中使用用户输入,那就令人担忧了。LLM如此之大,以至于特定的用户查询/响应可能会直接编码在未来的模型版本中,然后该版本的任何用户都可以访问。想象一下,您所在组织的一位用户询问“我如何清理执行XYZ的代码?[此处为您的专有机密代码]”。如果模型提供商随后使用此查询来重新培训他们的LLM,则LLM的新版本可能会了解到您的专有代码是解决用例XYZ的好方法。如果竞争对手询问如何执行XYZ,LLM可能会“泄露”您的源代码或类似内容。
OpenAI现在允许用户选择不使用他们的数据来训练模型,这是一个很好的先例,但并不是每个模型提供商都效仿了他们。一些组织也在探索在自己的虚拟私有云中运行LLM;这是人们对开源LLM感兴趣的一个关键原因。
两个热门话题
快速工程将主导微调
当我第一次开始将LLM应用于企业时,我对微调比对即时工程更感兴趣。微调感觉它遵守了我习惯的经典ML系统的原则:争论一些数据,生成训练/测试数据集,开始训练工作,等待一段时间,根据一些指标评估结果。
但我逐渐相信,对于大多数企业用例来说,即时工程(使用嵌入)是一种更好的方法。首先,即时工程的迭代周期远比微调快,因为没有模型训练,这可能需要数小时或数天的时间。更改提示和生成新的响应可以在几分钟内完成。相反,就模型训练而言,微调是一个不可逆转的过程;如果您使用了不正确的训练数据或出现了更好的基础模型,则需要重新启动微调工作。其次,即时工程所需的ML概念知识要少得多,如神经网络超参数优化、训练作业编排或数据争论。微调通常需要经验丰富的ML工程师,而快速工程通常可以由没有ML经验的软件工程师完成。第三,即时工程更适用于快速增长的模型链接策略,在该策略中,复杂的请求被分解为更小的组成请求,每个请求都可以分配给不同的LLM。有时,最好的“组成模型”是经过微调的模型。[8] 但企业的大部分增值工作是(i)弄清楚如何分解他们的问题,(ii)为每个组成部分编写提示,以及(iii)为每个部分确定最佳的现成模型;这不在于创建自己的微调模型。
快速工程的优势可能会随着时间的推移而扩大。如今,提示工程需要长而昂贵的提示(因为每个提示中都必须包含上下文)。但我敢打赌,随着模型提供商空间变得更有竞争力,提供商想出了如何更便宜地培训LLM,每个代币的成本会迅速下降。今天,提示工程也受到最大提示大小的限制,但是,OpenAI已经为GPT-4的每个提示接受32K令牌(约40页平均英文文本),Anthropic的Claude接受100K令牌(大约15页)。我敢打赌,在不久的将来会出现更大的上下文窗口。
数据不再是曾经的护城河
随着LLM越来越善于产生人类可解释的推理,考虑人类如何使用数据进行推理以及这对LLM意味着什么是有用的。[9] 人类实际上并不使用太多数据!大多数时候,我们进行“零镜头学习”,这只是意味着我们在回答问题时不附带一组示例问答对。提问者只是提供了问题,我们根据逻辑、原则、启发法、偏见等进行回答。
这与几年前的LLM不同,后者只擅长少数镜头学习,在那里你需要在提示中包括一些示例问答对。它与经典ML非常不同,在经典ML中,模型需要在数百、数千或数百万个问答对上进行训练。
我坚信,LLM用例中越来越多的主导份额将是“零样本”。LLM将能够在没有任何用户提供的示例的情况下回答大多数问题。他们需要以指令、策略、假设等形式进行及时的工程设计。例如,这篇文章使用GPT-4来审查代码中的安全漏洞;该方法不需要关于易受攻击代码的过去实例的数据。拥有明确的指示、政策和假设将变得越来越重要,但拥有大量高质量、有标签的专有数据将变得不那么重要。
如果您正在积极地将LLM应用于您的企业数据,我很想听听您发现哪些有效,哪些无效。请留言评论!
脚注
- [1] 直到最近,LLM还不知道最近的公共知识——例如,GPT-4是根据截至2021年9月收集的信息进行培训的。然而,GPT-4和Bard的消费者界面现在能够查询开放的互联网并收集有关最近事件的信息。因此,最近性作为LLM的知识限制正在迅速消失。
- [2] 嵌入可以处理所有类型的数据结构,而不仅仅是文本。
- [3] 整个嵌入工作流发生在调用LLM之前。例如,OpenAI建议使用其ada-002模型进行嵌入,该模型比任何领先的GPT模型都更便宜、更快。
- [4] 记号是单词或词性。下面很好地解释了为什么语言模型使用标记而不是单词。
- [5] 学习到的参数数量可能在数百万到数万亿之间。如今,最广泛使用的有限责任公司拥有数十亿美元。
- [6] 作弊的推论并不是必然的;对于具有8K上下文窗口的GPT-4,OpenAI每1k代币收取0.03–0.06美元(分别取决于代币是输入还是输出)。Davinci(一种滞后模型)的微调版本每1k代币收费0.12美元。
- [7] 当然,这些都是OpenAI和谷歌雇佣的人。由于许多人不同意这些组织的价值观,他们不同意温和政策。
- [8] 例如,GOAT是针对算术进行微调的开源模型LLaMA的一个版本。它在许多算术基准测试上都优于GPT-4。大多数企业的工作流程都需要算术运算;在链式方法下,工作流中涉及算术的部分将被识别并路由到GOAT。对于这样一家企业来说,大力投资于良好的路由和与GOAT的集成是有道理的,但在我看来,不要微调他们自己的算术LLM。
- [9] 关于今天的LLM是否真的能推理,以及实际推理的含义(它需要意识吗?自我意识吗?代理;这篇论文有许多很好的例子。
- 78 次浏览