前言:即使你对文中提及的技术不大了解,你也可以毫无压力地看完这篇描述如何更好地获得ChatGPT生成内容的文章。因为我也是利用Azure OpenAI等认知服务来学习,然后就这样写出来的……所以,舒服地坐下来,慢慢看吧~ |
相信看到标题而点进来的你,已经试过跟ChatGPT聊过天了。我猜,要么你曾惊叹于人工智能的强大,要么,你嘲笑过这是人工智障……
为什么有时候GPT会有看着很弱智的回复呢?大模型不傻,我们当然也不傻……那有没有一种可能…是我们问问题的方式不对?
请和我一起确认,你提问时是否有如下几种情况:
是否试过在提示中提供示例?
是否试过使用角色扮演提问?
是否不让ChatGPT去猜猜猜?
如果存在“没有”的情况,那请允许我为人工智能申个冤——是的,问对问题,人工智能会表现的更好。这也是提示工程(prompt engineering)的重要性所在。接下来,我们花点时间来搞清楚为什么问对问题很重要,以及怎样问问题更好。
🧠 对话上下文
首先,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]。新的接口要求提交的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比你做得更快更好……
当然,目前,至少目前,我们还是比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.