关注我们
(本文阅读时间:12分钟)
前言:即使你对文中提及的技术不大了解,你也可以毫无压力地看完这篇描述如何更好地获得 ChatGPT 生成内容的文章。因为我也是利用 Azure OpenAI 等认知服务来学习,然后就这样写出来的。所以,舒服地坐下来,慢慢看吧~
相信看到标题点进来的你,已经试过跟 ChatGPT 聊天了。我猜,要么你曾惊叹于人工智能的强大,要么,你嘲笑过这是“ 人工智障”……
为什么有时候 GPT 会有看着很傻的回复呢?有没有一种可能,是我们问问题的方式不对?
请和我一起确认,你提问时是否有如下几种情况:
是否试过在提示中提供示例?
是否试过使用角色扮演提问?
是否不让 ChatGPT 去猜猜猜?
如果你的回答是“否”,那请允许我为人工智能申个冤——是的,问对问题,人工智能会表现的更好。这也是提示工程(prompt engineering)的重要性所在。接下来,我们花点时间来搞清楚为什么问对问题很重要,以及怎样问问题更好。
微软MVP实验室研究员
//
胡浩
多年从事基础架构相关工作,熟悉全栈虚拟化、终端用户和边缘计算等,对多个技术方向有所涉猎。乐于学习并分享 Azure 和 AI,曾在很多大型研讨会演讲,如微软的 TechEd、MEDC、Tech Summit、Ignite,威睿的 VMworld、vForum、ENPOWER,以及苹果、戴尔等技术会议。同时也是很多社区大会如 Global AI Bootcamp、Global Azure Bootcamp、Global M365 Bootcamp 等活动的组织者和演讲者。
对话上下文
首先,ChatGPT 是可以使用上下文来持续优化语言理解和生成内容输出的。为了便于确定和理解,我选择了同源(使用相同的 API)的 Azure OpenAI 服务[1] 作为样例,因为在 Azure OpenAI Studio 里,你可以很容易地通过示例代码或 JSON 数据观察到来往你和模型之间的文本。
我们先看看使用 GPT-3 中 text-davinci-003 模型的对话样例。
GPT 这个大语言模型(LLM),从全局上下文模型 Transformer[2] 发展而来,而没有使用局部上下文的传统长短期模型( LSTM[3] )。上下文对模型能够准确了解提问和提供回答非常重要。因此每次通过 API 提交完成(Completion)请求的时候,我们能看到就连之前的交互文本,都被提交到了 API 接口。
这样,GPT 就能够根据之前的对话内容,生成更加相关的回复。
也许你已经知道,和 GPT 模型交互有个重要的概念,就是 token。我自己把它理解为“语素”,即构成词语的组成部分,按照通常计算,大约4个英文字符为1个 token。我们和 GPT 的交互,就需要消耗 token 并受到 token 数量的限制。
随着 GPT-3.5 和 GPT-4 的推出,新的模型调用 API 接口从 Completion[4] 逐步转向 ChatCompletion[5] (GPT-3.5 可以使用 Compleition 但必须提交 ChatML,GPT-4 只支持 ChatCompletion)。新的接口要求提交的 prompt 从以往的字符串改为包含系统(system)、用户(user)和助手(assistant)三种角色消息的数组。其中系统角色消息只需要在最开始声明一次即可,后面我们也会讨论这个有趣的设定。
通过这个样例,就可以看到具体三种角色消息的表现形式。我们打开“查看代码”,就能够很方便地看到这三种角色的消息数组是如何发送到 API 接口的。
那么我们的问题就来了——即使我们使用 GPT-4 的 8K 或 32K 模型,不断地发送整个会话,token 也有用完的时候吧?那是不是意味着 GPT 就会“失忆”?
理论上是的。人类也不可能记得对话的全部信息啊~那怎么解决这个问题呢?一般人我不告诉 Ta~ 我们完全可以对之前的对话内容进行小结,然后将小结作为后续会话的开始。
你问我怎么小结对话?问 GPT 啊!
不如来一发
有几个概念伴随 LLM 的流行为更多人所知:Zero Shot、One Shot 和 Few Shot。这几个概念或许可以翻译为零样本学习、单样本学习和少样本学习。
零样本学习、单样本学习和少样本学习某种意义上有相同的好处——模型不再需要进行繁杂的训练,就可以对新的类别进行识别判断。某些方面上,这其实和我们期待的人工智能有点类似,看上去具备了举一反三的能力。在机器学习的领域里,相关的词汇有模型泛化和迁移学习等,意味着从某些类别或样例的训练中,具备了将获得的推理扩展到其他类别或样例上的能力。
考虑到监督机器学习时需要的标签,这是一项包含巨大成本(人力和经济)的工作——也许你已经听说过数据标记师和数据标记工作的传闻,更别说标签有时无法提供合适的数据进行训练,比如样本分布或样本过少导致的偏差等等。
这也许就是大模型的威力:算力的强大使得巨量的语料数据能够进行无监督学习,由此产生了对语义的概率性推断,再体现到对输入的语义理解和内容生成,不断发展的神经网络(连接派)强大之后,却发现了对“意思”(符号派)的更好识别,简直是华山气宗和剑宗的殊途同归,扯远了,后续再写一篇聊这个吧!
我们从少样本学习到零样本学习一个一个聊。开始说这几个之前,先回顾一下以往的监督学习。在如下的 ImageNet 示例中,模型就是使用不同的狗狗的照片来训练,从而提取分辨狗狗的特征,作为判断今后图片中是否存在狗狗的依据。
是的,你得为狗狗的照片提供标签,说明这些训练数据(图片)是狗狗。这个训练过程你很容易通过 Azure 认知服务中的自定义机器视觉来体验和理解——你甚至不需要懂得写代码或配置模型,图形界面的工作室里提供图片和批量设置标签即可完成训练。
ImageNet 数据集的部分数据——狗的照片
OpenAI 通过 CLIP 模型发现了多模态模型的能力,利用互联网等语料数据集中对图片的文字描述,进行了交叉的训练,使得多模态大模型将图片的“意思”和图片的“显示”关联在一起。从而实现了对图片的无监督学习——这个过程不再需要我们给图片打标签了。这也是人工智能内容生成(AIGC)里,从文本提示自动生成图片的能力来源;亦可以说明 GPT-4 为什么懂人类在图片里玩的梗——AI 通过概率,明白了“意思”。
我们先举例来说明一下少样本学习。
▍少样本学习
一个从来没有见过无毛猫的小朋友,假设这个小朋友不是特别聪明,但已经知道通过分辨耳朵、鼻子、脸型等,分清楚是猫猫还是狗狗(比如通用预训练模型,GPT)。
有一说一,这小喵小汪真可爱
为了让他知道什么是无毛猫,我们也许需要提供以下两张照片:
然后告诉他,左边没有毛的但看得出猫脸的,是无毛猫,右边没有毛但是有狗脸的不是无毛猫。当然也许还可以再给他看几张照片加深印象。
于是,小朋友知道了,没有毛的狗,不是无毛猫;没有毛的猫,才是无毛猫。
▍单样本学习
那单样本学习的例子呢?很简单:
一个从来没有见过无毛猫的小朋友,假设这个小朋友比较聪明,我们只要给他看左边这张图,看,这只猫没有毛,它叫无毛猫。小朋友只要能认出这是猫,就认识了无毛猫。
▍零样本学习
那零样本学习的例子呢?更简单:
一个从来没有见过无毛猫的小朋友,假设这个小朋友很聪明,我们不需要给他看照片(我其实也怕吓到小朋友的),只要告诉他有一种猫没有毛。当他看到无毛猫的时候,他自己已经对猫有了概念(懂得猫的“意思”),一看没有毛,就明白了,这是你们说的无毛猫。
这个小朋友自己学习的能力,就叫做元学习。这个能力不像传统的监督学习,目标不是识别具体类别,而是学习本身——学会判断归类从未见过的对象(懂得“意思”)。
让我们倒过来想这个问题。如果一个模型还没那么聪明的时候,即使可能具备了零样本的能力,但单样本和少样本是不是也能帮助模型更好地推断、提高准确性呢?
我认为,是的。所以在 Azure OpenAI Studio 里面你能够找到这样的例子。
以下是一个例子:“通过少数的几个例子,从一句话中按照示例提取结构化的数据。
在这个对话中,通过提供两个属性的范例,实现了准确地从自然语言描述中,抽取结构化的数据以产生表格。这不就是少样本学习的例子吗?
目前,至少目前,我们还是比 AI 聪明的,比如下面这张图:
我的天呐,小喵小汪也玩《Face Off》这么神奇的吗?
当我们使用 Azure 视觉认知服务[6] 工作室来“逗”人工智能的时候,AI 就会很纠结这到底是猫是狗了。
对于全图,AI 能够一定程度上识别出狗和猫,但具体到换脸的猫,却被认成了狗。我们当然知道,它们既不是猫也不是狗,哈哈哈。
在本文的下半部分,我们将继续轻松地聊聊其他更好的 ChatGPT 聊天方式。欢迎大家持续关注!
参考链接:
[1] Azure OpenAI Service - Documentation, quickstarts, API reference - Azure Cognitive Services | Microsoft Learn[EB/OL]. [2023-04-11]. https://learn.microsoft.com/en-us/azure/cognitive-services/openai/?WT.mc_id=AI-MVP-33253.
[2] VASWANI A, SHAZEER N, PARMAR N, 等. Attention Is All You Need[M/OL]. arXiv, 2017[2023-04-11]. http://arxiv.org/abs/1706.03762.
[3] SHI X, CHEN Z, WANG H, 等. Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting[M/OL]. arXiv, 2015[2023-04-11]. http://arxiv.org/abs/1506.04214.
[4] Completions - OpenAI API[EB/OL]. [2023-04-11]. https://platform.openai.com/docs/api-reference/completions.
[5] Chat - OpenAI API[EB/OL]. [2023-04-11]. https://platform.openai.com/docs/api-reference/chat.
[6] 计算机视觉文档 - 快速入门、教程和 API 参考 - Azure 认知服务 | Microsoft Learn[EB/OL]. [2023-04-11]. https://learn.microsoft.com/zh-CN/azure/cognitive-services/computer-vision/?WT.mc_id=AI-MVP-33253.
微软最有价值专家(MVP)
微软最有价值专家是微软公司授予第三方技术专业人士的一个全球奖项。30年来,世界各地的技术社区领导者,因其在线上和线下的技术社区中分享专业知识和经验而获得此奖项。
MVP是经过严格挑选的专家团队,他们代表着技术最精湛且最具智慧的人,是对社区投入极大的热情并乐于助人的专家。MVP致力于通过演讲、论坛问答、创建网站、撰写博客、分享视频、开源项目、组织会议等方式来帮助他人,并最大程度地帮助微软技术社区用户使用 Microsoft 技术。
更多详情请登录官方网站:
https://mvp.microsoft.com/zh-cn