Skip to content

v0.1.0 — 559 K パラメータ日本語 TTS の初回リリース

Choose a tag to compare

@ayutaz ayutaz released this 29 Aug 15:15
· 163 commits to main since this release

⚠️ これは古いリリースです。v0.1.1 を見てください。
モデルは v0.1.1 と bit 同一ですが、下の「使い方」は v0.1.1 で訂正されており、
v0.1.1 には焼くだけの ESP32 firmware が付いています。

559,008 パラメータの日本語 TTS。 arXiv:2608.21378
"sanoTTS" の蒸留レシピを日本語に適用した独立再実装の最初のリリースです。
教師は piper-plus (MB-iSTFT-VITS2)。

⚠️ 先に読んでください

ライセンスはコードとモデルで違う コードは MIT、モデルの重みは MIT ではありませんLICENSE-MODEL.md
実機で動かしたことがありません ESP32-S3 のボードが手元に無く、速度を一度も測っていない。C99 コアはホストと QEMU でしか走っていません
これは検証 (PoC) です 製品品質ではありません。既知の制約は MODEL_CARD.md
漢字は入力できません 端末は「ひらがな + アクセント記号」を受け取ります。漢字→かなはホスト側でオフラインに行います

📜 ライセンス — 重みは MIT ではありません

対象 ライセンス
リポジトリのコードとドキュメント MIT
このリリースで配布する重み・ブロブ・サンプル音声 LICENSE-MODEL.mdLicenseRef-sanoTTS-jp-Model-1.0

なぜ分けたか。 MIT は「無制限に (without restriction)」の利用を認めます。
しかしこの重みはつくよみちゃんコーパスを素材に含む教師からの蒸留物で、
そのコーパスの条件は 帰属表示を必須とし、出力の用途に禁止事項を課し、
その義務が再配布を受けた側にも伝播すると定めています。
MIT を名乗ることは、こちらが持っていない権利を持っているかのように宣言すること
なるため、重みだけを別条件にしました。

できること

✅ 使用(商用を含む)/ ✅ 改変・派生物の作成 / ✅ 再配布・サブライセンス — 無償

必ず守ること(2 つ。下流にも伝播します

1. 帰属表示を配布物に同梱するNOTICE.txt をそのまま入れてください。

本ソフトウェアの音声合成には、フリー素材キャラクター「つくよみちゃん」
(© 夢前黎)が無料公開している音声データを使用しています。
https://tyc.rei-yumesaki.net/material/corpus/

(全文は NOTICE.txt。MOE-Speech / Common Voice / ROHAN4600 / ITA / JSUT /
piper-plus の表示も含まれます。1 行でも欠けると違反になります

2. 生成音声を次の用途に使わない

❌ 個人・団体への攻撃、批判 / ❌ 政治・宗教上の主張 / ❌ アダルト用途 /
❌ 素材としての再配布(生成音声を「音声素材集」として配ること)

一次ソース: https://tyc.rei-yumesaki.net/material/corpus/
⚠️ 条件は提供元が更新しうるため、配布・利用の前に一次ソースを確認してください。

⚠️ 隠さずに書く既知のリスク

蒸留に使ったテキストのうち JSUT ver1.1 の 6,472 行は CC-BY-SA-4.0(継承付き)です。
「学習済みモデルは学習テキストの二次的著作物」という立場を取られた場合、
継承が重みに及ぶ可能性があります。日本の著作権法 30 条の 4 により学習自体が許され、
コーパス本文も再配布していないため実務上この立場が通る公算は低いと判断しましたが、
リスクはゼロではありません

⚠️ これは本プロジェクトによる一次ソースの読解であって、法的助言ではありません。

📦 成果物

ファイル サイズ 中身
saanotts-jp-v3-stage4.pt 2.7 MB PyTorch checkpoint(fp32)。Python から推論・追加学習
saanotts-jp-v3-int8.bin 643,936 B C99 コア用 int8 ブロブ。マイコンに載せるのはこれ
saanotts-jp-v3-fp32.bin 2,249,792 B 同 fp32 版(参照・デバッグ用)
golden-v3-int8.bin / golden-v3-fp32.bin 各 779,584 B 移植を検証するゴールデン中間出力
saanotts-jp-v3-samples.zip 709 KB 合成音声サンプル 8 本(22.05 kHz / 21.5 秒)
NOTICE.txt 必須の帰属表示(配布物に同梱すること)
LICENSE-MODEL.md / MODEL_CARD.md ライセンス全文 / モデルカード
SHA256SUMS.txt 上記すべての SHA-256

すべて runs/v3/stage4.pt(Stage 3 = 80,000 step)から生成しました。
csrc/export_i8.json / csrc/export.json に生成元 ckpt と SHA-256 が記録してあります。

📊 品質(held-out 24 文・すべて予測器スコア)

指標 生徒 教師 教師比
SCOREQ synthetic/nr 1.2716 1.9732 0.6444 [0.6044, 0.6843]
DNSMOS OVRL 2.1730 2.7270 0.7969 [0.7756, 0.8173]
かな CER 0.1671 0.1351 +0.0320 [−0.031, +0.087] p=0.31(有意差なし
アクセント符号一致 37/37 = 1.000 CI95 [1.000, 1.000]

参考: 論文が報告する英語 embedded tier の SCOREQ 教師比は 0.5427

int8 化のコスト(fp32 経路に対する SNR、n=24): 平均 28.11 dB / 最小 25.72 dB

⚠️ この数字の読み方

  • 絶対値を英語のモデルと比べないでください。 SCOREQ も UTMOS も DNSMOS も
    日本語で較正されていません。日本語では実人間の音声ですら SCOREQ 2.4983 /
    UTMOS 2.3047
    しか出ません。論文自身も言語をまたいだ絶対値比較はできないと明言しています
  • 「教師比 0.64」は「教師の音を 100 としたとき 64」ではありません。
    較正されていない予測器のスコアの比です
  • ⚠️ 人による評価は 1 名の少数試行しかしていません。
    v2 → v3 の指標上の改善は、盲検 A/B 7 試行で 1 度も聴き分けられませんでした
    「指標が向上した」と「人が良いと感じた」は別です

🧠 メモリと速度

実行時 RAM(ストリーミング版) 197 KB(ESP32-S3 の SRAM 512 KB の 38%)
重み(int8、flash) 643,936 B
速度 ⚠️ 未測定

fp32 のまま移植すると 2.47× 実時間(間に合わない)という外挿値があります。
int8 + PIE(ESP32-S3 の SIMD)カーネルは実装済みで、QEMU 上でスカラ実装と
bit 完全一致
することを確認しました(MAC の 99.40% を被覆)。
⚠️ QEMU はサイクル精度ではないので、「速くなった」とは言えません。
残っているのは実機でのサイクル実測だけです。

🔧 使い方

⚠️ 公開時に載せたこの手順は動きませんでした(2026-08-30 に訂正):

# ✗ 2 か所で失敗する
git clone https://github.com/ayutaz/sanoTTS-jp.git && cd sanoTTS-jp && uv sync
uv run python scripts/synthesize_student.py \
    --ckpt saanotts-jp-v3-stage4.pt --text "今日は良い天気ですね。" --out out/
  1. uv sync が通らないpyproject.toml[tool.uv.sources] が piper-plus への
    絶対パスを指しているので、向け直すまで error: Distribution not found at: file://...
  2. --text(漢字)は教師 ckpt を要求する — 音素 ID を教師の phoneme_id_map 経由で
    組むため。教師は private リポジトリにあるので、リリースだけでは使えない

正しい手順(piper-plus も教師も要らない。新規 clone で実測 = M-65):

git clone https://github.com/ayutaz/sanoTTS-jp.git && cd sanoTTS-jp
uv venv && uv pip install "torch>=2.11" "numpy<2.5" "soundfile>=0.14"

uv run --no-project python scripts/synthesize_student.py \
    --ckpt saanotts-jp-v3-stage4.pt \
    --intermediate "きょ][おわよ][いて][んきです°ね" --out out/

⚠️ uv sync は使わない。 生徒の推論に要るのは torch / numpy / soundfile だけで、
uv sync は piper-plus への path 依存を解決しようとして落ちる。

⚠️ 端末が受け取るのと同じ「かな中間表現」を渡す。
[ 上昇 / ] 下降核 / # 句境界 / ° 無声化。
漢字混じり文からの変換scripts/to_intermediate.py)には OpenJTalk が要るので、
piper-plus のクローンが必要(教師 ckpt は不要)。

⚠️ --intermediate--text同じ入力に対して WAV がバイト単位で一致する
(教師がある環境で確認済み。M-64)。

C99 コアの移植を検証する場合は golden-v3-*.bin を突き合わせてください
make -C csrc all-test が実装例)。

🐛 このリリースで訂正した数値

⚠️ 公開前の検算で、記録していた v3 の品質値 2 件が誤っていることが分かりました。

生徒側だけ前後 0.3 秒のパディング無しの音声を、パディング済みの教師と
突き合わせていました。SCOREQ / DNSMOS はどちらも前後の無音に反応するため、
生徒だけが下駄を履いていました

指標 誤(記録) 正(前処理を揃えて測り直し)
SCOREQ 教師比 0.6613 0.6444
DNSMOS OVRL 教師比 0.8385 0.7969
かな CER(教師との差) +0.0034 +0.0320

アクセント(37/37)と int8 SNR(28.11 / 25.72 dB)は別経路なので影響を受けていません

配布するモデルを選ぶ判断は変わりません — v3 は SCOREQ (+0.0653 [+0.022, +0.108]) と
DNSMOS (+0.0660 [+0.006, +0.124]) で v2 より有意に良く、アクセントと int8 SNR でも
上回り、CER で悪化していません。論文の英語比 0.5427 を上回る点も維持されます。

⚠️ ただし「v3 でかな CER が教師と区別できなくなった」は撤回します。
実際の差は +0.0320 で、v2 (+0.0425) からの改善は
−0.0105 [−0.037, +0.018] = 検出できません

再現とゲート:

uv run --extra eval python scripts/release_metrics.py --out reports/release_v0.1.0

G1 が「比較する全セットが同じ長さの先頭無音を持つ」ことを検査し、
無パディングの陽性対照が落ちることまで確認します)


一次データ: docs/measurements.md(全項目に再現コマンド付き)
決定と訂正履歴: docs/decisions.md

SHA-256

⚠️ 公開時の Release 本文は MODEL_CARD.md の行だけ古い値 (6d9be727…) を載せていました
(差し替え前のファイルのハッシュ。2026-08-30 に訂正)。
配布物そのものと SHA256SUMS.txt は最初から下の値で正しいので、
shasum -a 256 -c SHA256SUMS.txt は通ります。

4724bcf8a37a3c1518cc0219c1c515c6e8907410494459c91ff1c56f195890b5  saanotts-jp-v3-stage4.pt
c3b89216133fa7bee3f61ed9d8e6c7183a5dfd41b70dab194f42c20fce5b4170  saanotts-jp-v3-int8.bin
dae6303c1105845aeedabc5141aa811f9d5de02f63d7af4188fb82e6cbe5298e  saanotts-jp-v3-fp32.bin
02641b6ea7ca2d44b99a5c205603a642a382162bc1ff3c74834ba4b07f5134bf  golden-v3-int8.bin
b833f7025cf4dff8318847e9c5a620316bbbda3cb4f539baa112aa85eaf3ca81  golden-v3-fp32.bin
4991c8b532e29be182c7c190db393dd38bb0612053281adaf859569e7321f10c  saanotts-jp-v3-samples.zip
0b8681feeda97fc16ae99c57c3e7f2f818309c33aa03310242185bb7f1a6bda1  NOTICE.txt
51d0fec9f4e5a63a21ef5f493bcc900d73ed9efa927dc57d07893a8e7f207e07  LICENSE-MODEL.md
b80ea4a36c38b3d83e400d9570176041f70c1f681bd553e8cd71b7e3c47e66cc  MODEL_CARD.md