laksjdjf/llasa-trainer

5

stars

39

commits

Python

primary language

Oct 28, 2025

updated

README

LLASA-Trainer

LLASA-3B TTS モデルのファインチューニングツール

LLASA-3B(Large Language Audio Speech Analysis)は、テキストから音声を生成する日本語TTSモデルです。このリポジトリは、独自のデータセットでLLASA-3BをファインチューニングするためのトレーニングツールとUIを提供します。 注意: requirements.txtには特定のバージョンのtransformersライブラリが含まれています。

🔄 Transformers対応XCodec2モデルの作成

このプロジェクトはHugging Face Transformers対応のXCodec2モデルを使用します。オリジナルのAnime-XCodec2チェックポイントをTransformers形式に変換する場合は、以下の手順に従ってください。

変換手順

1. オリジナルチェックポイントのダウンロード

model.safetensors

2. 重みキーの変換

オリジナルのチェックポイントはHugging Faceの変換スクリプトと互換性のないキー名を使用しています。script/convert_weight_norm_key.pyを使用してキーを変換します:

python script/convert_weight_norm_key.py

このスクリプトは以下の変換を実行します:

  • parametrizations.weight.original0weight_g
  • parametrizations.weight.original1weight_v
  • act.biasact.beta

変換後のモデルはorigin_ckpt/model_c.safetensorsとして保存されます。

3. Transformers形式への変換

Hugging Faceの公式変換スクリプトを使用して、PyTorch形式に変換します:

python venv/lib/python3.12/site-packages/transformers/models/xcodec2/convert_xcodec2_checkpoint_to_pytorch.py \
  --checkpoint_path origin_ckpt/model_c.safetensors \
  --config_path origin_ckpt/config.json \
  --pytorch_dump_folder_path Anime-XCodec2-hf

📂 データセット準備

データ形式

学習には以下のデータが必要です:

  1. 音声ファイル: WAV形式の音声ファイル
  2. テキストファイル: 音声に対応するテキスト(ファイル名:テキスト形式)

ディレクトリ構成例

your_dataset/
├── audio/
│   ├── file001.wav
│   ├── file002.wav
│   └── file003.wav
└── text.txt

テキストファイル形式例

デフォルトでは、: (コロン) で区切られたファイルIDとテキストのペアを記述します:

file001:こんにちは、今日はいい天気ですね。
file002:ありがとうございます。
file003:お疲れ様でした。

注意: ファイルIDは音声ファイル名から拡張子を除いたものと一致させる必要があります。

データセット作成

基本的な使い方

python create_dataset.py <音声フォルダ> <テキストファイル> -o dataset/data.jsonl

コマンドライン引数

引数説明デフォルト値
audio_dir音声ファイルが格納されたディレクトリ(必須)
text_fileテキストファイルのパス(必須)
-o, --output出力するJSONLファイルのパスdataset/data.jsonl
--split_wordテキストファイルの区切り文字:
--file_indexファイルIDのインデックス(0始まり)0
--text_indexテキストのインデックス(0始まり)1
--ext音声ファイルの拡張子.wav

使用例

基本的な使用例:

python create_dataset.py ./audio ./text.txt -o dataset/data.jsonl

タブ区切りのテキストファイルを使用する場合:

python create_dataset.py ./audio ./text.txt -o dataset/data.jsonl --split_word $'\t'

カラムの順序が逆の場合(テキスト:ファイルID):

python create_dataset.py ./audio ./text.txt -o dataset/data.jsonl --file_index 1 --text_index 0

MP3ファイルを使用する場合:

python create_dataset.py ./audio ./text.txt -o dataset/data.jsonl --ext .mp3

処理の流れ

このスクリプトは以下を実行します:

  1. テキストファイルの読み込み: 指定されたテキストファイルからファイルIDとテキストのペアを読み込みます
  2. XCodec2モデルのロード: Anime-XCodec2-hfモデルを自動的にダウンロード・ロードします
  3. 音声コードへの変換: 各音声ファイルをXCodec2で音声コード(トークン)に変換します
  4. JSONL形式での保存: テキストと音声コードのペアをJSONL形式で保存します

各行は以下の形式のJSON形式で保存されます:

{"text": "こんにちは、今日はいい天気ですね。", "code": [1234, 5678, ...]}

ヒント

  • 音声ファイルは16kHz以上のサンプリングレートを推奨します
  • 長すぎる音声(10秒以上)は学習に時間がかかる可能性があります
  • テキストは事前に正規化されている必要はありません(学習時に自動的に正規化されます)
  • データセット作成には時間がかかるため、初回はGPU環境での実行を推奨します

🎓 トレーニング

1. 設定ファイルの準備

config/example.yamlをコピーして編集します:

cp config/example.yaml config/my_config.yaml

2. 主要な設定パラメータ

# データパス
data_dir: dataset/data.jsonl          # 学習データ
output_dir: ./trained/MyModel         # 出力先
model_name: NandemoGHS/Anime-Llasa-3B # ベースモデル

# LoRA設定
lora:
  r: 16                    # LoRAランク(8-64推奨)
  lora_alpha: 32          # スケーリング係数
  lora_dropout: 0.05      # ドロップアウト率

# 学習設定
training:
  num_train_epochs: 20                  # エポック数
  per_device_train_batch_size: 1        # バッチサイズ
  gradient_accumulation_steps: 8        # 勾配蓄積ステップ
  learning_rate: 1e-4                   # 学習率
  fp16: false                           # FP16精度
  bf16: true                            # BF16精度(A100推奨)

3. トレーニング開始

python main.py --config config/my_config.yaml

🎤 音声生成(推論)

Gradio UIの起動

python app.py -m [モデルパス] -c [コーデックモデルパス]

コマンドライン引数

  • -m, --model_path: モデルのパス(デフォルト: server
  • -c, --codec_model_path: コーデックモデルのパス(デフォルト: Anime-XCodec2-hf
  • --host: ホスト名(省略可)
  • --port: ポート番号(デフォルト: 7860)
  • --cuda_visible_devices: 使用するCUDAデバイス(デフォルト: 0

UIの機能

起動後、以下の3つのタブが利用可能です:

  1. 🗣️ TTS: テキストから音声を生成

    • テキスト入力と参照音声を使用した音声生成
    • Temperature、Top-p、Repeat Penaltyなどの生成パラメータ調整
    • 音声の自動文字起こし機能
  2. 🔤 トークナイザー: 音声のトークン化と復元

    • 音声ファイルを音声トークンに変換
    • 音声トークンから音声を復元
  3. 🎤 類似度計算: 音声間の類似度を計算

    • ターゲット音声と複数の参照音声の類似度を測定

📖 主要なスクリプト

スクリプト説明
main.pyトレーニングのメインスクリプト
create_dataset.pyデータセット作成ツール
app.pyGradio WebUIの起動
modules/llasa.pyLLASAモデルクラス
modules/train.pyトレーニングロジック
modules/llasa_utils.pyユーティリティ関数

📁 プロジェクト構造

llasa-trainer/
├── config/
│   └── example.yaml          # 設定ファイル例
├── modules/
│   ├── llasa.py              # LLASAモデルクラス
│   ├── llasa_utils.py        # ユーティリティ
│   ├── train.py              # トレーニングロジック
│   └── train_utils.py        # トレーニングユーティリティ
├── ui/
│   ├── llasa_processor.py    # LLASAモデル処理
│   ├── tts.py                # TTSインターフェース
│   ├── tokenizer.py          # トークナイザーインターフェース
│   └── similarity.py         # 類似度計算インターフェース
├── script/
│   └── convert_weight_norm_key.py  # XCodec2変換スクリプト
├── app.py                    # Gradio UI
├── create_dataset.py         # データセット作成
├── main.py                   # トレーニングメイン
└── requirements.txt          # 依存関係

📜 ライセンスと謝辞

このリポジトリのライセンス

このリポジトリのコードは MIT License の下で公開されています。詳細は LICENSE ファイルをご覧ください。

使用している外部モデルとライセンス

このプロジェクトは以下の外部モデルを使用しています。各モデルには独自のライセンスが適用されます:

1. Anime-Llasa-3B

  • 提供元: NandemoGHS/Anime-Llasa-3B
  • 説明: ベースとなるLLASA-3B TTSモデル
  • ライセンス: モデルのHugging Faceページでライセンスをご確認ください

2. Anime-XCodec2

  • 提供元: NandemoGHS/Anime-XCodec2
  • 説明: 音声エンコーダー/デコーダーモデル
  • ライセンス: モデルのHugging Faceページでライセンスをご確認ください

3. anime-whisper

  • 提供元: litagin/anime-whisper
  • 説明: 音声認識モデル(文字起こし機能に使用)
  • ライセンス: モデルのHugging Faceページでライセンスをご確認ください

4. spkrec-ecapa-voxceleb (SpeechBrain)

  • 提供元: speechbrain/spkrec-ecapa-voxceleb
  • 説明: 話者認識モデル(音声の埋め込みベクトル取得に使用)
  • ライセンス: Apache License 2.0 (SpeechBrain GitHub)
  • : Apache 2.0ライセンスはMITライセンスと互換性があります

重要な注意事項

⚠️ このリポジトリのコードはMITライセンスですが、使用する外部モデルには各モデル独自のライセンスが適用されます。

  • 外部モデルを使用する前に、必ず各モデルのHugging Faceページでライセンス条項を確認してください
  • 商用利用や配布を行う場合は、各モデルのライセンス条項を遵守してください
  • モデルの使用に関する詳細な条件は、各モデルの提供元にお問い合わせください

謝辞

以下のプロジェクトとその開発者の皆様に感謝いたします:

  • NandemoGHS 様 - Anime-Llasa-3BおよびAnime-XCodec2モデルの開発と公開
  • litagin 様 - anime-whisperモデルの開発と公開
  • SpeechBrain - spkrec-ecapa-voxcelebモデルの開発と公開
  • Hugging Face Transformers - モデルの統合とツールの提供

Contributors

laksjdjf

22 commits

Copilot

17 commits

laksjdjf/llasa-trainer

5

stars

39

commits

Python

primary language

Oct 28, 2025

updated

README

LLASA-Trainer

LLASA-3B TTS モデルのファインチューニングツール

LLASA-3B(Large Language Audio Speech Analysis)は、テキストから音声を生成する日本語TTSモデルです。このリポジトリは、独自のデータセットでLLASA-3BをファインチューニングするためのトレーニングツールとUIを提供します。 注意: requirements.txtには特定のバージョンのtransformersライブラリが含まれています。

🔄 Transformers対応XCodec2モデルの作成

このプロジェクトはHugging Face Transformers対応のXCodec2モデルを使用します。オリジナルのAnime-XCodec2チェックポイントをTransformers形式に変換する場合は、以下の手順に従ってください。

変換手順

1. オリジナルチェックポイントのダウンロード

model.safetensors

2. 重みキーの変換

オリジナルのチェックポイントはHugging Faceの変換スクリプトと互換性のないキー名を使用しています。script/convert_weight_norm_key.pyを使用してキーを変換します:

python script/convert_weight_norm_key.py

このスクリプトは以下の変換を実行します:

  • parametrizations.weight.original0weight_g
  • parametrizations.weight.original1weight_v
  • act.biasact.beta

変換後のモデルはorigin_ckpt/model_c.safetensorsとして保存されます。

3. Transformers形式への変換

Hugging Faceの公式変換スクリプトを使用して、PyTorch形式に変換します:

python venv/lib/python3.12/site-packages/transformers/models/xcodec2/convert_xcodec2_checkpoint_to_pytorch.py \
  --checkpoint_path origin_ckpt/model_c.safetensors \
  --config_path origin_ckpt/config.json \
  --pytorch_dump_folder_path Anime-XCodec2-hf

📂 データセット準備

データ形式

学習には以下のデータが必要です:

  1. 音声ファイル: WAV形式の音声ファイル
  2. テキストファイル: 音声に対応するテキスト(ファイル名:テキスト形式)

ディレクトリ構成例

your_dataset/
├── audio/
│   ├── file001.wav
│   ├── file002.wav
│   └── file003.wav
└── text.txt

テキストファイル形式例

デフォルトでは、: (コロン) で区切られたファイルIDとテキストのペアを記述します:

file001:こんにちは、今日はいい天気ですね。
file002:ありがとうございます。
file003:お疲れ様でした。

注意: ファイルIDは音声ファイル名から拡張子を除いたものと一致させる必要があります。

データセット作成

基本的な使い方

python create_dataset.py <音声フォルダ> <テキストファイル> -o dataset/data.jsonl

コマンドライン引数

引数説明デフォルト値
audio_dir音声ファイルが格納されたディレクトリ(必須)
text_fileテキストファイルのパス(必須)
-o, --output出力するJSONLファイルのパスdataset/data.jsonl
--split_wordテキストファイルの区切り文字:
--file_indexファイルIDのインデックス(0始まり)0
--text_indexテキストのインデックス(0始まり)1
--ext音声ファイルの拡張子.wav

使用例

基本的な使用例:

python create_dataset.py ./audio ./text.txt -o dataset/data.jsonl

タブ区切りのテキストファイルを使用する場合:

python create_dataset.py ./audio ./text.txt -o dataset/data.jsonl --split_word $'\t'

カラムの順序が逆の場合(テキスト:ファイルID):

python create_dataset.py ./audio ./text.txt -o dataset/data.jsonl --file_index 1 --text_index 0

MP3ファイルを使用する場合:

python create_dataset.py ./audio ./text.txt -o dataset/data.jsonl --ext .mp3

処理の流れ

このスクリプトは以下を実行します:

  1. テキストファイルの読み込み: 指定されたテキストファイルからファイルIDとテキストのペアを読み込みます
  2. XCodec2モデルのロード: Anime-XCodec2-hfモデルを自動的にダウンロード・ロードします
  3. 音声コードへの変換: 各音声ファイルをXCodec2で音声コード(トークン)に変換します
  4. JSONL形式での保存: テキストと音声コードのペアをJSONL形式で保存します

各行は以下の形式のJSON形式で保存されます:

{"text": "こんにちは、今日はいい天気ですね。", "code": [1234, 5678, ...]}

ヒント

  • 音声ファイルは16kHz以上のサンプリングレートを推奨します
  • 長すぎる音声(10秒以上)は学習に時間がかかる可能性があります
  • テキストは事前に正規化されている必要はありません(学習時に自動的に正規化されます)
  • データセット作成には時間がかかるため、初回はGPU環境での実行を推奨します

🎓 トレーニング

1. 設定ファイルの準備

config/example.yamlをコピーして編集します:

cp config/example.yaml config/my_config.yaml

2. 主要な設定パラメータ

# データパス
data_dir: dataset/data.jsonl          # 学習データ
output_dir: ./trained/MyModel         # 出力先
model_name: NandemoGHS/Anime-Llasa-3B # ベースモデル

# LoRA設定
lora:
  r: 16                    # LoRAランク(8-64推奨)
  lora_alpha: 32          # スケーリング係数
  lora_dropout: 0.05      # ドロップアウト率

# 学習設定
training:
  num_train_epochs: 20                  # エポック数
  per_device_train_batch_size: 1        # バッチサイズ
  gradient_accumulation_steps: 8        # 勾配蓄積ステップ
  learning_rate: 1e-4                   # 学習率
  fp16: false                           # FP16精度
  bf16: true                            # BF16精度(A100推奨)

3. トレーニング開始

python main.py --config config/my_config.yaml

🎤 音声生成(推論)

Gradio UIの起動

python app.py -m [モデルパス] -c [コーデックモデルパス]

コマンドライン引数

  • -m, --model_path: モデルのパス(デフォルト: server
  • -c, --codec_model_path: コーデックモデルのパス(デフォルト: Anime-XCodec2-hf
  • --host: ホスト名(省略可)
  • --port: ポート番号(デフォルト: 7860)
  • --cuda_visible_devices: 使用するCUDAデバイス(デフォルト: 0

UIの機能

起動後、以下の3つのタブが利用可能です:

  1. 🗣️ TTS: テキストから音声を生成

    • テキスト入力と参照音声を使用した音声生成
    • Temperature、Top-p、Repeat Penaltyなどの生成パラメータ調整
    • 音声の自動文字起こし機能
  2. 🔤 トークナイザー: 音声のトークン化と復元

    • 音声ファイルを音声トークンに変換
    • 音声トークンから音声を復元
  3. 🎤 類似度計算: 音声間の類似度を計算

    • ターゲット音声と複数の参照音声の類似度を測定

📖 主要なスクリプト

スクリプト説明
main.pyトレーニングのメインスクリプト
create_dataset.pyデータセット作成ツール
app.pyGradio WebUIの起動
modules/llasa.pyLLASAモデルクラス
modules/train.pyトレーニングロジック
modules/llasa_utils.pyユーティリティ関数

📁 プロジェクト構造

llasa-trainer/
├── config/
│   └── example.yaml          # 設定ファイル例
├── modules/
│   ├── llasa.py              # LLASAモデルクラス
│   ├── llasa_utils.py        # ユーティリティ
│   ├── train.py              # トレーニングロジック
│   └── train_utils.py        # トレーニングユーティリティ
├── ui/
│   ├── llasa_processor.py    # LLASAモデル処理
│   ├── tts.py                # TTSインターフェース
│   ├── tokenizer.py          # トークナイザーインターフェース
│   └── similarity.py         # 類似度計算インターフェース
├── script/
│   └── convert_weight_norm_key.py  # XCodec2変換スクリプト
├── app.py                    # Gradio UI
├── create_dataset.py         # データセット作成
├── main.py                   # トレーニングメイン
└── requirements.txt          # 依存関係

📜 ライセンスと謝辞

このリポジトリのライセンス

このリポジトリのコードは MIT License の下で公開されています。詳細は LICENSE ファイルをご覧ください。

使用している外部モデルとライセンス

このプロジェクトは以下の外部モデルを使用しています。各モデルには独自のライセンスが適用されます:

1. Anime-Llasa-3B

  • 提供元: NandemoGHS/Anime-Llasa-3B
  • 説明: ベースとなるLLASA-3B TTSモデル
  • ライセンス: モデルのHugging Faceページでライセンスをご確認ください

2. Anime-XCodec2

  • 提供元: NandemoGHS/Anime-XCodec2
  • 説明: 音声エンコーダー/デコーダーモデル
  • ライセンス: モデルのHugging Faceページでライセンスをご確認ください

3. anime-whisper

  • 提供元: litagin/anime-whisper
  • 説明: 音声認識モデル(文字起こし機能に使用)
  • ライセンス: モデルのHugging Faceページでライセンスをご確認ください

4. spkrec-ecapa-voxceleb (SpeechBrain)

  • 提供元: speechbrain/spkrec-ecapa-voxceleb
  • 説明: 話者認識モデル(音声の埋め込みベクトル取得に使用)
  • ライセンス: Apache License 2.0 (SpeechBrain GitHub)
  • : Apache 2.0ライセンスはMITライセンスと互換性があります

重要な注意事項

⚠️ このリポジトリのコードはMITライセンスですが、使用する外部モデルには各モデル独自のライセンスが適用されます。

  • 外部モデルを使用する前に、必ず各モデルのHugging Faceページでライセンス条項を確認してください
  • 商用利用や配布を行う場合は、各モデルのライセンス条項を遵守してください
  • モデルの使用に関する詳細な条件は、各モデルの提供元にお問い合わせください

謝辞

以下のプロジェクトとその開発者の皆様に感謝いたします:

  • NandemoGHS 様 - Anime-Llasa-3BおよびAnime-XCodec2モデルの開発と公開
  • litagin 様 - anime-whisperモデルの開発と公開
  • SpeechBrain - spkrec-ecapa-voxcelebモデルの開発と公開
  • Hugging Face Transformers - モデルの統合とツールの提供

Contributors

laksjdjf

22 commits

Copilot

17 commits

Languages

Python

100.0%