すべての記事

· Casimiro Ferreira· 2 分で読めます

聴取パネルなしで音声品質を測定する

  • speechonnxmetrics
  • TTS
  • ONNX
  • evaluation

ノイズ除去モデルが新しいチェックポイントを出荷します。TTS の声がより多くのデータで再学習されます。音声クローニングのパイプラインがボコーダを入れ替えます。いずれの場合も、誰かが答えなければなりません。出力は以前より良くなったのか、悪くなったのか? 「私にはこれの方が良く聞こえる」は規模が大きくなると通用しません。あなたが話せない言語になった瞬間、比較すべきチェックポイントが二つではなく二十になった瞬間、あるいはその変化を一度手作業で確認するのではなく、コミットのたびに確認しなければならなくなった瞬間に、それは崩れます。

「これはより良く聞こえるか」に対する厳密な答えは**平均オピニオンスコア(MOS)**です。聴取者のパネルの前に音声を置き、それぞれに 1 から 5 で評価してもらい、そのスコアを平均します。MOS が標準的な音声品質指標であるのは、まさにそれが代理指標ではなく、本当に重要な問い — 人間はこれを受け入れられると感じるか — を問うからです。しかし高くつきます。パネルを募集し、一貫して運営し、小さなチームが出荷するあらゆる言語、あらゆる録音条件、あらゆるモデルバージョンごとにそれを繰り返すことは、聴取パネルが追いつけることではありません。

speechonnxmetrics は、パネルなしで、あらゆるビルドについてその判断を近似するためのライブラリです。指標を三つの系統にまとめており、状況に合った系統を選ぶことは、個々の数値よりも重要です。

三つの系統、三つの問い

参照なし MOS 推定器 は、音声だけから聴取パネルが何と言うかを予測するよう学習されたニューラルネットワークです。クリーンな元の音声は不要で、判断したい出力だけがあればよいのです。比較すべき正解がないときにこの系統を使ってください。TTS システムの出力を採点する、あるいはノイズ除去後の実際にすでに劣化した録音を確認する場合です。

侵襲的な指標 は一致するクリーンな参照が必要で、それと劣化した信号の間の距離を測ります。自分で劣化を作り出し、なおクリーンな元の音声を保持しているときにこの系統を使ってください。良好であることが分かっている録音をコーデック、帯域拡張モデル、あるいは音声変換器に通し、出力が元からどれだけずれたかを知りたい場合です。

ASR ベースのテキスト指標 は音声認識器で出力を書き起こし、その書き起こしを期待されるテキストと比較します。これは他の二つの系統が捉えられないものを捉えます。完璧に自然でクリーンに聞こえるが間違った言葉を話す音声です。参照なし MOS 予測器は自然さを評価しますが、正しさは評価しません — 流暢な誤発音も良いスコアを得ます。侵襲的な指標は参照文ではなく参照波形を必要とします。テキストの比較だけが間違った単語を捉えます。

このライブラリはこれらを一つの関数を通じて公開しています。

import speechonnxmetrics as s

# No-reference: only the output needed, no ground truth exists
s.score("output.wav", ["utmos"])

# Intrusive: needs a clean reference, ref= is required
s.score("degraded.wav", ["stoi", "mcd", "si_sdr"], ref="clean.wav")

テキスト指標は別モジュール speechonnxmetrics.asr にあります。音声ではなく文字列を比較するからです — s.score() は波形を受け取る指標だけをディスパッチします。

参照なし MOS: 数値を読む

四つの MOS 推定器が提供されており、それぞれ、人間のパネルが使うのと同じ 1〜5 の尺度(高いほど良い)で値を返します。

指標次元学習データ商用利用
utmos一つの自然さスコア合成音声(VoiceMOS Challenge)
dnsmossig / bak / ovrl(音声品質/背景ノイズ/全体)ITU-T P.835
dnsmos_p808一つのクラウドソース聴取 MOSITU-T P.808
sigmos7 次元(coldiscloudnoisereverbsigovrl)ITU-T P.804
nisqamosnoi/dis/col/loud の内訳NISQA-v2不可 — CC BY-NC-SA 4.0

nisqa は、このライブラリ全体の中で非商用の重みを持つ唯一の指標です。他の四つは MIT ライセンスです。speechonnxmetrics はこれをあなたの代わりにフィルタリングしません。ライセンスを明示し、選択を呼び出し側に委ねます。

以下は実際の音声が受け取るスコアです。このライブラリ自体に同梱されているフィクスチャ — クリーンな録音(source.wav)と同じクリップのニューラルコーデックによる再合成(facodec_aria.wav) — を UTMOS で実行すると:

>>> s.score("source.wav", ["utmos"])
{'utmos': 4.41}
>>> s.score("facodec_aria.wav", ["utmos"])
{'utmos': 3.21}

クリーンな録音は尺度の上部近くに位置し、これは妥当です — 合成ではなく本物の人間の音声だからです。コーデックによる再合成は 1 ポイント以上下がります。その差は、どちらの数値単独よりも有用なシグナルです。コーデックが聞き取れる劣化をもたらすことを示し、コーデックが調整されるにつれて追跡すべき数値を与えてくれます。

同じクリーンな録音に対する DNSMOS:

>>> s.score("source.wav", ["dnsmos"])
{'dnsmos.sig': 3.45, 'dnsmos.bak': 3.60, 'dnsmos.ovrl': 2.93}

一つではなく三つの数値があり、それらは分岐します — ovrlsigbak の両方より目立って低くなります。その分岐はバグではなく情報です。ovrl は P.835 の全体的な聴取体験の評価であり、スタジオ録音よりも実世界の録音において、各構成要素のスコア単独が示唆するよりも厳しく罰する傾向があります。bak が低ければ背景ノイズを探してください。sig が低ければ、クリッピング、ドロップアウト、ロボット的な音色といった音声レベルのアーティファクトを探してください。同じクリップについて複数の予測器を報告してください。それらは異なるデータで学習されており、有益な形で意見が分かれます。同じクリップにおける二つの独立した予測器の間の大きな差は、実際に聴いてみるべきという合図です。

侵襲的な指標: 数値を読む

十一の参照ベースの指標が、クリーンな元の音声からの距離を測定します。最初に知っておく価値のあるものです。

指標範囲方向測定対象
stoi / estoi0–1高いほど良い短時間客観的明瞭度 — 自然に聞こえるかとは独立に、内容がどれだけ生き残るか
si_sdr / sdr / snrdB、無制限高いほど良い信号対歪み比 / 信号対雑音比
mcddB、無制限低いほど良いメルケプストラム歪み — スペクトル包絡の距離、古典的な TTS/VC 品質指標
log_f0_rmse無制限低いほど良いピッチ輪郭誤差
lsd / msddB低いほど良いログスペクトル/メルスペクトル距離

方向が逆転することに注意してください。STOI と SDR 系は品質が良いほど上がり、MCD、ピッチ誤差、スペクトル距離は下がります。表を読むときにこれを混同するのはよくある間違いです。

同じコーデックによる再合成をそのクリーンな元と比較して採点すると:

>>> s.score("facodec_aria.wav", ["stoi", "mcd", "si_sdr"], ref="source.wav")
{'stoi': 0.662, 'mcd': 10.46, 'si_sdr': -26.94}

1.0 が完全な一致である 0〜1 の尺度における STOI 0.66 は、明瞭度が実際に打撃を受けたことを示しています — これは軽く処理された録音が出すであろうスコアよりかなり低いものです。約 −27 dB の SI-SDR がそれを裏付けます。SI-SDR は歪みのエネルギーが信号を上回るときに常に負になり、大きな負の数は単なるノイズの追加ではなく大きな構造的変化を意味します。10.46 dB の MCD は高いものです。明らかに合成的だが話者の一貫性は保たれている公開済みの TTS システムは通常一桁台に収まるため、10 を超えることは再合成と元の間のかなりのスペクトル包絡のずれを示しています。

ASR ベースの指標: 数値を読む

五つのテキスト指標は、参照書き起こしと仮説(音声が実際に何と書き起こされたか)の間の一つのレーベンシュタイン整列から得られます。

指標範囲方向意味
wer≥ 0(通常 0–1、1 を超えることもある)低いほど良い単語誤り率: 置換 + 削除 + 挿入を参照単語数で割ったもの
cer0–1低いほど良い文字レベルで同じ考え方 — 細かい綴り/トークン化の不一致により寛容
mer0–1低いほど良い一致誤り率
wil0–1低いほど良い失われた単語情報
wip0–1高いほど良い保存された単語情報(1 − wil)

実例です。参照 “the quick brown fox jumps over the lazy dog” を仮説 “the quick brown fox jumped over a lazy dog” と比較(一つの置換、“jumps” → “jumped”、“the” の一つの削除)。

>>> from speechonnxmetrics import asr
>>> from speechonnxmetrics.asr import BASIC
>>> asr.wer(reference, hypothesis, normalizer=BASIC)
0.222
>>> asr.cer(reference, hypothesis, normalizer=BASIC)
0.116

WER 0.22 は、およそ五単語に一つが間違っていることを意味します — 気づく程度で、聴いてみる価値があります。同じペアで CER がより低いのは、文字レベルの採点が、一単語の置換を欠落したトークン全体としてではなく、はるかに長い文字列の中のわずかな文字編集として扱うからです。CER と WER は異なる問いに答えており、直接比較はできません。自然な音声において WER がおよそ 0.3〜0.4 を超える場合、たいていは丸め誤差ではなく、ASR システムか、それが書き起こしている音声に実際の問題があることを意味します。

speechonnxmetrics はあなたに代わってテキストを正規化することは決してありません — 生の比較は大文字小文字と句読点を誤りとして数えます。これは正確な書き起こしの書式ではなく発音を採点する場合、たいてい望むものではありません。正規化器を明示的に渡してください。BASIC は小文字化して空白をまとめ、STRICT はさらに短縮形を展開し、分音記号、句読点、フィラー語を取り除きます。

最も重要な注意点

このライブラリのすべての参照なし MOS の数値は、事実の測定ではなくモデルによる予測です。UTMOS、DNSMOS、SIGMOS、NISQA はそれぞれ、特定の言語と録音条件の特定の聴取テストデータセットで学習されました。主に英語のスタジオ録音で学習された予測器は、学習中に一度も見たことのない言語、学習パネルが評価したことのないアクセント、あるいは学習分布の外にある録音条件(電話音声、騒がしい部屋、低資源のマイク)を誤って判断することがあります。モデルは嘘をついているのではなく外挿しているのであり、馴染みのない入力からの外挿こそが、ニューラルな予測器が最も信頼できない場面です。

予測された MOS を真実としてではなく証拠として扱ってください。それが得意とすることについては信頼できます。大きな退行を捉えること、複数の候補を互いに順位付けすること、そして人間が実際に聴くべき実行にフラグを立てることです。決定が重大なときに実際の聴取パネルの代わりにはならず、基盤となるモデルが判断するよう学習されていない言語や条件について最終結論であってはなりません。複数の予測器を一緒に報告し、それらの間の不一致を平均化して消し去るノイズではなく、聴いてみるべきという合図として扱うことが、実践的な緩和策です。

これが比較を使い物にする理由

これらのどれも単独では有用ではありません。複数のエンジンを同じ土俵で比較する必要が生じた瞬間 — どの TTS エンジン、どの STT エンジン、どの強化モデルを既定にすべきか — に有用になります。speechonnxmetrics が評価するために作られた純粋な ONNX 音声ライブラリ群 — TTS、ASR、ノイズ除去、音声クローニング — は、まさに上記の指標で作られたエンジンごとの比較を公開しています。正解のないシステムには参照なし MOS を、クリーンな参照が存在する場所には侵襲的な指標を、書き起こしの正しさが問題になる場所にはどこでも WER/CER をです。これこそが「私たちはこのエンジンを選んだ」を、他の誰かが確認できる数値に変えるものです。

あなたのプロジェクトにこの方法で評価されるべき言語、エンジン、あるいは録音条件があり、まだカバーされていない場合は、お問い合わせいただくか、私たちのサービスをご覧ください。