🚀 NorMistral-11b-warm
NorMistral-11b-warm 是一个大型挪威语模型,它基于 Mistral-Nemo-Base-2407 进行初始化,并在总共 2500 亿子词标记上进行持续预训练。训练数据混合了斯堪的纳维亚语、萨米语、英语和代码数据(挪威公开文本重复四次)。该模型在 Samuel 等人于 2025 年发表的论文 Small Languages, Big Models: A Study of Continual Training on Languages of Norway 中被提出,是由 奥斯陆大学语言技术小组 (LTG) 开发的 NORA.LLM 系列的一部分。
免责声明:此模型在原始(主要基于网络)文本数据上进行预训练。它未经过微调以遵循指令,在不适当的用户提示下可能会生成有害内容。该模型主要用于研究目的。
🚀 快速开始
NorMistral-11b-warm 是一个强大的挪威语模型,可用于多种自然语言处理任务。你可以按照下面的使用示例快速上手。
✨ 主要特性
- 基于改进的 Llama 设计的 Mistral 架构,具有多种先进特性,如预归一化、SwiGLU 激活函数等。
- 混合掩码因果训练,可作为因果生成模型和双向编码器模型使用。
- 经过三阶段持续预训练,包括目标语言的分词器优化、嵌入权重重新对齐和全模型训练。
📦 安装指南
文档中未提及安装步骤,可参考 transformers
库的安装方法来使用该模型。
💻 使用示例
基础用法
以下是如何将 NorMistral-11B 作为标准因果语言模型用于翻译的示例:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("norallm/normistral-11b")
model = AutoModelForCausalLM.from_pretrained("norallm/normistral-11b").cuda().eval()
prompt = """Engelsk: {0}
Bokmål:"""
eos_token_ids = [
token_id
for token_id in range(tokenizer.vocab_size)
if '\n' in tokenizer.decode([token_id])
]
@torch.no_grad()
def generate(text):
text = prompt.format(text)
input_ids = tokenizer(text, return_tensors='pt').input_ids.cuda()
prediction = model.generate(
input_ids,
max_new_tokens=64,
do_sample=False,
eos_token_id=eos_token_ids
)
return tokenizer.decode(prediction[0, input_ids.size(1):]).strip()
generate("I'm excited to try this new Norwegian language model!")
高级用法
内存高效加载
对于显存有限的系统,你可以以 8 位或 4 位量化方式加载模型:
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("norallm/normistral-11b-warm")
model = AutoModelForCausalLM.from_pretrained(
"norallm/normistral-11b",
device_map='auto',
load_in_8bit=True,
torch_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
"norallm/normistral-11b",
device_map='auto',
load_in_4bit=True,
torch_dtype=torch.bfloat16
)
双向掩码语言模型用法
由于该模型在混合因果掩码目标上进行了预训练,它知道如何双向处理文本。你可以像微调其他 BERT 模型一样微调该模型,也可以直接用于掩码语言建模:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained(
"norallm/normistral-11b-warm"
)
model = AutoModelForCausalLM.from_pretrained(
"norallm/normistral-11b-warm"
).cuda().eval()
text = "En søt lundefugl flyr over de<mask>norske fjorder."
input_ids = tokenizer(text, return_tensors='pt').input_ids.cuda()
attention_mask = torch.zeros(input_ids.size(0), 1, input_ids.size(1), input_ids.size(1), device=input_ids.device)
output_logits = model(
input_ids=input_ids,
attention_mask=attention_mask,
return_dict=True
).logits
predictions = output_logits[0, :, :].argmax(dim=-1)
print(f"{tokenizer.decode(input_ids[0, 1:])} -> {tokenizer.decode(predictions[:-1])}")
📚 详细文档
预训练语料库
该模型在公开可用数据和萨米语自定义网络爬取数据的组合上进行预训练。总的训练语料库包含来自以下来源的 2500 亿标记:
- 挪威语文本(书面挪威语和新挪威语):该集合由挪威国家图书馆创建,是 NCC 更新的预发布版本(代号为 “Mímir core”)。它包括:a) 挪威巨量语料库 (NCC) 中具有允许许可证的公共部分(即不包括使用 CC BY - NC 2.0 许可证的报纸文本);b) 书面挪威语和新挪威语的 CulturaX;c) 书面挪威语和新挪威语的 HPLT 语料库 v1.2。
- 北萨米语文本:来源包括 a) Glot500;b) SIKOR 北萨米语免费语料库;c) 自定义网络爬取数据(从萨米语维基百科外部链接开始),单独发布为
ltg/saami-web
。
- 用于知识/语言迁移的其他语言:a) 来自 CulturaX 和 Glot500 的丹麦语、瑞典语、冰岛语和法罗语;b) 来自 FineWeb-edu 的高质量英语;c) 来自 The Stack v2(高质量子集) 的编程代码。
语料库通过策略性上采样进行了仔细平衡,以处理不同语言之间的资源差异。遵循数据受限的缩放定律,目标语言的语料库数据被多次重复(低资源语言最多重复 16 次),以达到最佳训练预算,同时避免过拟合。
分词器
该模型使用了一个专门针对目标语言训练的新分词器,因此与原始的 Mistral-Nemo-Base-2407 模型相比,推理速度大幅提高。以下是不同语言的子词与单词拆分比例:
分词器 |
标记数量 |
书面挪威语 |
新挪威语 |
萨米语 |
丹麦语 |
瑞典语 |
Mistral-Nemo-Base-2407 |
131072 |
1.79 |
1.87 |
2.63 |
1.82 |
2.00 |
NorMistral-11b-warm |
51200 |
1.22 |
1.28 |
1.82 |
1.33 |
1.39 |
评估
关于评估设置和新挪威语基准的更多细节将在后续论文中描述。
模型详情
属性 |
详情 |
模型开发者 |
奥斯陆大学语言技术小组与 NORA.LLM 合作 |
架构 |
NorMistral-11B 使用基于改进 Llama 设计的 Mistral 架构,具有预归一化(RMSNorm)、SwiGLU 激活函数、旋转位置嵌入、分组查询注意力等特性,共 40 个变压器层,隐藏维度为 5120,中间维度为 14336,32 个查询头和 8 个键值头(维度 128),词汇表大小为 51200 个标记,总参数为 114 亿 |
训练详情 |
训练标记:2500 亿;批量大小:1024 × 4096 标记(序列数 × 序列长度);训练步骤:60000;峰值学习率:1e - 4;热身步骤:1000;学习率衰减步骤:10000;优化器:AdamW(β₁ = 0.9,β₂ = 0.95,ε = 1e - 8);权重衰减:0.1;训练精度:bfloat16;硬件:256 个 AMD MI250X GPU(128GB);训练时间:8.5 天;理论计算:2.0e22 FLOP/s;模型 FLOP/s 利用率(MFU):38% |
独特特性 |
混合掩码因果训练(90% 因果语言模型,10% 掩码下一个标记预测);可作为因果生成模型和双向编码器模型使用;三阶段持续预训练:1. 目标语言的分词器优化;2. 嵌入权重重新对齐;3. 全模型训练 |
基础模型 |
从 Mistral-Nemo-Base-2407 初始化 |
许可证 |
Apache 2.0 |
🔧 技术细节
模型采用了先进的 Mistral 架构,结合了多种优化技术,如预归一化、SwiGLU 激活函数等,以提高模型的性能和效率。在训练过程中,使用了混合掩码因果训练方法,使得模型既可以作为因果生成模型,也可以作为双向编码器模型使用。同时,通过三阶段持续预训练,不断优化模型在目标语言上的表现。
📄 许可证
我们以 Apache 2.0 许可证发布该模型,表明我们不对模型权重施加任何额外限制。然而,我们不拥有训练数据集中的数据。
引用
@misc{samuel2025smalllanguagesbigmodels,
title={Small Languages, Big Models: A Study of Continual Training on Languages of Norway},
author={David Samuel and Vladislav Mikhailov and Erik Velldal and Lilja Øvrelid and Lucas Georges Gabriel Charpentier and Andrey Kutuzov and Stephan Oepen},
year={2025},
eprint={2412.06484},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2412.06484},
}
联系我们
如果您对该模型有任何疑问,请撰写 社区消息 或联系 David Samuel(davisamu@ifi.uio.no)。