测试和对比一下ChatGLM2-6B和BaiChuan-13B的对自然语言的理解结果
- 0. 背景
- 1. 测试示例说明
- 2. ChatGLM2-6B 的测试代码和测试结果(截图)
- 3. Baichuan-13B 的测试代码和测试结果(截图)
- 4. Llama-2-70b-Chat 测试结果(截图)
- 5. ChatGPT(3.5) 测试结果(截图)
- 6. Claude2 测试结果(截图)
- 7. Bard 测试结果(截图)
- 8. NewBing 测试结果(截图)
- 9. Cohere 测试结果(截图)
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 测试结果(截图)
第一次结果,
第二次结果,
结论:
第一次答案正确,第二次答案错误。
完结!