包含ChatGPT,讯飞星火,通义千问,腾讯元宝,智谱清言。
目标是想让大模型解释一个用于预处理人体骨骼关节三维坐标数据样本进行填补空帧的Python函数。
def f_padding_none(data):s = data.copy()# print('pad the null frames with the previous frames')for i_s, skeleton in enumerate(tqdm(s)): # padif skeleton.sum() == 0:print(i_s, ' has no skeleton')for i_p, person in enumerate(skeleton):if person.sum() == 0:continueif person[0].sum() == 0:index = (person.sum(-1).sum(-1) != 0)tmp = person[index].copy()person *= 0person[:len(tmp)] = tmpfor i_f, frame in enumerate(person):if frame.sum() == 0:if person[i_f:].sum() == 0:rest = len(person) - i_fnum = int(np.ceil(rest / i_f))pad = np.concatenate([person[0:i_f] for _ in range(num)], 0)[:rest]s[i_s, i_p, i_f:] = padbreakelse:person[i_f] = person[i_f - 1]return s
其填补空帧的逻辑主要有三个:
1. 如果数据开头就有空帧,则将数据的后续非空帧补到开头。
2. 如果数据末尾段全是空帧,则对数据末尾空帧进行重复填充。
3. 如果数据中间有一些空帧,则使用前面一帧进行填充。
没有提前prompt,直接新建对话就问:请解释以下代码 其输入为人体骨骼节点三维坐标数据(N,C,T,V,M)。
(大模型回复有随机性,测试也不严谨,不代表各模型真实水平)
一、ChatGPT
因为我之前在别的聊天中有问过相似的问题,所以我开启了ChatGPT的临时聊天:
可以看出解释的还是中规中矩的,三个主要的逻辑都有解释到位。
二、讯飞星火
可以看出解释的比较笼统,没有说出逻辑,只是阐述了算法是怎么进行的。
追问了一下:
可以看出上下文联系能力不强。
更详细的提示了一下,解释得还可以。
之后又试了一下讯飞星火的智能体iFlyCode,其回复类似:
三、通义千问
解释的相比上一个更加有逻辑性,但是对于逻辑2和3解释的不太到位,还是有些难理解。
和上一个一样继续追问一下:
上下文联系能力比上一个好一些。
此外也试了一下官方智能体:
对于逻辑2和3相比之前有了不错的进步,但尴尬的是竟然缺少了对逻辑1的解释。
此外上下文联系能力还是没有:
四、腾讯元宝
这个问题中没有换行是因为复制进去就是这样的,其他大模型复制问题的时候没有这个情况。
解释的一般,和讯飞星火一样没有说出逻辑,只是阐述了算法是怎么进行的。
虽然在回答中已经说过了但是还是追问一下:
上下文联系能力还是可以的,此外其会在每个问题下面会进行联想:
其也有丰富的智能体库,但不是官方的就不试了:
五、智谱清言
解释的挺不错的,和ChatGPT可以说是不相上下,三个逻辑都有解释。
追问一下:
上下文联系能力不错,且也有联想追问选项。
此外CodeGeeX应该是清华和智谱联合出品的,来试一下这个智能体:
更像是给代码做注释。
六、GitHub Copilot
顺便试了一下Pycharm中的GitHub Copilot(不知道怎么设置成中文,所以中文是百度翻译):
Within each skeleton, the function iterates over each person. If a person has no data, it skips to the next person. If the first frame of a person is empty, it identifies the frames that contain data and shifts them to the beginning:
在每个骨架内,该函数迭代每个人。如果一个人没有数据,它会跳到下一个人。如果一个人的第一帧是空的,它会识别包含数据的帧并将其移动到开头:
The function then iterates over each frame of the person. If a frame is empty, it checks if all subsequent frames are also empty. If so, it pads the remaining frames with repeated data from the previous frames. Otherwise, it fills the current empty frame with the data from the previous frame:
然后,该函数迭代人的每一帧。如果一个帧是空的,它会检查所有后续帧是否也是空的。如果是这样,它会用前一帧的重复数据来填充剩余的帧。否则,它将用前一帧的数据填充当前空帧:
其实解释的是挺到位的(百度翻译后有些问题,但是英文原文是准确的)。
总结
总体来说,ChatGPT和智谱清言(ChatGLM)的效果是比较好的。