WhisperのCore ML版であるWhisperKitに関するメモ。
今日のLTでWhisperKitについて話すのだけど、5分だと話しきれないこともいろいろあるのでこちらに書いていく。
whiper.cppとの違い
公式ブログの記事の "Accelerating the Audio Encoder" という節で、WhisperKitの系譜のようなものについて言及があり、その中でwhisper.cppとの関係性についても触れられている。
ざっくり要約:
argmax社と apple/ml-ane-transformers
上述のargmax社のブログ記事の中で参照されている「Deploying Transformers on the Apple Neural Engine」というLinkedInの記事(argmax社ファウンダーbのAtila Orhon氏によるもの)を読むと、
とあり、Appleの apple/ml-ane-transformers やApple ML Blogの記事がリンクされている。
え、argmaxの人がこのAppleの仕事やったの?と当該リポジトリのコミット履歴をみると、そういうことのようだ。
つまりWhisperKitは然るべき実績がある人によってカリカリ最適化されたもので、速いのにはちゃんとした裏付けがある。
WhisperKitのREADMEに書いてあったこと
前述の公式ブログ記事に比べ、こちらは使い方の説明に特化したREADMEだった。
let pipe = try? await WhisperKit()
let transcription = try? await pipe!.transcribe(audioPath: "path/to/your/audio.{wav,mp3,m4a,flac}")?.text
print(transcription)
モデルの選択方法
モデルの生成方法
Swift CLI実装もあるよ
書いてない:
詳しい中身の解説
whisper.cppやMLXとの違い
Hugging Faceの whisperkit-coreml に書いてあったこと
各モデルの精度とファイルサイズ
まず、各モデルの精度とファイルサイズの表が掲載されている。
それについて詳細な解説が続く(以下)
ここでwhisper.cppやMLXについて言及されているが、表にはこれらの検証結果が載ってないので、どういう話かわからなかった…
QoI
表にWERと併記されている指標 QoI についても以下のように解説がある:
qoi = []
for example in dataset:
no_regression = wer(optimized_model(example)) <= wer(reference_model(example))
qoi.append(no_regression)
qoi = (sum(qoi) / len(qoi)) * 100.
Why are there so many Whisper versions?
(DeepLの翻訳が相当イマイチだが…)つまり要はたくさんのモデルがあるのは品質とサイズのトレードオフについて開発者に選択肢を与えてるってことをいいたいんだと思う。
最後に、検証結果の再現方法についても言及されている。あなたの手元のApple Sillicon Macで同じことができますよ、と。
WhisperKitサンプルのソースコードを読む(別記事)
別記事に書きました