基础模型: inceptionai/jais-family-590m
语言:
- 阿拉伯语
- 英语
缩略图: null
标签:
- 阿拉伯语
- 英语
- 大语言模型
- 解码器
- 因果语言模型
- jais系列
- 对话式
许可证: apache-2.0
管道标签: 文本生成
Jais系列模型卡
Jais系列模型是一套完整的阿拉伯语-英语双语大语言模型(LLMs)。这些模型在保持强大英语能力的同时,特别优化了阿拉伯语表现。我们发布了两种基础模型变体:
- 从头预训练的模型(
jais-family-*
)
- 基于Llama-2自适应预训练的模型(
jais-adapted-*
)
本次发布包含8种规模的20个模型,参数量从5.9亿到700亿不等,训练数据涵盖高达1.6万亿token的阿拉伯语、英语和代码数据。所有预训练模型都经过阿拉伯语和英语指令数据的精细调优(*-chat
),适用于对话场景。
我们希望通过这次大规模发布加速阿拉伯语NLP研究,并为阿拉伯语及双语社区开启众多下游应用。我们为阿拉伯语模型成功展示的训练和适应技术可扩展至其他中低资源语言。
Jais系列详情
- 开发机构: Inception, Cerebras Systems
- 支持语言: 阿拉伯语(现代标准阿拉伯语)和英语
- 输入: 纯文本数据
- 输出: 模型生成文本
- 模型规模: 5.9亿、13亿、27亿、67亿、70亿、130亿、300亿、700亿参数
- 演示: 访问实时演示
- 许可证: Apache 2.0
模型架构:
本系列所有模型均为基于Transformer的自回归语言模型(仅解码器架构,类似GPT-3)。
Jais原生模型(jais-family-*
)采用从头训练方式,整合了SwiGLU非线性激活函数和ALiBi位置编码。这些架构增强使模型能够处理长序列,提升上下文处理能力和精确度。
Jais自适应模型(jais-adapted-*
)基于Llama-2构建,采用RoPE位置嵌入和分组查询注意力机制。我们通过添加阿拉伯语数据扩展了分词器,将Jais-30b词汇表中的32,000个新阿拉伯语token加入Llama-2分词器,使计算效率提升3倍以上。新阿拉伯语token嵌入的初始化分为两步:首先利用两种词汇表共有的英语token学习从Jais-30b嵌入空间到Llama嵌入空间的线性投影,然后将该投影应用于转换现有的Jais-30b阿拉伯语嵌入。
快速开始
以下是使用模型的示例代码。注意该模型需要自定义模型类,加载时必须启用trust_remote_code=True
。
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model_path = "inceptionai/jais-family-590m-chat"
prompt_eng = "### Instruction:你的名字是'Jais',以阿联酋最高峰Jebel Jais命名。你由阿联酋'Inception'团队打造。你是一个乐于助人、尊重他人且诚实的助手。在确保安全的前提下,尽可能提供有帮助的回答。请完成以下[|Human|]与[|AI|]之间的对话:\n### Input: [|Human|] {Question}\n[|AI|]\n### Response :"
prompt_ar = "### Instruction:اسمك \"جيس\" وسميت على اسم جبل جيس اعلى جبل في الامارات. تم بنائك بواسطة Inception في الإمارات. أنت مساعد مفيد ومحترم وصادق. أجب دائمًا بأكبر قدر ممكن من المساعدة، مع الحفاظ على البقاء أمناً. أكمل المحادثة بين [|Human|] و[|AI|] :\n### Input:[|Human|] {Question}\n[|AI|]\n### Response :"
device = "cuda" if torch.cuda.is_available() else "cpu"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", trust_remote_code=True)
def get_response(text, tokenizer=tokenizer, model=model):
input_ids = tokenizer(text, return_tensors="pt").input_ids
inputs = input_ids.to(device)
input_len = inputs.shape[-1]
generate_ids = model.generate(
inputs,
top_p=0.9,
temperature=0.3,
max_length=2048,
min_length=input_len + 4,
repetition_penalty=1.2,
do_sample=True,
)
response = tokenizer.batch_decode(
generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
)[0]
response = response.split("### Response :")[-1]
return response
ques = "ما هي عاصمة الامارات؟"
text = prompt_ar.format_map({'Question': ques})
print(get_response(text))
ques = "阿联酋的首都是什么?"
text = prompt_eng.format_map({'Question': ques})
print(get_response(text))
训练详情
预训练数据
Jais系列模型训练使用了高达1.6万亿token的多样化英语、阿拉伯语和代码数据,数据来源包括:
- 网页: 公开可用的阿拉伯语和英语网页、维基百科文章、新闻和社交媒体内容
- 代码: 多种编程语言代码数据,增强模型推理能力
- 书籍: 精选阿拉伯语和英语书籍数据,提升长上下文建模和连贯叙事能力
- 科学文献: ArXiv论文子集,增强推理和长上下文能力
- 合成数据: 通过内部机器翻译系统将高质量英语资源(如维基百科和书籍)翻译为阿拉伯语,扩充阿拉伯语数据量
我们对训练数据进行了深度预处理和去重。阿拉伯语数据采用定制预处理流程过滤语言质量,详见Jais论文。
- Jais原生预训练(
jais-family-*
): 采用阿拉伯语:英语:代码=1:2:0.4的比例混合,在解决阿拉伯语数据稀缺问题的同时提升双语表现
- Jais自适应预训练(
jais-adapted-*
): 使用约3340亿阿拉伯语token与英语、代码数据混合,根据不同模型规模调整比例,在保持英语能力的同时增强阿拉伯语表现
微调数据
所有Jais系列对话模型均使用阿拉伯语和英语的单轮/多轮提示-响应对进行微调。数据源包括经过主题和风格多样性筛选的开源微调数据集,以及增强文化适应性的内部人工标注数据,辅以机器翻译、蒸馏和模型自对话生成的合成内容。整体指令微调数据集包含约1000万英语和400万阿拉伯语提示-响应对。
训练流程
在(jais-family-*
)预训练中,文档被打包成以EOS token分隔的序列,模型以自回归方式训练,对所有token计算损失。对于jais-30b模型,通过逐步加入长上下文文档,将上下文长度从2k扩展到8K再到16K,利用较短上下文长度下的快速初始训练,最终支持更大上下文长度。
在(jais-adapted-*
)自适应预训练中,我们首先如[模型