Sophon-Realtime-32B-Tag-JP

Sophon-Realtime-32B-Tag を日本語の音声対話に対応させたバージョンです。日本語の音声入力に対し、日本語の音声で応答します。

  • 重み(thinker/、talker/、voices/)は公式版から一切変更していません。 公式 Hugging Face リポジトリのリビジョン 20e03f35c2b2c6f45691e1a1108e1e0635ba6f1a に含まれる 68 ファイルとハッシュ値が一致することを確認済みです。
  • 変更箇所は推論サーバーのコードのみ。 ベースは公式 GitHub リポジトリ adventists-ai/sophon-realtime の tag/(コミット 3585943)です。本リポジトリにはコードを含めず、差分のみを末尾の「変更差分」に掲載しています。

日本語対応のための変更点

1. 言語指定 ja への対応

オリジナル版: 公式の Tag 版には、システムプロンプトと発話終了判定用プロンプトが中国語版と英語版しかありません。language に ja を指定すると KeyError が発生します。

修正内容: 以下の 2 種類の日本語プロンプトを追加しました。

  • システムプロンプト(応答方針の指示)
  • 発話終了判定用プロンプト(ユーザーの発話が終了したかを言語モデルに判定させるプロンプト)
ファイル 変更内容
config/system_prompt.json 日本語システムプロンプト(ja)を追加
plugin/sophon_realtime/duplex.py 日本語の発話終了判定プロンプトと、その書式(質問文・選択肢・ユーザー音声の配置)を追加
client_example.py --lang ja オプションを追加

2. 応答テキストのカタカナ変換

オリジナル版: Tag 版の音声合成モデル(tag-tts)は CosyVoice3 ベースです。CosyVoice 公式のサンプルコード(example.py)には、日本語の場合はカタカナへの変換が必要と明記されています(「NOTE for Japanese usage, you must translate it to katakana.」)。一方、公式の Tag 版は、言語モデルが出力した漢字かな交じりのテキストを変換せずに音声合成モデルへ渡します。その結果、日本語の応答が中国語風の発音になります。

修正内容: plugin/sophon_realtime/proc.py を以下のとおり変更しました。

  • language が ja の場合のみ、応答テキストを pyopenjtalk でカタカナに変換してから音声合成モデルに渡します(例:「8個残ります。」→「ハッコノコリマス。」)。
  • 応答はストリーミングで生成されるため、句読点(、。!? など)で区切られた単位ごとに順次変換します。句読点が出ていない末尾部分は、次の句読点が出るか応答が終わるまで保留します。これは、送信済みの部分の読みが後続のテキストによって変わらないようにするためです。
  • 音声タグ([laughter] など)は変換対象外です。
  • クライアントに返すテキストは、従来どおり漢字かな交じりです。
  • 環境変数 SOPHON_JA_KANA=0 で変換処理を無効にできます。

使い方

git clone https://github.com/adventists-ai/sophon-realtime && cd sophon-realtime
git checkout 3585943
git apply tag_jp.patch            # 末尾の「変更差分」を tag_jp.patch として保存したもの
cd tag
SKIP_DOWNLOAD=1 bash install.sh
.venv/bin/python -m pip install pyopenjtalk   # カタカナ変換に使用
hf download n3inc/Sophon-Realtime-32B-Tag-JP --local-dir model
GPU=0 PORT=8000 bash start.sh
python client_example.py --wav my_question_ja.wav --lang ja --voice chelsie_zh
  • 日本語話者のボイスはありません。--voice を省略すると英語話者(ryan_en)が選ばれるため、chelsie_zh などを明示的に指定してください。

動作確認

  • 環境: NVIDIA DGX Spark(GB10、CPU・GPU 共有メモリ 121.7 GiB)×1、vLLM 0.30.0、vLLM-Omni 0.30.0
  • メモリ割り当て: ステージ 0 に 0.45、ステージ 1・2 にそれぞれ 0.055(config/sophon_realtime_tag_spark.yaml)

/v1/chat/completions に日本語音声を 3 件入力し、3 件とも日本語の応答テキストと応答音声が返ることを確認しました。応答音声が日本語として正しく発音されていることは、聴取して確認しています。

応答テキスト 初回音声までの時間
8個残ります。 1.32 秒
赤い玉が3個、青い玉が4個あるので、全部で7個です。 3.83 秒
まず、机の上にある物をすべて取り除いて、空の状態にしてから掃除を始めるのが一番です。 4.73 秒

※ 初回音声までの時間:DGX Spark 上で、client_example.py がリクエストの送信を開始してから最初の音声を受信するまでの時間

既知の制限

  • カタカナ変換で読みを誤る場合があります(例:「空の状態」の「空」を「ソラ」と読む)。
  • 最初の句読点が出るまで音声合成が始まらないため、変換しない場合より初回音声までの時間が長くなることがあります。
Downloads last month
30
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for n3inc/Sophon-Realtime-32B-Tag-JP

Quantized
(1)
this model