Index-1.9B: 小巧精炼的B站大模型

AI 4个月前 admin
181 0 0

前言

今天,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拥有优秀的压缩率Index-1.9B: 小巧精炼的B站大模型

预训练

模型结构

模型结构上 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 通用理解能力的评测结果Index-1.9B: 小巧精炼的B站大模型

对齐

  • 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 messageIndex-1.9B: 小巧精炼的B站大模型

Index-1.9B: 小巧精炼的B站大模型

你也可以改变system message,让他扮演一位阴阳怪气的B站老哥Index-1.9B: 小巧精炼的B站大模型

你也可以通过上传符合要求的角色对话语料,使用Index-1.9B-Character实现few shots角色定制Index-1.9B: 小巧精炼的B站大模型

总结

以上是对B站大模型团队发布的Index-1.9B模型的简要介绍,详情可以访问官方github或者huggingface地址了解更多细节,求点赞Star!!!

原文始发于微信公众号(ChallengeHub):Index-1.9B: 小巧精炼的B站大模型

版权声明:admin 发表于 2024年6月14日 上午8:01。
转载请注明:Index-1.9B: 小巧精炼的B站大模型 | CTF导航

相关文章