モデル概要
モデル特徴
モデル能力
使用事例
🚀 NB-Whisper Large
ノルウェー国立図書館によって開発されたノルウェー語のNB-Whisper Largeモデルをご紹介します。NB-Whisperは、自動音声認識(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 - semantic |
Base | 74M | Base - semantic |
Small | 244M | Small - semantic |
Medium | 769M | Medium - semantic |
Large | 1550M | Large - semantic |
モデルの説明
- 開発者:NB AI-Lab
- 共有者:NB AI-Lab
- モデルタイプ:
whisper
- 言語:ノルウェー語、ノルウェー語ボクモール方言、ノルウェー語ニュノルスク方言、英語
- ライセンス:Apache 2.0
- ベースモデル:openai/whisper-large-v3
- コードリポジトリ: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-large")
# 文字起こし
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_length_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
# whisper.cppがサポートする唯一の形式であるWAVに音声を変換する必要があります
$ 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-large/resolve/main/ggml-model.bin -O models/nb-large-ggml-model.bin
wget -N https://huggingface.co/NbAiLab/nb-whisper-large/resolve/main/ggml-model-q5_0.bin -O models/nb-large-ggml-model-q5_0.bin
# f16デフォルトモデルで実行
$ ./main -l no -m models/nb-large-ggml-model.bin king.wav
# または量子化バージョン
$ ./main -l no -m models/nb-large-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-large --language no --diarize
PythonからWhisperXを実行することもできます。詳細な手順は、WhisperXのホームページを参照してください。
API
シンプルなAPIを介してモデルにアクセスする手順は、Spacesのデモに含まれています。ただし、これらのデモは一時的なもので、数週間だけ利用可能です。
📚 ドキュメント
トレーニングデータ
トレーニングデータは、Språkbankenとノルウェー国立図書館のデジタルコレクションに由来し、以下のものが含まれています。
- NSTノルウェー語ASRデータベース(16 kHz)および対応するデータセット
- Språkbankenによるノルウェー議会の文字起こしされた演説
- テレビ放送(NRK)の字幕(国立図書館のデジタルコレクション)
- オーディオブック(国立図書館のデジタルコレクション)
下流の利用
モデル、特に小さいモデルは、時折幻聴を起こすことがあり、文字起こしの一部が欠落する場合があります。これらのモデルは、話された言語を文法的に正しい文章に変換するように設計されており、必ずしも逐語的な翻訳にはならない場合があります。異なる文字起こしスタイルを望むユーザーのために、2つの追加モデルバリアントを用意しています。ユーザーには、自分でモデルを試してみることをお勧めします。
バイアス、リスク、および制限
適切なリスク評価と軽減策を行わずにこれらのモデルを使用することは、無責任な行為と見なされる可能性があります。これらのモデルにはバイアスやその他の望ましくない歪みが含まれている可能性があります。これらのモデルを展開するか、システムやサービスに統合するユーザーは、リスクを軽減し、適用されるAI規制に準拠する責任があります。モデルの所有者であるノルウェー国立図書館は、第三者によるこれらのモデルの使用に起因する結果について、一切の責任を負いません。
ソフトウェア
モデルはJax/Flaxを使用してトレーニングされ、PyTorch、Tensorflow、whisper.cpp、およびONXX形式に変換されています。これらはFiles and versions
で入手できます。他の形式への変換要求も歓迎します。すべてのトレーニングコードとスクリプトは、GitHubリポジトリnb-whisperにApache License 2.0で公開されています。
引用と貢献者
NB-Whisper Largeモデルは、ノルウェー国立図書館の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が、プロジェクトの成功に貢献しました。プロセスと結果に関する詳細な論文は近日公開予定です。
免責事項
このリポジトリに公開されているモデルは、一般的な目的で作成されており、第三者に利用可能です。これらのモデルにはバイアスやその他の望ましくない歪みが含まれている可能性があります。第三者がこれらのモデルを使用してシステムやサービスを展開または提供する場合、またはモデルのユーザーになる場合、それらの使用に起因するリスクを軽減し、適用される規制、特に人工知能の使用に関する規制に準拠する責任があります。いかなる場合も、モデルの所有者(ノルウェー国立図書館)は、第三者によるこれらのモデルの使用に起因する結果について一切の責任を負いません。
帰属
このモデルはApache 2.0ライセンスで公開されています。ただし、ノルウェーでダウンロードする場合、ノルウェー著作権法で指定されている帰属要件は、Apacheライセンスに明示的に記載されていなくても、該当する場合には依然として適用されます。他の国でモデルをダウンロードして使用する場合、帰属が必要ない場合もあります。



