模型简介
模型特点
模型能力
使用案例
🚀 NorMistral-7b-warm
NorMistral-7b-warm 是一个大型挪威语模型,它基于 Mistral-7b-v0.1 初始化,并在总共 2600 亿子词标记(使用挪威公开文本重复六次)上进行持续预训练。
该模型是 NORA.LLM 系列的一部分,由奥斯陆大学语言技术小组、高性能语言技术 (HPLT) 项目、挪威国家图书馆和图尔库大学合作开发。所有模型都在相同的数据集上进行预训练,并使用相同的分词器。NorMistral-7b-warm 拥有超过 70 亿个参数,基于 Mistral 架构构建。
NORA.LLM 语言模型系列目前包括:
- NorMistral-7b-warm:基于 Mistral-7b-v0.1 初始化,并在挪威语数据上持续预训练的大语言模型;
- NorMistral-7b-scratch:基于 Mistral 架构,在挪威语数据上从头开始预训练的大语言模型;
- NorBLOOM-7b-scratch:基于 BLOOM 架构,在挪威语数据上从头开始预训练的大语言模型。
免责声明:此模型在原始(主要是基于网络的)文本数据上进行预训练。它未经过微调以遵循指令,在不适当的用户提示下可能会生成有害的完成内容。它主要用于研究目的。
🚀 快速开始
以下是使用该模型进行英语到挪威语机器翻译的简单零样本提示示例:
from transformers import AutoTokenizer, AutoModelForCausalLM
# First, we will have to import the tokenizer and the language model
tokenizer = AutoTokenizer.from_pretrained("norallm/normistral-7b-warm")
model = AutoModelForCausalLM.from_pretrained("norallm/normistral-7b-warm").cuda().eval()
# Now we will define the zero-shot prompt template
prompt = """Engelsk: {0}
Bokmål:"""
# A function that will take care of generating the output
@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=tokenizer('\n').input_ids
)
return tokenizer.decode(prediction[0, input_ids.size(1):]).strip()
# Now you can simply call the generate function with an English text you want to translate:
generate("I'm super excited about this Norwegian NORA model! Can it translate these sentences?")
# > this should output: 'Jeg er super spent på denne norske NORA modellen! Kan den oversette disse setningene?'
✨ 主要特性
- 基于 Mistral 架构,拥有超过 70 亿个参数,在挪威语数据上进行预训练。
- 支持多种自然语言处理任务,如情感分析、阅读理解、语法错误纠正和机器翻译等。
- 提供多种量化版本,可根据不同的硬件资源和质量要求进行选择。
📦 安装指南
在约 16GB VRAM 的 GPU 上使用示例(可在 Google Colab 中尝试)
如果你想以 8 位加载模型,需要安装 bitsandbytes
:
pip install bitsandbytes
pip install accelerate
安装 llama-cpp-python 包
根据你的系统,运行以下命令之一:
# Base llama-ccp-python with no GPU acceleration
pip install llama-cpp-python
# With NVidia CUDA acceleration
CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install llama-cpp-python
# Or with OpenBLAS acceleration
CMAKE_ARGS="-DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS" pip install llama-cpp-python
# Or with CLBLast acceleration
CMAKE_ARGS="-DLLAMA_CLBLAST=on" pip install llama-cpp-python
# Or with AMD ROCm GPU acceleration (Linux only)
CMAKE_ARGS="-DLLAMA_HIPBLAS=on" pip install llama-cpp-python
# Or with Metal GPU acceleration for macOS systems only
CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python
# In windows, to set the variables CMAKE_ARGS in PowerShell, follow this format; eg for NVidia CUDA:
$env:CMAKE_ARGS = "-DLLAMA_OPENBLAS=on"
pip install llama-cpp-python
💻 使用示例
基础用法
以下是使用该模型进行英语到挪威语机器翻译的简单零样本提示示例:
from transformers import AutoTokenizer, AutoModelForCausalLM
# First, we will have to import the tokenizer and the language model
tokenizer = AutoTokenizer.from_pretrained("norallm/normistral-7b-warm")
model = AutoModelForCausalLM.from_pretrained("norallm/normistral-7b-warm").cuda().eval()
# Now we will define the zero-shot prompt template
prompt = """Engelsk: {0}
Bokmål:"""
# A function that will take care of generating the output
@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=tokenizer('\n').input_ids
)
return tokenizer.decode(prediction[0, input_ids.size(1):]).strip()
# Now you can simply call the generate function with an English text you want to translate:
generate("I'm super excited about this Norwegian NORA model! Can it translate these sentences?")
# > this should output: 'Jeg er super spent på denne norske NORA modellen! Kan den oversette disse setningene?'
高级用法
使用 llama-cpp-python 加载模型的示例代码
from llama_cpp import Llama
# Directly from huggingface-hub (requires huggingface-hub to be installed)
# Set gpu_layers to the number of layers to offload to GPU. Set to 0 if no GPU acceleration is available on your system.
llm = Llama.from_pretrained(
repo_id="norallm/normistral-7b-warm", # HuggingFace repository containing the GGUF files.
filename="*Q4_K_M.gguf", # suffix of the filename containing the level of quantization.
n_ctx=32768, # The max sequence length to use - note that longer sequence lengths require much more resources
n_threads=8, # The number of CPU threads to use, tailor to your system and the resulting performance
n_gpu_layers=35 # The number of layers to offload to GPU, if you have GP
📚 详细文档
预训练语料库
该模型仅在公开可用的数据上进行持续预训练。我们结合了 NCC 语料库的公开部分、清理后的 HPLT 语料库和 CulturaX 的资源。这总共产生了超过 340 亿个挪威语(书面挪威语或新挪威语)的子词标记,相当于约 267 亿个以空格分隔的标记。我们还使用 Starcoder 增强了语料库;2600 亿个标记中有 20% 是从这个代码语料库中采样的。根据 Muennighoff 等人 (2023) 的研究结果,自然语言数据重复了六次,以达到 2600 亿个标记的预训练预算。
模型详情
属性 | 详情 |
---|---|
模型开发者 | 奥斯陆大学语言技术小组 |
变体 | NorMistral 目前发布了两个 70 亿参数的变体:一个是从头开始训练的,另一个是从 Mistral 模型热启动的 |
输入 | 文本输入 |
输出 | 生成的文本 |
模型架构 | NorMistral 是一个自回归语言模型,使用基于 Mistral/Llama 语言模型的优化变压器架构 |
训练数据 | NCC + HPLT + CulturaX + Starcoder |
参数 | 70 亿 |
上下文长度 | 2k |
标记数 | 2600 亿 |
学习率 | NorMistral-7b-warm:1.0 x 10-4;NorMistral-7b-scratch:3.0 x 10-4;NorBLOOM-7b-scratch:1.2 x 10-4 |
分词器 | 基于字节的 BPE 分词器,在与该模型相同的挪威语语料库上训练。词汇量大小为 32,768 个标记 |
训练浮点运算次数 | 大约为 1.22e+22 FLOPs;计算方法如 Chowdhery 等人 (2022) 所述 |
模型日期 | 模型于 2023 年 12 月至 2024 年 1 月期间进行预训练 |
状态 | 这些只是预训练的语言模型;指令微调模型即将推出 |
许可证 | Apache-2.0 |
研究论文 | 即将发布 |
初始评估
我们的模型评估仍在进行中,并非详尽无遗。我们提供了在标准自然语言理解和生成任务上的初始评估结果,并且我们的评估设计将不断扩展。用户应针对其特定的模型应用场景进行评估,包括安全和偏差评估。
困惑度
在 挪威语大型语料库 (NCC) 的保留验证集 上的困惑度为 7.43,最终训练困惑度为 4.76。
下游评估
我们在阅读理解、情感分析和机器翻译任务上进行了初始下游评估,使用了开源同行评审的挪威语数据集和基准。我们在 这里 发布了我们的代码库。我们将其与其他官方支持挪威语的预训练生成式语言模型进行了比较:NB-GPT-J、GPT-Sw3 6.7B、GPT-Sw3 6.7B v2 和 Falcon-7B;我们还包括了 Mistral-7b-v0.1 的评估。
情感分析
NoReC (Øvrelid 等人, 2020) 是一个从挪威语评论语料库 (Velldal 等人, 2018) 派生的句子级情感分析数据集。我们使用该任务的二元表述(积极 vs. 消极)。
方法(点击展开)
- 评估设置:零样本和少样本基于困惑度的评估
- 提示:
"Tekst: {text}\nSentiment:{label}"
,其中label
为 "positiv" 或 "negativ" - 少样本结果显示 5 次重复的平均分数
- 评估脚本:https://github.com/ltgoslo/norallm/blob/main/initial_evaluation/sentiment_analysis.py
- 性能指标:宏平均 F1 分数
句子级情感分析任务 (NoReC) 的宏平均 F1 分数
模型 | 0 样本 (宏 F1) | 1 样本 (宏 F1) | 16 样本 (宏 F1) |
---|---|---|---|
NorMistral-7b-warm | 60.6 | 77.8 | 87.3 |
NorMistral-7b-scratch | 47.3 | 62.2 | 80.1 |
NorBLOOM-7b | 75.7 | 73.8 | 65.5 |
NB-GPT-J | 48.4 | 56.5 | 65.2 |
GPT-Sw3-6.7B | 61.5 | 72.2 | 76.5 |
GPT-Sw3-6.7B-v2 | 42.4 | 69.1 | 83.4 |
Falcon-7B | 53.3 | 61.6 | 74.9 |
Mistral-7B-v0.1 | 70.2 | 72.9 | 84.8 |
阅读理解
NorQuAD (Ivanova 等人, 2023) 是一个用于挪威语提取式问答的数据集,设计类似于 SQuAD (Rajpurkar 等人, 2016)。
方法(点击展开)
- 评估设置:通过自然语言生成的零样本和少样本设置,使用贪心解码策略
- 提示:
"Tittel: {title}\n\nTekst: {text}\n\nSpørsmål: {question}\n\nSvar:{answer}"
基于 Brown 等人 (2020) - 少样本结果显示 5 次重复的平均分数
- 评估脚本:https://github.com/ltgoslo/norallm/blob/main/initial_evaluation/norquad.py
- 性能指标:宏平均 F1 分数和精确匹配 (EM)
提取式问答任务 (NorQuAD) 的性能结果
模型 | 0 样本 (F1/EM) | 1 样本 (F1/EM) | 2 样本 (F1/EM) |
---|---|---|---|
NorMistral-7b-warm | 48.6/24.8 | 63.6/40.0 | 66.5/43.8 |
NorMistral-7b-scratch | 34.0/15.7 | 46.5/25.8 | 48.5/27.8 |
NorBLOOM-7b | 35.0/13.3 | 47.7/28.0 | 49.3/30.1 |
NB-GPT-J | 24.4/6.8 | 32.8/11.6 | 35.0/12.3 |
GPT-Sw3-6.7B | 46.5/22.0 | 55.9/32.0 | 58.1/34.3 |
GPT-Sw3-6.7B-v2 | 46.9/22.5 | 61.1/38.9 | 66.0/44.5 |
Falcon-7B | 15.8/7.0 | 27.3/13.9 | 27.4/13.1 |
Mistral-7B-v0.1 | 46.4/22.4 | 64.9/41.1 | 71.7/49.4 |
语法错误纠正
ASK-RAW 是由 Matias Jentoft (2023) 创建的挪威语语法错误纠正 (GEC) 数据集。
方法(点击展开)
- 评估设置:通过自然语言生成的零样本和少样本设置,使用贪心解码策略
- 提示:
"Her er eksempler på perfekt korrigering av grammatiske feil:\n\nTekst: {source_text}\nKorreksjon:{target_text}"
- 少样本结果显示 5 次重复的平均分数
- 评估脚本:https://github.com/ltgoslo/norallm/blob/main/initial_evaluation/gec.py
- 性能指标:评估指标使用 ERRANT,它识别编辑跨度,然后计算黄金编辑和预测编辑之间的 F_{0.5} 分数
[ASK 语料库](https://huggingface.co/datasets/ltg/ask-gec) 的结果 (ERRANT F_{0.5})
模型 | 0 样本 (F0.5) | 1 样本 (F0.5) | 32 样本 (F0.5) |
---|---|---|---|
NorMistral-7b-warm | 40.8 | 41.8 | 48.5 |
NorMistral-7b-scratch | 22.1 | 28.8 | 42.1 |
NorBLOOM-7b | 8.7 | 24.5 | 32.0 |
NB-GPT-J | 9.1 | 28.2 | 30.6 |
GPT-Sw3-6.7B | 30.5 | 42.9 | 50.6 |
GPT-Sw3-6.7B-v2 | 40.6 | 43.4 | 49.8 |
Falcon-7B | 10.8 | 12.4 | 15.5 |
Mistral-7B-v0.1 | 26.0 | 27.4 | 30.6 |
机器翻译
Tatoeba (Tiedemann, 2020) 是一个机器翻译基准,包括数百种语言对。我们考虑了六种语言对(英语 <-> 书面挪威语、英语 <-> 新挪威语和书面挪威语 <-> 新挪威语)。
方法(点击展开)
- 评估设置:通过自然语言生成的零样本和少样本设置,使用贪心解码策略
- 提示:
"{source_language}: {source_text}\n{target_language}:{target_text}"
,其中source_language
和target_language
为Engelsk
、Bokmål
或Nynorsk
。基于 Garcia 等人 (2023) - 少样本结果显示 5 次重复的平均分数
- 评估脚本:https://github.com/ltgoslo/norallm/blob/main/initial_evaluation/machine_translation.py
- 性能指标:BLEU (Papineni 等人, 2002) 和 chrF++ (Popović, 2015)
英语 → 挪威语书面挪威语
模型 | 0 样本 (BLEU/chrF++) | 1 样本 (BLEU/chrF++) | 5 样本 (BLEU/chrF++) |
---|---|---|---|
NorMistral-7b-warm | 55.8/70.7 | 56.7/71.5 | 57.7/72.4 |
NorMistral-7b-scratch | 46.4/62.9 | 50.4/66.3 | 52.1/67.6 |
NorBLOOM-7b | 37.1/53.6 | 50.1/65.8 | 52.0/67.6 |
NB-GPT-J | 8.6/39.1 | 35.9/64.5 | 47.2/68.7 |
GPT-Sw3-6.7B | 21.8/55.2 | 54.5/69.6 | 58.6/73.2 |
GPT-Sw3-6.7B-v2 | 20.6/53.2 | 51.2/66.6 | 58.4/73.0 |
Falcon-7B | 19.1/40.1 | 20.6/41.8 | 22.1/43.6 |
Mistral-7B-v0.1 | 32.5/51.9 | 35.4/55.1 | 36.3/56.0 |
英语 → 挪威语新挪威语
模型 | 0 样本 (BLEU/chrF++) | 1 样本 (BLEU/chrF++) | 5 样本 (BLEU/chrF++) |
---|---|---|---|
NorMistral-7b-warm | 43.6/62.0 | 44.2/63.2 | 44.3/63.7 |
NorMistral-7b-scratch | 38.0/56.9 | 39.2/57.9 | 40.7/59.3 |
NorBLOOM-7b | 35.6/54.7 | 36.6/56.3 | 38.1/57.4 |
NB-GPT-J | 1.7/14.7 | 6.3/34.1 | 35.2/60.4 |
GPT-Sw3-6.7B | 13.4/44.3 | 43.6/62.5 | 44.5/63.5 |
GPT-Sw3-6.7B-v2 | 14.8/45.5 | 43.7/62.3 | 44.0/63.6 |
Falcon-7B | 6.4/28.6 | 8.3/30.5 | 9.3/32.1 |
Mistral-7B-v0.1 | 11.6/35.7 | 13.5/38.7 | 15.0/40.0 |
挪威语书面挪威语 → 英语
模型 | 0 样本 (BLEU/chrF++) | 1 样本 (BLEU/chrF++) | 5 样本 (BLEU/chrF++) |
---|---|---|---|
NorMistral-7b-warm | 56.7/70.6 | 57.7/71.7 | 58.5/72.2 |
NorMistral-7b-scratch | 48.1/62.9 | 51.5/66.6 | 52.6/67.6 |
NorBLOOM-7b | 46.0/61.5 | 51.3/66.7 | 51.7/66.9 |
NB-GPT-J | 23.9/55.3 | 32.3/63.1 | 48.5/68.7 |
GPT-Sw3-6.7B | 47.9/67.8 | 52.4/70.6 | 50.0/70.7 |
GPT-Sw3-6.7B-v2 | 38.8/59.6 | 49.0/68.6 | 50.7/70.6 |
Falcon-7B | 42.4/58.5 | 47.3/62.3 | 48.6/63.3 |
Mistral-7B-v0.1 | 53.8/68.2 | 54.6/69.0 | 56.9/70.7 |
挪威语新挪威语 → 英语
模型 | 0 样本 (BLEU/chrF++) | 1 样本 (BLEU/chrF++) | 5 样本 (BLEU/chrF++) |
---|---|---|---|
NorMistral-7b-warm | 55.1/68.4 | 55.5/69.5 | 56.0/69.8 |
NorMistral-7b-scratch | 47.1/61.9 | 49.4/64.2 | 52.3/66.2 |
NorBLOOM-7b | 45.0/59.3 | 48.3/64.0 | 49.0/64.7 |
NB-GPT-J | 2.9/19.5 | 10.1/41.0 | 44.4/66.9 |
GPT-Sw3-6.7B | 47.8/66.2 | 49.1/68.1 | 49.6/69.4 |
GPT-Sw3-6.7B-v2 | 46.3/67.5 | 48.9/69.3 | 58.2/72.8 |
Falcon-7B | 21.6/40.6 | 31.7/47.4 | 36.6/57.1 |
Mistral-7B-v0.1 | 40.7/57.1 | 46.2/60.7 | 49.9/63.8 |
挪威语书面挪威语 → 挪威语新挪威语
模型 | 0 样本 (BLEU/chrF++) | 1 样本 (BLEU/chrF++) | 5 样本 (BLEU/chrF++) |
---|---|---|---|
NorMistral-7b-warm | 75.8/87.5 | 74.0/86.9 | 75.3/87.5 |
NorMistral-7b-scratch | 38.0/56.9 | 39.2/57.9 | 40.7/59.3 |
NorBLOOM-7b | 71.5/84.4 | 70.1/84.1 | 71.9/85.1 |
NB-GPT-J | 6.6/35.5 | 9.6/41.0 | 26.0/64.7 |
GPT-Sw3-6.7B | 63.6/82.8 | 74.7/86.0 | 75.8/86.9 |
GPT-Sw3-6.7B-v2 | 57.5/81.1 | 75.3/86.7 | 76.7/87.6 |
Falcon-7B | 28.7/59.2 | 29.8/60.8 | 32.1/62.3 |
Mistral-7B-v0.1 | 32.0/62.2 | 32.9/62.6 | 35.2/63.9 |
挪威语新挪威语 → 挪威语书面挪威语
模型 | 0 样本 (BLEU/chrF++) | 1 样本 (BLEU/chrF++) | 5 样本 (BLEU/chrF++) |
---|---|---|---|
NorMistral-7b-warm | 88.1/93.6 | 89.2/94.3 | 89.3/94.6 |
NorMistral-7b-scratch | 85.1/91.4 | 86.6/92.4 | 87.4/93.0 |
NorBLOOM-7b | 78.7/88.5 | 84.2/90.7 | 87.4/93.0 |
NB-GPT-J | 2.7/18.5 | 6.9/35.6 | 52.9/84.3 |
GPT-Sw3-6.7B | 652.3/82.4 | 86.1/92.5 | 87.8/93.6 |
GPT-Sw3-6.7B-v2 | 72.0/88.6 | 86.1/92.5 | 88.2/93.9 |
Falcon-7B | 36.7/61.6 | 38.3/63.5 | 45.8/68.1 |
Mistral-7B-v0.1 | 57.0/74.8 | 59.9/77.5 | 62.6/79.1 |
硬件和软件
训练因素: 模型在 芬兰的 LUMI 集群 上使用 Megatron-DeepSpeed 库进行预训练。 碳足迹: 预训练一个模型大约需要 70000 GPU 小时的计算时间,使用 AMD MI250X GPU(假设每个 AMD MI250X 设备有 2 个 GPU),每个 GPU 功耗为 500W。LUMI 是世界上最节能的数据中心之一,其能源消耗 100% 由可再生电力覆盖。
量化
提供的文件
名称 | 量化方法 | 每个权重的位数 | 大小 | 所需的最大 RAM/VRAM | 使用场景 |
---|---|---|---|---|---|
normistral-7b-warm-Q3_K_M.gguf | Q3_K_M | 3.89 | 3.28 GB | 5.37 GB | 非常小,质量损失高 |
normistral-7b-warm-Q4_K_M.gguf | Q4_K_M | 4.83 | 4.07 GB | 6.16 GB | 中等,质量平衡 |
normistral-7b-warm-Q5_K_M.gguf | Q5_K_M | 5.67 | 4.78 GB | 6.87 GB | 大,质量损失非常低 |
normistral-7b-warm-Q6_K.gguf | Q6_K | 6.56 | 5.54 GB | 7.63 GB | 非常大,质量损失极低 |
normistral-7b-warm-Q8_0.gguf | Q8_0 | 8.50 | 7.17 GB | 9.26 GB | 非常大,质量损失极低 |
如何从 Python 代码运行
你可以使用 llama-cpp-python 从 Python 中使用 GGUF 模型。
如何在 Python 代码中加载此模型,使用 llama-cpp-python
完整文档请参阅:llama-cpp-python 文档。
🔧 技术细节
该模型基于 Mistral 架构,使用优化的变压器架构进行自回归语言建模。它在挪威语数据上进行预训练,使用了多种公开可用的语料库,并结合了代码语料库进行增强。模型的训练使用了 Megatron-DeepSpeed 库,在芬兰的 LUMI 集群上进行。训练过程中考虑了多种因素,如学习率、上下文长度等。同时,模型提供了多种量化版本,以满足不同硬件资源和质量要求。
📄 许可证
本项目采用 Apache-2.0 许可证。



