🚀 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)。