すべての記事

· Casimiro Ferreira· 2 分で読めます

音声クローニングエンジンを選ぶ

  • ONNX
  • voice cloning
  • voice conversion
  • self-hosted

音声変換は、録音と参照話者を受け取り、同じ言葉を参照話者の声で生成します。パイプラインのどこにもテキストは関与しません。入力も出力も音声であり、モデルは書き起こしを読んだり書いたりすることは決してありません。これが、テキストから始まり保存すべき元の録音を持たないテキスト音声変換(TTS)と、これを区別する点です。音声変換はより狭い問いに答えます。この録音が与えられたとき、言葉はそのままに、誰か別の人のように聞こえさせよ、という問いです。

その狭い仕事には実際の用途があります。二人目の声優を雇うことなく録音を一貫した声に吹き替えること。インタビューやサポート通話で言葉をそのままに話者を匿名化すること。TTS システムの出力に、各言語の基盤となる声が独立して学習され、そうでなければ別人のように聞こえてしまう場合に、言語をまたいで一つの安定したアイデンティティを与えること。

voiceclonnx は、これら 10 のエンジンを一つの Python API の背後に実装しており、すべて推論時に PyTorch を必要とせず onnxruntime で動作します。これらのエンジンは互換ではありません。異なるモデル系統から来ており、一つを選ぶことは勝者を選ぶことではなくトレードオフを選ぶことです。

API、簡潔に

from voiceclonnx import VoiceCloner

cloner = VoiceCloner(engine="facodec")
out = cloner.clone_voice("source.wav", "reference.wav", "out.wav")
print(cloner.sample_rate)   # 16000

clone_voice(audio, reference_voice, out_path) は、元の録音、対象話者の 5〜30 秒の参照クリップ、出力パスを受け取り、変換された WAV へのパスを返します。エンジンを切り替えることは engine= の文字列を切り替えることを意味し、呼び出しの形は変わりません。一つのエンジン rvc は例外で、参照録音の代わりに .onnx の音声モデルへのパスを受け取ります(後述)。pip install voiceclonnx は 10 のエンジンすべてを引き込み、モデルは初回使用時に Hugging Face からダウンロードされます。

一つのスコアではなく二つの軸

変換がどれだけうまくいったかは二つの数値で記述され、それらは連動して動きません。

単語誤り率(WER) は明瞭度を測ります。出力を音声認識器に戻して元の書き起こしと比較したとき、元の文がどれだけ生き残ったかです。WER 0% はすべての単語が正しく伝わったことを意味します。

話者類似度 はアイデンティティを測ります。出力が実際に対象話者のように聞こえるか、元の話者のようにではないかです。これは、ある声の音色 — 同じ高さと大きさで一つの声を別の声と違って聞こえさせる音の色 — を要約する小型の数値指紋である話者埋め込みを出力と参照クリップから抽出し、コサイン類似度で比較することで計算されます。スコア 1.0 は同一の音色を意味し、voiceclonnx 自身の基準線 — 変換されていない元のコピーを対象に対して採点したもの — は 0.09 にあるため、それより意味を持って高い値は実際の変換作業を行っていることになります。

voiceclonnx は、同じ文を二つの参照音声に変換して測定した両方の数値を、すべてのエンジンについて公開しています。WER は faster-whisper から、話者類似度は wespeaker-resnet34 の埋め込みモデルから来ています(他の二つのモデルと相互検証済み)。並べて見るとパターンが現れます。両方の列でトップになるエンジンはありません。

エンジン系統WER対象類似度
focalcodeckNN 特徴交換15-19%0.61
lscodec話者分離コーデック~35%0.54
chatterboxAR コーデック LM4-8%0.54
knnvckNN 特徴交換12-15%0.49
facodec因数分解コーデック0%0.44
openvoice音色転写0%0.37
bicodec意味論的 + 大域トークン12%0.29
triaanTriple-AAN4%0.29
cosyvoiceフローマッチング8%0.21

(rvc は任意の参照クリップではなく、一つの固定されたコミュニティ学習済みの声に元の音声を変換するため、この表では比較できません。後述します。)

この表は単一の最良行を探すのではなく、行ごとに読んでください。facodecopenvoice は WER 0% — すべての単語が生き残る — に位置し、中程度の類似度を持ちます。focalcodeclscodec は反対の端にあり、15〜35% の単語を誤らせる代償で、この集合の中で最も強い音色転写を得ます。chatterbox は両方の軸で同時に良い成績を出す唯一のエンジンです(WER 4〜8%、類似度 0.54)。これは次で扱うそのアーキテクチャの特性です。

なぜ系統ごとに振る舞いが異なるのか

これらのエンジンは異なるアプローチに分かれており、そのアプローチが上記の表でどこに位置するかを予測します。

kNN 特徴交換(knnvcfocalcodec)。元の音声は短いフレームに分割され、それぞれが事前学習された自己教師あり型のエンコーダによって特徴ベクトルに変えられます。各元フレームについて、アルゴリズムは対象話者の特徴プールの中から最も近い k 個のフレームを見つけて平均を取り、元の音色をフレームごとに置き換えますが、根底にある音声学的内容はエンコーダ自身の表現から抽出された場所にそのまま残します。ある声を別の声にマッピングする学習済みのデコーダは存在せず、交換は最近傍探索です。これが、対象プールの中で一致が悪かったフレームを時折乱すという代償で、音色転写が積極的になり得る理由です(focalcodec は類似度 0.61 に達します)。それは WER として現れます。

因数分解コーデック(facodec)。音声をコンパクトなトークン列に圧縮し再構成するモデルである神経オーディオコーデックが、それらのトークンを明示的に内容ストリームと音色ストリームに分離するよう学習されます。内容が専用のストリームであるため、デコーダは単語を高い忠実度で再構成します。音色ストリームだけが対象話者のものに交換されます。その明示的な分離こそが、facodec が WER 0% に達する理由です。内容の保存が何とも競合していないのです。

音色転写(openvoice)。別のエンコーダが言語的内容を固定した後、変換モジュールがトーンカラー — ピッチの輪郭と音色 — を変えます。発想は因数分解コーデックのアプローチと似ていますが、離散トークンではなくメルスペクトログラム上の色転写ステップとして実装されています。これも WER 0% に達し、facodec よりやや低い類似度を示します。

AR コーデック LM(chatterbox)。対象話者の埋め込みに条件付けられてコーデックトークンを一つずつ予測する自己回帰言語モデルで、テキスト音声変換の言語モデルによく似ていますが、テキストではなく元の録音の内容トークンに条件付けられています。韻律(リズム、強勢、イントネーション)を元から直接コピーするのではなく、同じ自己回帰プロセスの一部として生成するため、音色とともに話し方も運べます — ドキュメントが「最も強い元-対象シフト」を与えると述べる理由です — そして明瞭度と類似度の両方で同時に良いスコアを出す唯一のエンジンです。

フローマッチング(cosyvoice)。ノイズを対象のメルスペクトログラムに反復的に精製する連続的な生成過程で、設定可能な回数(ode_steps、既定値 10)だけステップを踏む ODE(常微分方程式)ソルバーを使います。その内容エンコーダは言語をまたぐ転写のために設計されており、その汎用性がおそらくこの集合の中で最も低い対象類似度スコアの理由です。その表現は言語独立性のために最適化されており、最も密着した話者マッチングのためではありません。

話者分離コーデック(lscodec)。facodec と同様、内容と話者アイデンティティを分離するよう学習されたコーデックですが、内容ストリームの精度を直接の代償として類似度をさらに押し上げるよう調整されており、この集合の中で二番目に高い類似度とともに約 35% の WER に位置します。

Triple-AAN と意味論的プラス大域トークンのコーデック(triaanbicodec)は両方の軸で中間に位置します。中程度の WER、中程度の類似度で、どちらの方向にも強い偏りはありません。

Any-to-ONE コーデック + ボコーダ(rvc)。ContentVec(内容エンコーダ)が VITS ボコーダに供給する構造で、任意の参照クリップを受け付けるのではなく、対象の声ごとに学習されます。このエンジンの reference_voice は音声ファイルではなく、.onnx の RVC モデルファイルへのパスまたは Hugging Face のリポジトリ ID です。

cloner = VoiceCloner(engine="rvc")
out = cloner.clone_voice("source.wav", "/path/to/myvoice.onnx", "out.wav")

各 RVC モデルは一つの対象の声で学習されるため、推論時に参照クリップを受け取らず、any-to-any のエンジンと同じ類似度ベンチマークでは採点されません。測定された 38% の WER は、コミュニティが学習させた一つのサンプルモデルを反映しているのであって、アーキテクチャ一般を反映しているわけではありません。品質はその特定のモデルがどう学習されたかに依存します。何千ものコミュニティ製 RVC の声が Hugging Face に存在し、リポジトリ ID で直接ロードできます。

どれを実行するか決める

速く汎用的なパイプライン。 facodecopenvoice から始めてください。どちらも測定された WER 0% と中程度の類似度(それぞれ 0.44 と 0.37)に達し、どちらも品質低下が報告されていない INT8 量子化バリアントを提供します — より小さく速いモデルのために quantized=True を渡してください。

最大の話者類似度。 その用途にとって 15〜19% の WER が受け入れられるなら focalcodec(測定された中で最高の 0.61 類似度)を、そうでなければ chatterbox(類似度 0.54、WER 4〜8%)を使ってください。chatterbox はまた 24 kHz で動作し、この集合の中で any-to-any 変換における最高の出力レートです — rvc は最大 48 kHz で動作しますが、上記の any-to-ONE モードでのみです。

低資源ハードウェア。 INT8 の knnvc はディスク上で約 123 MB とこの集合の中で最小のフットプリントで、類似度 0.49、WER 12〜15% です — 制約されたメモリに対する合理的なトレードオフです。すべてのエンジンがきれいに量子化されるわけではありません。focalcodeccosyvoice は INT8 で劣化することが文書化されているため、この二つは fp32 のままにしてください。

エンジンが学習していない言語。 cosyvoice の内容エンコーダは言語をまたぐ転写のために作られており、これが測定された類似度(0.21)が直接比較可能な九つのエンジンの中で最も低いにもかかわらず、同一言語向けに調整されたエンジンの代わりにこれを選ぶ文書化された理由です。

正確な文言よりも声のアイデンティティ。 lscodec は、比較可能な集合の中で最も高い WER(約 35%)を代償に、コーデック系統のエンジンの中で最も強い音色転写(0.54、chatterbox と同率)を提供します。目標が「これは対象話者のように聞こえるか」であり、出力にたまにある単語の誤りが許容できる場合に選んでください。

任意のクリップではなく単一の固定されたコミュニティの声。 参照録音の代わりに事前学習された .onnx の音声モデルを使う rvc

先に確認すべき非商用の制約。 bicodec の重みは CC BY-NC-SA 4.0 でライセンスされています。他のすべてのエンジンの重みは MIT、Apache-2.0、または CC BY 4.0 です。商用で出荷する前に、デプロイする特定の重みのライセンスを確認してください。

これがうまくできないこと、そして誰に使うべきでないか

上記のすべての数値には同じ注意書きが付きます。これらの数値は、二つの特定の参照音声の間で変換された英語のデモ文を記述しています。異なる言語、よりノイズの多い元の録音、より短いあるいは低品質な参照クリップ、またはエンジンの学習データにあるものから遠く離れた声を持つ元の話者は、いずれもその数値を、たいていはより悪い方向に動かします。これらのエンジンのどれも、低品質な元の録音に対する万能の修正策ではありません。いくつかは、ノイズが内容/音色の分離が常にきれいに分離できるわけではない独自の音響的な署名を持つため、ノイズをそのまま通しながら喜んで音色を変換します。

音声変換はまた、このチームがすでに考えなければならなかった、その近い親戚である TTS のための音声クローニングと同じく、現実的なリスクを提起します。録音を実在の、特定可能な人物のように聞こえるよう変換することは、意図の有無にかかわらず、なりすましが可能な技術です。このチームが合成音声全般に適用しているルール — 実在の人物の声を提供元または対象として使う前に明示的な許可を得ること、許可が得られない場合はパブリックドメインの録音か意図的にオリジナルの声にフォールバックすること — がここでも例外なく適用されます。実在の人物の参照クリップは、同意の観点からは、その人の声の完全な学習セットと変わりません。ただ、使える結果を生み出すのにはるかに少ない量で済むというだけであり、それはより少なくではなく、より多くの注意を払う理由です。

音声変換があなたが構築しているパイプラインの一部であれば、お問い合わせからご連絡いただくか、私たちが提供するものをご覧ください。