LLASA-3B TTS モデルのファインチューニングツール
LLASA-3B(Large Language Audio Speech Analysis)は、テキストから音声を生成する日本語TTSモデルです。このリポジトリは、独自のデータセットでLLASA-3BをファインチューニングするためのトレーニングツールとUIを提供します。
注意: requirements.txtには特定のバージョンのtransformersライブラリが含まれています。
このプロジェクトはHugging Face Transformers対応のXCodec2モデルを使用します。オリジナルのAnime-XCodec2チェックポイントをTransformers形式に変換する場合は、以下の手順に従ってください。
オリジナルのチェックポイントはHugging Faceの変換スクリプトと互換性のないキー名を使用しています。script/convert_weight_norm_key.pyを使用してキーを変換します:
python script/convert_weight_norm_key.py
このスクリプトは以下の変換を実行します:
parametrizations.weight.original0 → weight_gparametrizations.weight.original1 → weight_vact.bias → act.beta変換後のモデルはorigin_ckpt/model_c.safetensorsとして保存されます。
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
学習には以下のデータが必要です:
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
このスクリプトは以下を実行します:
各行は以下の形式のJSON形式で保存されます:
{"text": "こんにちは、今日はいい天気ですね。", "code": [1234, 5678, ...]}
config/example.yamlをコピーして編集します:
cp config/example.yaml config/my_config.yaml
# データパス
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推奨)
python main.py --config config/my_config.yaml
python app.py -m [モデルパス] -c [コーデックモデルパス]
-m, --model_path: モデルのパス(デフォルト: server)-c, --codec_model_path: コーデックモデルのパス(デフォルト: Anime-XCodec2-hf)--host: ホスト名(省略可)--port: ポート番号(デフォルト: 7860)--cuda_visible_devices: 使用するCUDAデバイス(デフォルト: 0)起動後、以下の3つのタブが利用可能です:
🗣️ TTS: テキストから音声を生成
🔤 トークナイザー: 音声のトークン化と復元
🎤 類似度計算: 音声間の類似度を計算
| スクリプト | 説明 |
|---|---|
main.py | トレーニングのメインスクリプト |
create_dataset.py | データセット作成ツール |
app.py | Gradio WebUIの起動 |
modules/llasa.py | LLASAモデルクラス |
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 ファイルをご覧ください。
このプロジェクトは以下の外部モデルを使用しています。各モデルには独自のライセンスが適用されます:
⚠️ このリポジトリのコードはMITライセンスですが、使用する外部モデルには各モデル独自のライセンスが適用されます。
以下のプロジェクトとその開発者の皆様に感謝いたします:
Python
100.0%
LLASA-3B TTS モデルのファインチューニングツール
LLASA-3B(Large Language Audio Speech Analysis)は、テキストから音声を生成する日本語TTSモデルです。このリポジトリは、独自のデータセットでLLASA-3BをファインチューニングするためのトレーニングツールとUIを提供します。
注意: requirements.txtには特定のバージョンのtransformersライブラリが含まれています。
このプロジェクトはHugging Face Transformers対応のXCodec2モデルを使用します。オリジナルのAnime-XCodec2チェックポイントをTransformers形式に変換する場合は、以下の手順に従ってください。
オリジナルのチェックポイントはHugging Faceの変換スクリプトと互換性のないキー名を使用しています。script/convert_weight_norm_key.pyを使用してキーを変換します:
python script/convert_weight_norm_key.py
このスクリプトは以下の変換を実行します:
parametrizations.weight.original0 → weight_gparametrizations.weight.original1 → weight_vact.bias → act.beta変換後のモデルはorigin_ckpt/model_c.safetensorsとして保存されます。
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
学習には以下のデータが必要です:
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
このスクリプトは以下を実行します:
各行は以下の形式のJSON形式で保存されます:
{"text": "こんにちは、今日はいい天気ですね。", "code": [1234, 5678, ...]}
config/example.yamlをコピーして編集します:
cp config/example.yaml config/my_config.yaml
# データパス
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推奨)
python main.py --config config/my_config.yaml
python app.py -m [モデルパス] -c [コーデックモデルパス]
-m, --model_path: モデルのパス(デフォルト: server)-c, --codec_model_path: コーデックモデルのパス(デフォルト: Anime-XCodec2-hf)--host: ホスト名(省略可)--port: ポート番号(デフォルト: 7860)--cuda_visible_devices: 使用するCUDAデバイス(デフォルト: 0)起動後、以下の3つのタブが利用可能です:
🗣️ TTS: テキストから音声を生成
🔤 トークナイザー: 音声のトークン化と復元
🎤 類似度計算: 音声間の類似度を計算
| スクリプト | 説明 |
|---|---|
main.py | トレーニングのメインスクリプト |
create_dataset.py | データセット作成ツール |
app.py | Gradio WebUIの起動 |
modules/llasa.py | LLASAモデルクラス |
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 ファイルをご覧ください。
このプロジェクトは以下の外部モデルを使用しています。各モデルには独自のライセンスが適用されます:
⚠️ このリポジトリのコードはMITライセンスですが、使用する外部モデルには各モデル独自のライセンスが適用されます。
以下のプロジェクトとその開発者の皆様に感謝いたします:
Python
100.0%