2022 年秋季,我正在做一个很酷的项目。是的,你猜对了——使用公司特定的数据对预先训练的 LLM(Bert)进行微调。
然而,很快 ChatGPT 就发布了,并席卷了全世界。既然已经有一门非常强大的 LLM 了,我再去微调它又有什么意义呢?
我一直是 Bert 的忠实粉丝,所以当 ChatGPT 发布时,我也陷入了这种热潮中。我的意思是,谁不会呢?人工智能的前景就像一个闪亮的新玩具,我迫不及待地想玩它。在本文中,我想分享我作为一名(NLP)数据科学家的旅程,他渴望通过 GenAI 产生影响。
2023 年初,当大老板想用这项新技术做点什么时,我开始参与 GenAI 项目。我意识到我是多么幸运,并不是每个高管都愿意探索 GenAI 的前沿。很快,我们就加入了 AzureOpenAI 的用户名单,派对正式开始了 💃。
制作炫酷的演示很容易
使用 OpenAI 模型的方法有 14 亿种,但我需要让它符合公司的技术堆栈和安全策略。
对于一个项目,我必须为 AI 应用程序开发前端解决方案。一周内,我需要学习 10 亿件事情。我必须在 Azure 上部署一个模型端点,以便将其用于我的应用程序。在前端方面,我学会了使用 Streamlit 构建应用程序。这相对容易。仅用一天时间,我就可以在本地启动并运行一个应用程序。
现在应用程序已经构建完成,是时候向世界展示它了。
说实话,这并不容易。我需要确保应用程序遵循公司的安全策略。我们没有部署应用程序的标准工作流程,所以我必须自己弄清楚很多事情。我需要学习如何使用 yml 文件进行 Azure 管道并通过 Azure 的 Web 应用服务部署本地应用程序。我的日子也充满了弄清楚正确的访问管理、将数据存储在 Azure blob 存储中或在 Hive 存储中管理用户数据。这是一个陡峭的、有时令人不知所措的学习曲线。
Langchain、Streamlit、Azure OpenAI 和 Azure 应用服务的组合效果非常好。仅用了一周时间,我就完成了一个演示,可以与大家分享。它看起来很酷,至少乍一看是这样。我得到了赞赏,感觉自己就像一个正在创造影响力的技术奇才。是的,影响力。这就是我渴望的。
然而,这种感觉并没有持续太久。事实上,很快我就意识到,仅仅调用模型和提示是不够的。这只是冰山一角。
原型就是原型。它们可以进行大规模的改进。
很快,问题就来了
第一个问题叫做 Token Limit。
代币限制问题。图片来自作者。
如果您使用 LLM 模型,迟早您会遇到麻烦,因为模型会返回错误,并说您已超出模型的最大上下文长度!您可以争辩说,没问题,GPT-4 提供了 128k 的上下文长度,瞧,问题解决了。
嗯,事实并非如此。
像 GPT 这样的语言模型在长时间对话中保持上下文的方式是通过“上下文压缩”。这意味着,当模型获得超出其上下文窗口大小的新输入时,它必须丢弃最旧的输入以腾出空间给新的输入。在此过程中,它通过其内部状态跟踪先前的上下文,内部状态是丢弃信息的一种压缩摘要。
照片由Unsplash上的Ludovic Charlet拍摄
随着对话时间变长,“上下文凝聚”的质量会下降,导致所谓的上下文漂移,即模型可能开始忘记关键细节或对话的整体思路。
因此,增加上下文长度并不能解决问题。而且在某些时候,你会再次达到令牌限制。
我需要学习如何解决这个问题。这是当务之急,否则人们就无法继续下去。我写了另一篇关于处理模型上下文长度的文章;请随意在这里看看。
幻觉与事实
然后,幻觉与事实发生了冲突。ChatGPT 很神奇,但也没有那么神奇。
人们说你必须写出好的提示,这是千真万确的。有了好的提示,你可以看到输出结果的巨大改进。同时,即使有了你能想到的最好的提示,它仍然会给你错误的答案。不幸的是,当你希望它产生幻觉最少的时候,它却产生了最多的幻觉。当你问难题时,它肯定会出错。
你开始质疑——模型到底理解了什么?如果理解了,它就不会犯这些错误了。
也许现在是时候相信事情并没有那么神奇了。至少不是一直如此。
踏上前往月球的漫长旅程。图片由作者提供。
而且因为 chatGPT 本质上是一个概率模型(我在另一篇文章中已经详细解释过了),它可以预测下一个 token 出现的概率,所以每个 token 预测的一点点错误都会累积起来,等到模型在路径上创建了许多 token 时,它可能就会产生无意义的结果。
这就像坐在火箭里飞往月球。一开始,稍微偏离一点似乎没什么大不了,但经过漫长的旅程,你最终会错过月球并迷失在太空中。
幸运的是,诸如温度和 top_p 采样之类的参数是控制 Chat-GPT 系列模型行为的强大工具,可以在进行 API 调用时使用。通过调整这些参数,您可以实现不同级别的随机性和控制。问题是,尝试设置这些超参数也需要时间。
来源:OpenAI API
可重复性
祝你好运。
对于一个项目,我需要分析各国央行的讲话。输出结果将用于预测模型。对于这个项目,获得稳健且可重复的输出至关重要。
然而,ChatGPT 的输出并不总是可重现的。聊天完成默认是不确定的,这意味着模型输出可能因请求而异。
ChatGPT 建立在 Transformer 架构之上,该架构在 Transformer 层之上包含一个线性层。线性层将 Transformer 层的输出转换为一组分数,以预测句子中的下一个单词/标记。每个可能的下一个标记都会获得一个分数。然后,这些分数通过 SoftMax 函数获得概率。概率最高的单词被选为预测。我还有另一篇文章解释了 ChatGPT 的工作原理,请随意查看。
“turns” 后面的下一个词可能是“back”,也可能是“left”。图片由作者提供。
由于接下来可能出现的单词有很多,因此模型响应的方式具有随机性。
我对这个项目真的心有余悸,因为每次调用模型时,我都不知道我到底会得到什么回报。这让我很害怕。
幸运的是,您可以通过调整某些模型设置(例如温度)来最大限度地降低这种风险。最近,OpenAI 已经实现了种子变量以实现可重复性。开发人员现在可以seed
在聊天完成请求中指定参数以实现一致的完成。呼!
这是一个过程。我们需要制作原型、收集反馈、评估和迭代
随着我的 AI 应用程序的部署和测试,我收到了许多反馈。例如,一些用户表示,分块策略的输出似乎效果不佳。该模型往往会跳过重要的细节。另一位用户评论说,该模型的输出波动太大。
GenAI 是一个新事物,我也刚刚开始学习。从这些反馈中,我有了一些提高输出质量的想法。
例如,小样本学习也是一种有用的技术。它使预先训练的人工智能模型能够从少量示例中学习,并将学习应用于新的、未见过的数据。就我而言,这在处理央行演讲中的复杂主题时非常有用。
或者像思维链提示这样的高级提示工程技术似乎没有得到应有的关注。
少量样本学习的例子。
然而,由于我同时在运行多个项目——是的,这应该怪我,我觉得只要添加一个功能,就会有新的功能请求,无论是来自同一个项目还是不同的项目。没有足够的时间来调整我已经开发的东西。这就像一个循环。每次我添加完一个新功能,就会有其他事情发生。
首先,必须解决代币限制问题。
接下来,它需要能够读取更多文件格式。
我们还创建一个实时反馈功能来跟踪模型的性能。
评价怎么办?
或者“您能以格式良好的 PDF 形式返回输出吗?”
人们可以继续要求一个闪亮的新功能,例如“你能让它像 chat.openai.com 一样吗”?
这感觉就像做了一顿大餐,却没有时间坐下来吃。所以这不是一个好主意。
这就像早上 8 点喝一杯龙舌兰酒开始新的一天。—— Bill Inmon
与此同时,我必须向用户解释为什么当前的输出效果不是很好。这并不总是一场轻松的对话。人们想要他们想要的东西。如果你不能满足他们的要求,无论问题是什么都无济于事。
换句话说,我开发了很多个初始版本,但无法对它们进行调整,也没有一个能让产品脱颖而出。我感觉自己正在失去信誉。
GenAI 以用户为中心
人工智能素养并不在于如何微调预先训练的人工智能模型或从头开始构建新的人工智能模型,而在于如何恰当地使用人工智能。
这是因为 GenAI 以用户为中心。
举个例子。我开发了一个 MVP 应用,允许用户上传文档并具有聊天界面。其中一位用户来找我,说该应用不再接收文档了。
原来用户问的是:“你能看到附件吗?”
该模型的回答是:“作为一个人工智能语言模型,我无法看到或感知文档……”
显然,我设置的方式是,用户可以上传文档,然后我从上传的文档中提取文本并将其提取到 chatGPT。也就是说,该模型只能“看到”文本,它无法以传统意义上“看到”附加文档,就像我们人类在屏幕上看到它一样。考虑到我设置该工具的方式,提出了一个错误的问题。
如果您要求提供摘要或回答问题,它可以很好地发挥作用。
我记得我查看过用户对原型的反馈,但反馈并不令人满意。事实上,用户给该工具打了 1 分(满分 5 分),说它无法接收文件。真可悲 🥲。
这就是为什么我认为 GenAI 项目也应该注重教育人们如何使用 AI,从高层次理解 GenAI 的工作原理到不同的提示策略。
GenAI 输出评估
评估 GenAI 模型的输出至关重要且具有挑战性。
在 GenAI 时代之前,您只需将数据分成训练/测试/验证集 – 在训练集上训练模型,并在验证和测试集上评估性能。在监督学习中,我们使用 R 平方、准确率、召回率或 F 平方来评估性能。如何评估大型语言模型?在生成新文本时,基本事实是什么?
如果不评估模型的输出,我们怎么能确信它在做它应该做的事情呢?人类的判断确实起着至关重要的作用,但如果每个人工智能的输出都需要人类的评估,那么我们只不过是用一项手动任务换了另一项,无法实现使用人工智能节省时间的目的。
使用 ROUGE 分数评估模型摘要任务输出的示例。图片由作者提供。
在撰写本文时,我正在尝试不同的评估策略。以文本摘要为例,最常见的指标之一是使用 ROUGE 分数,请参阅语言模型的整体评估。在以后的文章中,我将撰写有关评估 LLM 输出的不同技术的文章。
管理期望——GenAI 并非针对特定问题而量身定制
我记得看过吴恩达 (Andrew Ng) 的一个演讲,他提到快进到今天,人工智能格局已经发生了巨大的变化。
在过去,数据团队需要先构建和部署机器学习模型,然后才能构建和部署人工智能应用程序,这可能需要数月甚至一年的时间。
借助 ChatGPT 或 Bard 等现成的大型语言模型,您可以使用基于提示的 AI 工作流程在很短的时间内部署应用程序,它看起来可能如下所示:
基于提示的 AI 工作流程。图片由作者提供。
恕我直言,我希望这是真的。如果你的目标只是展示酷炫的演示和使用人工智能为你的项目获得更多资金的潜力,当然,去做吧。但对于一个真正有影响力的产品?我非常怀疑这是否那么容易。GenAI 模型是通用的,并不针对特定的业务问题进行量身定制。
Hugging face 的快照。模型是为特定任务构建的,例如文本分类、翻译、摘要……等。
过去,机器学习模型一直是为了解决特定问题而构建的。你可以构建推荐系统,推荐在亚马逊上购买哪些产品或在 Netflix 上观看哪些电影。自 2018 年 Bert 首次开发以来,语言模型主要用于特定任务,并且它们在这些狭窄的任务中表现良好。例如,你总是需要针对特定任务(例如 POS 标记、问答或情绪分析)微调预先训练的通用 Bert 模型。例如,如果我微调一个专门用于理解可持续性主题的 BERT 模型,我不会期望它是理解金融或法律文本的专家。
鉴于人工智能行业的炒作,期望管理是关键。
商业经验
有一件事我可以肯定地说,用“总结文档”这样的标准提示来调用 OpenAI 的模型不足以构建最终产品。
像 ChatGPT 这样的预训练 GenAI 模型是通用模型,可以做很多事情。但是,它们并不是针对特定业务问题量身定制的。如果您想要一款能够改变业务的最终产品,那么GenAI 必须被视为一个真正的项目。它必须首先从了解痛点开始,并针对您期望该产品带来什么以及您愿意投入的资源设定明确的目标。
GenAI 项目需要合适的人才才能取得成功。它不仅需要一位有远见卓识、能洞察 GenAI 潜力的领导者,还需要一支集多种技能于一身的团队。它需要了解业务用户的痛点和需求。它需要了解模型工作原理的数据科学家、机器学习工程师/云平台工程师和 IT 故障排除人员来帮助管理、部署和维护 AI 应用程序。显然,它需要风险人员的参与,以减轻潜在风险。
为实验设定时间限制。分配一个固定的时间段来探索规定的时间范围内的 AI 功能。制作原型、收集反馈、评估和迭代。这种方法有助于明确实验结束时要做出的决定。
我想以阿瑟·克拉克的一句话作为结束语:
当一位杰出但年长的科学家说某事是可能的,他几乎肯定是对的。当他说某事是不可能的,他很可能是错的。
话虽如此,我不会押注人工智能会失败。我认为这样做是不明智的。就像所有成熟的职业一样,一开始,每个职业都曾不成熟。人工智能也是如此。但我们生活在一个变革的时代。在过去十年中,我们看到深度学习取得了许多突破,而且这种变革不会很快停止。每隔几年,就会有人发明一些疯狂的东西,让你完全重新考虑什么是可能的。老实说,我对 ChatGPT 或 Bard 感到非常高兴。我认为他们很棒。关键问题不是是否应该接受人工智能,而是如何接受。由于 GenAI 是一个新事物,我们仍需要解决许多不确定因素。GenAI 方法应该支持逐步采用该技术,同时最大限度地降低风险并促进学习。
欢迎前往我们的公众号,阅读更多资讯
创作不易,觉得不错的话,点个赞吧!!!