LiteASR: 低ランク近似による効率的な自動音声認識の実現

近年、OpenAIのWhisperに代表される大規模な自動音声認識(ASR)モデルが目覚ましい発展を遂げていますが、その計算コストの高さが実用上の課題となっています。特に、リアルタイム処理やリソース制約のある環境での利用においては、効率化が不可欠です。

本記事では、ASRモデルの効率化に焦点を当て、LiteASRという新しい手法を紹介します。LiteASRは、低ランク近似という技術を応用し、ASRエンコーダの計算コストを大幅に削減することを目的としています。認識精度を維持しながら、より高速かつ軽量なASRシステムの実現を目指すLiteASRの概要、技術的な詳細、そしてその性能について解説します。

LiteASRの概要

LiteASRは、自動音声認識(ASR)モデルのエンコーダ部分における計算コストを削減するための低ランク圧縮手法です。近年、OpenAIのWhisperなどの大規模モデルが高い認識精度を誇る一方で、その計算負荷が実用上の課題となっています。特に、リアルタイム処理やエッジデバイスでの利用においては、モデルの効率化が求められています。

LiteASRは、モデルの中間層における活性化関数(activation)が持つ低ランク性に着目しています。この性質を利用して、主成分分析(PCA)を適用し、線形変換を低ランク行列の積で近似します。具体的には、以下のステップで処理を行います:

  1. キャリブレーションデータの分析:少量のキャリブレーションデータを用いて、各層の活性化値の低ランク性を分析します。
  2. 主成分分析(PCA)の適用:PCAを用いて、活性化値の主成分を抽出します。
  3. 低ランク近似:線形変換を、抽出された主要な成分を用いた低ランク行列の積で近似します。
  4. 自己注意機構の最適化:次元削減された空間で効率的に動作するように、自己注意機構を最適化します。

この手法により、モデルサイズを削減し、計算量を削減することで、ASRの推論速度を向上させることができます。また、LiteASRは、自己注意機構(self-attention)を最適化することで、さらなる効率化を実現しています。LiteASRを適用することで、認識精度を維持しながら、より高速かつ軽量なASRシステムを構築することが可能になります。

図1. LiteASRの概要

LiteASRの技術的解説

LiteASRは、モデル圧縮と計算効率の向上を目的とした、低ランク近似に基づく手法です。ここでは、その技術的な詳細を解説します。

PCAを用いた低ランク近似

LiteASRの中核となるのは、主成分分析(PCA)を用いた低ランク近似です。この手法は、ニューラルネットワークの中間層における活性化値が持つ低ランク性を利用します。

  1. 活性化値の分析:まず、キャリブレーションデータを用いて、モデルの各層における活性化値の分布を分析します。具体的には、線形層 \(Y = XW + b\) において、入力 \(X\) から出力 \(Y\) を記録し、\(Y\) の集合を分析します。
  2. 特異値分解(SVD)の実施:収集された活性化値のデータに対して、特異値分解(SVD)を行います。これにより、活性化値の主要な成分を抽出します。SVDは、平均中心化されたデータ \((Y – Y_M)\) に対して行われ、\(U, S, V = \text{SVD}(Y – Y_M)\) のように分解されます。ここで、\(V\) は右特異ベクトル行列であり、その最初の \(k\) 列 \(V_k\)が上位 \(k\) 個の主要成分に対応します。
  3. 低ランク近似の適用:抽出された主要成分を用いて、元の線形層を低ランク行列の積で近似します。近似式は以下のようになります。
    $$
    Y \approx X(WV_k)V_k^T + (Y_M + (b – Y_M)V_kV_k^T)
    $$
    この分解により、元の層は2つの低ランク線形変換と定数バイアス項に分解されます。\(k\) が元の次元よりも十分に小さい場合、計算コストを大幅に削減できます。
  4. \(k\) の選択:適切な \(k\) を選択することは、精度と効率のトレードオフにおいて重要です。LiteASRでは、以下の制約を満たすように \(k\) を選択します。
    • 精度制約:上位 \(k\) 個の主要成分が、データセットの総分散の十分な割合 \(\theta\) を保持するようにします。
      $$
      \frac{\sum_{i=1}^{k} S_i^2}{\sum_{i=1}^{D_{\text{out}}} S_i^2} > \theta
      $$
      ここで、\(S_i\) は特異値、\(D_{\text{out}}\) は出力次元です。\(\theta\) は\(0.99\)から\(0.999\)の範囲で調整され、精度と効率のバランスを制御します。
    • 効率制約:低ランク近似後の計算コストが、元の計算コストよりも小さくなるようにします。
      $$
      k(D_{\text{in}} + D_{\text{out}}) < D_{\text{in}}D_{\text{out}}
      $$
      ここで、\(D_{\text{in}}\) と \(D_{\text{out}}\) はそれぞれ入力次元と出力次元です。
    • 実装上の考慮:GPUの効率を最大化するために、\(k\) は16の倍数に制限されます。

自己注意機構の最適化

LiteASRでは、自己注意機構(self-attention)も最適化されます。特に、ランク \(k\) がヘッドあたりの次元よりも小さい場合、注意スコアと値の射影を効率的に計算する方法が採用されます。

  1. 低ランク近似を用いた射影:クエリ\(Q_i\)、キー\(K_i\)、値\(V_i\)の射影を、低ランク近似を用いて以下のように表現します。
    $$
    \begin{aligned} Q_i &= (XW_{Q1})W_{iQ2} + b_{iQ} \ K_i = (XW_{K1})W_{iK2} + b_{iK} \ V_i = (XW_{V1})W_{iV2} + b_{iV} \end{aligned}
    $$
    ここで、\(W_{Q1} \in \mathbb{R}^{D_{\text{in}} \times k_Q}\)、\(W_{iQ2} \in \mathbb{R}^{k_Q \times D_{\text{head}}}\) などは、低ランク近似後のパラメータです。
  2. 注意スコアの効率的な計算:注意スコア \(Q_iK_i^T\) の計算において、低ランク近似を活用することで計算量を削減します。
    $$
    Q_iK_i^T = (AW_{iQ2} + b_{iQ})(W_{iK2}^TB^T + b_{iK}^T)
    $$
    ここで、\(A = XW_{Q1}\)、\(B = XW_{K1}\) とします。標準的な計算方法では \(O(L^2D_{\text{head}})\) の計算量が必要ですが、LiteASRでは \(O(Lk_Qk_K + L^2\min(k_Q, k_K))\) に削減されます。
  3. 値の射影の効率的な計算:注意スコア行列 \(S_i\) と値 \(V_i\) の積 \(S_iV_i\) を計算する際にも、計算量を削減します。
    $$
    S_iV_i = (S_i(XW_{V1}))W_{iV2} + b_{iV}
    $$
    標準的な計算方法では \(O(L^2D_{\text{head}} + Lk_VD_{\text{head}})\) の計算量が必要ですが、LiteASRでは \(O(L^2k_V + Lk_VD_{\text{head}})\) に削減されます。
  4. 実装:これらの最適化された演算を効率的に実行するために、Tritonを用いた専用のGPUカーネルが実装されています。このカーネルは、FlashAttentionの実装を拡張し、LiteASRの最適化された計算戦略に対応しています。

LiteASRの評価結果と性能

LiteASRの有効性を検証するため、精度と効率の両面から評価が行われています。主な評価対象は、Whisper large-v3およびWhisper large-v3-turboモデルです。

  • 精度評価
    • End-to-end Speech Benchmark (ESB)のデータセットを使用し、Word Error Rate (WER)を評価指標としています。
    • 異なる圧縮設定(\(\theta\)の値)で評価を実施。
      • Quality-Focused: 全層で\(\theta = 0.999\)。
      • Balanced: 自己注意層で\(\theta = 0.99\)、MLP層で\(\theta = 0.999\)。
      • Efficiency-Focused: 自己注意層で\(\theta = 0.99\)、MLP層で\(\theta = 0.995\)。
    • Quality-Focused設定では、WERの劣化を0.1%未満に抑えつつ、モデルサイズを30%以上削減。
    • Efficiency-Focused設定では、Whisper mediumと同程度のサイズまでモデルを圧縮し、WERを3.5ポイント改善。
    • 多言語での評価も実施し、英語以外の言語でもLiteASRの有効性を確認。
  • 効率評価
    • NVIDIA RTX 4090, NVIDIA RTX A6000, Apple M1 Proの各環境で、エンコーダの実行速度を評価。
    • CUDA GraphやTritonなどの技術を活用し、GPUカーネルを最適化。
    • 平均で1.29倍から1.54倍の速度向上を達成。
    • RTX 4090環境では、最大で1.57倍の速度向上を達成。
    • PyTorchのSDPA実装と比較して、17%から30%の性能向上。

これらの結果から、LiteASRは精度を維持しながら、モデルサイズを削減し、推論速度を向上させる効果的な手法であることが示されました。特に、リソースが限られた環境やリアルタイム処理が求められる場合に、LiteASRの有効性が期待できます。

図2. LiteASRのパフォーマンス

実用例と利点

LiteASRは、ASRシステムの効率を向上させるための強力なツールであり、さまざまな実用例と利点を提供します。

  • オンデバイスASR
    • スマートフォンやラップトップなどのリソースが限られたデバイスでのリアルタイム文字起こしや音声アシスタントの実現に貢献。
    • 低遅延での応答が可能となり、ユーザーエクスペリエンスを向上。
  • データセンターにおけるASR
    • 複数ユーザーからの同時リクエストを処理する際の計算ボトルネックを緩和。
    • バッチ処理の効率が低い計算負荷の高いエンコーダの処理能力を向上。
  • ライブ文字起こしとリアルタイム翻訳
    • 低遅延が要求されるアプリケーションにおいて、高品質な文字起こしと翻訳を提供。
  • 既存のASRパイプラインとの統合
    • FasterWhisper, WhisperX, Whisper.cppなどの既存のフレームワークと統合可能。
    • デコーダの圧縮技術(Distill-Whisper, Kotoba-Whisperなど)と組み合わせることで、さらなる効率化を実現。
  • 多様な言語とモデルへの適用
    • 英語だけでなく、他の言語でも高い性能を発揮。
    • Whisperだけでなく、Canaryなどの異なるモデルにも適用可能。
  • コスト削減
    • 計算資源の利用効率を向上させることで、運用コストを削減。
    • より小型のハードウェアでの実行を可能にし、初期投資コストを削減。

LiteASRは、精度を維持しながら、モデルサイズと計算量を大幅に削減することで、ASRシステムの実用性を飛躍的に向上させます。特に、リアルタイム性が求められるアプリケーションや、リソース制約のある環境において、その効果を最大限に発揮します。

LiteASRを使ってみる

LiteASRを使用するために、まずは必要なPythonパッケージをインストールします。

# PyTorchのインストール
$ pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 関連パッケージをインストール
$ pip install librosa transformers

任意の音声ファイル(*.wav)をもとに音声認識を行うコードが以下の通りです。初回実行時には、モデルの重みファイルのダウンロードが行われますのでご注意ください。

import torch
from transformers import AutoProcessor, AutoModel

device = "cuda:0"
dtype = torch.float16

# load the compressed Whisper model
model = AutoModel.from_pretrained(
    "efficient-speech/lite-whisper-large-v3-turbo", 
    trust_remote_code=True, 
)
model.to(dtype).to(device)

# we use the same processor as the original model
processor = AutoProcessor.from_pretrained("openai/whisper-large-v3-turbo")

# set the path to your audio file
path = "audio.wav"
audio, _ = librosa.load(path, sr=16000)

start_time = time.perf_counter()

input_features = processor(audio, sampling_rate=16000, return_tensors="pt").input_features
input_features = input_features.to(dtype).to(device)

predicted_ids = model.generate(input_features)
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)[0]

elapsed_time = time.perf_counter() - start_time

print(f"Speech-to-Text: {transcription}")
print(f"Elapsed time: {elapsed_time} s")

LiteASR で利用できるモデルは下表の通りですが、手元の実験では fast 版の日本語認識精度がそれほど高くありませんでした。そのため、lite-whisper-large-v3-turbo あたりの使用がバランスがよいかもしれません。

ModelAverage WER (↓)Encoder SizeDecoder Size
whisper-large-v310.1635M907M
lite-whisper-large-v3-acc10.1429M907M
lite-whisper-large-v310.2377M907M
lite-whisper-large-v3-fast11.3308M907M
   
whisper-large-v3-turbo10.1635M172M
lite-whisper-large-v3-turbo-acc10.2421M172M
lite-whisper-large-v3-turbo12.6374M172M
lite-whisper-large-v3-turbo-fast20.1313M172M
   
whisper-medium14.8306M457M

おわりに

今回は、ASRエンコーダの効率を大幅に向上させる圧縮手法、LiteASRを紹介しました。LiteASRは、線形層における活性化値の低ランク構造に着目し、PCAを適用することで、低ランク行列による近似を実現します。また、自己注意機構を最適化することで、さらなる計算量削減を可能にします。

評価実験では、LiteASRが精度を維持しながら、モデルサイズを大幅に削減し、推論速度を向上させることが示されました。特に、オンデバイス環境やデータセンター環境でのASRの実用性を高めることが期待されます。

今後の課題として、Conformerなどの異なるアーキテクチャへの適用や、低リソース言語での性能評価が挙げられます。LiteASRは、効率的なASRの実現に向けた重要な一歩であり、今後の研究開発を通じて、さらなる発展が期待されます。

More Information

  • arXiv:2502.20583, Keisuke Kamahori et al., 「LiteASR: Efficient Automatic Speech Recognition with Low-Rank Approximation」, https://arxiv.org/abs/2502.20583