はじめに
Llasa-3Bは、香港科学技術大学のオーディオ研究室(HKUST Audio)が開発したオープンソースの音声合成(TTS)モデルである。このモデルはLlama 3.2Bアーキテクチャに基づいており、多言語に対応するだけでなく、感情表現やパーソナライズされた音声クローニングを可能にする高品質な音声生成を提供するために慎重に調整されています。Llasa-3Bは、自然な音声合成におけるその表現力と柔軟性により、多くの研究者や開発者の注目を集めています。
機能一覧
- 音声合成テキストを自然で滑らかな音に変換します。
- ボイスクローニングたった15秒のオーディオ映像で、音色や感情を含む特定の人間の声をクローンすることができる。
- 多言語サポート対応言語は中国語と英語。
- 感情表現生成された音声に感情を注入できるため、音声の信憑性が高まります。
- マルチモデル対応1Bと3Bのパラメトリックスケールモデルを用意。
- オープン加重また、TransformersとvLLMの両方のフレームワークをサポートしています。
ヘルプの使用
インストールと環境の準備
Llasa-3Bモデルを使用するには、まず以下の環境を用意する必要がある:
Python環境Python 3.9以上を推奨。
関連図書館のインストールが必要です。トーチ
, 変圧器
, xcodec2
などのライブラリーがある。
conda create -n xcodec2 python=3.9
conda は xcodec2 をアクティブにする。
pip install transformers torch xcodec2==0.1.3
モデルのダウンロードと読み込み
ハギング・フェイスへLlasa-3BのページHugging Faceのモデルダウンロード機能を直接ご利用いただけます:
from transformers import AutoTokenizer, AutoModelForCausalLM
インポートトーチ
import soundfile as sf
llasa_3b = 'HKUST-Audio/Llasa-3B'
tokenizer = AutoTokenizer.from_pretrained(llasa_3b)
model = AutoModelForCausalLM.from_pretrained(llasa_3b)
model.eval()
model.to('cuda') # GPUがある場合
音声合成プロセス
- 準備したテキスト::
- 音声に変換したいテキストを入力します。
- テキスト前処理::
- 例えば、音声生成モデルをガイドするために、特定の書式のテキストを使用する:
input_text = "これはテストテキストです。音声に変換してください。" formatted_text = f"{input_text}"
- 例えば、音声生成モデルをガイドするために、特定の書式のテキストを使用する:
- スピーチの生成::
- テキストをモデルが理解できるトークンに変換する:
chat = [ {"role": "user", "content": "テキストを音声に変換してください:" + formatted_text}、 {"role": "assistant", "content": ""}"です。 ] input_ids = tokenizer.apply_chat_template(chat, tokenize=True, return_tensors='pt', continue_final_message=True) input_ids = input_ids.to('cuda')
- 音声トークンを生成する:
speech_end_id = tokenizer.convert_tokens_to_ids('') outputs = model.generate(input_ids, max_length=2048, eos_token_id=speech_end_id, do_sample=True, top_p=1, temperature=0.8)
- テキストをモデルが理解できるトークンに変換する:
- 音声デコーディング::
- 生成されたトークンをオーディオに変換します:
from xcodec2.modelling_xcodec2 import XCodec2Model model_path = "HKUST-Audio/xcodec2" Codec_model = XCodec2Model.from_pretrained(model_path).eval().cuda() generated_ids = outputs[0][input_ids.shape[1]:-1]。 speech_tokens = tokenizer.batch_decode(generated_ids, skip_special_tokens=True) speech_ids = [int(token[4:-2]) for トークン in speech_tokens if token.startswith('')]. speech_tokens_tensor = torch.tensor(speech_ids).cuda().unsqueeze(0).unsqueeze(0) gen_wav = Codec_model.decode_code(speech_tokens_tensor) sf.write("output.wav", gen_wav[0, 0, :].cpu().numpy(), 16000)
- 生成されたトークンをオーディオに変換します:
ボイスクローニング
- 15秒程度のオリジナル・サウンドトラックを録音または準備する。::
- 録音機器を使用するか、既存の音声ファイルを提供してください。
- おんせいクローニングほうほう::
- 元の音の周波数を、モデルが使用できるコードブックにエンコードする:
prompt_wav = sf.read("your_source_audio.wav")[0] #はサンプルレート16kHzでなければならない。 vq_code_prompt = Codec_model.encode_code(torch.from_numpy(prompt_wav).unsqueeze(0).cuda())
- テキスト生成プロセスにオーディオキューを追加します:
speech_ids_prefix = [f""foridin vq_code_prompt[0, 0, :].tolist()] とする。 chat = [ {"role": "user", "content": "テキストを音声に変換:" + formatted_text}、 {"role": "assistant", "content": "" + ''.join(speech_ids_prefix)}。 ] # 以降は音声合成と同じです。
- 元の音の周波数を、モデルが使用できるコードブックにエンコードする:
ほら
- Llasa-3Bは16kHzオーディオのみサポートしています。
- モデルの性能は、入力テキストと音声の品質に直接影響され、入力の品質を保証する。