🔬

声を自由にデザインできる音声合成モデルMaya1を使ってみた

に公開

はじめに

この記事はLivetoon Tech Advent Calendar 2025の3日目の記事です。
https://adventar.org/calendars/12157

こんにちは
株式会社LivetoonでAIエンジニアをしている大塚です。
https://kai0.onelink.me/Hogh/AdventCalendar2025

今回のアドベントカレンダーでは、LivetoonのAIキャラクターアプリのkaiwaに関わるエンジニアが、アプリの話からLLM・合成音声・インフラ監視・GPU・OSSまで、幅広くアドベントカレンダーとして書いて行く予定です。
是非、publicationをフォローして、記事を追ってみてください。

Maya1とは

Maya Researchが開発したMaya1は、テキストで声の特徴を記述するだけで、様々な声質・感情・アクセントを生成できる最先端のオープンソース音声AIモデル(TTS)です。

Llamaベースの3B TransformerモデルSNACニューラルコーデックを組み合わせた、言語モデルによる音声生成という新しいアプローチを採用しています。

https://huggingface.co/maya-research/maya1

Maya1の基本アーキテクチャ

Maya1はBERT-VITS2のような従来のTTSモデルとは異なり、Language Model(LM)ベースの音声生成を採用しています。

モデル構成

Maya1は以下の2つの主要コンポーネントから構成されています:

[テキスト] → [Llama 3B Transformer] → [SNACトークン] → [SNACデコーダ] → [音声波形]

1. Llama 3Bベースの言語モデル

パラメータ
アーキテクチャ LlamaForCausalLM
パラメータ数 3B (30億)
隠れ層サイズ 3,072
レイヤー数 28層
アテンションヘッド数 24 (KV: 8)
語彙サイズ 156,960
最大コンテキスト長 131,072トークン
データ型 bfloat16

特筆すべきは語彙サイズ156,960という大きさです。これは通常のLlamaの言語トークン(12,800種類)にSNAC用の音声トークンを含めた拡張語彙になっています。

2. SNACニューラルコーデック

SNAC(Multi-Scale Neural Audio Codec)はNeurIPS 2024のAudio Imagination Workshopで発表された最新のニューラル音声コーデックです。

SNACの特徴:

  • 超低ビットレート: 0.98 kbps(24kHz版)
  • マルチスケール量子化: 3階層の時間解像度(L1: 12Hz, L2: 23Hz, L3: 47Hz)
  • パラメータ数: 19.8M(モデル本体より遥かに軽量)
  • 出力: 24kHz モノラル音声

トークン体系の詳細分析

# 特殊制御トークン
CODE_START_TOKEN_ID = 128257  # Start of Speech (SOS)
CODE_END_TOKEN_ID = 128258    # End of Speech (EOS)
CODE_TOKEN_OFFSET = 128266    # SNACコードの開始位置

# SNACトークンの範囲
SNAC_MIN_ID = 128266
SNAC_MAX_ID = 156937  # 128266 + (7 * 4096) - 1

トークンの内訳

Maya1の156,960トークンは以下のように構成されています:

トークン種類 範囲 個数 用途
テキスト 0 ~ 128256 128,257 通常のLlamaテキストトークン
SOS 128257 1 音声生成開始マーカー
EOS 128258 1 音声生成終了マーカー
予約領域 128259 ~ 128265 7 将来の拡張用?
SNAC音声 128266 ~ 156937 28,672 音声コード (7×4096)

SNAC音声トークンが28,672個ある理由は、SNACが7トークン/フレームの構造を持ち、各レベルで4096個のコードブックを使用するためです:

7トークン/フレーム × 4096コード = 28,672トークン

プロンプトフォーマット

Maya1は特殊な構造化フォーマットを使用します。以下の特殊トークンIDが定義されています:

# 特殊トークンID
SOH_ID = 128259  # Start of Header
EOH_ID = 128260  # End of Header
SOA_ID = 128261  # Start of Audio
BOS_ID = 128000  # Beginning of Sequence
TEXT_EOT_ID = 128009  # End of Text
CODE_START_TOKEN_ID = 128257  # Start of Speech (SOS)

使用例:

description = "Realistic male voice in the 30s age with american accent. Normal pitch, warm timbre, conversational pacing."
text = "Hello! <excited> This is amazing! <laugh>"
prompt = build_prompt(tokenizer, description, text)
# → <SOH><BOS><description="..."> Hello! <excited>...<EOT><EOH><SOA><SOS>

対応する感情タグ(special_tokens_map.jsonに定義、全20種類):

angry, appalled, chuckle, cry, curious, disappointed, excited,
exhale, gasp, giggle, gulp, laugh, laugh_harder, mischievous,
sarcastic, scream, sigh, sing, snort, whisper

これらはトークナイザーのadditional_special_tokensとして登録されており、通常のテキストトークンとは異なります。

声のデザイン機能:自由度の高い音声制御

Maya1の最大の特徴の一つが、体系的な声のデザインシステムです。自然言語で声の特徴を記述するだけで、様々な声質・感情・アクセントを生成できます。

制御可能なパラメータ

共通属性(Realistic & Creative両方)

カテゴリ オプション
年齢 20s, 30s, 40s
性別 male, female
アクセント american, british, indian, middle_eastern, asian_american
ピッチ low, normal, high
声質 deep, warm, gravelly, smooth, raspy, nasally, throaty, harsh (+ robotic/ethereal for Creative)
スピード very_slow, slow, conversational, brisk, fast, very_fast
感情 neutral, energetic, excited, sad, sarcastic, dry
感情の強さ low, med, high

Realistic専用属性

カテゴリ 用途
ドメイン podcast, commercial, education, support, entertainment, corporate等
役割 podcast_host, ad_narrator, elearning_instructor等
場面 formal, neutral, casual

Creative専用属性

Character: animated_cartoon, ai_machine_voice, alien_scifi, pirate, dark_villain, demon, gangster, mafia, vampire, spy, anime等

声のデザインの仕組み

Maya1の声デザイン機能は以下の2層構造になっています:

1. 感情タグ:Special Tokens

special_tokens_map.jsonで定義された20個の感情タグは、トークナイザーレベルで特別扱いされています:

{
  "additional_special_tokens": [
    {"content": "<angry>"},
    {"content": "<laugh>"},
    {"content": "<whisper>"},
    // ... 全20種類
  ]
}

これにより、<laugh><whisper>はテキストとして分割されず、単一のトークンIDとして処理されます。

2. 声の記述:自然言語による学習

<description="..."> の部分は特別な処理を受けず、通常のテキストとしてトークン化されます。つまり:

  • チャットテンプレート(chat_template.jinja)は標準的なLlama 3形式
  • descriptionに関する特別なプリプロセスは存在しない
  • モデルが学習データから自然言語記述と音声特徴の対応を学習

これは非常に興味深い設計で、固定されたパラメータセットではなく、柔軟な自然言語記述で声質を制御できます。

実際に声をデザインして生成してみる

同じテキストで6つの異なる話者パターンを生成し、Maya1の声質制御能力を検証しました。

Hello! <excited> This is amazing! <laugh>

40代男性(ブリティッシュ)

Description: "Realistic male voice in the 40s age with british accent. Normal pitch, warm timbre, conversational pacing."

https://soundcloud.com/j-j-417631469/male40s-4?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing&si=3df1f17f223f4753b7067c928d4b89f5
渋い声

20代女性(興奮)

Description: "Young female voice in the 20s age with american accent. High pitch, bright timbre, energetic pacing.
https://soundcloud.com/j-j-417631469/female20sexiceted-2?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing&si=59ce6c224a974f179459dd46863ab6a1
良い

30代女性(囁き)

Description: "Friendly female voice in the 30s age with american accent. Normal pitch, soft timbre, slow pacing."
https://soundcloud.com/j-j-417631469/female30swhisper-3?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing&si=5404f644f8894cf19f8dc7f2c19e2773
まじで人間

海賊

Description: "Creative, pirate character. Male voice in their 40s with british accent. Low pitch, gravelly timbre, slow pacing, energetic tone at high intensity."

https://soundcloud.com/j-j-417631469/pirate-5?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing&si=4fcd8351311943849b68c8cb83c8077e
すっごい

コマーシャルナレーター

Description: "Realistic male voice in the 30s age with american accent. Normal pitch, clear timbre, brisk pacing, energetic tone at high intensity, commercial Domain, ad_narrator role, formal delivery."

https://soundcloud.com/j-j-417631469/commercial_narrator-1?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing&si=d4a37f3561a545b5a1361f6fc12cef3d
ちょっとうざいかも

AIロボット

Description: "Creative, ai_machine_voice character. Male voice in their 30s with american accent. Normal pitch, robotic timbre, conversational pacing, neutral tone at med intensity."

https://soundcloud.com/j-j-417631469/ai_robot?si=ff0e7198455e476dbfb8ac220ced5bed&utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing
ちゃんとロボット

全体的にめちゃくちゃクオリティが高いです!!
笑い声やwhisperをテキストだけで調整できるのは凄いし、海賊の声の表現力が高いです。
AIロボットのガラガラ機械音声を学習データに含めるのは勇気あるなと思いました。

課題

  • 日本語未対応
  • 女性の高音がかすれる :SNACの限界?
  • GPU必須: CPU推論は非現実的, GPUでもリアルタイムはちょっと厳しい

次回

弊社LivetoonでMaya1の日本語版をトレーニングしており、まもなく公開する予定です。
次回の記事ではMaya1のトレーニングにおける課題や日本語の推論について深掘るつもりです。

その他の実験記録

実験環境:

  • GPU: NVIDIA Tesla T4 (16.7GB VRAM)
  • モデル: maya-research/maya1 (3.3B parameters)
  • フレームワーク: Transformers + SNAC(vLLMは未使用)
  • 生成パラメータ: max_new_tokens=500, temperature=0.4, top_p=0.9
  1. モデルロード時間: 約90秒(初回のみ)
  2. 推論時間: 約5-8秒/サンプル(500トークン生成)
  3. メモリ使用量: 約7GB VRAM(bfloat16精度)

参考リンク

GitHubで編集を提案

Discussion