
このリポジトリは、次の部分で構成される音声でスピーチのカスケードパイプラインを実装します。
パイプラインは、完全にオープンでモジュール式のアプローチを提供し、ハギングフェイスハブのトランスライブラリを通じてモデルを活用できることに焦点を当てています。このコードは簡単に変更できるように設計されており、デバイス固有および外部ライブラリの実装を既にサポートしています。
Vad
stt
LLM
TTS
リポジトリをクローンします:
git clone https://github.com/huggingface/speech-to-speech.git
cd speech-to-speechUVを使用して必要な依存関係をインストールします。
uv pip install -r requirements.txt Macユーザーの場合、代わりにrequirements_mac.txtファイルを使用します。
uv pip install -r requirements_mac.txtMelo TTSを使用する場合は、実行する必要もあります。
python -m unidic downloadパイプラインは2つの方法で実行できます。
サーバーでパイプラインを実行します。
python s2s_pipeline.py --recv_host 0.0.0.0 --send_host 0.0.0.0クライアントをローカルに実行して、マイク入力を処理し、生成されたオーディオを受信します。
python listen_and_play.py --host < IP address of your server >python s2s_pipeline.py --local_mac_optimal_settingsこの設定:
--device mpsを追加して、すべてのモデルにMPSを使用します。https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
docker compose up
WhisperとParler-TTSのトーチコンパイルを活用します。 Parler-TTSの使用により、オーディオ出力ストリーミングが可能になり、OverealLの遅延が減少します。
python s2s_pipeline.py
--lm_model_name microsoft/Phi-3-mini-4k-instruct
--stt_compile_mode reduce-overhead
--tts_compile_mode default
--recv_host 0.0.0.0
--send_host 0.0.0.0 現時点では、CUDAグラフをキャプチャするモードは、ストリーミングParler-TTS( reduce-overhead 、 max-autotune )と互換性がありません。
パイプラインは現在、英語、フランス語、スペイン語、中国語、日本語、韓国語をサポートしています。
2つのユースケースが考慮されます。
--languageフラグを使用して言語設定を実施します(デフォルトは 'en')。--languageを設定します。この場合、Whisperは音声プロンプトごとに言語を検出し、LLMは「 Please reply to my message in ... 」でプロンプトが求められ、応答が検出された言語であることを確認します。ターゲット言語と互換性のあるSTTおよびLLMチェックポイントを使用する必要があることに注意してください。 STTの部分では、Parler-TTSはまだ多言語ではありません(ただし、その機能はまもなく登場します!?)。それまでの間、Melo(英語、フランス語、スペイン語、中国語、日本、韓国語をサポートする)またはChat-TTSを使用する必要があります。
自動言語検出の場合:
python s2s_pipeline.py
--stt_model_name large-v3
--language auto
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct または、特に1つの言語の場合、この例では中国語
python s2s_pipeline.py
--stt_model_name large-v3
--language zh
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct 自動言語検出の場合:
python s2s_pipeline.py
--local_mac_optimal_settings
--device mps
--stt_model_name large-v3
--language auto
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct-4bit または、特に1つの言語の場合、この例では中国語
python s2s_pipeline.py
--local_mac_optimal_settings
--device mps
--stt_model_name large-v3
--language zh
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct-4bit 注:すべてのCLI引数の参照は、引数クラスまたは
python s2s_pipeline.py -hを実行することで直接見つけることができます。
Moduleargumentsクラスを参照してください。設定を許可します:
--device (各パーツが同じデバイスで実行されたい場合)--mode localまたはserverVadhandlerargumentsクラスを参照してください。特に:
--thresh :音声アクティビティの検出をトリガーするためのしきい値。--min_speech_ms :発話と見なされる検出された音声活動の最小期間。--min_silence_ms :音声のセグメント化、文の切断、レイテンシーの削減のための沈黙間隔の最小長さ。model_name 、 torch_dtype 、およびdevice 、テキスト、言語モデル、テキストへのスピーチの実装ごとに公開されます。対応するプレフィックス( stt 、 lm 、またはttsなどのターゲットパイプラインパーツを指定します。詳細については、実装の引数クラスを確認してください)。
例えば:
--lm_model_name google/gemma-2b-itモデルの生成メソッドのその他の生成パラメーターは、部品のプレフィックス + _gen_ 、例えば、 --stt_gen_max_new_tokens 128使用して設定できます。これらのパラメーターは、まだ公開されていない場合は、パイプラインパーツの引数クラスに追加できます。
@misc { Silero VAD,
author = { Silero Team } ,
title = { Silero VAD: pre-trained enterprise-grade Voice Activity Detector (VAD), Number Detector and Language Classifier } ,
year = { 2021 } ,
publisher = { GitHub } ,
journal = { GitHub repository } ,
howpublished = { url{https://github.com/snakers4/silero-vad} } ,
commit = { insert_some_commit_here } ,
email = { hello @ silero.ai }
} @misc { gandhi2023distilwhisper ,
title = { Distil-Whisper: Robust Knowledge Distillation via Large-Scale Pseudo Labelling } ,
author = { Sanchit Gandhi and Patrick von Platen and Alexander M. Rush } ,
year = { 2023 } ,
eprint = { 2311.00430 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CL }
} @misc { lacombe-etal-2024-parler-tts ,
author = { Yoach Lacombe and Vaibhav Srivastav and Sanchit Gandhi } ,
title = { Parler-TTS } ,
year = { 2024 } ,
publisher = { GitHub } ,
journal = { GitHub repository } ,
howpublished = { url{https://github.com/huggingface/parler-tts} }
}