来自:CS的陋室
作者:机智的叉烧
进NLP群—>加入NLP交流群
最近chatgpt逐渐变火,很多人也多少能够发现,chatgpt能够成为一个相对可靠的端到端解决方案,大有干掉很多智能对话助手、搜索引擎的趋势,当然现在已经有不少用户也在用这个来充当搜索引擎来用了。然而,从技术角度,我们是否可以考虑去这么做了,或者说现阶段是否合适真的去这么尝试了。来看我的看法吧。
先说结论吧,我自己的分析结论是,大家都应该去尝试,但是不要指望短期内彻底替换。
什么是端到端
先说一下端到端和非端到端的意思,简单地说,就是一个模型完成全流程的任务,而非端到端,就是通过多个模型或者模块有机组合最终完成的任务。
举个例子,对话系统,可以用一个比较完善的生成模型来完成,也可以用一个系统,里面有各种模型,例如意图识别模块、召回模块、排序模块等多个模块协同合作来共同完成,前者就是端到端的方案,后者就是非端到端的方案。
端到端和非端到端的竞争
其实端到端和非端到端的竞争,早在前几年就有了,DSTC对话系统的比赛,榜单上就已经分为了端到端和非端到端两派进行,从比赛的数据来看,非端到端的模型基本都能在A榜有个不错的成绩,而B榜上,端到端模型则能够一举超越非端到端模型获得胜利,从这点我们其实可以推断,非端到端模型更容易在已知情况达到更高的水平,但是因为模型本身的特定,端到端的模式下,则更容易顶到更高的上限,泛化能力也能拉的比较高。
正因为端到端模型更容易能顶到更高的上线,所以在科研界,多半也是朝着端到端的方案去走的,配合预训练模型这股东风,绝大部分复杂任务的SOTA方案都是端到端模型的身影。
然而,与之相反的是工业界,在工业界,各大厂所采用的方案,基本都是非端到端的方案,前沿重器系列中我聊了很多场景下大厂的架构:
前沿重器[1] | 微软小冰-多轮和情感机器人的先行者
前沿重器[2] | 美团搜索理解和召回
前沿重器[3] | 平安智能问答系统
前沿重器[4] | 腾讯搜索的Quer理解如何直击心灵
大家都可以看到,这里面大家不约而同地选择了这些方案,而没有选择比较直接的端到端方案,甚至,在一些小任务下,大家也倾向于拆解成非端到端的任务来进行,例如纠错(NLP.TM[37] | 深入讨论纠错系统),就拆解成3部分灵活处理。
为什么会选择非端到端
我自己也经常会对一些需求做技术方案,也会比较倾向于非端到端的方案,主要是出于这几个原因吧:
非端到端出效果稳定。拆解开的每个步骤都能监控到,什么位置出问题成为短板能快速定位修复,且不影响其他模块。
资源和需求多样性导致必须拆分。不同的资源来源导致我们必须在内部拆分,例如要出天气要查天气的库,此时就要拆分各模块做识别等任务。
可控性和可更新性。国内外其实都有很多不能发布的信息或者价值观,这些是需要控制的,另一方面,有些内容是需要可更新的,此时需要可更新的模块来处理,每次直接更新整个模型成本很高。
这应该也是大家会在现实落地情况选择花时间拆分模块,逐步完成的核心原因了,也侧面映射出,非端到端的方案最终没选择的原因:
调优成本和风险大,除了问题后的效果调优可控性其实不是很高,很依赖训练策略、资源等很多原因。
对现有资源的使用能力差,原来的端到端模型主要靠喂特定的样本,现阶段则是prompt,但是多种复杂的资源不见得能支持这样的使用。
可控性和可更新性不足,一些风险问题,需要实时更新的问题(依旧举天气的例子),端到端模型的变化是不够敏捷的,甚至在变化过程中可能引入新的不可控风险。
这些问题不解决,我们很难完全放心把整个大的任务交给一个模型的。
端到端模型是否有可能克服缺点
我的答案是,现阶段是有可能但是还需要发展迭代。
随着prompt的出现,大家会开始有一种错觉,prompt的方式能让模型快速学会一些比较好的知识,或者换个角度,prompt方案似乎能引导模型吐出我们想让他吐出的东西,看起来非常有用,大家在体验chatgpt时多少有点这个感觉,然而仔细看过chatgpt有关原理的朋友们应该会发现,他们在底层是花费了很大成本来构造很多prompt来让模型学习的,标注看着很简单,但chatgpt这里其实非常困难,总结而说是有两点:
prompt的数量,prompt训练是需要一定的数据支撑的,别给我说就几条,那是一个类目下,但是类目层面就很多了,每个类几条那也要很多条的对吧。
prompt的质量,只有泛化的,多样的prompt才能更好地引导模型训练,这种人工活动不同于标注,他是带有一定创造性的,此时难度其实就很高了。
当然,有关灵活可控性,大家会有说adapter之类的结构,就是轻量化微调的方案,这点我在之前的轻量化微调文章里也有说过(前沿重器[27] | 从遗忘问题到预训练轻量化微调),虽然这种方案能一定程度缓解,但是敏捷性其实还可以提升的,有些紧急的公关问题需要快速下线,类似天气、新闻等需要快速更新的内容,如果还需要慢慢吞吞地训adapter模块,那速度大家肯定觉得会不太够,还不如直接塞库里,用dsl直接查的快对吧,当然了,如果是实时性要求没那么高的,这种控制起来其实已经非常足够了。
有关chatgpt的效果问题
现阶段,chatgpt的口碑有目共睹,但是盛名之下是否能副,这里我是想打一个问号的。有几个比较严谨的问题需要被抛出来:
开放域下的指标如何。大家你一个我一个的试,从个人层面看就是超小样本,统计能力不足,而把大家的都算上,基本一定程度算高频问题,可以说是带点偏的,然而抛开这批尝试的用户,只看用户日常真正的提问,例如像百度那样用户当做工具每天搜的情况,效果如何,这点还需要更为严格,数量更丰富的评测。
现阶段大家的新鲜感还比较强,其实容忍度还是比较高的,很难避免一些错误可能会被我们缩小,如果对其他的一些软件和产品,尤其是国产的,大家是否也能有这个容忍度呢,我自己看游戏领域、电影领域甚至一些奢饰品等领域的经验来看,用户多半对国产产品有着比同类外国产品更苛刻的要求的,例子就不举了,相信大家都懂。
产品形态的问题。现阶段的chatgpt的输出形态其实还是比较局限的——文本和图像,但是实际上我们需要的可能会更加复杂,例如智能家居的指令(帮我开灯),销售场景的智能推荐(给我推荐一台七千块左右的电脑),天气内容展示(告诉我未来一周的天气)等。
怎么做
讲到这里,其实我们可以有这几个共识吧:
非端到端模型在目前的落地场景下,仍有不可撼动的地位,直接切换或者使用端到端模型应该是激进的。
端到端有自己独特且突出的优势,泛化能力强,这点也是毋庸置疑的,
在对这个东西有基本的共识后,我们可以继续来聊怎么做,整体思路可以参考很多系统所常见的嵌入方式:新增召回路,参与筛选和把控。
之前我有文章聊过“召回-排序”这种在多个系统中被广泛使用的一个架构(心法利器[79] | 对话系统中的多路召回和排序),我们可以考虑在内容的召回上,把这种端到端的方式作为其中一种召回链路放入到召回池子里,增加一种回复的可能性,最终的筛选则是在排序层,和其他路召回的内容进行综合排序,并完成拒识判断(严谨起见端到端方案在特定场景不合适,此时需要过滤拒绝),此时就可以相对安全地利用上这个好东西,算是“驯服”了。在后续阶段,随着逐渐优化,我们可以慢慢放开排序和拒识模块,让端到端方案的采纳率逐步提升,在提升到一定阶段后,就可以考虑下掉其他模块,最终完成了从非端到端到端到端的切换了,中间阶段也比较可控安全。
chatgpt是否会替代吗
最后想夹带点私货,回应一下最近很多人后台希望和我聊的问题,简单地说就是chatgpt是否能完全替代别的东西,尤其是人,最近chatgpt逐渐变火,除了chatgpt很火之外,更多的声音是“哀鸿遍野”,很多人觉得非常悲观,很多工作都可能会被机器替代。不过从我自己的角度看,是两个声音:
chatgpt已经能帮忙做很多事,能替代不少人了。
简单任务已经可以做了,所以基础人力肯定会被压缩,但是因为深耕行业的人更了解具体流程和chatgpt能做的事,所以明白终究是需要有指导机器干活的,需要搭建架构的人,因此让自己成长起来,这块压力其实没想象中的大,而且在这个趋势下,资本进一步了解到AI的重要性,说不定对相应从业人员的需求更多。
而且这两个声音的具有非常鲜明的特征,前者像是一些对有关领域了解不深的人,后者则是深耕某个领域时间比较久的老鸟。很多时候,老鸟的这个东西的理解很深,往往能参透这里的本质。
说个很简单的事吧,很多人发现了chatgpt会写代码,所以觉得程序员就要被淘汰了,其实这部分人只是单纯的认为程序员只有一个任务就是写代码罢了,但其实并非如此,以算法工程师为例,大家可以看看我的日常(心法利器[31] | 我的算法工程师日常),大家会发现,真正写代码的时间可能就10%左右了,在这种情况下,chatgpt更多的是一个帮助我们工作的工具,而不是替代我们的对手。
我们不能说外行如何如何,毕竟术业有专攻,但是对我们这些专业领域的人还是需要体现出自己的专业水准的,冷静思考,不能被不懂这个的人带去了节奏,而是真正的深入了解某个东西的原理和优缺点,并且找到自己的优劣势和机会,这个才是真正破局所需要的。
欢迎关注我的视频号~
进NLP群—>加入NLP交流群