🚀 MiniCPM-2B-128k
MiniCPM 是面壁与清华大学自然语言处理实验室共同开源的系列端侧语言大模型,主体语言模型 MiniCPM-2B 仅有 24 亿(2.4B)的非词嵌入参数量。MiniCPM-2B-128k 是一次基于 MiniCPM-2B 的长度扩展尝试,也是第一个 3B 以下的长文本模型。它解决了长文本处理的难题,为长文本场景提供了高效的解决方案。
🚀 快速开始
MiniCPM 是面壁与清华大学自然语言处理实验室共同开源的系列端侧语言大模型,主体语言模型 MiniCPM-2B 仅有 24 亿(2.4B)的非词嵌入参数量。MiniCPM-2B-128k 是一次基于 MiniCPM-2B 的长度扩展尝试,也是第一个 3B 以下的长文本模型。
✨ 主要特性
- 长上下文支持:支持 128k 上下文,在综合长文本评测 InfiniteBench 上取得 7B 以下最佳成绩,但在 4k 以内性能有下降。
- 指令模板更新:为方便社区开发者使用,该模型在对齐时将 <用户>{} 指令模板更新为了 chatml 格式(<|im_start|>user\n{}<|im_end|>\n<|im_start|>assistant\n),这也有助于用户使用 vllm openai compatible server 模式部署和使用。
- 词表扩展:由于并行机制需要,去除了 tie_embedding,并扩展词表到 127660。
📚 详细文档
评测结果
模型 |
平均得分 |
无代码和数学平均得分 |
密钥 |
数字字符串 |
KV 检索 |
英文长书选择 |
中文长书问答 |
英文长书问答 |
英文长书摘要 |
英文长对话问答 |
数学计算 |
数学查找 |
代码调试 |
代码运行 |
LWM-Text-128k |
24.45 |
33.62 |
100 |
97.8 |
0.6 |
28.82 |
15.93 |
14.31 |
9.99 |
1.5 |
0 |
3.43 |
20.05 |
1 |
Yarn-Mistral-7b-128k |
19.84 |
27.36 |
92.71 |
|
0 |
27.95 |
15.49 |
9.55 |
9.06 |
7.5 |
0 |
17.14 |
0.76 |
1.25 |
Mistral-7B-Instruct-v0.2(ABF 1000w) |
27.75 |
36.9 |
100 |
78.98 |
3.6 |
37.12 |
11.74 |
17.37 |
21.12 |
9.5 |
0 |
29.43 |
17.51 |
0 |
Yi-6B-200k |
22.15 |
32.54 |
100 |
94.92 |
0 |
36.68 |
15.07 |
9.2 |
0.92 |
3.5 |
0 |
4.29 |
0.51 |
0.75 |
chatglm3-6b-128k |
25.58 |
36.57 |
89.93 |
99.66 |
5.2 |
46.29 |
10.7 |
8.38 |
25.91 |
6.5 |
0 |
8 |
5.33 |
1 |
MiniCPM-2.4B-128k |
27.32 |
37.68 |
98.31 |
99.83 |
9 |
29.69 |
23.06 |
16.33 |
15.73 |
9.5 |
0 |
4.29 |
22.08 |
0 |
⚠️ 重要提示
我们发现使用 Huggingface 生成质量略差于 vLLM,因此推荐使用 vLLM 进行测试。
局限性
- 受限于模型规模,模型可能出现幻觉性问题。其中由于 DPO 模型生成的回复内容更长,更容易出现幻觉。我们也将持续进行 MiniCPM 模型的迭代改进。
- 为了保证在学术研究用途上模型的通用性,我们未对模型进行任何身份认同训练。同时由于我们用 ShareGPT 开源语料作为部分训练数据,模型可能会输出类似 GPT 系列模型的身份认同信息。
- 受限于模型规模,模型的输出受到提示词(prompt)的影响较大,可能多次尝试产生不一致的结果。
- 受限于模型容量,模型的知识记忆较不准确,后续我们将结合 RAG 方法来增强模型的知识记忆能力。
💻 使用示例
基础用法
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
torch.manual_seed(0)
path = 'openbmb/MiniCPM-2B-128k'
tokenizer = AutoTokenizer.from_pretrained(path)
model = AutoModelForCausalLM.from_pretrained(path, torch_dtype=torch.bfloat16, device_map='cuda', trust_remote_code=True)
responds, history = model.chat(tokenizer, "山东省最高的山是哪座山, 它比黄山高还是矮?差距多少?", temperature=0.8, top_p=0.8)
print(responds)