HuggingFaceの「speech-to-speech」実装を試す
GitHubレポジトリ
Speech To Speech: オープンソースでモジュール化されたGPT4-oの取り組み
アプローチ
構成
このリポジトリは以下の部分からなる音声-音声カスケードパイプラインを実装しています:
- 音声活動検出 (VAD)
- 音声からテキスト (STT)
- 言語モデル (LM)
- テキストから音声 (TTS)
モジュール性
このパイプラインは完全にオープンかつモジュール化されたアプローチを提供しており、Hugging Face Hubで利用可能なTransformersライブラリを活用しています。コードは簡単に変更可能で、以下のデバイス特有および外部ライブラリの実装をサポートしています:
VAD
STT
- Hugging Face Hubの任意のWhisperモデルチェックポイント、例:whisper-large-v3、distil-large-v3
- Lightning Whisper MLX
- Paraformer - FunASR
LLM
- Hugging Face Hub上の任意のインストラクションフォローモデル (モデル一覧はこちら)
- mlx-lm
- OpenAI API
TTS
多言語サポート
このパイプラインは現在、英語、フランス語、スペイン語、中国語、日本語、韓国語をサポートしています。
以下の2つのユースケースが考慮されています:
- 単一言語会話:
--language
フラグでターゲット言語コードを指定して言語設定を強制します(デフォルトはen
)。- 言語切り替え:
--language
をauto
に設定。この場合、Whisperが各発話プロンプトの言語を検出し、LLMは「Please reply to my message in ...
」という指示で応答言語を確実に指定します。なお、STTおよびLLMチェックポイントはターゲット言語と互換性がある必要があります。STT部分では、Parler-TTSはまだ多言語に対応していません(ただし、この機能は近々追加予定です🤗)。その間、Melo(英語、フランス語、スペイン語、中国語、日本語、韓国語をサポート)またはChat-TTSを使用してください。
インストール
READMEに従って進める。ローカルのMac上で。
レポジトリクローン
git clone https://github.com/huggingface/speech-to-speech && cd speech-to-speech
Python仮想環境作成。自分はmiseを使うが、適宜。pythonは3.12だとパッケージインストールで失敗したので3.11にした。
mise use python@3.11
cat << 'EOS' >> .mise.toml
[env]
_.python.venv = { path = ".venv", create = true }
EOS
mise trust
依存パッケージをインストール。
pip install -r requirements_mac.txt
Macの場合はMeloTTSになるようなので、あわせてこちらも。
python -m unidic download
使用方法は2つある。
- サーバー/クライアントアプローチ: モデルをサーバー上で実行し、音声入出力をクライアントからストリーム。
- ローカルアプローチ:ローカル環境で実行。
とりあえずMac向けにはローカルアプローチの手順が記載されているのでそれで。
python s2s_pipeline.py \
--local_mac_optimal_settings \
--device mps
初回は諸々モデルのダウンロードなどが行われるので時間がかかる。以下のように表示されればどうやら発話を待っているように思える。
2024-12-26 01:11:58,537 - connections.local_audio_streamer - INFO - Starting local audio stream
適当に発話してみるとこうなる。
USER: Oh, hi,
ASSISTANT: Hello!
ASSISTANT: How can I help you today?
USER: I hope you enjoyed this video.
ASSISTANT: I'm glad you like it.
ASSISTANT: I'm glad you're enjoying my videos.
これ日本語で喋ってるんだけどね・・・ドキュメント見つつ言語指定しても変わらず・・・
python s2s_pipeline.py \
--language ja \
--local_mac_optimal_settings \
--device mps
うーん、もうちょっと調べてみる。
MeloTTSでは普通に日本語は使えた。
となると、Whisperのところでうまく言語を渡せていないってことなのかな?
レポジトリの更新が2ヶ月ほど止まっているようなので、一旦終了かな。