前言
今天,B站大模型团队发布了Index-1.9B系列模型,是Index大语言模型系列中的19亿参数规模的模型,如下所示
-
Index-1.9B base : 基座模型,具有 19亿 非词嵌入参数量,在2.8T 中英文为主的语料上预训练,多个评测基准上与同级别模型比处于领先. -
Index-1.9B pure : 基座模型的对照组,与base具有相同的参数和训练策略,不同之处在于严格过滤了该版本语料中所有指令相关的数据,以此来验证指令对benchmark的影响. -
Index-1.9B chat : 基于index-1.9B base通过SFT和DPO对齐后的对话模型。 -
Index-1.9B character : 在SFT和DPO的基础上引入了RAG来实现fewshots角色扮演定制。
技术报告
B站大模型团队在github中发布了Index-1.9B的技术报告,以下是针对技术报告中内容的总结。
语料
-
量级:2.8T的中英混合语料(4:5),代码占比6%。 -
语料清洗和常见的清洗策略大同小异,值得注意的是报告中提到,B站实现了一种“支持任意长度、任意位置的文档内字符串去重方法”。
Tokenizer
-
BPE算法,基于SentencePiece进行训练 -
中文独立训练,词表大小为65029 -
append后的tokenizer拥有优秀的压缩率
预训练
模型结构
模型结构上 Follow Llama 的设定,使用了更深的结构,并增加了norm-head结构,支持更高的学习率进行学习。
参数 | 取值 |
---|---|
Hidden Size | 2048 |
FFN Size | 5888 |
n.Heads | 16 |
n.Layers | 36 |
Seq. | 4096 |
Max LR | 5E-04 |
Batch Size | 4M |
训练过程
采用了目前比较常见的两阶段训练策略
-
在stable阶段,使用通用语料,固定学习率 5e-4 进行训练 -
在decay阶段(后10%),使用高质量语料数据(提高精选数据的浓度),通过学习率衰减(5e-4 -> 5e-6)进行训练
在decay阶段提高指令数据的浓度可以显著提升benchmark的成绩,因此B站大模型团队同步开源了Index-1.9B-Pure模型,全程使用自然语言文本。
在Index-1.9B的训练过程中,观察到了一次模型性能的突涨,类似于GLM团队的论文Understanding Emergent Abilities of Language Models from the Loss Perspective中提到的涌现能力。
评测结果
Index-1.9B 通用理解能力的评测结果
对齐
-
10M的高质量中英文指令数据,采用主流的聚类增强多样性和Reward Model打分策略对数据进行清洗和筛选,筛选出高质量且多样的子集。 -
针对指令跟随,通过调整系统指令,能够引导模型给出不同设定和风格的回答,从而实现角色扮演,语言风格转化等能力。
DPO
-
10w+条高质量的pair数据。 -
主要针对写作类、指令遵循和安全进一步对齐。一方面,对于写作类任务,回答具备开放性,单一的目标文本并不一定是最优的回答,模型在DPO优化中能学会优劣的标准,从而生成更符合人类偏好的回答;另一方面,对于指令遵循和安全性任务,通过学习对比chosen和reject回答,模型能掌握指令的要求以及拒答的类型,从而更进一步对齐人类偏好,一个比较好的例子是指令遵循中的字数控制。
模型列表和下载链接
Github链接:https://github.com/bilibili/Index-1.9B【求star!!!】
huggingface链接:https://huggingface.co/IndexTeam
模型名称 | 模型链接 |
---|---|
Index-1.9B | https://huggingface.co/IndexTeam/Index-1.9B |
Index-1.9B-Pure | https://huggingface.co/IndexTeam/Index-1.9B-Pure |
Index-1.9B-Chat | https://huggingface.co/IndexTeam/Index-1.9B-Chat |
Index-1.9B-Character | https://huggingface.co/IndexTeam/Index-1.9B-Character |
模型推理
使用Transformers 推理,将参数model_path替换为下载好的Index-1.9B-Chat路径即可体验。
import torch
import argparse
from transformers import AutoTokenizer, AutoModelForCausalLM
parser = argparse.ArgumentParser()
parser.add_argument('--model_path', default="", type=str, help="")
args = parser.parse_args()
tokenizer = AutoTokenizer.from_pretrained(args.model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(args.model_path, torch_dtype=torch.bfloat16, trust_remote_code=True, device_map='auto')
model = model.eval()
print('model loaded', args.model_path, model.device)
system_message = "你是由哔哩哔哩自主研发的大语言模型,名为“Index”。你能够根据用户传入的信息,帮助用户完成指定的任务,并生成恰当的、符合要求的回复。"
query = "续写 天不生我金坷垃"
model_input = []
model_input.append({"role": "system", "content": system_message})
model_input.append({"role": "user", "content": query})
inputs = tokenizer.apply_chat_template(model_input, tokenize=False, add_generation_prompt=False)
input_ids = tokenizer.encode(inputs, return_tensors="pt").to(model.device)
history_outputs = model.generate(input_ids, max_new_tokens=300, top_k=5, top_p=0.8, temperature=0.3, repetition_penalty=1.1, do_sample=True)
# 删除</s>
if history_outputs[0][-1] == 2:
history_outputs = history_outputs[:, :-1]
outputs = history_outputs[0][len(input_ids[0]):]
print('User:', query)
print('nModel:', tokenizer.decode(outputs))
Demo
官方仓库内提供了方便简洁的web_demo,依赖Gradio,安装命令:
pip install gradio==4.29.0
通过以下代码启动一个web server,在浏览器输入访问地址后,可使用 Index-1.9B-Chat 模型进行对话:
python demo/web_demo.py --port='port' --model_path='/path/to/model/'
使用默认的system message
你也可以改变system message,让他扮演一位阴阳怪气的B站老哥
你也可以通过上传符合要求的角色对话语料,使用Index-1.9B-Character实现few shots角色定制
总结
以上是对B站大模型团队发布的Index-1.9B模型的简要介绍,详情可以访问官方github或者huggingface地址了解更多细节,求点赞Star!!!
原文始发于微信公众号(ChallengeHub):Index-1.9B: 小巧精炼的B站大模型