DNSMOSを利用してノイズキャンセリング機能の音声評価をやってみた
はじめに
こんにちは、tetterです。
WebRTCプラットフォームSkyWayのR&Dを担当しています。
SkyWayはノイズキャンセリング機能の導入を検討しており、DNSMOSという評価手法を用いてさまざまな手法を評価したので、本記事にそのときの学びを書いてみます。なお、専門的な音声解析の話ではなく、ツールを活用して誰でも行えるような方法について解説します。
ちなみに、ノイズキャンセリングと聞いて最初に思いつくのは快適な通話の実現というユースケースかもしれませんが、ノイズはLLMの前処理にも用いられている音声認識の精度にも影響します。LLMは現在非常に注目されているため、ノイズキャンセリング機能自体も今後さらに重要視されていくでしょう。
音声通話や音声認識に関するプロダクトを担当している方で、音声の評価ってどうやれば良いんだろうという疑問を持った方にとって有益な記事になればと思います。
DNSMOSとは?
まずは今回採用したDNSMOSについて簡単に解説します。
概要
DNSMOS (Deep Noise Suppression Mean Opinion Score)とはMicrosoftが開発した音声評価ツールです。MicrosoftはDNS Challengeという名のノイズキャンセリング手法のコンテストを毎年実施し、数多くのモデルを評価しています。DNSMOSはそのスコアリングに活用されています。
DNSMOSはディープラーニングで音声と品質スコアの関係を学習したモデルを用いたツールであり、簡単に言ってしまうと、音声データを入力するだけでその音声のスコアを出力できるツールです。
DNSMOSの実行環境としてローカルとWeb APIの2種類が提供されています。
DNSMOSを選んだ理由
なぜ評価手法にDNSMOSを選定したかを説明します。
客観評価手法だから
音声品質のスコアリングには大きく分けて以下の2つの方法があります。
- 主観評価: 実際の人間が音声を聞いてスコアリングする
- 客観評価: アルゴリズムによって人間のスコアを推定する
例えば、最も有名な主観評価の指標はMOS(Mean Opinion Score)と呼ばれるもので、ITU-T P.800として勧告されています。MOSは人間が数秒の音声クリップを聞き、以下の5段階で評価したものを集計して導き出します。
スコア | 音声品質の評価 |
---|---|
5 | Excellent |
4 | Good |
3 | Fair |
2 | Poor |
1 | Bad |
主観評価には非常に多くのコストを必要とするという特徴があります。具体的には以下のようなものです。
- 感性が偏らないように評価者を多く[1]集める必要がある
- 評価時の環境によって差分が出ないように機材や施設を用意する必要がある
- 評価の進行を取り仕切る、あるいは進行するシステムを構築する必要がある
すなわち、主観評価では全く同じ環境を多くの評価者へ提供し、十分な数のサンプルを集めることで初めて信頼できる値を取得できます。
これに対し、客観評価手法とは主観評価で得られる値をアルゴリズムで推定する方法を指します。客観評価は主観評価と比べて実施コストを大幅に削減できる点で優れており、音声品質評価において広く活用されています。主観評価と客観評価の違いについてはこちらが参考になります。
今回は複数のノイズキャンセリング手法を評価し、それぞれの結果を比較する計画だったため、何度も評価を実施することが想定されました。その際にコストが大きくなりすぎないよう、客観評価を選択する必要がありました。
精度が良いと言われているから
DNSMOSは数ある客観評価手法の中でも精度が良く、主観評価に近い結果を得られると報告されています。
客観評価手法の中で有名なのはPESQという手法と、PESQが持つ周波数制限を解消[2]したPOLQAという手法です。Microsoftは、DNSMOSがこれらの手法よりも実際のMOSに近いスコアを出せることを主張しています。
引用: https://arxiv.org/abs/2010.15258
上図は実際のMOS(縦軸)に対してそれぞれの客観手法で得た値(横軸)をプロットしたものです。
PESQやPOLQAでは左上にデータの集団があります。これは人間が品質が良いと感じた音声に低いスコアをつけてしまっていることを示します。
一方、DNSMOSは実際のMOSから大きく外れた集団がなく、PESQやPOLQAよりもMOSとの相関性が高いこと[3]が主張されています。
ノイズの評価に適しているから
MOSはあくまでも音声品質の評価であり、主に伝送などによる品質劣化の計測に活用されます。ノイズキャンセリングの品質評価に活用することも可能ですが、以下を正確に把握できない点が課題となります。
- どれだけノイズが抑圧されたか
- どれだけ発話音声が保てたか
ノイズキャンセリングにおいて上記2点はトレードオフの関係にあります。基本的にはノイズの抑圧を強めればノイズ以外の音声が消えてしまい、ノイズ以外の音声を保とうとすればノイズの抑圧が弱くなってしまいます。良いノイズキャンセリング手法を見極めるためには、この両方が高品質であることを確認する必要があります。
これらを計測するために、ITU-T P.835では発話の品質を表すSIG (Signal)、ノイズの品質を表すBAK (Background)、総合品質を表すOVRL (Overall)という3つの値について勧告されています。いずれも5段階評価で、値が大きいほど評価が高いことを表します。
スコア | 発話品質の評価 | ノイズ品質の評価 | 総合品質の評価 |
---|---|---|---|
5 | Not distorted | Not noticeable | Excellent |
4 | Slightly distorted | Slightly noticeable | Good |
3 | Somehow distorted | Noticeable but not intrusive | Fair |
2 | Fairly distorted | Somewhat intrusive | Poor |
1 | Very distorted | Very intrusive | Bad |
ITU-T P.835ではこれらを主観評価によって計測する方法が説明されています。
DNSMOSはMOSのみではなくこれら3つの値の推定にも対応しており、PESQやPOLQAよりもノイズの評価に適しています。
どのように精度評価を実施したか
以降では、具体的にどう評価を実施したのか説明します。
実施条件
前提
ノイズキャンセリングの評価は、元となるノイズが乗った音声データを用意し、そのデータに対してノイズキャンセリング処理を行い、ノイズキャンセリングされたデータを客観評価する流れになります。今回は元のデータからどの程度改善したのかという指標も加えたかったため、元データに対しても客観評価を行って結果を比較するようにしました。
評価用データ
以下の2パターンで音声を作成します。
- 発話音声とノイズ音声を個別に録音し、合成する
- 発話音声とノイズ音声を1シーンで同時に録音する
前者はノイズの音量変更や発話とノイズの組み合わせの変更ができるため、さまざまなパターンのデータを用意しやすいことがメリットです。後者は実際のシーンでも問題ないことを確認する目的で用意しています。
一部の評価用データの作成にあたり、みんなで作るJSUTコーパスbasic5000を活用させていただきました。
DNSMOSの実行環境
DNSMOSをダウンロードし、以下のコマンドによってローカルで実行します。
$ python dnsmos_local.py -t sample_clips -o result.csv -p
実行時に-p
オプションをつけた場合、複数人の発話が重なるとスコアが低く評価されます。例えば、仕事場で同僚の声が入ってしまうことは多くの場合において好ましくないため、低いスコアをつけられるように-p
オプションを活用しています。
その他に活用したツール
音声の再生や波形の確認をするためにAudacityというツールを活用しました。本来は音声編集のためのツールですが、非常に多機能で使いやすいため音声評価にもオススメです。
評価方法
DNSMOSによる定量評価
まずはDNSMOSの結果を確認します。元データと各手法を比較するためにSIG(発話)、BAK(ノイズ)、OVRL(全体)の平均を並べてみます。
手法BはSIG(発話)が元データよりも下がっているので発話品質が低下してしまっていることがわかります。一方、手法AはSIG(発話)があまり下がっておらず、BAK(ノイズ)が大きく上がっているため、発話品質をさほど低下させることなくノイズ品質を向上できていることがわかりました。
定性評価によるDNSMOSの妥当性確認
DNSMOSは高精度で多くの研究者が使い始めている[4]と謳われています。ただ、PESQやPOLQAよりも新しい技術のため活用実績が少なく、結果を鵜呑みにするのは良くないだろうと考えました。そこで、さまざまな方法でDNSMOSの結果の妥当性を確認することにしました。
聴覚での確認
まず最初に思いつく方法は実際に音源を聞いて確認することです。DNSMOSの結果に違和感がないことなど、なるべく主観が入りこまないようにいくつかの要点に絞って確認しました。
細かく確認してみると、DNSMOSは特定のノイズに対して高すぎるもしくは低すぎる評価をつけることがありますが、概ね問題なく評価ができていることがわかりました。
視覚での確認
波形
Audacityで波形を確認することで、聞こえにくいノイズも視認できるようになります。
上図はキーボード音を波形表示したものです。手法Bに比べて手法Aでは波形が消えているためかなり抑圧できていることがわかります。
スペクトログラム
Audacityにはスペクトログラムを表示する機能があります。スペクトログラムとは音声を周波数スペクトルへ変換したもので、横軸が時間、縦軸が周波数を表しています。また、色で強度(振幅スペクトル)が表現されており、黒→青→赤→白の順に大きくなり、大きいほどその周波数成分が多く含まれていることを読み取ることができます。
上図はマウスのクリック音と発話をスペクトログラムにしたものです。丸で囲んだ部分は発話の最中にクリック音が鳴っていることを示しています。手法Bでは抑圧できていませんが、手法Aではかなり抑圧できることが確認できます。
実施してみて理解したこと
DNSMOSの活用方針
DNSMOSによる音声データ毎の結果を自分の感覚と比較してみましたが、おおよその一致率は約8割程度でした。このような不一致の原因は以下の2種類があると思われます。
- 客観評価はあくまでもアルゴリズムなので人間の感性を100%完璧には模倣できない
- 個人と個人、もしくは個人と客観手法の間の評価は一致することがない
前者について、DNSMOSは精度が良いので人間の感性から大きくずれてしまうことは比較的少ないですが、アルゴリズムを使用している以上は仕方がないことです。データを網羅することで解決すべきでしょう。
また、後者は音声評価において避けることができない特性の1つです。なぜなら音声評価は人によって結果に差が出るものなので、自分の評価が他人と完全に一致することはなく、もちろんその平均値や客観評価による結果とも一致することはありません。
上記の理由により、DNSMOSを含む客観評価を個々の音声データの品質評価に利用するのは難しいように感じます。一方、今回のように多くのデータを用いて統計化し、複数の手法を比較するという用途で活用する分には全く問題ないと思います。
幅広くデータ収集することの重要性
上記の活用方針にも関連しますが、質の良い統計結果を手に入れるためには多様なデータを収集して評価すべきだと思われます。ノイズの種類はもちろん、音声を録音するマイクによって結果が大きく異なることもありえるため、環境を変えながら幅広くデータを収集すべきだと思います。
まとめ
DNSMOSがノイズキャンセリング評価に向いており、実際に複数の手法を比較評価する際に活用可能なことを説明しました。
今回のように、DNSMOSで数多くのデータからの統計を得つつ、一定数の人間の目や耳で間違いがないか確認をする進め方は、評価のコストを抑えながら信頼できる結果を得ることができるのでオススメです。
近い将来ノイズキャンセリング機能が提供された際、多少条件が異なる可能性はありますが、こうやってやってるんだなというのが伝われば嬉しいです。
おわりに
SkyWayでは一緒に開発を進めてくれる仲間を募集中です。詳細は以下のリンクをご覧ください。
Discussion