Whisper関連:文字起こし技術リサーチメモ(ASR / STT)
Whisper 関連の GitHub Repository まとめ
OpenAI Whisper 登場により、文字起こし関連技術が飛躍的に進化したような印象があるが、Whisper 関連技術にはどのようなものがあるか。
- OpenAI 公式 Whisper
-
whisper.cpp
- c, c++ ベースの Whisper: リアルタイムストリーミングも可能
-
Buzz
- デスクトップで利用可能な Whisper アプリ: Available on Mac, Windows, and Linux
-
brew install --cask buzz
で install 可能
-
Faster Whisper
- 最適化されていて最大4倍ほど高速
- CTranslate2 を利用して Transform 関連の処理を最適化している様子
-
pyannote.audio
- 話者分離 (Neural speaker diarization)
-
WhisperX
- Whisper と関連ライブラリを組み合わせたような感じ
- faster-whisper, pyannote-audio, wav2vec2 などで強化
-
yt-whisper
- YouTube URL を指定して自動で字幕取得
- 個人利用レベルのサポートツール
参考
ASR: Automatic Speech Recognition
STT: Speech To Text
ASR/STT 技術の活用方法や活用事例
ChatGPT 4.0 を利用しながら、Whisper 技術を利用してどのようなことができるかを改めて考える。
- 文字起こしサービス
- 音声翻訳
- 商談分析、セールスサポート
- IoT制御
- 医療補助(音声で医者のサポート)
- 音声アシスタント(Alexa, Google Home, Siri など)
- 教育サポート、板書作成(note taking)や発話によるレポート作成
- 音声検索
- コンテンツ生成:ブログ、SNSコンテンツ、書籍
- アーカイブ用コンテンツの自動生成
ASR/STT の技術はこれまであまり脚光を浴びてこなかったかもしれないが、AI技術の革命によって、新しい道が開け始めているかもしれない。上記のサービスはどれも容易に想像可能だが、実際に毎日利用されているような安定したサービスはまだほとんど存在していないと言って良さそう。
技術的な困難さはまだまだあるが、将来的には大きな市場になりそう。
ASR/STTの技術的・言語的な困難性、解決が必要な課題
技術的な課題
- 背景雑音
- 話者分離
- 発話区間の被り
言語的な課題
- 複数言語の対応
- アクセントや方言
- 同音異義語問題
- 流行語やスラングなど
- 前後文脈の理解(現状ではほとんど 音=>テキスト の変換に終始している認識)
Speaker Diarization: 話者分離について
Whisper 界隈では、Speaker Diarization といえば pyannote-audio というような風潮があるような気がする。Speaker Diarization に対する2023年6月現在の技術レベルとベストプラクティスについて明確にしたい。
調査の目的
- Speaker Diarization の基本的な技術理解
- pyannote-audio について
- 他のオープンソースやサービス
最初に結論だけ
pyannote-audio は2022年に開催された Speaker Diarization 系のコンペで優勝などしていた。ということで、pyannote-audio がオープンソースでのデファクトスタンダートという理解で間違いなさそう。
Adapting pyannote.audio 2.1 pretrained speaker diarization pipeline to your own data
Speaker Diarization の基礎的な技術理解
そもそも、話者分離を実現するためには、どのような処理が必要か。
- Preprocessing: ノイズ除去など
- Voice Activity Detection (VAD): 発話区間の特定
- Feature Extraction: MFCCなどを利用した特徴量抽出
- Segmentation: オーディオデータ全体を意味のある単位に分割する
- Clustering: Segmentation の結果をもとにクラスタリングを実施し、話者をグルーピングする
BIC (Bayesian Information Criterion), agglomerative hierarchical clustering, Gaussian Mixture Models (GMM) など - Re-segmentation: 5の Clustering の結果を元にして、再度 Segmentation を行う
Hidden Markov Models (HMM) など - Evaluatio: 精度の評価をする
Diarization Error Rate (DER)
pyannote-audio の特徴など
- オープンソース
- リアルタイムの公式サポートはないが、github 上に関連技術の紹介がある
- HuggingFace で公式モデルが公開されている
- Pretrained pipelines を見てみると、4種類のモデルがあった
- Pretrained pipelines を見てみると、4種類のモデルがあった
- 2022年のSpeaker Diarization 系のコンペで優勝などしていた
Speaker Segmentation と Speaker Diarization の違いは?
pyannote-audio は2種類別でモデルを公開しているが違いは何か?詳細な情報は以下の記事がわかりやすい。
技術的な説明としては、Spekaer Diarization は内部的に Speaker Segmentation のモデルを利用しているとのこと。Speaker Segmentation だけだと、部分的なセグメントはできるが、音声全体での話者の特定がうまくいかないケースがあったということ。そこで改良されたバージョンが Speaker Diarization と考えるとわかりやすいかもしれない。
Diarization に関する他のオープンソースやサービス
オープンソースはあまり多くなさそうだった。
- whisper-diarizationというWhisper を利用したオープンソースがあったが、Overlapping Speech Detection は WIP。
- NVIDIA NeMoは幅広くASR系のツールを提供している。speakerverification_en_titanet_large というモデルがあるが、詳細未確認
- speechbrain
- UIS-RNN: Google のライブラリ。モデルの学習方法は記載あるが、学習済みモデルは未公開の様子。
- ESPNet
参考ページ
pyannote-audio のベンチマークで利用されている音声データベースを見てみると、当然ながら English ベースのデータセットにになっている。ちゃんと詳しく調べられていないが、どれだけ日本語のデータで学習されて、評価されているのかは気になる。
pyannote-audio のファインチューニングに関する Zenn Scrap まとめを見つけた。
- pretrained model の日本語での認識精度がどの程度か
- 日本語のデータセットを作成して(あるいはもし存在するのであれば探してきて)ファインチューニングすることでどの程度まで改善するか
以上については気になるところ。