看到ChatGPT的华丽诞生,心情很复杂,高兴,惊讶,恐慌。欣喜与惊喜的是,没想到这么快就见证了自然语言处理(NLP)技术的重大突破,体验了通用技术的无限魅力。恐慌的是ChatGPT几乎可以高质量完成NLP中的大部分任务,逐渐意识到很多NLP研究方向都遇到了很大的挑战。总的来说,ChatGPT最令人惊叹的地方在于它的多功能性。相较于GPT-3需要设计非常细腻的提示来实现各种不是很有效的NLP能力,ChatGPT已经让用户感觉不到提示的存在。ChatGPT作为一个对话系统,可以让用户自然地提出问题来实现从理解到生成的各种任务,其性能几乎达到了目前开放领域的最佳水平。许多任务超越了为特定任务设计的模型,并且在代码编程领域表现卓越。具体来说,理解自然语言的能力(尤其是理解用户意图的能力)非常突出。无论是问答、聊天、分类、总结、翻译等任务,虽然回复不一定完全正确,但几乎都能理解用户的意图。远远超出预期。相比理解能力,ChatGPT的生成能力更强大,可以针对各种问题生成具有一定逻辑性、多样化的长文本。总的来说,ChatGPT比较厉害,是通向AGI的初级阶段,在解决了一些技术瓶颈之后会更加强大。ChatGPT性能案例总结已经很多了。这里主要总结一下自己对ChatGPT技术问题的一些思考。两个多月断断续续和ChatGPT交互的简单总结。由于无法了解ChatGPT的具体实现技术和细节,所以几乎是一种主观猜测。一定有很多不对的地方。欢迎一起讨论。1、为什么ChatGPT的通用性这么好?只要我们用过ChatGPT,就会发现它并不是传统意义上的人机对话系统,而是一个以自然语言为交互方式的通用语言处理平台。2020年的GPT-3虽然已经有了通用能力的雏形,但需要精心设计提示才能触发相应的功能,而ChatGPT则允许用户使用非常自然的提问来准确识别意图来完成各种功能。传统方法往往先识别用户意图,然后针对不同的意图调用相应的功能处理模块,例如通过用户数据识别摘要或翻译意图,然后调用文本摘要或机器翻译模型。传统开放域意图识别方法精度不理想,不同功能模块独立工作,无法共享信息,难以形成强大的通用NLP平台。ChatGPT突破了相互对战的模式,不再区分不同的功能,统一为对话过程中的特定需求。那么为什么ChatGPT的通用性这么好呢?这个问题我一直在思考,但是由于没有条件的实验证实,所以只能猜测。根据Google的InstructionTuning研究工作FLAN,当模型达到一定规模(例如68B)并且Instruction任务的类型达到一定数量(例如40)时,模型就会出现以识别新的意图。OpenAI从其开放的API中收集全球用户各种任务类型的对话数据,按照意图进行分类和标注,然后对175B参数GPT-3.5进行InstructionTuning,自然而然地产生了通用的意图识别能力。2.为什么面向对话的微调不会遭受灾难性遗忘问题?灾难性遗忘问题一直是深度学习中的一个挑战,通常是因为在一项任务上的训练会失去在其他任务上的表现。比如一个30亿参数的基础模型,先在自动问答数据上微调,再在多轮对话数据上微调,会发现模型的问答能力下降了显著地。ChatGPT好像没有这个问题。在基础模型GPT-3.5上进行了两次微调。第一种微调基于手动标记的对话数据,第二种微调基于人类反馈的强化学习。用于微调的数据非常小。尤其是人类反馈的打分和排序数据较少,微调后依然表现出较强的通用能力,但对对话任务没有完全过拟合。这是一个很有意思的现象,也是我们没有条件验证的现象。猜测的原因可能有两个。一方面,ChatGPT使用的对话微调数据实际上可能包含非常全面的NLP任务。从InstructGPT中对用户API问题的分类可以看出,很多都不是简单的对话。有分类、问答、总结、翻译、代码生成等。因此,ChatGPT实际上是同时微调了几个任务;有很大的影响,并且可能只在基础模型参数空间的非常小的邻域内进行优化,因此不会显着影响基础模型的通用能力。3、ChatGPT的大规模上下文连续对话能力是如何实现的?在使用ChatGPT的时候,你会发现它有一个非常惊人的能力。即使与ChatGPT交互十多轮后,它仍能记住第一轮的信息,并能根据用户意图准确识别省略号、引用等细粒度信息。语言现象。这些对我们人类来说似乎不是问题,但在NLP研究的历史上,遗漏、引用等问题一直是一个难以逾越的挑战。另外,在传统的对话系统中,对话轮数较多后,很难保证话题的一致性。不过ChatGPT几乎没有这个问题,似乎即使轮次再多也能保持对话话题的连贯性和重点。据推测,这种能力可能有三个来源。首先,高质量的多轮对话数据是基础和关键。就像谷歌的LaMDA一样,OpenAI也通过人工标注的方式构建了大量高质量的多轮对话数据。在此基础上进行微调将刺激多轮模型。会话技巧。其次,基于人类反馈的强化学习也会间接增强模型多轮对话的一致性,因为它提高了模型响应的拟人化特性。最后,模型对8192个语言单元(Token)的显式建模能力,使得记忆普通人一整天的对话数据成为可能,一次对话交流很难超过这个长度。因此,所有的对话历史都得到了有效的记忆,可以显着提高继续进行多轮对话的能力。4、ChatGPT的交互纠错能力是如何开发的?交互纠错能力是智能的高级体现,但我们共同的东西是机器的痛点。在沟通过程中,当指出问题时,我们会立即意识到问题所在,并及时准确地更正相关信息。实现问题、识别问题区域、修正相应信息的每一步对于机器来说都不是一件容易的事。在ChatGPT之前,还没有看到具有强大交互纠错能力的通用模型。与ChatGPT交互后,你会发现,无论用户是更改了之前的陈述,还是指出了ChatGPT回复中的问题,ChatGPT都能捕捉到修改意图,准确识别出需要修改的部分,并最终做出正确的修正。到目前为止,还没有发现与交互纠错能力直接相关的模型相关因素,我也不相信ChatGPT有实时学习的能力。一方面,ChatGPT重启对话后可能还是会犯同样的错误,另一方面,基础大模型Learning的优化一直是从高频数据中总结频繁模式,更新难度大无论如何,对话中的基本模型。我相信它更多的是一种基本语言模型的历史信息处理技术。不确定因素可能包括:OpenAI人工构建的对话数据中包含一些交互修正的案例,微调后具备该能力;人工反馈强化学习让模型输出更符合人类偏好,从而在信息修正等对话中更符合人类修正意图;也许在大模型达到一定规模后(例如60B),学习原始训练数据中的交互式校正案例。到时候,交互修改模型的能力自然会出现。5、ChatGPT的逻辑推理能力是如何习得的?当我们向ChatGPT询问一些与逻辑推理相关的问题时,它并没有直接给出答案,而是展示了详细的逻辑推理步骤,最后给出了推理结果。虽然鸡兔同笼等诸多案例表明ChatGPT并未学到推理的本质,只是学到了推理的表层逻辑,但所展示的推理步骤和框架基本是正确的。语言模型学习基本逻辑推理模式的能力已经大大超出预期,其推理能力的来源是一个非常有趣的问题。相关对比研究发现,当模型足够大,程序代码和文本数据混合训练时,会将程序代码的完整逻辑链迁移泛化到大语言模型中,从而使大模型具有一定的推理能力。这种推理能力的获得有点神奇,但也无可厚非。也许代码注释是推理能力从逻辑代码到语言大模型的迁移和泛化的桥梁。多语言应该是相似的。ChatGPT的训练数据以英文居多,中文数据占比很小。不过我们发现ChatGPT的中文能力虽然不如英文,但也很强大。训练数据中的一些汉英平行数据可能是英语能力向汉语能力迁移的桥梁。6.ChatGPT是否针对不同的下游任务采用不同的解码策略?ChatGPT有很多惊人的表现,其中之一就是它可以对同一个问题生成多个不同的响应,这是非常明智的。例如,如果我们对ChatGPT的回答不满意,我们可以点击“重新生成”按钮,它会立即生成另一个回复。如果还是不满意,我们可以继续重新生成。这在NLP领域并不神秘。它是语言模型的一项基本能力,即采样解码。一段文本后面可能跟不同的词,语言模型会计算每个词出现的概率。如果解码策略选择概率最高的词输出,则每次结果都是确定的,无法产生多样化的响应。如果按照词汇输出的概率分布进行采样,比如“strategy”的概率为0.5,“algorithm”的概率为0.3,那么采样解码输出“strategy”的概率为50%,而输出“算法”的概率为30%,从而保证了输出的多样性。因为抽样过程是按照概率分布进行的,所以即使输出结果多种多样,每次都会选择概率较大的结果,所以各种结果显得比较合理。在比较不同类型的任务时,我们会发现对于不同的下游任务,ChatGPT的回复多样性差异很大。对于“How”和“Why”等“How”和“Why”任务,重新生成的回复在表达方式和具体内容上与之前的回复有很大不同。”类型的任务,不同反应之间的差异非常细微,有时几乎没有变化。如果都是按照概率分布的抽样解码,为什么不同回复的差异那么小。猜测一个理想的情况可能是“What”基于任务的大模型学习到的概率分布非常尖锐(Sharp),比如学习到“策略”的概率是0.8,而“算法”的概率是0.1,所以大部分时间采样相同的结果,即前面例子中80%的可能性都会采样“策略”;“How”和“Why”类型的task-based大模型学习到的概率分布比较平滑(Smooth),比如“strategy”的概率是0.4,“algorithm”的概率是0.3,所以不同的结果可以在不同的时间进行采样。如果ChatGPT能够学习到一个非常理想的与任务相关的概率分布,那确实是非常强大的,基于采样的解码策略可以适用于所有任务。通常,对于机器翻译、数学计算、事实问答等答案相对确定或100%确定的任务,一般采用贪心解码,即每次输出概率最大的词。如果希望输出具有相同语义的不同输出,多采用基于列搜索的译码方法,很少采用基于采样的译码策略。从与ChatGPT的交互来看,似乎所有任务都采用了基于采样的解码方式,真是暴力美学。7.ChatGPT能否解决事实可靠性问题?答案缺乏可靠性是目前ChatGPT面临的最大挑战。特别是对于事实性、知识性的问答,ChatGPT有时会严重捏造和生成虚假信息。即使在被要求提供来源和出处或参考时,ChatGPT也经常会生成一个不存在或从未发布过的URL。不过,ChatGPT通常会给用户一种更好的感觉,那就是它似乎知道很多事实和知识。实际上,ChatGPT是一个大型语言模型。大型语言模型的本质是深度神经网络。深度神经网络的本质是一种从高频数据中学习相关模式的统计模型。许多常识或事实在训练数据中频繁出现,上下文之间的模式相对固定,预测的词概率分布更尖锐,熵相对较小,大模型容易记忆,在训练过程中输出正确的输出解码过程。事实或知识。然而,有许多事件和知识即使在非常大的训练数据中也很少出现,大模型无法学习到相关模式。上下文之间的模式比较松散,词预测的概率分布比较平滑,熵比较大。模型往往会在推理过程中产生不确定性的随机输出。这是包括ChatGPT在内的所有生成模型的固有问题。如果仍然延续GPT系列架构,基本模型不变,理论上很难解决ChatGPT回复的事实可靠性问题。与搜索引擎的结合是目前非常务实的解决方案。搜索引擎负责搜索可靠的事实信息来源,ChatGPT负责归纳归纳。如果想让ChatGPT解决事实答案的可靠性问题,可能需要进一步提高模型的拒绝能力,即过滤掉那些模型确定不能回答的问题,同时还需要一个事实验证模块来验证ChatGPT响应的正确性。希望下一代GPT能够在这个问题上有所突破。8、ChatGPT可以实现实时信息学习吗?ChatGPT的交互纠错能力,让它仿佛拥有了实时的自学习能力。如上所述,ChatGPT可以根据用户提供的修改意向或修正信息,即时修改相关回复,体现了实时学习的能力。其实学习能力体现的是所学知识具有普适性,可以在其他时间、其他场合使用,但ChatGPT并没有表现出这种能力。ChatGPT只能根据当前对话中的用户反馈进行更正。当我们重新开始对话并测试相同的问题时,ChatGPT会出现相同或相似的错误。一个问题是为什么ChatGPT不把修改后正确的信息存储到模型中?这里有两个问题。首先,用户反馈的信息不一定正确。有时ChatGPT被故意引导做出不合理的回答,只是因为ChatGPT在基于人类反馈的强化学习中加深了对用户的依赖,所以ChatGPT在同一个对话过程中,我们会非常信任用户的反馈。其次,即使用户反馈的信息是正确的,基础大模型也不能基于低频数据更新参数,因为它可能出现的频率不高,否则大模型会对一些长尾数据过拟合,失去通用性。因此,让ChatGPT实时学习是非常困难的。一个简单直观的解决方案是每次都使用新数据微调ChatGPT。或者使用触发机制,当多个用户提交相同或相似的反馈时触发模型的参数更新,从而增强模型的动态学习能力。本文作者张家军,中科院自动化所研究员。原文链接:https://img.ydisp.cn/news/20230222/n22lkkwlw32
