Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

iOS/macOSオンデバイスで爆速で動作する音声認識モデルWhisperKit

iOSエンジニアの堤です。先日3月28日に開催された弊社主催のLTイベントで、「WhisperKitがだいぶ良いので紹介する」というタイトルで発表しました。

スライドはこちら:

www.docswell.com

本記事は、同発表をベースとしつつ、(LTでは時間が足りないので)発表ではカットした内容を盛り込んで記事として再構成したものになります。

WhisperKitとは

iOS/macOSオンデバイスで動く音声認識のすごいやつ

  • 速い
  • 精度も良い
  • 多言語対応(日本語含む)
  • オープンソース

デモ:標準の音声認識フレームワークSpeechとの比較

音声ファイルの書き起こし速度を比較 1 してみた。

Speech

youtu.be

→ 15分の音声ファイルの書き起こしに6分程度かかる。 2

WhisperKit

→ 15分の音声ファイルの書き起こしが51秒で完了。

なぜ速いのか - WhisperKitの系譜

OpenAI Whisper

  • OpenAIによって開発された音声認識モデル
  • 精度とパフォーマンス、そしてオープンソースであることから利用が一気に広がった

whisper.cpp

  • Whisperの高速推論版
  • 各種プラットフォームへの最適化もされている
    • macOS/iOS向けにはMetal, Accelerateもサポート
    • Core MLモデル版もリリースされている

関連:

zenn.dev

Core ML とは

  • 機械学習モデルをiOS、macOS、etc. に組み込むためのApple製のフレームワーク, モデルフォーマット

  • CPU・GPU・Neural Engine (ANE) を利用し、メモリ占有量と電力消費量を最小限に抑えつつパフォーマンスを最大限に高めるように設計されている

関連:

buildersbox.corp-sansan.com

whisper.cpp から WhisperKitへ

  • whisper.cpp の Core ML版よりもさらにAppleハードウェアを活かすようカリカリに最適化
  • Core ML版 whisper.cpp より 1.86倍〜2.85倍 高速 3

argmax社とApple

  • 開発元のargmax社は Appleの ml-ane-transformers リポジトリの中の人の会社
  • つまりそもそもTransformerモデルをCore MLで最適化してiOS/macOSで動かせるようにする流れ 4 の元祖にあたる人(たち)が最適化を行っている

モデルサイズとメモリ消費量

各モデルのファイルサイズ一覧

WER File Size (MB)
large-v2 2.77 3100
large-v2_949MB 2.4 949
large-v2_turbo 2.76 3100
large-v2_turbo_955MB 2.41 955
large-v3 2.04 3100
large-v3_turbo 2.03 3100
large-v3_turbo_954MB 2.47 954
distil-large-v3 2.47 1510
distil-large-v3_594MB 2.96 594
distil-large-v3_turbo 2.47 1510
distil-large-v3_turbo_600MB 2.78 600
small.en 3.12 483
small 3.45 483
base.en 3.98 145
base 4.97 145
tiny.en 5.61 66
tiny 7.47 66

WhisperKitの各モデルのWER (Word Error RATE) とファイルサイズ 5

メモリ使用量

最大で300MB未満程度(baseモデル使用時)

アプリへの組み込み方法

Swift Packageを使って 2行 で実装可能

let pipe = try? await WhisperKit()
let transcription = try? await pipe!.transcribe(audioPath: path)?.text

本当に2行で実装できるのか?

本当に2行で実装しているの?というところをサンプルコードを追いかけてみた記事がこちら:

note.com

more

Swift CLI

  • インストール
brew install whisperkit-cli
  • 実行
swift run whisperkit-cli transcribe --model-path "foo" --audio-path "bar" 

変換ツール

whisperkittools

  • PyTorchのWhisperモデルをWhisperKit向けに変換するためのPythonツール
  • 自前のWhisperモデルをWhisperKitフォーマットに変換できる

詳しい技術解説記事

WhisperKit — Argmax

自分用に整理した記事がこちら:

note.com

まとめ

Core ML版WhisperであるWhisperKitを紹介した。

  • 速度よし、精度よし
  • 多言語対応(日本語含む)
  • オープンソース/変換ツールも公開
    • ⇒ 自前モデルも利用可能
  • Swift Packageで簡単に実装可能

→ iOSオンデバイス音声認識の選択肢として最有力候補では!

20240312182329
20240315190344


  1. どちらもオンデバイス処理。iPhone 15 Proを利用。
  2. Speechも、これでも昔よりはだいぶ速くなりました。2020年頃に同様の実装で試したときは、実時間での認識が精いっぱい(15分の音声ファイルの書き起こしにほぼ15分かかる)でした。
  3. 出典: WhisperKit — Argmax
  4. Core ML版Stable Diffusion や、ローカルLLMのApple Silicon向け最適化 等々
  5. WERは低いほど精度が高いことを示す。表の出典は https://huggingface.co/argmaxinc/whisperkit-coreml

© Sansan, Inc.