LLM 有不同类型的模型,例如 Base 和 Instruct,他们有什么区别呢,Base 模型是基于原始语料进行训练的模型,生成结果时会持续生成,直到达到最大长度。而指令模型是经过问答数据集进行训练的,回答是会根据上下文判断来终止对话。本文将使用红 Qwen 2.5 分别展示两种模型的效果:
Qwen/Qwen2.5-1.5B
Qwen 2.5 Base 模型,结果指出输出:
## 下载模型
model_id = "./qwen2.5"
from modelscope import snapshot_download
snapshot_download("Qwen/Qwen2.5-1.5B", local_dir="./qwen2.5")
## 加载模型
from modelscope import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", load_in_4bit=True)
## 加载Tokenizer
from modelscope import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(model_id)
## 输入转 Token
sequence = ["In a hole in the ground there lived a hobbit."]
encoded_text = tokenizer(sequence, return_tensors="pt").to("cuda")
print(tokenizer(sequence))
## 输出Token
generate_id = model.generate(**encoded_text)
## Token 转文字
tokenizer.batch_decode(generate_id, skip_special_tokens=True)[0]
可以看到结果一直在输出
Qwen/Qwen2.5-1.5B-Instruct
只需要将模型名称修改一下,其他代码完全一致。可以看到回答简洁很多。
总结
Instruct 和 Base 模型的区别主要是训练数据的不同,Instruct 在 Base 的基础上做了更有针对性的对话训练,日常功能开发中,模型需要选用 Instruct 模型。