模型简介
模型特点
模型能力
使用案例
🚀 NB-Whisper Base
挪威NB-Whisper Base模型 由挪威国家图书馆自豪地开发。NB-Whisper是一系列前沿的模型,专为自动语音识别(ASR)和语音翻译而设计。这些模型基于 OpenAI的Whisper 工作成果。该系列的每个模型都经过250,000步的训练,使用了包含800万个样本的多样化数据集。这些样本由时长为30秒的对齐音频片段组成,总计达到惊人的66,000小时的语音数据。欲深入了解我们的训练方法和数据集构成,请关注我们即将发布的文章。
✨ 主要特性
模型系列
模型大小 | 参数数量 | 模型链接 |
---|---|---|
Tiny | 39M | NB-Whisper Tiny |
Base | 74M | NB-Whisper Base |
Small | 244M | NB-Whisper Small |
Medium | 769M | NB-Whisper Medium |
Large | 1550M | NB-Whisper Large |
逐字模型
虽然主要模型适用于大多数转录任务,但我们展示了如何轻松改变主要模型的输出。以下模型是在上述主要模型的基础上额外训练250步得到的,可能适用于更有针对性的用例:
- 逐字版本:这种小写变体更注重字面意思,适用于需要详细转录的任务,如语言分析。
模型大小 | 参数数量 | 语义版本 |
---|---|---|
Tiny | 39M | Tiny - semantic |
Base | 74M | Base - semantic |
Small | 244M | Small - semantic |
Medium | 769M | Medium - semantic |
Large | 1550M | Large - semantic |
模型描述
属性 | 详情 |
---|---|
开发者 | NB AI-Lab |
共享者 | NB AI-Lab |
模型类型 | whisper |
支持语言(NLP) | 挪威语、书面挪威语、新挪威语、英语 |
许可证 | Apache 2.0 |
训练基础模型 | openai/whisper-base |
代码仓库 | https://github.com/NbAiLab/nb-whisper/ |
论文 | 即将发布 |
演示 | 查看本页面的Spaces部分 |
🚀 快速开始
在线演示
你可以通过本页面右侧的HuggingFace推理API直接试用这些模型。请注意,模型首次加载时需要一些时间,并且运行时CPU容量有限,可能会较慢。为了提升体验,我们暂时在TPU上托管了部分模型,为期数天,这将显著提高模型性能。你可以在 主页 的 Spaces 部分进行探索。
使用HuggingFace进行本地部署
你也可以在本地运行这些模型。Tiny、Base和Small模型针对CPU执行进行了优化,而Medium和Large模型建议使用配备GPU的系统以确保高效处理。如果你已经在机器上安装了 Python,那么使用HuggingFace的Transformers库来设置和使用这些模型非常简单。你可以参考使用 示例mp3文件 的示例。
# 下载示例文件
$ wget -N https://github.com/NbAiLab/nb-whisper/raw/main/audio/king.mp3
# 安装必要的库
$ pip install transformers>=4.35.2
完成上述步骤后,你可以在Python中运行以下代码:
from transformers import pipeline
# 加载模型
asr = pipeline("automatic-speech-recognition", "NbAiLabBeta/nb-whisper-base")
# 转录
asr("king.mp3", generate_kwargs={'task': 'transcribe', 'language': 'no'})
预期输出
{
{'text': ' Nordmenn er nordlendinger, trøndere, sørlendinger og folk fra alle andre regioner. Nordmenn er også innvandret fra Afghanistan, Pakistan, Polen, Sverige, Somalia og Syria. Det er ikke alltid så lett å si hvor vi er fra, hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra.'}
}
扩展HuggingFace使用
从上述输出可以看出,视频时长超过30秒时,输出末尾会出现多次重复。通过传递 chunk_lengt_s
参数,我们可以转录更长的文件。根据经验,将该参数设置为28秒而非默认的30秒,效果会稍好一些。如果可能,我们还建议将束搜索大小设置为5,这将大大提高准确性,但会稍微增加时间和内存消耗。以下示例展示了如何转录为英语或新挪威语,以及如何获取句子和单词的时间戳。
# 长转录
asr("king.mp3", chunk_length_s=28, generate_kwargs={'task': 'transcribe', 'language': 'no'})
# 通过设置束搜索大小为5提高准确性
asr("king.mp3", chunk_length_s=28, return_timestamps=True, generate_kwargs={'num_beams': 5, 'task': 'transcribe', 'language': 'no'})
# 返回时间戳
asr("king.mp3", chunk_length_s=28, return_timestamps=True, generate_kwargs={'task': 'transcribe', 'language': 'no'})
# 返回单词级时间戳
asr("king.mp3", chunk_length_s=28, return_timestamps="word", generate_kwargs={'task': 'transcribe', 'language': 'no'})
# 转录为新挪威语
asr("king.mp3", chunk_length_s=28, generate_kwargs={'task': 'transcribe', 'language': 'nn'})
# 转录为英语
asr("king.mp3", chunk_length_s=28, generate_kwargs={'task': 'transcribe', 'language': 'en'})
预期输出
长转录:
{
{'text': ' Nordmenn er nordlendinger, trøndere, sørlendinger og folk fra alle andre regioner. Nordmenn er også innvandret fra Afghanistan, Pakistan, Polen, Sverige, Somalia og Syria. Det er ikke alltid så lett å si hvor vi er fra, hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra, hvilken nasjonalitet vi tilhører. Det vi kaller hjem, er der hjertet vårt er, og det kan ikke alltid plasseres innenfor landegrenser. Nordmenn er jenter som er glad i jenter, gutter som er glad i gutter, og jenter og gutter som er glad i hverandre. Nordmenn trommer på Gud, Allah, Altet og ingenting. Nordmenn liker Grieg, Kygo, Helbilis og Kari Bremnes. Med andre ord, Norge er dere. Norge er oss. Mitt største håp for Norge er at vi skal klare å ta vare på hverandre, at vi skal bygge dette landet videre på tillit, fellesskap og raushet.'}
}
时间戳:
{
{'text': ' Nordmenn er nordlendinger, trøndere, sørlendinger og folk fra alle andre regioner. Nordmenn er også innvandret fra Afghanistan, Pakistan, Polen, Sverige, Somalia og Syria. Det er ikke alltid så lett å si hvor vi er fra, hvilken nasjonalitet vi er fra. Hvilken nasjonalitet vi er fra. hvilken nasjonalitet vi tilhører. Det vi kaller hjem, er der hjertet vårt er, og det kan ikke alltid plasseres innenfor landegrenser. Nordmenn er jenter som er glad i jenter, gutter som er glad i gutter, og jenter og gutter som er glad i hverandre. Nordmenn trommer på Gud, Allah, Altet og ingenting. Nordmenn liker Grieg, Kygo, Helbiles og Kari Bremnes. Med andre ord, Norge er dere. Norge er oss. Mitt største håp for Norge er at vi skal klare å ta vare på hverandre, at vi skal bygge dette landet videre på tillit, fellesskap og raushet.',
'chunks': [{'timestamp': (0.0, 5.46),
'text': ' Nordmenn er nordlendinger, trøndere, sørlendinger'},
{'timestamp': (5.52, 8.68), 'text': ' og folk fra alle andre regioner.'},
{'timestamp': (8.68, 16.64),
'text': ' Nordmenn er også innvandret fra Afghanistan, Pakistan, Polen, Sverige, Somalia og Syria.'},
{'timestamp': (16.64, 13.3),
'text': ' Det er ikke alltid så lett å si hvor vi er fra, hvilken nasjonalitet vi er fra.'},
{'timestamp': (13.32, 30.28),
'text': ' Hvilken nasjonalitet vi er fra. hvilken nasjonalitet vi tilhører.'},
{'timestamp': (32.52, 39.16),
'text': ' Det vi kaller hjem, er der hjertet vårt er, og det kan ikke alltid plasseres'},
{'timestamp': (39.16, 42.0), 'text': ' innenfor landegrenser.'},
{'timestamp': (42.0, 46.74),
'text': ' Nordmenn er jenter som er glad i jenter, gutter som er glad i gutter,'},
{'timestamp': (46.74, 51.12),
'text': ' og jenter og gutter som er glad i hverandre.'},
{'timestamp': (51.16, 57.42),
'text': ' Nordmenn trommer på Gud, Allah, Altet og ingenting.'},
{'timestamp': (57.42, 64.3),
'text': ' Nordmenn liker Grieg, Kygo, Helbiles og Kari Bremnes.'},
{'timestamp': (64.34, 71.24),
'text': ' Med andre ord, Norge er dere. Norge er oss.'},
{'timestamp': (71.24, 78.04),
'text': ' Mitt største håp for Norge er at vi skal klare å ta vare på hverandre,'},
{'timestamp': (78.12, 84.68),
'text': ' at vi skal bygge dette landet videre på tillit, fellesskap og raushet.'}]}
}
单词级时间戳:
{
{"text": "Nordmenn er nordlendinger, trøndere, sørlendinger og folk fra alle andre regioner. Nordmenn er også innvandret fra Afghanistan, Pakistan, Polen, Sverige, Somalia og Syria. Det er ikke alltid så lett å si hvor vi er fra, hvilken nasjonalitet vi tilhører. Det vi kaller hjem, er der hjertet vårt er, og det kan ikke alltid plasseres innenfor landegrenser. Nordmenn er jenter som er glad i jenter, gutter som er glad i gutter, og jenter og gutter som er glad i hverandre. Nordmenn trommer på Gud, Allah, Altet og ingenting. Nordmenn liker Grieg, Kygo, Helbilis og Kari Bremnes. Med andre ord, Norge er dere. Norge er oss. Mitt største håp for Norge er at vi skal klare å ta vare på hverandre, at vi skal bygge dette landet videre på tillit, fellesskap og raushet.",
"chunks": [
{"text": "Nordmenn", "timestamp": [0.72, 1.42]},
{"text": "er", "timestamp": [1.42, 1.74]},
// ... 更多块 ...
{"text": "raushet.", "timestamp": [83.1, 84.88]}
]
}
}
新挪威语:
{
{"text": "Nordmenn er nordlendingar, trøndarar, sørlendingar og folk frå alle andre regionar. Nordmenn er også innvandra frå Afghanistan, Pakistan, Polen, Sverige, Somalia og Syria. Det er ikkje alltid så lett å seie kvar vi er frå, kva nasjonalitet vi tilhøyrer. Det vi kallar heim, er der hjartet vårt er, og det kan ikkje alltid plasserast innanfor landegrenser. Nordmenn er jenter som er glad i jenter, gutar som erade i gutar, og jenter og gutar som er glade i kvarandre. Nordmenn trommar på Gud, Allah, Altet og ingenting. Nordmenn liker Grieg, Kygo, Helbiles og Kari Bremnes. Med andre ord, Noreg er dere! Noreg er oss. Mitt største håp for Noreg er at vi skal klare å ta vare på kvarandre, at vi skal byggje dette landet vidare på tillit, fellesskap og raushet."}
}
英语:
{
{"text": "Norwegians are Norwegians, trønders, southerners and people from all other regions. Norwegians are also invaded from Afghanistan, Pakistan, Poland, Sweden, Somalia and Suria. It is not always so easy to say where we are from, what nationality we belong to. What we call home is where our heart is, and it cannot always be placed within national borders. Norwegians are girls who like girls, boys who like boys, and girls and boys who like each other. Norwegians thrump on God, Allah, Altet and nothing. Norwegians like Grieg, Kygo, Helbilis and Kari Bremnes. In other words, Norway is you. Norway is us. My biggest hope for Norway is that we should be able to take care of each other, that we should build this country on trust, community and generosity."}
}
Whisper CPP
Whisper CPP是Whisper模型的C++实现,它在提供相同功能的同时,还具备C++的高效性和性能优化。这使得可以将任何Whisper模型嵌入到二进制文件中,便于开发实际应用。不过,使用它需要对编译C++程序有一定的了解。其 主页 提供了如何构建应用程序的示例,包括实时转录。
我们已经将该模型转换为Whisper CPP二进制文件使用的ggml格式模型。你可以 此处 下载该文件,同时也提供了 量化版本。
# 下载并编译whisper.cpp
$ git clone --depth 1 https://github.com/ggerganov/whisper.cpp --branch v1.5.1
$ cd whisper.cpp/
$ make
# 需要将音频转换为WAV格式,因为whisper.cpp仅支持该格式
$ wget -N https://github.com/NbAiLab/nb-whisper/raw/main/audio/king.mp3
$ ffmpeg -i king.mp3 -ar 16000 -ac 1 -c:a pcm_s16le king.wav
# 从本网站下载两个ggml文件
wget -N https://huggingface.co/NbAiLab/nb-whisper-base/resolve/main/ggml-model.bin -O models/nb-base-ggml-model.bin
wget -N https://huggingface.co/NbAiLab/nb-whisper-base/resolve/main/ggml-model-q5_0.bin -O models/nb-base-ggml-model-q5_0.bin
# 使用f16默认模型运行
$ ./main -l no -m models/nb-base-ggml-model.bin king.wav
# 或者使用量化版本
$ ./main -l no -m models/nb-base-ggml-model-q5_0.bin king.wav
WhisperX和说话人分离
说话人分离是自然语言处理和自动语音识别中的一种技术,用于识别和分离音频记录中的不同说话人。它根据说话人对音频进行分段,提高会议或电话转录的质量。我们发现 WhisperX 是使用我们的模型进行语音分离的最简单方法。此外,WhisperX使用基于音素的Wav2Vec模型来改进时间戳的对齐。截至2023年12月,它还原生支持使用nb-wav2vec模型。目前,它使用 PyAnnote-audio 进行实际的说话人分离。该软件包有相当严格的许可证,你需要同意用户条款。请按照以下说明操作。
# 按照https://github.com/m-bain/whisperX上的安装说明进行操作
# 确保你有HuggingFace账户并同意了pyannote的条款
# 登录(或在命令行中提供HF令牌)
huggingface-cli login
# 下载测试文件
wget -N https://github.com/NbAiLab/nb-whisper/raw/main/audio/knuthamsun.mp3
# 可选操作。如果你遇到不支持挪威语的问题,请执行以下操作
pip uninstall whisperx && pip install git+https://github.com/m-bain/whisperx.git@8540ff5985fceee764acbed94f656063d7f56540
# 转录测试文件。所有转录结果将保存在mp3文件所在的目录中
whisperx knuthamsun.mp3 --model NbAiLabBeta/nb-whisper-base --language no --diarize
你也可以从Python运行WhisperX。请查看 WhisperX主页 上的说明。
API
通过简单API访问模型的说明包含在Spaces部分的演示中。请注意,这些演示是临时的,仅在几周内可用。
📚 详细文档
训练数据
训练数据来自Språkbanken和挪威国家图书馆的数字馆藏,包括:
- NST挪威语ASR数据库(16 kHz)及其对应数据集
- Språkbanken转录的挪威议会演讲
- 电视广播(NRK)字幕(挪威国家图书馆数字馆藏)
- 有声读物(挪威国家图书馆数字馆藏)
下游应用
这些模型,尤其是较小的模型,偶尔可能会出现幻觉,并且可能会遗漏部分转录内容。它们旨在将口语转换为语法正确的书面句子,可能并非总是逐字翻译。我们为希望采用不同转录风格的用户提供了两个额外的模型变体。我们鼓励用户亲自尝试这些模型以获得更好的理解。
偏差、风险和局限性
在未进行充分风险评估和缓解的情况下使用这些模型可能被视为不负责任的行为。这些模型可能包含偏差或其他不良扭曲。部署这些模型或将其集成到系统或服务中的用户有责任减轻风险并遵守适用的人工智能法规。作为模型所有者,挪威国家图书馆对第三方使用这些模型所产生的任何结果不承担责任。
软件
该模型使用Jax/Flax进行训练,并转换为PyTorch、Tensorflow、whisper.cpp和ONXX格式。这些格式的文件可在 文件和版本
部分获取。我们欢迎将模型转换为其他格式的请求。所有训练代码和脚本均根据Apache许可证2.0在GitHub仓库 nb-whisper 中发布。
引用与贡献者
NB-Whisper Base模型是挪威国家图书馆的NoSTram项目的成果,该项目由Per Egil Kummervold(@pere)领导。主要贡献者包括Javier de la Rosa(@versae)、Freddy Wetjen(@freddyw)和Rolv-Arild Braaten(@Rolv-Arild)。在Svein Arne Brygfjeld(@Brygfjeld)的指导下,NB AI-Lab支持了该项目的成功完成。关于我们的过程和发现的详细论文即将发布。
免责声明
本仓库中发布的模型仅供通用目的使用,并可供第三方使用。这些模型可能存在偏差和/或其他不良扭曲。当第三方部署或向其他方提供使用这些模型(或基于这些模型的系统)的系统和/或服务,或成为这些模型的用户时,他们有责任减轻使用这些模型所带来的风险,并在任何情况下遵守适用的法规,包括有关人工智能使用的法规。在任何情况下,模型所有者(挪威国家图书馆)均不对第三方使用这些模型所产生的任何结果承担责任。
致谢
我们感谢 Google TPU研究云 提供的训练资源,感谢Google Cloud提供的翻译信用额度,以及HuggingFace的Sanchit Ghandi提供的技术支持。特别感谢Språkbanken的Per Erik Solberg在Stortinget语料库方面的合作。
联系我们
如果你有反馈、技术问题或其他相关事宜,请联系我们。



