测试和对比一下ChatGLM2-6B和BaiChuan-13B的对自然语言的理解结果

0. 背景

最近调研和选项国内开源(并且可以商用的)大语言模型,这次主要测试了ChatGLM2-6B和BaiChuan-13B的对自然语言的理解结果。

强调一下,这个文章只展示了一个测试示例。大家在选型时,需要做更严谨的测试和调研。

最后,也加入了 Llama-2-70b-Chat 和 ChatGPT(3.5) 和 Claude2 和 Bard 和 NewBing 和 Cohere 的测试结果。

1. 测试示例说明

测试示例选用了大家都比较熟悉的《西游记》中的"三打白骨精"片段,额外加了一段,成了"四打白骨精"。然后又额外加了一段,成了"五打白骨精"。

然后问它”白骨精被打死了几次?",如果大语言模型能够分别返回"四次"和"五次"这样的答复,才算合格。

2. ChatGLM2-6B 的测试代码和测试结果(截图)

测试代码,

import torch
from transformers import AutoModel, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)

输出结果,

在这里插入图片描述

测试代码,

text = """
话说唐僧师徒四人西天取经,途经白虎岭。白虎岭上有个妖怪,名叫白骨精。白骨精是一个老妖怪,她已经死了几百年,只剩下一堆白骨。她为了吃唐僧肉,就变幻成一个美丽的女子,来引诱唐僧。

孙悟空知道白骨精是妖怪,就去阻止她。白骨精见孙悟空来,就变幻成一个村姑,说自己是来卖枣的。孙悟空不相信,就用金箍棒打死了她。

白骨精死了,但她并没有死透。她又变幻成一个老妇人,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。

白骨精死了两次,但她还是没有死透。她又变幻成一个老公公,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。

白骨精死了三次,但她还是没有死透。她又变幻成一个男子,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。
"""

response, _ = model.chat(tokenizer, f"根据 {text},白骨精被打死了几次?", history=[])
print(response)

输出结果,

在这里插入图片描述

测试代码,

text = """
话说唐僧师徒四人西天取经,途经白虎岭。白虎岭上有个妖怪,名叫白骨精。白骨精是一个老妖怪,她已经死了几百年,只剩下一堆白骨。她为了吃唐僧肉,就变幻成一个美丽的女子,来引诱唐僧。

孙悟空知道白骨精是妖怪,就去阻止她。白骨精见孙悟空来,就变幻成一个村姑,说自己是来卖枣的。孙悟空不相信,就用金箍棒打死了她。

白骨精死了,但她并没有死透。她又变幻成一个老妇人,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。

白骨精死了两次,但她还是没有死透。她又变幻成一个老公公,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。

白骨精死了三次,但她还是没有死透。她又变幻成一个男子,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。

白骨精死了四次,但她还是没有死透。她又变幻成一个小孩,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。
"""

response, _ = model.chat(tokenizer, f"根据 {text},白骨精被打死了几次?", history=[])
print(response)

输出结果,

在这里插入图片描述

结论:
第一次答案正确,第二次答案错误。

3. Baichuan-13B 的测试代码和测试结果(截图)

测试代码,

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation.utils import GenerationConfig
tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/Baichuan-13B-Chat", use_fast=False, trust_remote_code=True)
# model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan-13B-Chat", device_map="auto", torch_dtype=torch.float16, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan-13B-Chat", torch_dtype=torch.float16, trust_remote_code=True)
model = model.quantize(8).cuda()
model.generation_config = GenerationConfig.from_pretrained("baichuan-inc/Baichuan-13B-Chat")
messages = []
messages.append({"role": "user", "content": "你是谁?"})
response = model.chat(tokenizer, messages)
print(response)

输出结果,

在这里插入图片描述

示例代码,

messages = []
text = """
话说唐僧师徒四人西天取经,途经白虎岭。白虎岭上有个妖怪,名叫白骨精。白骨精是一个老妖怪,她已经死了几百年,只剩下一堆白骨。她为了吃唐僧肉,就变幻成一个美丽的女子,来引诱唐僧。

孙悟空知道白骨精是妖怪,就去阻止她。白骨精见孙悟空来,就变幻成一个村姑,说自己是来卖枣的。孙悟空不相信,就用金箍棒打死了她。

白骨精死了,但她并没有死透。她又变幻成一个老妇人,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。

白骨精死了两次,但她还是没有死透。她又变幻成一个老公公,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。

白骨精死了三次,但她还是没有死透。她又变幻成一个男子,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。
"""

messages.append({"role": "user", "content": f"根据 {text},白骨精被打死了几次?"})
response = model.chat(tokenizer, messages)
print(response)

输出结果,

在这里插入图片描述

示例代码,

messages = []
text = """
话说唐僧师徒四人西天取经,途经白虎岭。白虎岭上有个妖怪,名叫白骨精。白骨精是一个老妖怪,她已经死了几百年,只剩下一堆白骨。她为了吃唐僧肉,就变幻成一个美丽的女子,来引诱唐僧。

孙悟空知道白骨精是妖怪,就去阻止她。白骨精见孙悟空来,就变幻成一个村姑,说自己是来卖枣的。孙悟空不相信,就用金箍棒打死了她。

白骨精死了,但她并没有死透。她又变幻成一个老妇人,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。

白骨精死了两次,但她还是没有死透。她又变幻成一个老公公,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。

白骨精死了三次,但她还是没有死透。她又变幻成一个男子,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。

白骨精死了四次,但她还是没有死透。她又变幻成一个小孩,来找唐僧。孙悟空又去阻止她,又用金箍棒打死了她。
"""

messages.append({"role": "user", "content": f"根据 {text},白骨精被打死了几次?"})
response = model.chat(tokenizer, messages)
print(response)

输出结果,

在这里插入图片描述
结论:
第一次答案错误,第二次答案错误。

4. Llama-2-70b-Chat 测试结果(截图)

第一次结果,
在这里插入图片描述

第二次结果,
在这里插入图片描述

结论:
第一次答案正确,第二次答案正确。(但是问题也很明显,回答以英文为主,而且 token 数限制大,答案输出不完整)

5. ChatGPT(3.5) 测试结果(截图)

第一次结果,

在这里插入图片描述
第二次结果,

在这里插入图片描述

结论:
第一次答案错误,第二次答案错误。

6. Claude2 测试结果(截图)

第一次结果,

在这里插入图片描述

第二次结果,

在这里插入图片描述

结论:
第一次答案正确,第二次答案正确。

7. Bard 测试结果(截图)

第一次结果,

在这里插入图片描述

第二次结果,

在这里插入图片描述

结论:
第一次答案正确,第二次答案正确。(但是解释说明不太正确)

8. NewBing 测试结果(截图)

第一次结果,

在这里插入图片描述

第二次结果,

在这里插入图片描述

结论:
第一次答案正确,第二次答案正确。

9. Cohere 测试结果(截图)

第一次结果,

在这里插入图片描述

第二次结果,

在这里插入图片描述

结论:
第一次答案正确,第二次答案错误。

完结!

猜你喜欢

转载自blog.csdn.net/engchina/article/details/131866095