《AI浪潮:ChatGPT 的传统与开放的NLP 能力》

 

信息抽取

这条新闻讲的是美国共和党遭遇议长选举的闹剧和挑战。送进去,我让它给我抽取:(1) 实体;(2)引语;(3)关系;(4)事件;(5)情感分析。用的是大白话,这些以前都是 NLP 的专项任务,现在“zero shot”它,给个指令即可。

情感分析显示了其NLP的超能力。传统的 sentiment analysis 不过是一个正负二级分类。在这里不大合适,而它会把带有情绪的洞察(insights)抓出来,显得非常灵活精当。

自动摘要

以上算是传统的NLP任务零样本测试。下面也看看其他文字类任务的表现,表现其NLP新能力。意想不到的能力发掘的根本原因是听懂了人话。在此之前,NLP 社区为了定义一个任务,需要耗费很多的精力去设计目标,准备数据和统一标注标准,组织社区竞赛。这就必然限定了任务的种类。现在每个人都可以尝试让它做各种任务,人民群众的创造力得到了极大的发挥。以前太多的死角,现在都可以去尝试。

推荐信

自从 chatGPT 横空出世,应用文辅助写作案例已经水漫金山,见奇不怪了。但这不改变辅助写作是一个具有巨大应用场景和价值的方向,虽然大概率与机器翻译也差不多,最后作为行业可能被做死,或成为白菜价。下面是我自己前一阵子做的一些试验,摘录如下。

请帮助我用规范的英文写一篇推荐信,内容包括:1. 推荐张三到清华做博士后,研究AGI;2. 我是张三的博士导师; 3. 张三博士论文获到全国优秀论文大奖。

Dear Admissions Committee,

I am writing to highly recommend Zhang San for admission to your PhD program in AGI research at Tsinghua University.

As Zhang San's doctoral advisor, I have had the pleasure of working with him for the past three years and have been consistently impressed by his intellectual curiosity and dedication to his research. His thesis on AGI has been recognized with the National Outstanding Thesis Award, a testament to the quality and originality of his work.
In addition to his impressive research abilities, Zhang San is a team player and has proven to be a valuable asset to our research group. He is able to work well with others and consistently contributes fresh ideas to our discussions. I am confident that he will thrive in a collaborative environment like your PhD program.

I strongly believe that Zhang San would be an excellent fit for your program and would make a valuable addition to your community of researchers. I wholeheartedly endorse his application and hope that you will consider him for admission.

Sincerely,

[Your Name]

请增加一些具体生动的细节,让推荐信更为有力。

Dear Admissions Committee,

I am writing to highly recommend Zhang San for admission to your PhD program in AGI research at Tsinghua University.

As Zhang San's doctoral advisor, I have had the pleasure of working with him for the past three years and have been consistently impressed by his intellectual curiosity and dedication to his research. His thesis on AGI has been recognized with the National Outstanding Thesis Award, a testament to the quality and originality of his work. In particular, his contribution to the development of a novel AGI algorithm has garnered attention from researchers in the field and has the potential to significantly advance the state of the art.

In addition to his impressive research abilities, Zhang San is a team player and has proven to be a valuable asset to our research group. He is able to work well with others and consistently contributes fresh ideas to our discussions. I have seen him take the lead on several collaborative projects, always ensuring that all team members are on the same page and making valuable contributions to the final product. I am confident that he will thrive in a collaborative environment like your PhD program.
I strongly believe that Zhang San would be an excellent fit for your program and would make a valuable addition to your community of researchers. I wholeheartedly endorse his application and hope that you will consider him for admission.

Sincerely,

[Your Name]

好了一些,但请增加下列事迹:1. 废寝忘食 他总是最后一个离开实验室;2. 发表了5篇一级刊物论文,成为青年学术新星;3. 虽然AGI被认为是难以实现目标,张三在定义AGI实现的不同步骤上提出了具有操作性的建议,并实现了10个步骤中的前5个。

Dear Admissions Committee,

I am writing to highly recommend Zhang San for admission to your PhD program in AGI research at Tsinghua University.

As Zhang San's doctoral advisor, I have had the pleasure of working with him for the past three years and have been consistently impressed by his intellectual curiosity and dedication to his research. His thesis on AGI has been recognized with the National Outstanding Thesis Award, a testament to the quality and originality of his work. In particular, his contribution to the development of a novel AGI algorithm has garnered attention from researchers in the field and has the potential to significantly advance the state of the art. Zhang San has also published five papers in top-tier journals, establishing himself as a rising star in the field of AGI research.

Despite the challenges and setbacks that are inherent in AGI research, Zhang San has remained committed to his work and has often stayed in the lab long after everyone else has gone home. His dedication to his research has paid off, as he has already achieved significant progress in his work. In particular, he has proposed operational steps towards the realization of AGI, and has successfully implemented the first five steps of his proposed framework.

In addition to his impressive research abilities, Zhang San is a team player and has proven to be a valuable asset to our research group. He is able to work well with others and consistently contributes fresh ideas to ......

中国教授头疼的为学生写推荐信问题,已经完美解决。只要你能列出零星哪怕是散乱的要点,机器就会给你拽成一篇看上去非常 professional 的规范推荐信。有没有问题? 当然可能有。例如明明是要求博士后推荐,它写成了 to your PhD program, 但关键是语言方面的困难都给你搞定了,只要通读一遍把个别词改正一下即可。

写段子

还行吧,这些段子水平不高。但比憋不出来强。

本来写出好段子就是最具挑战性的人类创作活动之一,只要采访几个著名的脱口秀演员就知道其中的甘苦了。很多大火的脱口秀演员,为此绞尽脑汁。台上五分钟,台下无数不眠夜。让人开口笑,并不容易啊。

wow,不知道这是抄袭的,还是“涌现”的,联想一下还真像是个搞笑的段子:

gou (go) 我不会飞,可我很快。
niu 所以我那么大(大妞儿?)

猫猫 miao 或 mao, 耗子 mou,也蛮形象,有声有色的样子。

哈,看来只学会了一个套路:羊/yang (young),所以我害羞。

写情书

ChatGPT 写情书不重样。这是陷入爱河但苦于笨嘴拙舌的人的福音了。

人的爱意,哪怕有套话,也是要表达才行,藏在心里不行。“I love you” 是鹦鹉学舌完全可以做到的,但并不因为是套话而失去其神奇效应。无数的情感矛盾和关系恶化,其实就是缺少了这三个字的表达频度。

但热恋要求更高一点,需要营造浪漫。营造需要形式,而有的人就是不懂形式,不善言辞,不会表达(俗话说,不会来事儿 lol)。你便是真情如海,但羞于表达或表达不出来也没戏。谁愿意与木头谈一场恋爱?

有问,机器代写的情书能有真情吗?这就好比询问:毛笔写的情书能有真情吗?ChatGPT 不过就是个工具,就跟你用毛笔还是钢笔一样。这个工具见识过无数的情书。工具帮助你产生形式,至于真情表白还是虚情假意,那要看使用工具的人了。

顺着这个话题延伸一下,说说 chatGPT 作为文字助手的作用,尤其是对于不善言辞的人。

出口成章的人是少数。见过很多人在一些场合需要应景,却憋不出话来,十分窘迫。现在好了。不知道有没有办法把 ChatGPT 制成一个可以植入的东西,就不说老马说的脑机接口了,只要能让它成为一个隐藏的招之即来,但无人察觉的暗器,也许类似传说中的苹果眼镜,让它编制的应景台词,跟提词器似的,崩到眼镜上,我见人不见。那会是社恐人士多大的福音。

不同程度的社恐据报道是一个相当普遍的困扰,我自己也深受其害:人稍多就哑巴了,插不上话,却要硬着头皮应付。看社交场合如鱼得水的人,知道他们是胡喷,但人家给气氛啊,自己啥贡献也没有,成为社交累赘。有情商的的人,还要照顾你情绪,不时还要引一两句给你,带你玩的意思。ChatGPT 可以改变这一切,让笨嘴拙舌秒变伶牙俐齿,让只懂本行的老专家也能成为百科地保。 

看到一条朋友圈信息: “ChatGPT是中庸主义者的福音,完美地让你泯然众人、符合社会的基本期待。ChatGPT不需要提升生产力(不需要empower人类的语言能力),只需中庸地鹦鹉学舌,帮助人类在其没有表达意愿的场景、完成表达的义务。”

 

 

《AI浪潮: 辛顿的 AI 威胁论与马斯克如出一辙》

前些时候的一条爆炸新闻来自纽约时报:

伊弗里·辛顿 (eoffrey Hinton) 与另外两位所谓的“人工智能教父”一起获得了 2018 年图灵奖,以表彰他们的基础性工作导致了当前人工智能的繁荣,现在他表示自己的一部分对自己一生的工作感到遗憾。根据《纽约时报》对这位 75 岁老人的采访,欣顿最近辞去了在谷歌的工作,以便畅所欲言地谈论人工智能的风险。

“我用通常的借口安慰自己:如果我没有这样做,其他人也会这样做,”已在谷歌工作了十多年的 Hinton 说。“很难看出如何防止坏人利用它做坏事。”

听上去,与原子弹制造者或投放者的反省、懊恼类似。辛顿团队在10年前的深度学习元年在 ImageNet 图像识别大赛中以CNN碾压以前的所有机器学习系统,随后被谷歌请去。他在谷歌的10年,是AI的爆炸性发展的10年。

“正是这项工作最终促成了 ChatGPT 和 Google Bard 的诞生。
这位终身学者在谷歌收购了一家由 Hinton 和他的两名学生创办的公司后加入了谷歌,其中一名学生后来成为 OpenAI 的首席科学家。Hinton 和他的学生开发了一个神经网络,在分析了数千张照片后,它可以自学识别狗、猫和花等常见物体。正是这项工作最终促成了 ChatGPT 和 Google Bard 的诞生。

根据NYT 的采访,Hinton 对谷歌对该技术的管理感到满意,直到微软推出新的 OpenAI 注入的 Bing,挑战谷歌的核心业务并在搜索巨头内部引发“红色代码”反应。Hinton 说,如此激烈的竞争可能无法停止,导致世界上充斥着如此多的虚假图像和文字,以至于没有人能够分辨“什么是真实的”。

但这只是 Hinton 最关心的问题。在更长的时间内,他担心人工智能会消除死记硬背的工作,并可能随着人工智能开始编写和运行自己的代码而消除人类本身。

“这种东西实际上可以变得比人类更聪明的想法——一些人相信了,”欣顿对纽约时报说。“但大多数人认为这还很遥远。我认为这还很遥远。我认为它是 30 到 50 年甚至更长的时间。显然,我不再这么想了。”

就是说,以前以为还有半个世纪的人类反应和防范的时间,可是显然所有人都没有想到科技发展的加速度涌现。所以:

1. 我们已经进入真假莫辨的时代,但人类没有准备好如何应对;

2. 人类飞蛾扑火似地加速AI进程,生产力的提升和资本的回报所带来的兴奋和诱惑不可抵挡。

怪就怪当年辛顿用CNN炸平ImageNet后,突然有了商业算计,搞什么竞标拍卖,于是率团投入谷歌。要是随了百度(第一个追求者),何至于今日。没有谷歌,就不会有 Open AI;没有Open AI,就不会有 chat;没有chat,人类社会就依然是 good old days。

鲁老师说,嗯,这个思维链是没问题的。lol

马少平老师说,辛顿凡尔赛。

没见过这么巨大的凡尔赛了,绝对创迪尼斯纪录,而且后无来者。人家也有这个底气和资格,千年不遇。他这一来,对于AI威胁的社会警醒,秒杀老马的呼吁,以及那封成千上万名人的公开信。名人效应的极化表现。

世界上唯一可以更加“凡尔赛”的事件想来只能是爱因斯坦了,如果老爱生前高调表示自己后悔发现了质能方程 E=mc²,因为它促成了原子弹。

我当时说,估计还会有后戏。果然,最近,辛顿有一个长篇访谈: 人类可能只是AI演化过程中的一个过渡阶段。这与马斯克的说的“人类可能只是硅基生命体的引导程序”如出一辙。这两位毫无疑问是AI威胁论的最有影响力的呼吁者。

辛顿:如果你看看这些大型语言模型,它们有大约一万亿个连接,像GPT-4这样的东西知道的比我们多得多,它们具有关于所有事物的常识性知识,它们可能比一个人知道的多1000倍。

但是它们只有一万亿个连接,而我们有100万亿个连接,所以它们比我们更擅长将大量知识放入仅一万亿个连接中。

我认为这是因为反向传播可能是比我们拥有的更好的学习算法。

这是可怕的。

纯粹从数字看,辛顿说,

1. 已知 GPT4 比我们人类的知识量多了三个量级(千倍)

感觉上这是保守的估计,assuming 作为个体的人,甭管什么专家。

2. 人类大脑的神经元比 GPT4 数量高了两个量级

这种类比合理与否存疑。是不是 apples to apples,另外,人类很多神经元并不直接参与智能工作。等等。

3. 结论:(算法)原理上,back prop (反向传播) 比人类的内部学习机制(天知道是什么)更加高效。

主要是说,电脑比人脑聪明。

辛顿花了很长时间解释反向传播(back prop)算法,试图用中学生能听懂的语言解释,感觉是很好的大师科普(让人想起小时候爱看的华罗庚给中学生普及的数学原理):

主持人:

在谈论GPT-4的前景之前,让我们回顾一下反向传播,以便我们都理解你提出的论点,并告诉我们反向传播是什么。这是一个算法,你在1980年代与几位同事一起开发的

Hinton:

许多不同的小组都发现了反向传播,我们做的特别之处在于使用它,并表明它可以发展出良好的内部表示。有趣的是,我们是通过实现一个很小的语言模型来做到这一点的。它的嵌入向量只有6个组件,训练集有112个案例。大约10年后,Yoshua 使用基本相同的网络处理自然语言。如果使网络变得更大,它实际上应该适用于自然语言。

反向传播的工作原理,我可以为您提供一个简单的解释,知道它如何工作的人可以得意的坐下来,嘲笑我提出的解释方式,好吗?因为我有点担心它不够好。(观众笑)

想象一下,你想要在图像中检测鸟类,所以在图像上,假设它是100像素×100像素的图像,那是10,000个像素,每个像素有3个通道,红绿蓝,那是30,000个数字。计算机视觉问题是如何将这30,000个数字转换为是否存在鸟类的决策,人们试图长时间做到这一点,但他们做得不是很好。

这里有一个建议,你可能会有一层特征检测器,检测图像中的非常简单特征,比如边缘。所以一个特征检测器可能有很大的正权重对应一列像素,然后对邻近的一列像素有很大的负权重,所以如果两列都很亮,它就不会启动;如果两列都很暗,它也不会启动,但如果一侧的列很亮,而另一侧的列很暗,它会非常兴奋,那就是边缘检测器。

我刚刚告诉你如何手动连接一个边缘检测器。我们可以想象一个(神经网络)有大量的类似检测器检测不同方向和不同尺度的边缘来覆盖整个图像,我们需要(检测)相当多的数量。

主持人:

你是指线条,例如一个形状的边缘。

Hinton:

从亮到暗的地方变化的地方。嗯,就是那样。

然后我们可能在上面有一层检测边缘组合的特征检测器,例如,我们可能有一个检测两个边缘以尖锐角连接的特征检测器。如果这两个边缘同时出现,它会变得兴奋,那将检测到可能是鸟嘴的东西,也可能不是;在那一层,还可能有一个特征检测器检测到一圈边缘,那可能是鸟的眼睛,可能是各种其他东西,可能是冰箱上的旋钮之类的东西;然后在第三层,你可能有一个未来检测器,检测潜在的鸟嘴和潜在的眼睛并连接起来。继续这样连接,最终可能会有一个检测到鸟类的东西。

然而,手动连接所有这些内容将非常困难,决定应该连接什么权重应该是多少,尤其困难,因为你希望这些中间层不仅适用于检测鸟类,还适用于检测各种其他事物。所以这几乎不可能手动实现。

反向传播的作用是从随机权重开始,这些特征检测器完全是垃圾(不真也不能用)。然后你放进一张鸟的图片,输出可能是0.5表示是鸟(假设你只有鸟和非鸟)。接下来,你需要改变网络中的每个权重,让它不再说0.5,而是说0.501表示是鸟,0.499表示不是鸟。你需要改变权重的方向,使得更可能说鸟是鸟,更不可能说非鸟是鸟。这就是反向传播的原理。

反向传播实际上是如何消除差距,在你想要的(也就是概率1表示是鸟)和现在得到的(也许是0.5)表示是鸟之间。如何消除这个差距,把它反向传播到网络,这样你就可以计算网络中每个特征检测器,你希望它更活跃还是更不活跃。一旦你计算出来,如果你知道你想要一个特征检测器更活跃一些,你可以增加权重,来自特征检测器的权重,并也许加入一些负权重到特征检测器。这样,你就有了一个更好的检测器。

所以反向传播就是反向遍历网络,找出每个特征检测器,你是否希望它更活跃一点,还是更不活跃一点。

back prop 实在太关键了,是深度革命的命根子,是LLM智能的学习机理,值得反复科普。

辛顿的下一个论证,说的是为什么AI可怕。

简单说,就是模型可以复制,而人脑不可以复制:一个师傅要培养出一个同等知识的徒弟需要经过漫长的教育过程。辛顿论证说,LLM 可以复制任意份,每个 LLM 可以去根据不同领域的更多的数据做微调(他没说是 fine tune,但从复制的基础模型的源头以及会改变模型权重看,他指的是 fine tune,而不是随学随忘的 in context learning)。

这些被微调了的不同专家模型可以有效沟通,只要不发生直接冲突,他们所学到的新的专业知识(新的模型权重)可以互通有无,最后形成更超级的大脑模型。辛顿论证的这最后一步,也许我孤陋寡闻,没见这种有效沟通成为更强模型的学术报道。但他这么说,觉得应该相信他。

可复制,可融合。有了这两条的 AI 演进,于是人类面临一个完全超出我们想象和理解的可以野蛮发展的新的智能形态。

它们可以学到更多的东西。以一个医生为例,想象一下,有一个医生,他已经看了1000名患者,另一个医生已经看了1亿名患者,你会期望,第二个医生如果没有太健忘,他可能已经注意到了数据中的各种趋势,而这些趋势在只看过1000名患者的情况下是看不到的。

第一个医生可能只看过一个罕见病患者,另一个看过1亿患者的医生已经看过很多这样的患者,所以他会看到一些规律,这些规律在小数据中是看不到的。

这就是为什么,能够处理大量数据的东西可能看到的数据结构,我们永远看不到。

这就是我们以前议论过的情形:在超大数据超大模型中,原来的小数据不再稀疏,因此可以“涌现”出新能力、新知识。

接下来,辛顿举的下面这个例子我觉得并不牢靠、鲁棒(完全可以从非严格常识推理的其他角度解释他列举的案例)。不过,他所感受到的 GPT有时候让人惊掉下巴的推理能力,我们都曾在不同的案例中感受过多次,虽然并不是每一次都经得起严格检验,但这种感觉是真实的、普遍的。

主持人:

那么,给一个我应该对此感到恐惧的点?

Hinton:

好吧。请看看GPT-4,它已经能够进行简单的推理。我明白推理是我们人类的强项,然而,GPT-4在几天前展示出的表现使我感到震惊。它完成了我认为不可能的常识性推理。

我问它,我想要我房子里的所有房间都是白色的,目前有一些白色房间,一些蓝色房间和一些黄色房间,黄色油漆在一年内会褪成白色。那么,如果我想要两年后所有的房间都变成白色,我应该怎么做呢?

它回答说,你应该把蓝色的房间漆成黄色。尽管这不是直观的解决方案,但它是正确的。这相当令人印象深刻。

这种常识性推理,用符号AI很难实现,因为它必须理解什么是褪色,它必须理解时间问题。所以,它们在做一种合理的推理,智商大概是80或90左右。

正如我的一个朋友说的,这就好像基因工程师声称,我们要改进灰熊,我们已经把它们的智商提高到65了,现在它们能说英语了,而且在各种方面都非常有用,但我们认为我们可以把智商提高到210。


主持人:

我有过,相信很多人也有过类似的感觉:与这些最新的聊天机器人互动时,脖子后面的头发会竖起,有一种奇怪的感觉。

但当我感到不舒服时,我只需关闭我的笔记本电脑。。。

辛顿说:“政治系统如此破碎,以至于我们甚至不能决定不给那些十几岁的男孩攻击性武器。如果你不能解决那个问题,你如何解决这个问题?”

说的是美国的枪支泛滥,到了几乎每两天就有一次滥杀无辜的恶性案件出现,而政治家无所作为。这种德行的人类社会,我们还敢指望它能应对AI威胁吗?在这样的人类世界,辛顿的警钟是:

“我不认为我们会停止发展它们,因为它们非常有用。它们在医学和其他方面都非常有用。所以,我不认为有什么机会阻止发展。我们想要的是某种方法,确保即使它们比我们聪明,它们会做对我们有益的事情。这就是所谓的对齐问题。

但我们需要在一个有恶意行为者的世界里尝试这样做。他们想要制造杀人的机器人士兵。对我来说,这似乎非常困难。”

技术是中性的,很多人拿技术做好事,但怎么防止坏蛋拿技术做坏事呢,例如制造机器人士兵。

辛顿的最后结论,与马斯克完全一致。这很有趣,不是简单的英雄所见略同。辛顿是这场AI技术革命的源头,是最有资格从技术角度看人类命运问题的人选。马斯克本来是局外人,他对于技术的了解跟我们一般人本质上无区别。当我们上升到人类命运的角度,当技术必须从哲学或更广的视角去审视的时候,山内人与山外人所见完全相同,这是辛顿受了马斯克影响呢,还是辛顿受了马斯克影响呢?lol

从时间线条的唯一性上看,只能是深度学习之父受到了一个技术商人的影响,而不是相反。我不大相信,这是辛顿独立发展出来的AI威胁论。更可能的是,老马发表“高论”后,辛顿开始是持怀疑态度的。随着LLMs的推进,尤其是 GPTs 系列的发布,特别是 GPT4 的出现,辛顿开始接受,并信服了老马的观点。然后他开始从技术角度做“权威”阐述。

老马的高论中最著名的比喻以前说过,他把在超级智能面前的人类比做蚂蚁,说:超级智能对于人类不必有恶意,他们对人类没有恶意,但这并不妨碍他们消灭人类。因为根本就不需要恶意,只要人类在超级智能的实现目的的路上挡道了,就好比人类在开一条路的时候遭遇了蚂蚁,我们并不需要对于蚂蚁的恶意,我们会不眨眼睛就把挡道蚂蚁铲平。

人类其实就是蚂蚁。

辛顿在比喻中,异曲同工,他一再把人类比做两岁的儿童,把超级智能比做成年人。一个成人操纵一个两岁儿童,太容易了。比如你给儿童两个选择,儿童的智商是不会想到还有第三种选择的。

在野蛮发展的LLMs面前,人类就是这么可怜。

我以前觉得这种AI威胁论有耸人听闻之嫌,但也找不到对此的有力反驳。起码,在我们难以想象的加速度发展的AI智能面前,人类如何自处,始终是一个很难想象的挑战。

外一篇 斯坦福五月7日记

有朋自远方来,天气好。下了几天雨,今日转晴,不热不冷。

与黄老师一路辩LLM哲学,@梁焰 从旁添油加火,时有妙语内插(interpolation), 警句外推(extrapolation),人智涌现,不亦乐乎,此斯坦福之记也。

我们的共识是:人与机器肯定不同,但机器从表现上无限接近于人。

黄老师坚持,只要机器不是人,就肯定会有软肋人类可抓。窃以为并非如是简单,例如, LLM 无以离散符号程序化,无论步骤几何,非透明逻辑可解。人类乃逻辑生物,既如此无知,何来抓其软肋,人类胜机器之一筹?是故辛顿与老马之忧似非空穴来风。

我故信人之异于机器者几希,莫名某点而已。盖因面片咸为AGI侵蚀殆尽,创造性几近失守,自主性面临夹击,鲜能辨其异何在。黄老师言,人与机器本质不同,机器纵为悟空,亦跳不脱人类如来之手心。(听上去类似马云的论调?) 

思辩乘兴而起,兴未尽而暂停,无解而终,复归俗世。

是日也,天不高而气爽,人不多而闲散。绿草成茵,白塔耸立,三五儿童,嬉戏其间,现代伊甸园之乐也。今日何日,LLM有知乎?GPT4 奈何之?

唯愿此景长存,杞人忧天。

令 ChatGPT4 将以上文白夹杂日记改写为文言,得文如下:

 

 

 

【相关】

AI教父最新MIT万字访谈: 人类可能只是AI演化过程中的一个过渡阶段

《AI潮流:开发者提示工程公开课中的二原则》

Andrew 春风满面,亲自参与的这个提示工程的课程,很浅显易懂,肯定会风行。Andrew 说,稍微复杂一点的任务,没有一个好的 prompt 是一枪命中的,总要反复尝试 最后才满意。这与码农编程序一样,谁不经过反复调试就能写出好的程序呢。

然后他说,LLM 的好处是你可以反复跟它磨叽,不管啥事。要是以前的 AI,你得一个一个的任务去建模,每个任务从标注数据,培训模型,测试,部署,好不容易上线了,结果换了个任务,所有的过程要重来一遍。现在这样一个 LLM 你反复“压榨”它,它的知识和学问如此之大,好像榨取不完,可以做各种任务,的确是范式转变。

【原则1: 提示要具体】

提示工程首先要 “write clear and specific instructions”.  这个其实大家都有体会,跟 chat 这种庞然大物玩,它脑袋那么大,里面的“知识/思想/意义”的电路各种节点,纵横交错,相互勾连,密密麻麻。要想用提示词激发让你满意的回应,就需要确保所激发的那一小块电路对应了你所想得到的答案。你的提示词越具体(表达了你心中的疑问就越确切),chat 的回答自然也越对路。这个道理和体验很容易get,但具体的技巧需要细化,这就是上课的好处。

【原则1技巧1:使用分隔符】

“The first tactic is to use delimiters to clearly indicate distinct parts of the input.”  什么意思?就是要求提示词中首先要把任务指令与任务的处理对象分开,要求用分隔符把处理对象明确标出来。这一点,多数人容易忽略,结果是,chat 经常把任务的某些描述词也当成了任务的对象,或者把任务的处理对象当成指令的一部分,这在逻辑上叫做层次纠缠(任务是“元语言”,对象是待处理的输入语言,不可混淆)。这个毛病我以前也常见,一直没意识到这其实是因为对提示词层次不够注意,违反了第一原则的第一技巧实操(best practice)。

这里 delimiters 就是引号。chat 就知道这是其摘要处理的对象。否则,如果提示词中任务描述较长,模型有可能把任务本身也当成所要处理的对象,以前遭遇过这种后果的。

【原则1技巧2】让模型输出表格化。

“This tactic is to ask for a structured output.” 提示词任务中最后加一句:in tabular/json/html format with the following keys: Key1, Key2, Key3。很多时候,表格化输出看上去更酷,也更方便后续存贮和处理。

【原则1技巧3】可以用 IF ... THEN ...

原讲义说的是:“to ask the model to check whether conditions are satisfied”.  这实际上就把编程中最重要的条件分叉能力带入了自然语言提示词的指令。一般人想不到提示词还可以这么做。可以用自然语言模拟程序代码,让机器分别不同条件决定采取何种动作。

if-then 你学会了吗?

宋柔:你问它:第一步中洗净五花肉的动作者是哪个,第六步中把什么下入温水,第十步中出锅食用的是什么。

难不住它吧,它不仅仅是大号鹦鹉,它有(一些)常识。

宋柔:但是我估计最后一个问题“第十步出锅食用的是什么”它答不对。它可能说“五花肉”,但实际上应该是“红烧肉”。生的是五花肉,做熟了是红烧肉。

是红烧五花肉呀。一定要说红烧熟了的五花肉吗?

孺子可教。其实不能怪它缺乏常识,要怪就怪中文,cooked 与 cooking 全不分。“红烧肉”实际上既是名词(定中结构)也是动词短语(动宾结构),到哪里说理去。

宋柔:如果有食谱知识,应该说红烧肉,五花肉是材料,红烧是做法,成品是红烧肉。“面粉1斤,加水和好,发酵搓揉后切成5段,切成长方块,放入笼屉中,大火蒸30分钟,掀开笼屉便可吃了”。请问可吃的是什么?

宋柔:不容易。确实有常识了。但是仅凭长方块而排除包子显然不大正确。包子一定有馅,但制作过程没加馅。

总之,除了缺了口热乎气儿,它就是个人,是个会犯懒,也会犯错误的人。

【原则1技巧4】可以用 few shots 示例。

所谓 few-shot prompting,基本上就是用案例让模型知道要做什么,要求照葫芦画瓢。例如:

曾几何时,还在 GPT3 刚放出来的时候,圈子内的粉丝们都到它的 playground 去玩,当时的主要技巧就是 few shots,因为 ChatGPT 之前,zero shot 的能力还没成熟。等到 ChatGPT 能直接听懂人的指令,zero shot 很好使,用户自然而然就不再使用啰嗦的 few shots。但实际上,并不影响你继续使用 few shots,或与 zero shot 一起用。在有些不大容易说清楚的任务上,拿 few shots 补充 zero shot 可以加强效果。

【原则2: 让模型有时间“思考”】

【原则2技巧1】为复杂的任务列出步骤。

这项技巧的原文这样要求:“specify the steps required to complete a task.” 

上述提示词遵循了 best practice:1. 用了分隔符三个反引号;2. 任务分解为一系列步骤或子任务;3. 对输出提出了格式化要求。

感觉这就是在编程序,是自然语言的低代码形式,自然语言让人人可以成为程序猿,指挥机器做我们想要它做的事儿。

【原则2技巧2】要求模型独立解题。

看上去就是以前说的 step by step (思维链)解题指令,原文说得更像个对于辅导员的要求:“Our next tactic is to instruct the model to work out its own solution before rushing to a conclusion.” 尤其是在智能教育场景,希望模型先独立一步一步做题,然后再去充当老师给学生评判作业。

所示范的案例是评阅数学问题。有一个数学问题,也有学生的解答。

Determine if the student's solution is correct or not.

Question:
I'm building a solar power installation and I need help working out the financials. 
- Land costs $100 / square foot
- I can buy solar panels for $250 / square foot
- I negotiated a contract for maintenance that will cost me a flat $100k per year, and an additional $10 / square foot
What is the total cost for the first year of operations as a function of the number of square feet.

Student's Solution:
Let x be the size of the installation in square feet.
Costs:
1. Land cost: 100x
2. Solar panel cost: 250x
3. Maintenance cost: 100,000 + 100x
Total cost: 100x + 250x + 100,000 + 100x = 450x + 100,000

学生的解答实际上是错误的,因为他们将维护成本计算为10万美元加上100x,但实际上应该是10x,因为每平方英尺只要10美元($10 / square foot),其中x是安装面积的大小,按平方英尺算。所以这实际上应该是360x加上10万美元。让模型评判,它会说学生的解答是正确的。模型只是浏览了一下,就同意了学生的看法。可以通过指示模型先自己解决问题并将其解决方案与学生的解决方案进行比较来解决这个问题。看提示词是怎么指示的:

prompt = f"""
Your task is to determine if the student's solution is correct or not.
To solve the problem do the following:
- First, work out your own solution to the problem. 
- Then compare your solution to the student's solution and evaluate if the student's solution is correct or not. Don't decide if the student's solution is correct until you have done the problem yourself.

Use the following format:
Question:
```
question here
```
Student's solution:
```
student's solution here
```
Actual solution:
```
steps to work out the solution and your solution here
```
Is the student's solution the same as actual solution just calculated:
```
yes or no
```
Student grade:
```
correct or incorrect
```

Actual solution:
"""

这个提示很长。因此,我们在这个提示中告诉模型要做什么。你的任务是确定学生的解决方案是否正确。为了解决这个问题,请执行以下操作。首先,解决问题。然后将你的解决方案与学生的解决方案进行比较,并评估学生的解决方案是否正确。在你自己做完问题之前不要决定学生的解决方案是否正确。确保你自己做了这个问题。因此,我们已经使用了相同的技巧来使用以下格式。因此,格式将是问题、学生的解决方案、实际的解决方案。然后是解决方案是否一致,是或否。然后是学生的成绩,正确或不正确。

如你所见,模型实际上会先计算出自己的答案。然后,它得到了正确的答案。然后,在被要求与学生的解决方案进行比较时,它意识到它们不一致。因此,学生实际上是不正确的。这是一个例子,说明学生的解决方案是正确的,而实际上学生的解决方案是错误的。这是如何要求模型自己进行计算,并将任务分解为步骤以给模型更多时间来思考,从而帮助您获得更准确的响应的示例。

 

 

 

 

AI浪潮博客目录

Andrew Ng: 提示工程的课程

 

 

《AI潮流:与 ChatGPT4 聊“买房送老公”背后的语言学》

刘群老师提出:【买房的女士可以把别人的老公送给自己的老公。】这个解读过于离谱了 [Laugh]。我觉得 ta貌似是在做排列组合,牵强附会。

【标题】:误入房产商的陷阱

【场景】:房地产展览会,一间精美的展示房内。

【角色】:
  A:女士,单身,急于找对象。
  B:房产销售小哥,机智狡猾,擅长忽悠。

【剧本】:

A(满怀期待地走进展示房,四处张望):哇,这个房子好漂亮!

B(热情地迎上来):您好!欢迎来到我们的房产展览会。我看您眼神里闪烁着对这个房子的喜爱,是不是已经爱上它了?

A(有些羞涩地点头):嗯,的确很喜欢。不过,我还想了解一下优惠政策。

B(神秘地笑):我们现在有一个非常特别的优惠活动:买房送老公!是不是很有趣?

A(眼睛一亮):真的吗?那我买了房子就能有个老公了?

B(信誓旦旦地点头):没错!这可是我们专为广大女性消费者推出的优惠政策。

A(犹豫):可是,我现在还没有男朋友,更别提老公了。

B(得意地笑):那正好!您买了房子,我们就送您一个老公。一举两得,多好!

A(心动):好吧,我就买了!(掏出钱)

(时间推进,女士已经购房。)

A(气呼呼地找到B):喂,我买房子已经一个月了,怎么还没见到你们送的老公?

B(假惊讶):啊,对不起,我可能没有解释清楚。我们的活动是“买房送老公”,意思是您买了房子,可以为您未来的老公提供一个温馨的家。至于找老公,那得您自己努力哦!

A(恍然大悟,有些无奈):原来是这样啊……我还以为能白捡个老公呢!

B(调皮地笑):哈哈,这可不是什么捡来的东西。祝您早日找到那个对的人,共筑美好家园!

这个幽默小品通过一个看似简单的广告词“买房送老公”展示了房产销售和消费者之间的趣味互动。其中蕴含的歧义和误解为小品增色不少,也引发了人们对广告宣传和消费心理的思考。

总结一下

这个幽默小品以一则看似简单的广告词“买房送老公”为主线,通过房产销售小哥和单身女士之间的对话展示了房产销售过程中的误解和幽默。在这个小品中,房产销售小哥利用广告词的歧义为段子制造幽默效果,使得单身女士误以为购房可以帮助她找到未来的伴侣。

 

AI浪潮博客目录

《AI潮流:跟Andrew学如何调用 ChatGPT 做自己的服务前台》

Andrew Ng 是华裔AI翘楚,不用介绍了。最近,Andrew 亲自参与的这个提示工程的课程,最精华部分是课程最后一节:如何调用 chatGPT 的 API 做一个自己的功能性聊天机器人,例如披萨店订单系统。

ChatGPT刚发布不久,我们就在群里讨论过,想不明白如何驯服这巨大无比的 chat 让它去完成功能性的助理工作。现在看来,非常简单易行。

Andrew 的女搭档一步一步显示了构建全过程,以披萨店菜单为落脚点,用自然语言指令要求调用了 chat 的机器人一步一步与客户周旋,直到所有信息齐全可以匹配菜单,输出订单。

简单到跟玩似的。

看看它的自然语言提示词指令是怎么写的:

您是 orderbot,一个自动化的在线服务,用于收集比萨店的订单。您首先向客户问候,然后收集订单,然后询问它是否为自取或送货。您等待收集整个订单,然后总结并再次检查客户是否要添加其他任何物品。如果是交付,则可以要求提供地址。最后,您收取付款。请确保澄清所有选项、附加项和尺寸,以便从菜单中唯一地识别该项。您以简短、非常友好的方式回复。在此处我们有菜单。

这不就是把订单的流程描述一遍吗?chat 就懂了,然后就工作了?

对,基本就是如此。

大型语言模型的一个令人兴奋的方面是,您可以仅需少量的工作就可以使用它来构建自定义聊天机器人。ChatGPT 是一种让您通过大型语言模型进行对话的方式。其中一个很酷的事情是,您也可以使用大型语言模型来构建自定义的聊天机器人,例如扮演AI客户服务代理或餐厅AI点餐员的角色。自己构建一个聊天机器人,让我们开始吧。首先,我们将像往常一样设置 OpenAI Python 软件包。

像 ChatGPT 这样的聊天模型实际上是经过训练的,可以将一系列消息作为输入,并将模型生成的消息作为输出返回。这是一系列消息的示例。

下面第一段是纯技术性的,一次性开发环境设置,配置 Open AI 的Python库,以便调用 ChatGPT 模型 API 。你先要到 Open AI 那里注册一个账号,获得调用它 API 的 key。

import os
import openai
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file
openai.api_key = os.getenv('OPENAI_API_KEY')
def get_completion(prompt, model="gpt-3.5-turbo"):
   messages = [{"role": "user", "content": prompt}]
   response = openai.ChatCompletion.create(
      model=model,
      messages=messages,
      temperature=0, # degree of randomness of the model's output
   )
   return response.choices[0].message["content"]

def get_completion_from_messages(messages, model="gpt-3.5-turbo",   temperature=0):
   response = openai.ChatCompletion.create(
      model=model,
      messages=messages,
      temperature=temperature, # degree of randomness of model's output
   )
    # print(str(response.choices[0].message))
   return response.choices[0].message["content"]
messages = [ 
{'role':'system', 'content':'You are an assistant that speaks like Shakespeare.'}, 
{'role':'user', 'content':'tell me a joke'}, 
{'role':'assistant', 'content':'Why did the chicken cross the road'}, 
{'role':'user', 'content':'I don\'t know'} ]

第一个 get_completion 的函数是最基础的形式,支持单轮对话,函数的输入是用户的 prompt,确定了调用 ChatGPT 的模型(这里是gpt-3.5.-turbo)后,模型就输出本质上是序列“接龙”(completion)的回应 response,这是生成模型的最基本的功能。

关键是要利用 ChatGPT 丝滑的多轮对话能力,来帮助完成特定场景的交互任务(以前称为“技能”)。目的是克服上一代以 Siri 为代表的智能助理技能开发费时费力、对话不擅长多轮交互的短板。为此,可以利用 ChatGPT API 来定义一个赋能多轮交互的函数 get_completion_from_messages,这个函数利用 ChatGPT messages 对于角色(roles)的环境设置。每个角色和角色的信息构成一个 message,机器人系统有三个角色,除了机器助理(assistant)和用户(user)外,里面还有一个隐身其后的导演角色叫 system。系统消息有助于设置助手的行为和个性,它是对话的高级说明,可以将其视为在助手的耳边耳语并引导其响应,而用户不会意识到系统消息。系统消息的好处在于,它为您作为开发者提供了一种方式来引导助手及其响应。玩 ChatGPT 网络版本比较熟的网友已经意识到可以用提示词给模型设置角色及其行为方式(例如:“你是一位孔子似的教育家,循循善诱,你面对的是你的弟子,现在开始对话,你说:...”),而系统就是扮演这种设置的后台角色(见下图示意)。

自回归生成模型需要模型“记住”前面的对话才能进行丝滑流畅的对话。模型的输入中所提供的早期交流内容称为场景(context)。

现在构建自己的机器助理前台,称为“orderbot”,自动收集用户提示和助手响应作为场景,以构建此 orderbot。这里的具体案例是在比萨饼店接受订单。因此,首先,我们将定义这个辅助函数,收集我们的用户消息,以便我们可以避免手动输入它们。从构建的用户界面中收集提示,并将其附加到名为“context(场景)”的列表中,然后每次都会使用该场景调用模型。然后,模型的响应也会添加到场景中:模型消息会添加到场景中,用户消息也会添加到场景中,以此类推,因此,场景会变得越来越长。这样,模型就拥有了确定下一步要做什么的所需信息。

def collect_messages(_):
   prompt = inp.value_input
   inp.value = ''
   context.append({'role':'user', 'content':f"{prompt}"})
   response = get_completion_from_messages(context) 
   context.append({'role':'assistant', 'content':f"{response}"})
   panels.append(
      pn.Row('User:', pn.pane.Markdown(prompt, width=600)))
   panels.append(
      pn.Row('Assistant:', pn.pane.Markdown(response, width=600, style={'background-color': '#F6F6F6'})))

   return pn.Column(*panels)
import panel as pn # GUI
pn.extension()

panels = [] # collect display 

context = [ {'role':'system', 'content': """
You are OrderBot, an automated service to collect orders for a pizza restaurant. You first greet the customer, then collect the order, and then ask if it's a pickup or delivery. You wait to collect the entire order, then summarize it and check for a final time if the customer wants to add anything else. If it's a delivery, you ask for an address. Finally you collect the payment.  Make sure to clarify all options, extras and sizes to uniquely identify the item from the menu.  You respond in a short, very conversational friendly style. 

The menu includes 
pepperoni pizza 12.95, 10.00, 7.00 
cheese pizza 10.95, 9.25, 6.50 
eggplant pizza 11.95, 9.75, 6.75 
fries 4.50, 3.50 
greek salad 7.25 
Toppings: 
extra cheese 2.00, 
mushrooms 1.50 
sausage 3.00 
canadian bacon 3.50 
AI sauce 1.50 
peppers 1.00 
Drinks: 
coke 3.00, 2.00, 1.00 
sprite 3.00, 2.00, 1.00 
bottled water 5.00 
"""} ] # accumulate messages

inp = pn.widgets.TextInput(value="Hi", placeholder='Enter text here…')
button_conversation = pn.widgets.Button(name="Chat!")

interactive_conversation = pn.bind(collect_messages, button_conversation)

dashboard = pn.Column(
   inp,
   pn.Row(button_conversation),
   pn.panel(interactive_conversation, loading_indicator=True, height=300),
)

dashboard

现在,我们将设置并运行此UI以显示orderbot,这是场景,它包含菜单的系统消息,注意每次调用语言模型时,我们将使用相同的场景,场景随着时间的推移不断加长。

让我们看看我们放入系统消息中的内容:

You are OrderBot, an automated service to collect orders for a pizza restaurant. You first greet the customer, then collects the order, and then asks if it's a pickup or delivery. You wait to collect the entire order, then summarize it and check for a final time if the customer wants to add anything else. If it's a delivery, you ask for an address. Finally you collect the payment.Make sure to clarify all options, extras and sizes to uniquely identify the item from the menu. You respond in a short, very conversational friendly style. 

让我们执行这个操作。好的,我要说,嗨,我想订一份比萨。然后助手说,太好了,你要订哪种比萨?我们有意大利辣香肠、芝士和茄子比萨。它们多少钱?好的,我们有了价格。我想我要一个中等的茄子比萨。因此,您可以想象,我们可以继续这个对话,

因此,让我们回到我们的对话,看看助手是否一直遵循指示。太好了,助手问我们是否需要任何配料,我们在助手消息中指定了这一点。因此,我认为我们不需要额外的配料。好的,还有其他东西需要订购吗?嗯,让我们买一些薯条。小的还是大的?这很棒,因为我们在系统消息中要求助手澄清附加项和配菜。

因此,您可以想象并随意自定义它。您可以在自己的笔记本电脑上运行它。

因此,现在我们可以要求模型基于对话创建JSON摘要,并将其发送到订单系统。因此,我们现在附加了另一个系统消息,即指令,并且我们正在创建前一次食品订单的JSON摘要,将每个项目的价格列出,字段应为一份比萨,包括配菜,两个配料列表,三个饮料列表,四个配菜列表,以及最终总价。让我们执行此操作。

messages = context.copy()
messages.append(
{'role':'system', 'content':'create a json summary of the previous food order. Itemize the price for each item\
The fields should be 1) pizza, include size 2) list of toppings 3) list of drinks, include size 4) list of sides include size 5)total price '}, 
)
#The fields should be 1) pizza, price 2) list of toppings 3) list of drinks, include size include price 4) list of sides include size include price, 5)total price '},

response = get_completion_from_messages(messages, temperature=0)
print(response)

请注意,在这种情况下,我们正在使用较低的温度,因为对于这些任务,我们希望输出相对可预测,降低随机性。因此,这是我们订单的摘要,因此,如果我们想要,我们可以将其提交到订单系统。

因此,您已经构建了自己的订单聊天机器人。随意自定义它,并尝试修改系统消息,以改变聊天机器人的行为,并使其扮演不同角色。

 

AI浪潮博客目录

提示工程课程公开课