基础模型: meta-llama/Llama-2-70b
语言:
- 阿拉伯语
- 英语
缩略图: 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位置嵌入和分组查询注意力。我们通过阿拉伯语数据扩展了分词器,将计算效率提高了3倍以上。具体来说,我们从Jais-30b词汇表中添加了32,000个新阿拉伯语token到Llama-2分词器中。为了初始化这些新阿拉伯语token嵌入,我们首先使用两个词汇表中共享的英语token学习从Jais-30b嵌入空间到Llama嵌入空间的线性投影,然后将该投影应用于将现有的Jais-30b阿拉伯语嵌入转换到Llama-2嵌入空间。
快速开始
以下是使用模型的示例代码。注意该模型需要自定义模型类,因此用户在加载模型时必须启用trust_remote_code=True
。
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model_path = "inceptionai/jais-adapted-70b"
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)
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
def get_response(text, tokenizer=tokenizer, model=model):
tokenized = tokenizer(text, return_tensors="pt")
input_ids, attention_mask = tokenized['input_ids'].to(device), tokenized['attention_mask'].to(device)
input_len = input_ids.shape[-1]
generate_ids = model.generate(
input_ids,
attention_mask=attention_mask,
top_p=0.9,
temperature=0.3,
max_length=2048,
min_length=input_len + 4,
repetition_penalty=1.2,
do_sample=True,
pad_token_id=tokenizer.pad_token_id
)
response = tokenizer.batch_decode(
generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
)[0]
return response
text = "عاصمة دولة الإمارات العربية المتحدة ه"
print(get_response(text))
text = "The capital of UAE is"
print(get_response(text))
训练详情
预训练数据
Jais系列模型使用高达1.6万亿token的多样化英语、阿拉伯语和代码数据进行训练。数据来源包括:
-
网页: 公开可用的阿拉伯语和英语网页、维基百科文章、新闻文章和社交网络内容
-
代码: 为增强模型推理能力,我们包含了多种编程语言的代码数据
-
书籍: 精选公开阿拉伯语和英语书籍数据,提升长上下文建模和连贯叙事能力
-
科学文献: 包含ArXiv论文子集以提升推理和长上下文能力
-
合成数据: 通过内部机器翻译系统将高质量英语资源(如英语维基百科和英语书籍)翻译成阿拉伯语,扩充阿拉伯语数据量
我们对训练数据进行了广泛的预处理和去重。对于阿拉伯语,我们使用自定义预处理流程筛选语言质量高的数据。更多信息请参阅Jais论文。
- Jais预训练(
jais-family-*
): 延续我们在Jais中的语言对齐混合实验,使用阿拉伯语:英语:代码=1:2:0.4的比例。这种从头预训练方案解决了阿拉伯语数据稀缺问题,同时提升两种语言的表现。
- Jais自适应预训练(
jais-adapted-*
): 对于Llama-2的自适应预训练,我们使用了约3340亿阿拉伯语token与英语和代码数据的混合。我们根据不同模型规模调整混合比例,在保持英语性能的同时引入强大的阿拉伯语能力。
微调数据
Jais系列中的所有对话模型都使用阿拉伯语和英语的单轮和多轮提示-响应对进行微调。数据源包括经过主题和风格多样性筛选的开源微调数据集。此外,还加入了内部策划的人类数据以增强文化适应性。这些数据通过机器翻译、蒸馏和模型自对话等合成方法生成的内容进行补充。总体而言,我们更新的指令微调数据集包含约1000万英语和400万阿拉伯语提示-响应对。
训练流程
在(jais-family-*
)模型的预训练中,文档被打包成由EOS token分隔的序列,模型以自回归方式进行训练,对所有token应用损失函数。对于jais-30b模型,通过加入精选的长上下文文档,上下文长度从2k逐步扩展到8K再到16K。这种渐进式扩展利用了较短上下文长度下更快的初始训练,同时在训练后期逐步支持更大的上下文长度。
在(jais-adapted-*
)模型的自适应预训练中,我们首先按照模型架构中描述的方法初始化新分词器和阿拉伯语嵌入。在训练中,我们采用两阶段方法来解决观察到的阿拉伯语新嵌入norm较高的问题。第一阶段冻结模型主干,使用约150亿token的双语英语-阿拉伯语语料库训练嵌入。第二阶段解冻主干,对所有参数进行持续预训练。
在指令微调阶段,每个训练示例包含单轮或多轮提示及其响应。