写这篇文章的起因在于我近期经常向Cursor咨询概念问题,得到的回答都比较满意,这次一个小的代码问题翻车了,就想记录下来,结合李宏毅老师最新的机器学习课程,写下了一些个人理解。
一、发现问题:Cursor生成错误代码
我需要对pd.Series
格式的数据进行reshape
,因为最近经常用Cursor(一个基于GPT-3/4的代码辅助工具,近期好像停止了对GPT-4的接入),于是直接咨询了它:
直接复制这段代码并运行,报错了:
报错原因是:AttributeError: 'Series' object has no attribute 'reshape'
。Series
没有reshape
属性,我们知道reshape
其实是numpy
中的方法,所以需要先将Series
转换为array
,再进行reshape
操作,即
reshaped = np.array(s).reshape(2, 3)
二、解决问题:Cursor解决报错问题
虽然它提供了错误代码,但是这个小问题解决起来应该不难,我又接着问了它,怎么解决上面的问题,它给出了可以正常运行的答案和理由:reshape
方法在pandas Series
中不可用,需要先用np.array(s)
将Series
转换为一个NumPy array
。
思考1:语言模型无法执行代码
无论是GPT-3还是GPT-4,它始终是一个生成式语言模型,输入文本或者图片,均是在完成文字接龙式的工作,输出相应的文本结果。输出的文本可以以代码的形式展现,但是语言模型本身无法执行代码,无法保证生成代码的正确性。要想减少错误,可能需要在模型进行预训练或监督学习时进行优化。(据OpenAI内部评估,GPT-4产生正确回应的可能性要比GPT-3.5高出40%。)
三、发现问题测试:使用ChatGPT测试
虽然Cursor官网之前使用了GPT-3,但是我还是使用ChatGPT重复了上述发现问题的过程。
第一次测试:回答正确
ChatGPT的回答通过s.values
将Series
数据转换为array
格式,运行正常。
第二次测试:回答错误
这个结果又犯了之前Cursor部分所说的错误。
思考2:ChatGPT的回答存在随机性
对于一般的机器学习/深度学习模型而言,单一的输入会对应固定的输出,但对于需要有”创造力”的任务(例如聊天、绘画),不同的人会期望有不同的回答。将神经网络作为生成器使用,在输入中加入随机的概率分布(噪声),通过神经网络,就能生成复杂的分布,输出不同的结果。以上就是生成式对抗网络(GAN)的生成器部分,判别器和对抗部分暂时不涉及(个人还在学习中)。
而ChatGPT正是使用了生成式对抗网络(GAN),输出的结果具有随机性,可以提供各式各样有具有”创造力”的回答。像前一部分的问题测试,同一问题得到对错两种答案,这可能会造成一定的困扰,或者无法复现原来的回答,这个特点好坏都有。
以下是ChatGPT自己的回答:
在new chat里又问了一次:
四、解决问题测试
第一次测试:解决问题
在发现问题测试得到错误回答后,我又继续说明执行报错了,它的回答是reshape()
方法不支持在Pandas 1.0之后版本的Series上使用,然后给出了与测试正确的回答中相同的正确代码。
第二次测试:解决问题
又询问了一遍,给出了与上面不同的方法to_numpy
解决问题,但是文字描述部分提到的Pandas版本与上面不同。
思考3:ChatGPT的时效性问题
对比解决问题测试中的两次回答,第一次回答reshape()
方法不支持在Pandas 1.0之后版本的Series上使用,第二次回答在Pandas 1.3.0及以后的版本中Series没有reshape方法。虽然逻辑上Pandas 1.0之后没有与1.3.0之后没有并不能算矛盾,但我还是去Pandas官网找到了Pandas 1.0.5的文档,里面提到了• The Series, Categorical, and Index classes have dropped the reshape method (GH13012)
,说明1.0.5版本就移除reshape
方法了。
编程语言的时效性
对于这个问题,我的想法是,各种编程语言、框架或者第三方库都在不断更新,以我个人最常使用的pandas为例,经常会有FutureWarning
提到当前使用的部分方法会在未来版本被废弃,那么ChatGPT能否规避版本落后导致的错误呢?这个可能需要时间来得到答案。
真实信息的时效性
ChatGPT是不能联网的,也就是说,不能通过网络搜索来获取答案,当前的训练数据库的最晚时间只到2021年9月,在遇到涉及时间的问题时无法提供答案。考虑到ChatGPT的训练数据量庞大,过于频繁地更新数据库并不现实,时效问题还是需要通过搜索引擎获取。
总结
- ChatGPT无法执行代码,不能保证生成的代码完全正确
- ChatGPT的回答存在随机性,这一特别有好有坏
- ChatGPT的数据库不能联网,时效性较差
本文正在参加 人工智能创作者扶持计划