🚀 NorMistral-11b-warm
NorMistral-11b-warm は、Mistral-Nemo-Base-2407 から初期化された大規模ノルウェー語モデルです。このモデルは、スカンジナビア語、サーミ語、英語、コードデータ(オープンなノルウェー語テキストを4回繰り返し使用)を混合した合計2500億のサブワードトークンで継続的に事前学習されています。このモデルは、Samuel らによる論文 Small Languages, Big Models: A Study of Continual Training on Languages of Norway(2025年)で紹介され、オスロ大学の言語技術グループ (LTG) によって開発された NORA.LLM ファミリーの一部を構成しています。
免責事項: このモデルは生の(主にウェブベースの)テキストデータで事前学習されています。指示に従うように微調整されておらず、不適切なユーザープロンプトの後に有害な補完を生成する可能性があります。主に研究目的で意図されています。
🚀 クイックスタート
NorMistral-11b-warmは、大規模なノルウェー語モデルで、多様な言語データを用いて事前学習されています。以下では、このモデルの基本的な情報や使用方法を説明します。
✨ 主な機能
- 混合マスク因果学習(90% 因果言語モデル、10% マスク次トークン予測)をサポート。
- 因果生成モデルと双方向エンコーダモデルの両方として使用可能。
- 3段階の継続的事前学習を行っている。
📦 インストール
このモデルは transformers
ライブラリを使用して読み込むことができます。以下のようにインストールします。
pip install transformers torch
💻 使用例
基本的な使用法
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!")
高度な使用法
VRAMが限られたシステムでは、モデルを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")です。以下のもので構成されています。
- 北サーミ語テキストは、以下のソースから取得されています。
- 知識/言語転送用の追加言語:
コーパスは、言語間のリソース不均衡を処理するために戦略的なアップサンプリングによって慎重にバランスが取られています。データ制約のあるスケーリング則に従って、ターゲット言語のコーパスデータは複数回(低リソース言語の場合は最大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 が共同開発 |
アーキテクチャ |
Mistralアーキテクチャ(改良型Llamaデザイン)を使用。以下の特徴があります。 - RMSNormによる事前正規化 - SwiGLU活性化関数 - 回転位置埋め込み - グループ化クエリアテンション - 40層のトランスフォーマー層 - 隠れ次元: 5,120 - 中間次元: 14,336 - 32個のクエリヘッドと8個のキー&バリューヘッド(次元128) - 語彙サイズ: 51,200トークン - 総パラメータ数: 114億 |
学習詳細 |
- 学習トークン: 2500億 - バッチサイズ: 1,024 × 4,096トークン(シーケンス数 × シーケンス長) - 学習ステップ: 60,000 - ピーク学習率: 1e-4 - ウォームアップステップ: 1,000 - 学習率減衰ステップ: 10,000 - オプティマイザー: 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% 因果LM、10% マスク次トークン予測) - 因果生成モデルと双方向エンコーダモデルの両方として使用可能 - 3段階の継続的事前学習: 1. ターゲット言語のトークナイザー最適化 2. 埋め込み重みの再調整 3. 全モデル学習 |
ベースモデル |
Mistral-Nemo-Base-2407 から初期化 |
ライセンス |
Apache 2.0 |
🔧 技術詳細
- 混合マスク因果学習を用いることで、因果言語モデルと双方向エンコーダモデルの両方の特性を兼ね備えています。
- 3段階の継続的事前学習により、ターゲット言語に対する最適化が行われています。
📄 ライセンス
このモデルは 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) に連絡してください。