KittenTTS: 25MB未満でCPU上で動作する最先端TTS

KittenTTSは、わずか25MBのモデルで高品質なテキスト読み上げを実現し、完全にCPU上で動作します。使い方、API、エッジAIにとっての重要性について学びましょう。

KittenTTS: 25MB未満でCPU上で動作する最先端TTS

テキスト読み上げ(TTS)は伝統的に重いタスクでした。ほとんどの本番グレードのモデルはGPU、数百メガバイトの重み、複雑な推論パイプラインを必要とします。だからこそ、KittenTTSは新鮮な息吹をもたらします。オープンソースのONNXベースのTTSライブラリであり、わずか25MB(int8量子化)のモデルで高品質な音声合成を提供し、完全にCPU上で動作します。GPUは不要です。

GitHubで15.3kのスターを獲得し、成長を続けるコミュニティを持つKittenTTSは、エッジ展開可能なTTSが可能であるだけでなく実用的であることを証明しています。この記事では、その特別な点、始め方、そして自分のプロジェクトに統合する方法について詳しく説明します。

TTSにおけるサイズの重要性

今日のほとんどのTTSモデルは巨大です。例えば、人気のあるニューラルTTSシステムの中には1GBを超えるものもあり、リアルタイム推論にはCUDA対応GPUが必要です。これにより、以下の用途には実用的ではありません:

  • エッジデバイス(Raspberry Pi、IoTゲートウェイ、モバイルなど)
  • メモリ制限が厳しいサーバーレス関数
  • 軽量に配布する必要があるデスクトップアプリ
  • レイテンシとリソース使用量が重要なリアルタイムアプリケーション

KittenTTSは、15Mから80Mパラメータのモデルを提供し、ディスク上のサイズは25MBから80MBです。最小のバリアントであるkitten-tts-nano int8はわずか25MBで、ほぼすべてのアプリケーションに埋め込むのに十分な小ささです。

CPU効率のためのONNXベース

KittenTTSは**ONNX(Open Neural Network Exchange)**上に構築されており、モデルはさまざまなハードウェアでの推論に最適化されています。このライブラリは、CPU実行に高度に最適化されたONNX Runtimeを使用しています。これは重要な設計上の選択です。GPUなしのマシンでも効率的に動作し、より広いユーザー層にアクセス可能にします。

必要に応じてGPUでも実行できます。GPU要件をインストールし、backend="cuda"を指定するだけです。ただし、デフォルトのCPUパスは驚くほど高速です。

利用可能なモデル

KittenTTS v0.8では、4つのモデルバリアントを提供しています:

モデル パラメータ サイズ Hugging Face ID
kitten-tts-mini 80M 80 MB KittenML/kitten-tts-mini-0.8
kitten-tts-micro 40M 41 MB KittenML/kitten-tts-micro-0.8
kitten-tts-nano 15M 56 MB KittenML/kitten-tts-nano-0.8
kitten-tts-nano (int8) 15M 25 MB KittenML/kitten-tts-nano-0.8-int8

注:一部のユーザーからint8バリアントに問題があるとの報告があります。問題が発生した場合は、メンテナーはGitHubにissueを開くよう求めています。

クイックスタート

始めるのは簡単です。まず、pipでライブラリをインストールします:

pip install https://github.com/KittenML/KittenTTS/releases/download/0.8.1/kittentts-0.8.1-py3-none-any.whl

次に、最初の音声サンプルを生成します:

from kittentts import KittenTTS

model = KittenTTS("KittenML/kitten-tts-mini-0.8")
audio = model.generate("This high-quality TTS model runs without a GPU.", voice="Jasper")

import soundfile as sf
sf.write("output.wav", audio, 24000)

これだけです。CPU上で完全に生成された自然な音声のWAVファイルができました。

高度な使用法

KittenTTSは合成を細かく制御できます:

# 音声速度を調整(デフォルト: 1.0)
audio = model.generate("Hello, world.", voice="Luna", speed=1.2)

# ファイルに直接保存
model.generate_to_file("Hello, world.", "output.wav", voice="Bruno", speed=0.9)

# 利用可能な音声を一覧表示
print(model.available_voices)
# ['Bella', 'Jasper', 'Luna', 'Bruno', 'Rosie', 'Hugo', 'Kiki', 'Leo']

GPUをお持ちの場合は、GPUを使用することもできます:

pip install -r requirements_gpu.txt
m = KittenTTS("KittenML/kitten-tts-mini-0.8", backend="cuda")

テキスト正規化:隠れた宝石

最も過小評価されている機能の1つは、組み込みのテキスト正規化パイプラインです。数字、通貨、単位、日付、時刻などを処理します。これは、生のテキストから自然な音声を生成するために重要です。

from kittentts import normalize_text

normalized = normalize_text("Dr. Rivera paid $12.50 at 3:05 p.m.")
# "Doctor Rivera paid twelve dollars and fifty cents at three oh five p m."

正規化されたセグメントの文字スパンを取得することもでき、アライメントやハイライトに役立ちます:

result = normalize_text("Fig. 2", return_spans=True)
print(result.text)
print(result.spans)

これは大きな時間節約になります。なぜなら、テキスト正規化はTTSパイプラインでしばしば悩みの種だからです。

APIリファレンス

KittenTTS(model_name, cache_dir=None)

Hugging Face Hubからモデルを読み込みます。

  • model_name (str): Hugging FaceリポジトリID。デフォルト: "KittenML/kitten-tts-nano-0.8"
  • cache_dir (str, オプション): ダウンロードしたモデルファイルをキャッシュするローカルディレクトリ。

model.generate(text, voice, speed, clean_text)

テキストから音声を合成し、24kHzのオーディオサンプルのNumPy配列を返します。

  • text (str): 合成する入力テキスト
  • voice (str): 音声名(デフォルト: "expr-voice-5-m"
  • speed (float): 音声速度の倍率(デフォルト: 1.0)
  • clean_text (bool): テキストを前処理(数字、通貨などを展開)(デフォルト: False)

model.generate_to_file(text, output_path, voice, speed, sample_rate, clean_text)

音声を合成し、オーディオファイルに直接書き込みます。

  • text (str): 合成する入力テキスト
  • output_path (str): オーディオファイルを保存するパス
  • voice (str): 音声名
  • speed (float): 音声速度の倍率(デフォルト: 1.0)
  • sample_rate (int): オーディオのサンプルレート(Hz)(デフォルト: 24000)
  • clean_text (bool): テキストを前処理(デフォルト: True)

normalize_text(text, locale="en-US", return_spans=False)

オーディオを生成せずにTTS用にテキストを正規化します。

model.available_voices

利用可能な音声名のリストを返します:['Bella', 'Jasper', 'Luna', 'Bruno', 'Rosie', 'Hugo', 'Kiki', 'Leo']

システム要件

  • OS: Linux、macOS、またはWindows
  • Python: 3.8以降
  • ハードウェア: CPUのみ(GPUはオプション)
  • ディスク容量: モデルバリアントに応じて25〜80 MB

依存関係の競合を避けるために、仮想環境の使用をお勧めします。

ロードマップとコミュニティ

このプロジェクトは活発に開発されています。ロードマップには以下が含まれます:

  • 最適化された推論エンジンのリリース
  • モバイルSDKのリリース
  • より高品質なTTSモデルのリリース
  • 多言語TTSのリリース
  • KittenASR(自動音声認識)のリリース

Discordでコミュニティに参加するか、kittenml.comを訪れてください。カスタム音声やエンタープライズライセンスを含む商用サポートについては、[email protected]までお問い合わせください。

ライセンス

KittenTTSはApache License 2.0の下でライセンスされており、個人利用および商用利用の両方に寛容です。

最後に

KittenTTSはTTS分野における顕著な成果です。自然な音声を生成するためにGPUクラスターは必要ないことを証明しています。小さなフットプリント、CPUに優しい推論、クリーンなAPIにより、エッジアプリケーション、デスクトップソフトウェア、リソースが制約されたプロジェクトに最適な選択肢です。

音声アシスタント、アクセシビリティツールを構築している場合、またはオーバーヘッドなしでアプリに音声を追加したい場合は、KittenTTSを試してみてください。25MBモデルはゲームチェンジャーです。

ライブデモを試すには、Hugging Face Spacesで実際に聞いてみてください。

ソース

KittenML/KittenTTS: State-of-the-art TTS model under 25MB 😻