モデル概要
モデル特徴
モデル能力
使用事例
🚀 NB-Whisper Base
ノルウェーのNB-Whisper Baseモデルをご紹介します。これはノルウェー国立図書館によって開発された、自動音声認識(ASR)と音声翻訳に特化した最先端のモデルシリーズです。これらのモデルはOpenAIのWhisperをベースに構築されており、それぞれ800万サンプルの多様なデータセットを用いて250,000ステップの訓練を行っています。これらのサンプルは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 - 意味的 |
Base | 74M | Base - 意味的 |
Small | 244M | Small - 意味的 |
Medium | 769M | Medium - 意味的 |
Large | 1550M | Large - 意味的 |
モデルの説明
- 開発者:NB AI-Lab
- 共有者:NB AI-Lab
- モデルタイプ:
whisper
- 言語:ノルウェー語、ノルウェー語(ボクモール)、ノルウェー語(ニュノルスク)、英語
- ライセンス:Apache 2.0
- 訓練元モデル:openai/whisper-base
- コードリポジトリ:https://github.com/NbAiLab/nb-whisper/
- 論文:近日公開予定
- デモ:このページのSpacesセクションを参照
🚀 クイックスタート
オンラインデモ
このページの右側にあるHuggingFace Inference APIを通じて、直接モデルを試すことができます。ただし、最初にモデルをロードする必要があり、限られたCPU容量で実行されるため、速度が遅くなる場合があります。体験を向上させるために、一部のモデルを一時的にTPUでホストしており、パフォーマンスが大幅に向上しています。メインページのSpacesセクションでこれらを探索してください。
HuggingFaceを使用したローカルセットアップ
あるいは、モデルをローカルで実行することもできます。Tiny、Base、SmallモデルはCPUでの実行に最適化されています。MediumおよびLargeモデルについては、効率的な処理を確保するためにGPUを備えたシステムをお勧めします。HuggingFaceのTransformersを使用してこれらのモデルをセットアップして使用するのは簡単で、マシンにPythonがインストールされていれば問題ありません。実際のデモについては、このサンプル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
引数を渡すことで、より長いファイルの文字起こしが可能です。デフォルトの30秒ではなく28秒に設定すると、わずかに良い結果が得られることが経験上わかっています。可能であれば、ビームサイズを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]},
// ... more chunks ...
{"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形式のモデルに変換しています。ファイルはここからダウンロードでき、q5_0
量子化バージョンもここから利用可能です。
# 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
# このサイトから2つの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)の字幕(NLNデジタルコレクション)
- オーディオブック(NLNデジタルコレクション)
下流の利用
モデル、特に小さいモデルは、時折幻覚を起こし、文字起こしの一部を落とすことがあります。これらのモデルは、話された言語を文法的に正しい書面の文章に変換するように設計されており、必ずしも逐語的な翻訳ではない場合があります。異なる文字起こしスタイルを望むユーザーのために、2つの追加モデルバリアントを作成しています。ユーザー自身がモデルを試して、より深い理解を得ることをお勧めします。
バイアス、リスク、および制限
適切なリスク評価と軽減策を行わずにこれらのモデルを使用することは、無責任な行為と見なされる可能性があります。これらのモデルにはバイアスやその他の望ましくない歪みが含まれている可能性があります。これらのモデルを展開するか、システムやサービスに統合するユーザーは、リスクを軽減し、適用されるAI規制に準拠する責任があります。モデルの所有者であるノルウェー国立図書館は、第三者によるこれらのモデルの使用に起因する結果について、責任を負いません。
ソフトウェア
モデルはJax/Flaxを使用して訓練され、PyTorch、Tensorflow、whisper.cpp、およびONXX形式に変換されています。これらはFiles and versions
で利用可能です。他の形式への変換要求も歓迎します。すべての訓練コードとスクリプトは、GitHubリポジトリnb-whisperでApache License 2.0の下で公開されています。
引用と貢献者
NB-Whisper Baseモデルは、ノルウェー国立図書館のPer Egil Kummervold(@pere)が率いるNoSTramプロジェクトの成果物です。主要な貢献者には、Javier de la Rosa(@versae)、Freddy Wetjen(@freddyw)、およびRolv-Arild Braaten(@Rolv-Arild)が含まれます。Svein Arne Brygfjeld(@Brygfjeld)の指導の下、NB AI-Labがプロジェクトの成功に貢献しています。詳細なプロセスと調査結果に関する論文は近日公開予定です。
免責事項
このリポジトリに公開されているモデルは、一般的な目的で作成されており、第三者に利用可能です。これらのモデルにはバイアスやその他の望ましくない歪みが含まれている可能性があります。第三者がこれらのモデルを使用してシステムやサービスを展開または提供する場合、またはモデルのユーザーになる場合、その使用に起因するリスクを軽減し、適用される規制、特に人工知能の使用に関する規制に準拠する責任があります。モデルの所有者であるノルウェー国立図書館は、第三者によるこれらのモデルの使用に起因する結果について、一切の責任を負いません。
謝辞
訓練リソースを提供してくれたGoogle TPU Research Cloud、翻訳クレジットを提供してくれたGoogle Cloud、および技術的なサポートを提供してくれたHuggingFaceのSanchit Ghandiに感謝します。また、Stortingetコーパスに関する協力をしてくれたSpråkbankenのPer Erik Solbergに特別な感謝を申し上げます。
お問い合わせ
フィードバックや技術的な懸念事項については、以下の方法でお問い合わせください。(原文ではこの部分の具体的な問い合わせ方法が記載されていないため、そのままにしています)
📄 ライセンス
このプロジェクトはApache 2.0ライセンスの下で公開されています。



