モデル概要
モデル特徴
モデル能力
使用事例
🚀 NB-Whisper Large (Release Candidate)
ノルウェー国立図書館によって開発されたノルウェー語のNB-Whisper Largeモデルをご紹介します。NB-Whisperは、自動音声認識(ASR)と音声翻訳のために設計された最先端のモデルシリーズです。これらのモデルは、OpenAIのWhisperの成果を基に構築されています。シリーズ内の各モデルは、多様な800万件のサンプルを含むデータセットを使用して250,000ステップ訓練されています。これらのサンプルは、それぞれ30秒の音声クリップで構成され、合計で驚くほど66,000時間の音声データに相当します。訓練方法とデータセット構成の詳細については、近日公開予定の記事をご覧ください。
🚀 クイックスタート
重要: これらのモデルは現在リリース候補版です。最終段階のテスト中です。順調にいけば、今月中に公式リリースする予定です。
✨ 主な機能
モデルサイズとパラメータ
Model Size | Parameters | Model |
---|---|---|
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ステップ訓練されており、よりターゲット化されたユースケースに適している可能性があります。
- Verbatim version: この小文字のバリアントはより逐語的で、言語分析などの詳細な文字起こしが必要なタスクに適しています。
- Semantic version: このバリアントは逐語的な正確性よりもコンテンツの本質を捉えることに重点を置いており、会議録や字幕作成に最適です。
Model Size | Parameters | Verbatim version | Semantic version |
---|---|---|---|
Tiny | 39M | Tiny - verbatim | Tiny - semantic |
Base | 74M | Base - verbatim | Base - semantic |
Small | 244M | Small - verbatim | Small - semantic |
Medium | 769M | Medium - verbatim | Medium - semantic |
Large | 1550M | Large - verbatim | Large - semantic |
モデルの詳細
Property | Details |
---|---|
開発者 | NB AI-Lab |
共有者 | NB AI-Lab |
モデルタイプ | whisper |
言語 | ノルウェー語、ノルウェー語ボクモール、ノルウェー語ニュノルク、英語 |
ライセンス | Apache 2.0 |
ベースモデル | openai/whisper-large |
コードリポジトリ | 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. Hvilken nasjonalitet vi er fra.'}
}
Extended 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
# 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/NbAiLabBeta/nb-whisper-large/resolve/main/ggml-model.bin -O models/nb-large-ggml-model.bin
wget -N https://huggingface.co/NbAiLabBeta/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 Norwegian ASR Database (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の下で公開されています。
📄 ライセンス
このモデルはApache 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は、このプロジェクトの成功した完了をサポートしました。私たちのプロセスと調査結果に関する詳細な論文は近日公開予定です。
免責事項
このリポジトリに公開されているモデルは、一般的な目的で作成されており、第三者に利用可能です。これらのモデルにはバイアスやその他の望ましくない歪みが含まれている可能性があります。第三者がこれらのモデルを展開するか、システムまたはサービスに統合する場合、リスクを軽減し、適用されるAI規制に準拠する責任があります。



