最近折腾了一段时间GPT-3大模型,从最开始的兴奋,到中间的踩坑,再到最后的放弃,经历了很多。今天记录一下整个过程,包括GPT-3的原理、API的使用、实际应用中的坑、以及我为什么最后放弃了。希望能帮到想入门大模型的朋友。
先说说背景。GPT-3是OpenAI在2020年5月发布的大规模语言模型(写这篇文章的时候是2020年2月,GPT-3还没正式发布,但论文已经出来了,而且有beta版的API可以申请试用)。GPT-3有1750亿个参数,是当时最大的语言模型,能生成非常流畅的文本,能做翻译、问答、写作、编程等很多任务,效果非常惊艳。
我第一次看到GPT-3的demo的时候,被震惊了。它能写文章、写代码、写诗歌、做数学题、回答问题,而且生成的内容非常流畅,几乎和人写的一样。我当时就想,这太厉害了,我一定要试试,用它做点有意思的东西。
于是,我申请了GPT-3的API试用资格,等了大概一个月,终于拿到了试用资格。然后,我就开始了折腾GPT-3的道路。从最开始的兴奋,到中间的踩坑,再到最后的放弃,经历了大概一个月的时间。
今天,我就把这段经历记录下来,分享给大家。
一、初识GPT-3:被惊艳到了
拿到API试用资格的第一天,我就迫不及待地开始试了。
OpenAI的API用起来很简单,就是一个HTTP请求,传入prompt(提示词),它就会返回生成的文本。我先试了一个最简单的例子,输入"写一篇关于春天的散文",等了几秒钟,它就返回了一篇非常流畅的散文,文笔优美,意境深远,比我写得还好。
然后我又试了几个例子:
- 输入"用Python写一个快速排序的函数",它返回了一个正确的快速排序函数,还有注释
- 输入"把这句话翻译成英文:今天天气真好",它返回了正确的翻译
- 输入"1+1等于几",它返回了"2"
- 输入"写一首关于月亮的诗",它返回了一首意境优美的诗
- 输入"给我讲一个笑话",它返回了一个还挺好笑的笑话
每试一个,我就被震惊一次。这也太厉害了吧,几乎什么都能做,而且做得还很好。我当时就觉得,这就是未来,人工智能要改变世界了。
那几天,我特别兴奋,每天都在试GPT-3的各种功能,给它各种奇奇怪怪的prompt,看它能生成什么。我还把它生成的一些有意思的内容,分享给朋友看,朋友们也都被震惊了。
那时候,我觉得GPT-3无所不能,我要用它做一个伟大的产品,改变世界。
二、GPT-3的原理:简单了解一下
兴奋了几天之后,我开始冷静下来,想了解一下GPT-3到底是怎么工作的,为什么这么厉害。
我找了GPT-3的论文(《Language Models are Few-Shot Learners》)来看,又看了一些解读文章,对GPT-3的原理有了一个简单的了解。
GPT-3的全称是Generative Pre-trained Transformer 3,是OpenAI开发的第三代生成式预训练Transformer模型。它的核心是Transformer架构,这是Google在2017年提出的一种神经网络架构,现在已经成为自然语言处理的主流架构。
GPT-3的特点主要有几个:
1. 规模大
GPT-3有1750亿个参数,是当时最大的语言模型。参数越多,模型的容量越大,能学习到的知识越多,生成的内容越好。当然,训练成本也很高,据说训练一次GPT-3,需要几千张GPU,跑几个月,成本几千万美元。
2. 预训练+微调
GPT-3用的是预训练+微调的范式。首先,在大规模的文本数据上进行预训练,学习语言的规律和知识。预训练用的数据非常大,包括互联网上的网页、书籍、文章等,大概有几千亿个token。预训练的任务是语言模型,也就是根据前面的文本,预测下一个词。通过这个任务,模型能学习到语言的规律、语法、语义,甚至世界知识。
预训练完成之后,就可以在下游任务上进行微调,或者直接用few-shot(少样本)、zero-shot(零样本)的方式来使用。GPT-3最厉害的地方,就是它不需要微调,只需要给几个例子(few-shot),甚至不给例子(zero-shot),就能完成很多任务,而且效果很好。
3. Few-shot学习能力
这是GPT-3最惊艳的地方。以前的语言模型,要完成一个特定的任务,需要在大量的标注数据上进行微调。但GPT-3不需要,只需要在prompt里给几个例子,它就能明白你要做什么,然后完成任务。
比如,你想让它做翻译,只需要在prompt里写: "把中文翻译成英文: 你好 -> Hello 谢谢 -> Thank you 今天天气真好 ->" 然后它就会返回"It's a nice day today."
只需要两个例子,它就能明白你要做翻译,而且翻译得很准确。这就是few-shot学习能力,非常厉害。
如果不给例子,直接写"把这句话翻译成英文:今天天气真好",它也能完成,这就是zero-shot。当然,few-shot的效果一般比zero-shot好。
4. 生成式模型
GPT-3是一个生成式模型,它的输出是生成的文本,而不是分类或者其他。它会根据prompt,一个词一个词地生成文本,直到达到最大长度或者遇到结束符。
因为是生成式的,所以它的应用范围很广,可以写文章、写代码、写诗歌、做翻译、做问答、做摘要,等等,只要是文本生成的任务,它都能做。
了解了原理之后,我对GPT-3更佩服了。这么大的模型,这么强的能力,确实是人工智能的一个里程碑。
三、开始做项目:想做一个AI写作助手
了解了原理之后,我开始想,用GPT-3做一个什么产品呢?
我想了很久,最后决定做一个AI写作助手,帮助用户写文章、写文案、写邮件等。因为我自己平时也经常写东西,有时候会遇到写不出来的情况,如果有一个AI助手能帮我生成初稿,或者给我一些灵感,那就太好了。
而且,GPT-3生成文本的能力这么强,做写作助手应该很合适。
说干就干,我开始做这个项目。
第一步:设计功能
我设计了几个核心功能:
- 文章生成:输入标题和关键词,生成一篇完整的文章
- 文案生成:输入产品信息,生成营销文案
- 邮件生成:输入邮件的目的和要点,生成一封完整的邮件
- 文章润色:输入一篇文章,帮你润色,让文章更流畅
- 文章摘要:输入一篇长文章,生成摘要
第二步:开发后端
后端用Python的Flask框架,调用OpenAI的API。OpenAI的API用起来很简单,就是一个HTTP POST请求,传入model(模型)、prompt(提示词)、max_tokens(最大生成长度)、temperature(温度,控制随机性)等参数,就会返回生成的文本。
我封装了一个函数,专门调用GPT-3的API,然后根据不同的功能,构造不同的prompt。
比如,文章生成的prompt是这样的: "请根据以下标题和关键词,写一篇完整的文章。 标题:{title} 关键词:{keywords} 文章:"
然后把用户输入的标题和关键词填进去,调用API,就能生成文章了。
第三步:开发前端
前端用React做了一个简单的界面,用户可以选择功能,输入内容,点击生成,然后显示AI生成的结果。还做了复制、重新生成、保存等功能。
第四步:测试
开发完成之后,我开始测试。一开始,效果还不错,生成的文章、文案、邮件,都挺流畅的,看起来像那么回事。我当时很开心,觉得这个产品能成。
但测试了几天之后,我就开始发现问题了,而且问题越来越多,最后导致我放弃了这个项目。
四、踩坑:GPT-3的各种问题
在做项目的过程中,我踩了很多坑,发现GPT-3虽然很厉害,但也有很多问题,不是想象中那么完美。
坑1:生成的内容有时候会胡说八道
这是最严重的问题。GPT-3生成的文本,看起来很流畅,很像那么回事,但有时候会胡说八道,编造一些不存在的事实、数据、引用。
比如,我让它写一篇关于某个历史事件的文章,它会编造一些不存在的时间、地点、人物,而且说得有鼻子有眼的,如果你不了解这个历史事件,根本看不出来它在胡说。
再比如,我让它写一篇关于某个技术的文章,它会编造一些不存在的API、函数、参数,而且代码看起来还挺像那么回事的,但实际上根本运行不了。
这就是大语言模型的"幻觉"(hallucination)问题。因为GPT-3是一个语言模型,它学习的是语言的规律,不是事实。它生成文本的时候,是根据概率来选择下一个词,而不是根据事实。所以,它可能会生成看起来很合理,但实际上是错误的内容。
这个问题,对于写作助手来说,是致命的。如果用户用它生成的文章,里面有很多错误的事实,那用户会很生气,产品的口碑就毁了。
我当时想了很多办法来解决这个问题,比如在prompt里强调"请确保内容的真实性",或者让它只基于给定的事实来写,但效果都不好。它还是会时不时地胡说八道。
坑2:生成的内容不稳定,每次都不一样
GPT-3的生成是有随机性的,同样的prompt,每次生成的内容都不一样。有时候生成得很好,有时候生成得很差,不稳定。
比如,我用同一个标题和关键词,生成了5篇文章,其中2篇很好,2篇一般,1篇很差。质量参差不齐,用户体验不好。
虽然可以通过设置temperature(温度)来降低随机性,temperature越低,生成的内容越稳定,但也越保守、越无聊。temperature设得太低,生成的内容就很死板,没有创意;设得太高,又太随机,质量不稳定。很难找到一个平衡点。
而且,即使temperature设得很低,也不能保证每次生成的内容都好,还是会有差的。
坑3:长文本生成质量差
GPT-3虽然能生成很长的文本,但长文本的质量比较差。生成短文本(比如几句话、一段)的时候,质量很好,很流畅。但生成几千字的长文章的时候,就会出现各种问题,比如前后矛盾、重复、跑题、逻辑混乱等。
比如,我让它写一篇2000字的文章,前1000字写得很好,逻辑清晰,内容充实。但后1000字,就开始重复前面的内容,或者跑题,或者前后矛盾,质量明显下降。
这是因为GPT-3的上下文窗口是有限的(GPT-3是2048个token,后来的版本扩展到了4096、8192等),它只能看到前面一定长度的文本,太长了就记不住了,所以会出现前后矛盾、重复等问题。
对于写作助手来说,用户经常需要写长文章,这个问题就很严重。
坑4:API贵,成本高
GPT-3的API是按token收费的,输入和输出都算token。1000个token大概是750个英文单词,或者500个中文字。价格根据模型不同而不同,最贵的Davinci模型,每1000个token是0.06美元(输入)和0.12美元(输出)。
看起来不贵,但实际用起来,成本很高。比如,生成一篇2000字的中文文章,大概需要4000个token(输入+输出),成本就是0.062 + 0.122 = 0.36美元,差不多2.5块钱人民币。
如果用户很多,每天生成几千篇文章,那成本就是几千块钱,一个月就是十几万,成本太高了。而且,用户还可能反复生成,不满意就重新生成,成本就更高了。
我当时算了一下,如果我的产品有1000个用户,每个用户每天生成5篇文章,那每天的API成本就是100052.5 = 12500块钱,一个月就是37.5万。这还只是API成本,还不算服务器、带宽、人力等成本。这么高的成本,根本赚不回来。
而且,OpenAI的API价格还经常调整,以后可能还会涨价,成本不可控。
坑5:API不稳定,有时候很慢,有时候报错
GPT-3的API不太稳定,有时候响应很慢,要等几十秒甚至几分钟;有时候会报错,比如500错误、429错误(请求太频繁)等。
比如,我在测试的时候,经常遇到API响应慢的情况,用户等了半天,结果生成失败,体验很差。而且,有时候会遇到429错误,因为请求太频繁,被限流了,需要等一会儿才能继续用。
虽然可以通过重试、排队等方式来缓解,但还是会影响用户体验。
坑6:内容审核严格,容易被封
OpenAI对API生成的内容有严格的审核,不能生成违法、违规、有害的内容,比如暴力、色情、仇恨言论、虚假信息等。如果你的应用生成了违规内容,可能会被警告,甚至被封号。
我在测试的时候,就遇到过几次内容被审核拦截的情况,比如用户输入了一些敏感的关键词,生成的内容被OpenAI拦截了,返回了错误。虽然不是我的问题,但用户体验不好。
而且,作为应用开发者,你需要对用户生成的内容负责,如果用户用你的应用生成了违规内容,你可能会被封号,甚至承担法律责任。这风险太大了。
坑7:没有中文优化,中文效果一般
GPT-3主要是用英文数据训练的,虽然也能处理中文,但中文的效果不如英文。比如,中文的流畅度、准确性、创意性,都比英文差一些。而且,中文的token效率比较低,一个中文字大概占1到2个token,同样长度的文本,中文比英文贵。
我在测试的时候,就明显感觉到,GPT-3生成英文的质量比中文好很多。生成英文文章,非常流畅,几乎和人写的一样;生成中文文章,虽然也还行,但有时候会有翻译腔,或者用词不太地道,质量不如英文。
对于主要面向中文用户的产品来说,这个问题也比较严重。
五、为什么最后放弃了
踩了这么多坑之后,我纠结了很久,最后还是决定放弃这个项目。原因主要有以下几个:
1. 产品质量无法保证
GPT-3生成的内容,质量不稳定,有时候好,有时候差,而且会胡说八道。作为一个写作助手,产品质量是最重要的,如果生成的内容经常有错误,用户是不会买单的。
我想了很多办法来提升质量,比如优化prompt、后处理、人工审核等,但效果都有限,而且会增加成本和复杂度。我觉得,以现在GPT-3的能力,还做不到让用户满意的写作助手。
2. 成本太高,商业模式不成立
API成本太高了,如果按实际使用量收费,用户会觉得太贵,不愿意用;如果包月或者免费,那我会亏死。算了半天,发现这个商业模式根本不成立,赚不到钱,反而会亏钱。
而且,OpenAI的API价格还可能上涨,成本不可控,风险太大。
3. 竞争太激烈
那段时间,做AI写作助手的人特别多,每天都有新的产品出来,竞争非常激烈。而且,很多大公司也在做,比如百度、阿里、腾讯,都有自己的大模型和写作产品,我一个个人开发者,根本竞争不过他们。
与其在红海里厮杀,不如早点放弃,做点别的。
4. 技术更新太快,个人开发者跟不上
大模型这个领域,技术更新太快了,几乎每个月都有新的模型、新的论文、新的应用出来。个人开发者,根本跟不上这个节奏。你刚做好一个产品,新的模型就出来了,你的产品就过时了。
而且,大模型的训练和部署,需要大量的算力和资金,个人开发者根本玩不起,只能用大公司的API,受制于人。
5. 我自己的兴趣转移了
折腾了一个月,新鲜感过去了,我对这个项目的兴趣也慢慢降低了。而且,踩了这么多坑,觉得这个方向暂时没有太大的机会,就想做点别的更有意思的事情。
所以,纠结了几天之后,我决定放弃这个项目,把代码开源到了GitHub上,然后就去研究别的东西了。
六、我的收获和感悟
虽然项目放弃了,但这一个月的折腾,还是让我收获了很多,也有很多感悟。
收获1:对大语言模型有了深入的了解
通过这次折腾,我对GPT-3和大语言模型的原理、能力、局限性,都有了深入的了解。不再是只看媒体的宣传,而是有了自己的亲身体会和判断。
我知道了大语言模型能做什么,不能做什么,它的优势在哪里,劣势在哪里。这些知识,对我以后的工作和学习,都会有帮助。
收获2:学会了如何用大模型的API
通过这次项目,我学会了如何调用大模型的API,如何设计prompt,如何处理返回结果,如何优化生成质量。这些技能,以后可能会用得上。
而且,我还学会了如何评估大模型生成内容的质量,如何识别"幻觉",如何避免被AI生成的错误内容误导。这些能力,在AI时代,是非常重要的。
收获3:对技术和产品有了更理性的认识
以前,我看到新的技术,总是很兴奋,觉得这个技术能改变世界,能做很多很多事情。但通过这次折腾,我明白了,技术是技术,产品是产品,商业是商业,这三者是不一样的。
一个技术很厉害,不代表就能做出好的产品;一个产品很好,不代表就能有好的商业模式。做产品,不能只看技术有多厉害,还要看用户需求、产品质量、成本、竞争、商业模式等很多因素。
以后再看到新技术,我会更理性,不会盲目兴奋,而是会认真思考,这个技术能解决什么问题,用户愿不愿意买单,商业模式是什么,竞争怎么样,等等。
感悟1:不要盲目追热点
大模型是当时最大的热点,很多人都在追,我也跟着追了。但追了之后才发现,热点不是那么好追的,尤其是个人开发者,在热点面前,往往是炮灰。
以后,不要盲目追热点,要做自己真正感兴趣、真正擅长、真正有机会的事情。热点会过去,但真正的价值会留下来。
感悟2:接受失败,及时止损
做项目,失败是很正常的。不是每个项目都能成功,很多项目,做着做着就发现不行了,这时候要及时止损,不要因为已经投入了很多时间和精力,就舍不得放弃。
沉没成本不是成本,该放弃的时候就要放弃。放弃了这个项目,我才能有时间和精力去做别的更有价值的事情。
当然,放弃不是完全否定,而是从失败中学习,把学到的东西用到以后的项目中。
感悟3:AI是工具,不是万能的
通过这次折腾,我深刻地认识到,AI是一个很强的工具,但不是万能的。它能帮我们做很多事情,提高效率,但它也有很多局限性,不能完全替代人。
比如,GPT-3能生成流畅的文本,但它不能保证内容的真实性,不能有真正的创造力,不能理解复杂的逻辑。这些,还是需要人来做。
所以,不要神化AI,也不要恐惧AI。把它当作一个工具,用它来辅助我们的工作,提高效率,而不是指望它能完全替代我们。人和AI合作,才是最好的方式。
七、给想入门大模型的朋友的建议
最后,给想入门大模型的朋友一些建议,希望你们不要像我一样踩这么多坑。
1. 先想清楚你要做什么,再开始动手
不要因为大模型火,就盲目地开始做项目。先想清楚,你要解决什么问题,用户是谁,需求是不是真实存在的,大模型是不是最合适的解决方案。想清楚了再动手,不要做着做着才发现方向不对。
2. 先做最小可行产品(MVP),快速验证
不要一开始就想做一个大而全的产品,先做一个最小可行产品,快速验证你的想法是不是可行,用户是不是愿意用,商业模式是不是成立。如果验证不行,就及时调整或者放弃,不要投入太多。
3. 认真评估成本和商业模式
大模型的API不便宜,在做项目之前,一定要认真算一下成本,看看商业模式是不是成立,能不能赚到钱。不要等做出来了才发现成本太高,赚不到钱,那就白忙活了。
4. 重视内容质量和安全
大模型生成的内容,可能会有错误,可能会有违规内容。一定要重视内容质量和安全,做好内容审核,避免生成错误的或者违规的内容,否则可能会被封号,甚至承担法律责任。
5. 关注技术发展,但不要盲目追新
大模型领域技术更新很快,要关注最新的发展,但不要盲目追新。每个新模型出来,都要认真评估,看看是不是真的对你的项目有帮助,不要为了用新技术而用新技术。
6. 个人开发者要找准定位
大模型领域,大公司有资金、有算力、有数据、有人才,个人开发者很难和他们竞争。个人开发者要找准自己的定位,做一些大公司看不上或者做不好的细分领域,或者做一些工具类、插件类的产品,发挥自己灵活、快速的优势。
八、写在最后
GPT-3大模型,从入门到放弃,我经历了兴奋、踩坑、纠结、放弃,整个过程虽然没有做出成功的产品,但收获了很多,也成长了很多。
大模型是一个很有前景的方向,它确实能改变很多事情。但它也不是万能的,还有很多问题需要解决。对于个人开发者来说,这个领域机会很多,但坑也很多,需要理性看待,认真评估,不要盲目跟风。
虽然我这次放弃了,但我还是很看好大模型的未来。我相信,随着技术的不断进步,大模型会越来越强,越来越好用,会在更多的领域发挥作用。我也会继续关注这个领域,学习相关的知识,等以后有合适的机会,可能还会再回来做相关的项目。
最后,用一句话结束这篇文章:"技术是美好的,但产品是残酷的。"愿我们都能在技术的浪潮中,找到属于自己的方向,做出真正有价值的产品。
希望我的这段经历,能对想入门大模型的朋友有所帮助。如果有什么问题或者不同的看法,欢迎在评论区交流。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录