音声処理

音声認識・音声合成・WaveNet
音声処理の2つの方向
音声処理ってどんな分野?
音声処理には大きく音声認識(音→テキスト)と音声合成/生成(テキスト→音)の2方向があります。
音声(波形) アナログ信号 音声認識 Speech Recognition テキスト 「こんにちは」 音声認識(STT: Speech-to-Text) テキスト 「こんにちは」 音声合成 Text-to-Speech 音声(波形) 合成音声 音声合成(TTS: Text-to-Speech)
音声の基本要素

周波数:音の高低を決める要素。1秒あたりの振動回数(Hz)で表す。人間の可聴域は約20Hz〜20,000Hz。

音素:言語における音の最小単位。日本語では約25種類、英語では約45種類。「か」= /k/ + /a/ のように分解される。

時間変化:音声信号は時間とともに振幅・周波数が変化する。この時間的パターンが「何を話しているか」の情報を持つ。

音声のデジタル化(A-D変換)
コンピュータはアナログの音声をどうやって扱うの?
A-D変換(Analog-to-Digital変換)で、アナログ音声をデジタルデータに変換します。具体的にはパルス符号変調(PCM)という方式で、標本化→量子化→符号化の3ステップで行います。
パルス符号変調(PCM)の3ステップ ① 標本化(サンプリング) 一定間隔で値を読み取る 音声CD: 44,100Hz ② 量子化 7 6 5 4 3 2 最も近い離散値に丸める CD: 16bit (65,536段階) ③ 符号化 0 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 1 0 1 2進数に変換して保存
PCMの3ステップまとめ

① 標本化(サンプリング):アナログ信号を一定間隔で読み取る。間隔=サンプリングレート(音声CDは44,100Hz = 1秒に44,100回)

② 量子化:読み取った値を最も近い離散値(段階値)に丸める。ビット深度が高いほど精密(CDは16bit = 65,536段階)

③ 符号化:量子化した値を2進数(ビット列)に変換してデジタルデータとして保存する

音声の特徴抽出
デジタル化した音声からどうやって特徴を取り出すの?
高速フーリエ変換(FFT)で時間領域の信号を周波数領域に変換し、音声スペクトルを得ます。さらにそこからスペクトル包絡を抽出し、人間の聴覚特性を反映したメル周波数ケプストラム係数(MFCC)という特徴量にまとめます。
音声波形 時間領域 FFT 音声スペクトル 周波数領域 スペクトル包絡 なめらかな輪郭線 MFCC [2.1, -0.8, 1.5, -0.3, 0.7, ...] 特徴ベクトル 高速フーリエ変換(FFT) 時間領域の信号を周波数領域に変換する 数学的手法。「どの周波数がどれだけ 含まれるか」を明らかにする。 音声を短い窓(20〜40ms)に切り出して各窓にFFTを適用 MFCC(メル周波数ケプストラム係数) スペクトル包絡を人間の聴覚特性 (メル尺度)で変換した特徴量。 通常13次元程度のベクトルで表現。 音声認識の入力特徴量として最も広く使われる
スペクトル包絡とは?

スペクトルの細かい凸凹を滑らかにした「なめらかな輪郭線」のこと。声の音色(母音の種類など)を決定する重要な情報を持ちます。元のスペクトルは声帯の振動による細かい周期成分を含みますが、スペクトル包絡はその声道の共鳴特性(フォルマント)を表現します。

音声認識の仕組み
音声認識はどうやって音をテキストに変換するの?
伝統的な音声認識は3段階で行います:① 音声を特徴量(MFCC等)に変換 → ② 音響モデルで音素列に変換 → ③ 言語モデルで音素列を単語・文に変換。音響モデルには隠れマルコフモデル(HMM)が長年使われてきました。
音声認識パイプライン 音声波形 特徴抽出 MFCC等 → 特徴ベクトル列 音響モデル HMM / DNN-HMM → 音素列 言語モデル 音素列→単語に変換 → 単語・文 テキスト 「今日は 晴れです」 🎤 [2.1, -0.8, ...] /k/ /y/ /o/ /u/ /w/ /a/ 「きょうは」 音素列→単語への変換では、発音辞書(音素列と単語の対応表)と言語モデル(単語の並びの確率)を使う
隠れマルコフモデル(HMM)って何?
HMM(Hidden Markov Model)は、「観測できないもの(隠れ状態 = 音素)」を「観測できるもの(音声の特徴量)」から推定する確率モデルです。各音素を数個の状態で表現し、状態間の遷移確率と、各状態から特徴量が出力される確率を学習します。
隠れマルコフモデル(HMM) 隠れ状態 (音素) /k/ /a/ /z/ /e/ 遷移確率 遷移確率 遷移確率 出力確率 観測 (特徴量) MFCC₁ MFCC₂ MFCC₃ MFCC₄ 「風」= /k/ → /a/ → /z/ → /e/ の音素列として隠れ状態を推定
HMMはどう進化してきたの?
初期のHMMでは出力確率の計算に混合正規分布モデル(GMM)を使っていました(GMM-HMM)。その後、GMMの部分をディープニューラルネットワーク(DNN)に置き換えたDNN-HMMが登場し、音声認識の精度が大幅に向上しました。
GMM-HMM vs DNN-HMM
GMM-HMM(従来型)

出力確率を混合正規分布モデル(GMM)で計算。複数のガウス分布を混ぜて音の出現確率を近似する。

限界:複雑な音声パターンを表現するには限界がある

DNN-HMM(深層学習型)

出力確率をDNNで計算。音声の特徴量を入力し、各HMM状態の事後確率を出力。

利点:DNNの高い表現力で複雑な音声パターンを捉え、精度が大幅向上

混合正規分布モデル(GMM)とは?

複数の正規分布(ガウス分布)を重み付きで混合して、複雑な確率分布を近似するモデル。たとえば1つの音素の特徴量の分布が単純な1つの山型でない場合でも、複数の正規分布を混ぜることで柔軟に表現できます。

CTC(Connectionist Temporal Classification)
DNN-HMMの次はどんな音声認識手法が出てきたの?
CTC(Connectionist Temporal Classification)が登場しました。DNN-HMMでは音響モデルと言語モデルを別々に設計していましたが、CTCは音声特徴量から直接テキストを出力するEnd-to-End(一気通貫)の音声認識を可能にした手法です。
でも音声フレームの数と文字の数って違いますよね?どうやって対応させるの?
いい質問だね。音声は1秒間に100フレーム程度あるのに対し、出力テキストはずっと短い。CTCは空白トークン(blank)を導入してこの問題を解決するんだ。各フレームで「文字」か「blank」を出力し、最後にblankと連続する同一文字を除去して最終的なテキストにする。これにより、入力と出力の長さが異なっていても学習できるんだよ。
CTCの仕組み

問題:音声フレーム数(入力)とテキスト文字数(出力)の長さが異なる

解決策:空白トークン(blank: ε)の導入
各フレームで「文字」または「blank」を出力し、後処理で整形する

例:「cat」を認識する場合
出力列:ε c ε ε a ε t ε ε
→ blankを除去し連続文字を統合 → 「cat」

特徴:
・音響モデルと言語モデルを分けないEnd-to-End学習
・DNN-HMMの次の主流手法として登場
・RNNやBiLSTMと組み合わせて使用されることが多い

音声合成(TTS)の種類
テキストから音声を作る方法にはどんな種類があるの?
音声合成(Text-to-Speech, TTS)には大きく3つの方式があります:波形接続型パラメトリック型、そして最新のニューラルTTSです。
方式 仕組み 音質 揺らぎの再現 代表例
波形接続型TTS 大量の録音音声から適切な断片を選んで接続する 自然だが接続点で不自然になりやすい 録音そのものなので自然な揺らぎあり 初期のSiri等
パラメトリックTTS 音声のパラメータ(音高・音長・スペクトル等)をモデルで生成し合成 機械的になりやすい 平均化されるため揺らぎが失われやすい HMM音声合成
ニューラルTTS DNNで音声波形を直接生成する 人間に近い高品質 DNNが自然な揺らぎを学習・再現できる WaveNet, Tacotron
音声の揺らぎを再現できるか?

人間の音声には微妙な揺らぎ(ピッチの微変動、息遣い、イントネーションの自然なブレ等)があります。パラメトリックTTSはパラメータを平均化するため、この揺らぎが失われて「ロボット的」な音声になりがちでした。WaveNetなどのニューラルTTSは、音声波形そのものを学習するため、この自然な揺らぎを再現でき、人間の音声に極めて近い品質を実現しました。

WaveNet
WaveNetって何がすごいの?
WaveNetはDeepMind社が2016年に発表したニューラルTTSモデルで、音声波形の各サンプル点を1つずつ自己回帰的に生成します。核となる技術がDilated Causal Convolution(拡張因果畳み込み)で、広い受容野を効率的に確保しつつ、未来の情報を使わない制約を守ります。
WaveNet — Dilated Causal Convolution 各層でdilation(拡張幅)を指数的に増やし、少ない層数で広い受容野を確保 dilation=8 dilation=4 dilation=2 dilation=1 入力 出力 受容野 = 16サンプル(4層で確保) Causal = 各ノードは過去のみ参照
Dilated Causal Convolution の2つのポイント
Causal(因果)

畳み込みフィルタが過去の時点のデータのみを参照し、未来の情報は使わない。

→ 音声を1サンプルずつ順番に生成する自己回帰に必要な制約

Dilated(拡張)

畳み込みの入力を間隔を空けて(飛ばして)サンプリング。層ごとに間隔を1, 2, 4, 8...と指数的に増やす。

→ 少ない層数で広い受容野を確保。通常の畳み込みだと1000層以上必要な範囲を約30層でカバー

WaveNet(DeepMind, 2016年)

DeepMind社が開発したニューラルTTSモデル。音声波形の各サンプル点(1秒に16,000〜24,000個)を1つずつ自己回帰的に生成する。

核心技術:Dilated Causal Convolution で広い受容野を効率的に確保

成果:MOS(Mean Opinion Score)で従来手法を大幅に上回り、人間の音声に最も近い品質を達成。Google Assistantの音声に採用された。

課題:1サンプルずつ逐次生成するため生成速度が遅い → Parallel WaveNet等で高速化

音声処理 技術まとめ
技術 分類 概要 ポイント
A-D変換(PCM)前処理アナログ音声をデジタルに変換標本化→量子化→符号化の3ステップ
FFT特徴抽出時間領域→周波数領域への変換スペクトル分析の基礎
MFCC特徴抽出人間の聴覚特性を反映した音声特徴量音声認識の標準的な入力特徴量
HMM音声認識状態遷移と出力確率の確率モデル音素列の推定に使用
GMM-HMM音声認識HMMの出力確率をGMMで計算伝統的な音声認識システム
DNN-HMM音声認識HMMの出力確率をDNNで計算GMM→DNNで精度大幅向上
CTC音声認識End-to-Endで音声から直接テキスト出力blankトークンで入出力長の違いを解決
波形接続TTS音声合成録音断片を接続して合成自然だが接続点が不自然
パラメトリックTTS音声合成パラメータから音声を生成揺らぎが失われ機械的
WaveNet音声合成DNNで波形を直接生成Dilated Causal Conv。人間に近い品質
G検定キーポイント