ディープラーニングに挑戦
はじめに
音声診断は、音声データから性別・年齢の推定や、滑舌・イントネーション・艶等々の状態を判定するものです。利用目的は様々ですが、サービスセンターでのAIによる性別・年齢によるフロー制御、ボイストレーニングの診断サポートや、日本語学習者の発声・発音改善などがあります。
これまで、「語リーナ」サイトでも、独自の統計処理を介して提供してきましたが、残念ながら期待した精度に至りませんでした。基礎となる性別判定が、80%未満、10歳刻みの年齢層の推定も20%弱、±10年齢層を含めた正解率も40%に満たないという状態です。
そこで、生成AIに相談してみたところ、
「機械学習に挑戦してみましょう!」
ということで、話題のディープラーニング(ニューロンネットワーク)にトライしてみました。
AI自身が、AI開発をサポートしてくれる時代がきているので、未経験の私にも十分可能性があるのではないか? AIには、Gemini3(愛称、Geminiさん)を選択しています。今まで「語リーナ」開発に利用してきたGoogleクラウドと親和性の高く、世界最強のサポートを期待できました。
そして、驚きの結果をここに紹介します。
目標
Geminiさんによれば、音声診断の基になる性別判定・年齢推定は、各種のサポートセンター等で、すでに商用活用されているそうです。
商用の推定精度(合格率)
学習データの質(録音環境の統一感やレベルの正確さ)が確保されていれば、商用利用されている機械学習アルゴリズム(LightGBMやSVMなど)で、以下の判定が期待できるようです。
| 判定対象 | 期待される精度(正解率) | 解説 |
| 性別判定 | 95% 〜 98% | 基本周波数とMFCC(聴覚モデル)、フォルマント(口・喉の共鳴度)があれば、性別はほぼ識別可能です。 |
| 年齢層判定 (10歳刻み) | 70% 〜 80% | 「30代か40代か」の境界線はプロでも難しいため、ここが一般的な上限値です。 |
| 年齢層判定 (3群: 子供/成人/高齢者) | 85% 〜 90% | 年齢の幅を広げれば、HNR(倍音包含度)やJitter(振動安定度)が強く機能し、高い精度が期待できます。 |
| 実年齢推定 (誤差) | ±5歳 〜 7歳程度 | 平均絶対誤差(MAE)として、この範囲に収まれば非常に優秀なモデルと言えます。 |
ディープラーニングで高い精度目指す
機械学習で、更なる高い合格率を目指すのであれば、やはり話題のディープラーニングが適しているではないか? Geminiさんも同意してくれたので、以下を目標値として設定しました。
| 判定対象 | 期待される精度(正解率) | 解説 |
| 性別判定 | 98% 〜 100% | 基本周波数とMFCC、フォルマントだけでなく他の特徴量を学習させ高い判定を実現 |
| 年齢層判定 (10歳刻み) | 上限:80%,下限:40% | 30代、40代の難しい判定でも、40%以上の正解率 |
| 年齢層判定 (3群: 子供/成人/高齢者) | 85% 〜 100% | 年齢層にバランスよく学習させることで、高い精度が期待できる。 |
| 実年齢推定 (誤差) | ±5歳 〜 7歳程度 | 平均絶対誤差(MAE)として、この範囲を確保する |
AI活用で音声スコア算出
従来、独自手法で算出していた音声レーダーチャートを一新します。
音声分析で実績のある各種の手法を生成AIを介して導入し、滑舌・抑揚・活力・艶・印象度などの各スコアーや、推定年齢・性別を提供します。
AI音声診断レポート
ディープラーニングで得られた性別・年齢推定に加え、音声スコアや学習に利用した様々な音声特徴量などから、AIに音声診断レポートを書いてもらいます。音読やボイストレーニングのサポートだけでなく、日本語学習者にも活用してもらえるレポートが提供できます。
準備
学習用サンプル
ディープラーニングのニューラルネットワークには、偏りのない1000件程度の学習データが最低限必要とのこと。さらに、検証データも必要なため、最終的に1600件超の音声データを準備しました。
学習に必要な特性値
以下の音声特性値が学習用に必要です。
- 男女の性別
- 発話者の年齢が判明している、または推定できる
- 年齢層が多岐にわたる
- 声が明瞭で、雑音が無いまたは極力少ない音声
Youtubeには、選挙公報、アナウンサーの発話、学校案内、若者の主張などのコンクール、趣味の解説等々が数多く保存され、年齢・性別を特定または推定できるものが多くあります。
Youtubeから音声取得
対象の音声は、以下から約1600件入手しました。
| 対象 | サンプル数 | 解説 |
| アナウンサー | 79 | 新人アナの初鳴き、アナぽけっと、朗読等 |
| インタビュー・舞台挨拶 | 84 | 映画舞台挨拶、TVインタビュー、メイク時短等 |
| シニア | 112 | 経営者、デザイナー、飲食店主、リタイア層等 |
| 公開討論会 | 568 | 地方選挙、国会議員選挙、各種討論会等 |
| 高校生の声 | 89 | 意見交換会、全国高校ビブリオバトル等 |
| 若者の声 | 95 | 44,45,46回の少年の主張全国大会から |
| 超高齢者 | 4 | 85歳~96歳までの男女 |
| 大学案内・紹介 | 306 | 全国国公立、私立大学、短期大学 |
| 東大猿渡・高道研究室 | 254 | 同研究室がYoutubeから集めた素材から |
| 朗読 | 10 | 著名な小説を対象にした朗読 |
| その他 | 4 | Katareena開発で使用した音声から |
データ数は決して多くなく、また年齢層によるデータ数の偏りがありますが、学習手法でカバーできるとGeminiさんが支援を約束してくれたので、このデータ数で進めます。
勝手に音声のみを今回の目的に利用するのは、著作権を無視した行為であり、本来、それぞれの発信者・作成者の許諾が必要です。が、本目的は、そのコンテンツの内容ではなく、音声そのもののAI学習利用であるという点で、ご容赦願いたいと思います。
特徴量の取得
生の音声データを直接学習用に利用して年齢推定できれば、それが一番手間がなくて良いのですが、残念ながらAIは直接音声データを解釈してくれません。まずはディープラーニングが可能な特徴量を音声データから予め収集し、AIに学習してもらう必要があります。
Geminiさんによると、以下の特徴量を用意すれば万全とのこと。具体的には、Pythonなどに特徴量収集のプログラムがあるので、これを介して取得します。
- 音響特徴量
- 文字情報との統合
- 発話リズム・韻律の深堀り
- 「話者埋め込み(Speaker Embedding)」の活用
Geminiさんは、最初からこれらを勧めた訳ではなく、まずは1.の音響特徴量を提案してきました。今から思えば、こちらの力を値踏みしていたのかもしれません。その後、1.を実装した結果が振るわず、不満を突き付けると、順次2~4の提案をしてくれて、現在に至っています。
学習用サンプルから、上記の特徴量を取得するためのプログラミングは、Geminiさんのサポートを得て、順調に進めることができました。
Pythonは初めての経験でしたが、参考書片手に、Geminiさんが提供するサンプルコードを組み合わせることで、それこそアッという間に出来上がりました。
ディープラーニング
さて、本題のディープラーニングですが、事前に以下の参考書で学習して臨みました。
伊藤真著 「Pythonで動かして学ぶ! 機械学習の教科書」
これまでも機械学習には興味があり、何冊かトライしましたが途中で挫折していました。が、この本の「はしがき」に、そのような経験のある私を励ましてくれる言葉かあり入手しました。期待以上の内容で大変役に立っています。後半に、手書き数字の認識を扱った章があり、これをベースに、Geminiさんと相談しながら構築しています。
採用のモデル
多層パーセプトロンと呼ぶモデルを使ったニューラルネットワークを採用しています。声年齢や性別判定のキーとなっているパラメータが事前に特定できていなかったので、まずは多くのパラメータから学習するこのが出来るこのモデルをGeminiさんから提案され採用しています。
多層パーセプトロンは、その名の通り複数の層で構築するニューラルネットワークです。第一層は、入力として用意した特徴量をグルーピングしてくれます。どの特徴量が最終的に性別や年齢に影響するか不明でも、後続の複数の層と連携して取捨選択してくれるメカニズムがあるので、最初の層には、ありとあらゆる特徴量を読み込ませることができます。
特徴量
学習の入り口になる特徴量は、300個超用意しています。内訳は、以下の通り。
| 対象 | 特徴量 | 解説 |
| 基本周波数 | 平均、分散、最大・最小など | 基本周波数は、性別判定のみならず、年齢層による変化にも大きく影響しています。 |
| フォルマント | f1~f4, 分散、velocityやvsaなど | 骨格の特徴や個性の判定に利用されています。これらの知見が、性別・年齢推定に活用できます。 |
| 音声品質 | HNR, CPP, TILT, SHR,JITTER, SHIMMER, etc.. | 音声分析で既に実績のある各種手法から得られる音声品質を測る指標群 |
| mfcc | 平均、分散、二次分散 | 声紋を数値化する優れた特徴抽出手法で、さまざまな音声解析で利用されています。 |
| Google Speech to text | 音声認識信頼度 | 音声から文字起こしする際の、AI側の信頼度など。AIが正しく聞き取れているかの度合い。 |
| Google Speaker embedded | Googleが提供する音声特徴量 | 内容は非公開ですが、話者認識などに利用されています。200弱の特徴量を提供しています。導入前後で、合格率に差がでましたので、そのまま利用しています。 |
採用できるものは何でも特徴量として利用しようという考えですが、もちろん特徴量間の干渉などによる過学習という避けがたい問題があります。
幸い、ニューロンネットワークが提供する過学習回避のツールを介して、この問題を解決していきました。
実装
図では、hidden layerが3層で進めましたが、最終的には2層で推論し、全体で4階層のニューラルネットワークを組んで、性別・推定年齢・音声スコアーを取得しています。
一般的な多層パーセプトロンのプログラミングで、初期バージョンを2か月程度で完成しました。第一層のニューロンが1024個/5層構造でかなり大きなパラメータから初め、過学習の回避を通じて、最終的には、256個/4層のニューロンで構築しています。すべてで3か月程度の作業量でした。驚くべき短期間です。
最適解の探索
さて、ニューロンネットワークの特徴の一つに最適解の探索作業があります。膨大なパラメータを利用しますので、その組み合わせ数はそれこそ宇宙規模ですが、ニューロンネットワークは、最も正解に近いパラメータを得るために、推定結果と正解の間の誤差を最小化することで最適解を求めます。
この最小誤差ですが、必ずしも最適誤差ではない。というのが、この手法のミソですね。実は、局所的な解がそこらじゅうに潜んでいて、一回では求まりません。何度も試行を繰り返し、最適なパラメータを探索します。この作業、実にアナログで時間と労力が必要です。AI実装の裏方では、この様な手作業に時間を費やしている。これも驚きです。
スキーに例えるならば、頂上から様々なゲレンデに降りられる広大なスキー場を想像してください。コブを克服しながら、最も低い(誤差が極小)目的地を目指します。が、到着地が目的地とは限りません。何度も未知のコースに挑み、下へ下へと降りて行く姿によく似ています。
ラーニング結果
ディープラーニングでは、学習で得られたパラメータを使って、実データを推定します。が、学習の偏りを避けるため、K-Fold交差検証という手法が使われていて、今回導入しています。
Kは、繰り返しの回数で、今回はK=5で実施しました。おおよその手順は、
- 全データをランダムに5つのグループに分割
- 先頭のグループを検証用、残りの4つのグループを学習用にしてラーニングする
- 次に二番目のグループを検証用に、他の4つのグルーブ゛を学習用にラーニングする
- これを五番目のグループまで実施
5-Foldの平均自体が試行毎に大きくことなっていて、モデルの平均として採用し難い。一方、稀に好成績の結果が得られ、再度検証しても過学習の影響が見られないことから、Geminiさんと相談し、そのように判断しました。
結果は、以下の通り、驚くべき成績です。
性別判定
5-Foldを実施し、5番目のFoldで、100%性別判定に成功しています。平均も99%で目標をクリアーしました。
過学習の懸念を払拭するため、実際の性別を故意にランダムシャッフルで検証するランダムラベルテストを実施しています。結果は、53.73%で、過学習はありせんでした。
年齢推定
年齢層10歳刻み
男性の10歳刻み層の混合マトリクスです。それぞれ40%~50%の範囲に収まっていて、目標をクリアーしています。
隣接の層を加えた場合、10代以外は、70%以上の推定が可能になっています。
こちらは女性の10歳刻みの混合マトリクスです。全体に男性よりも相関が強い結果が出ていて、年齢推定も男性より精度が高いことを示しています。
最大80%までは届きませんが、隣接の層を加えると、70%以上は確保できています。
年齢3層
特に中年層以上は、97%と91%で、商用の90%を上回りました。
サービスセンターのAI自動応答などの応用などでは、中年・シニア層が対象になるケースが多く、実用レベルとして十分でしょう。
目標の平均誤差は、5~7歳の範囲でしたが、4.07歳と大きくクリアしました。
平均絶対誤差
推定結果と、実際の年齢の差分から、平均絶対誤差、±5歳以内の確率、±10歳以内の確率、±15歳以内の確率は、以下となりました。
ヒストグラムで、±3~4歳の累積が最も高くなっています。赤い点線は、平均絶対誤差(MAE)の位置を示しています。
横軸の40の所に、±40歳の差の誤った推定が数件あります。たとえば、18歳の高校生の声を58歳のシニアと聞き間違える、あるいは70歳の高齢女性の声を30歳のキャリアウーマンと誤判定しているという意味です。が、人間の耳で聞いていも、そのように聞き間違うケースは、少なくありません。
層別の成功率と、平均絶対誤差の結果に違和感を覚えるかもしれません。層別は、ニューラルネットで出力層に実年齢が収まる確率を表示しています。が、平均絶対誤差は、最終的に学習した結果得られたパラメータから推定した年齢が、対象です。この年齢は、各年齢層の確率で示され、その総和が、実年齢に近寄ってくるためです。
例えば、Aさんの年齢層確率が、75歳が90%, 15歳が10%ですと、年齢は、75x0.9 + 15x0.1 = 69歳と推定されます。学習によって、シニアの特徴と若年層の特徴が抽出されることで、Aさんの推定年齢の正解率が高まったのでしょう。
応用
AIによる音声スコア
滑舌・抑揚・活力・声の艶は、学習に使用した声の特徴を使って、AI推奨のスコアリングをした結果です。
印象度、声年齢、性別は、ディープラーニングで学習したパラメータで推定したものです。
グラフで音素を視覚化
各ひらがな音素の位置は、AIベースの音声データ文字変換(Wav2Vec)と母音情報(VSA)から得ることが出来ました。
両者の抑揚を、視覚的に捉えることに成功しています。
抑揚の他に、滑舌・アクセント(強弱)・明瞭度のグラフを提供しています。
AIで音声診断レポート
Google Gemini API サービスでは、オンラインでレポートを提供する機能があります。取得した音声各スコアー、年齢・性別と、これのベースになった各音声特徴値を基に、Geminiの様々な音声分析知識から、機知にとんだレポートを作成してもらいました。
詳細分析では、滑舌・抑揚・活力・艶の各スコアに関してコメントしています。
「あなたへのアドバイス」では、総評やトレーニングに関するコメントも提供しています。









コメント
0 件のコメント :
コメントを投稿