人の耳は、すごいです。
誰かの声を聞くと、あ、これはお母さんの声だ……なんだか怒っていそう。
「あ」と言ったな……少し高い声だな……おかしなことがあったかな。
みたいなことを、自然に感じ取れます。
でも機械にとって、声は最初からそんなふうには聞こえません。
最初はただ、空気の揺れです。
波のように、時間の中でゆらゆら変わるものにすぎません。
だから機械は、まずその波を、数字にして、分けて、見やすい形にして、特徴を取り出す必要があります。
この章は、その流れをたどる章です。
声が機械の中でどう変わっていくかを、最初にざっくり地図にしておきます。
- 声はまず、空気の揺れとして届く
- その揺れを、機械が読める数字に変える
→ A-D変換、パルス符号変調器(PCM) - 数字の波を、「どんな高さの音が入っているか」に分けて見る
→ 高速フーリエ変換(FFT) - 人間の耳の感じ方に少し近づける
→ メル尺度 - 声らしさを表す特徴を取り出す
→ メル周波数ケプストラム係数(MFCC)、スペクトル包絡、フォルマント、フォルマント周波数
つまりこの章は、
声の波 → 数字 → 音の高さの集まり → 声らしさの特徴
という流れで進んでいきます。
A-D変換とパルス符号変調器(PCM)
― 声をまず「数字」にする
私たちの声は、空気の振動です。
目には見えないけれど、波のように揺れています。
でも、コンピュータはそのままの空気の揺れを扱えません。
コンピュータが扱えるのは、数字です。
だからまず必要なのが、アナログな音を、デジタルな数字に変えることです。
A-D変換
ここで出てくるのが、A-D変換です。
Aはアナログ、Dはデジタル。
つまりA-D変換は、連続した音の波を、コンピュータが扱える数字に変えることです。
たとえるなら、なめらかに流れる川の水を、そのまま持ち帰るのではなく、一定の間隔で水位を測ってメモしていくようなものです。
本当の川は、ずっとなめらかに流れている。
でも機械は、
・この瞬間はこれくらい
・次の瞬間はこれくらい
・その次はこれくらい
というふうに、少しずつ区切って記録します。
声も同じで、なめらかな波を少しずつ区切って数字にしていく。
それがA-D変換です。
パルス符号変調器(PCM)
そして、この音を数字として記録する代表的な方法が、パルス符号変調器(PCM)です。
名前は難しそうだけれど、やっていることはシンプルで、音の波を、一定の間隔で測って、数字として並べる方法です。
つまりPCMは、A-D変換された音を、「この瞬間の大きさはこれ」という数字の列として表すやり方です。
たとえば音楽ファイルや録音データの土台にも、この考え方が使われています。
まずここで大事なのは、機械は最初に、声を「数字の並び」として受け取るということです。
PCMでは、音をデジタル化するために、主に次の3つの手順を行います。
標本化
まず、なめらかに続いている音の波を、一定の時間ごとに区切って測る作業です。
たとえるなら、流れている川の水位を、ずっと連続して見るのではなく、「この瞬間」「次の瞬間」と、一定の間隔でメモしていくようなものです。
これによって、連続した音の波を、機械が少しずつ読める形にします。
量子化
次に、測った値を、決められた段階のどこに当てはまるかに丸めます。
本当の波の高さはとても細かく変わりますが、機械の中ではそのまま無限に細かくは扱えません。
そこで、「この高さならこの段階」と、近い値に置き換えます。
たとえるなら、ぴったりの身長を記録する代わりに、1cmごとの目盛りに丸めて記録する感じです。
符号化
最後に、その段階を数字やビット列として表す作業をします。
つまり、量子化で決まった値を、コンピュータが実際に扱える形に変えるわけです。
ここまで来て、声は「機械が読める数字の並び」になります。
つまりパルス符号変調器とは、
①音の波を、一定間隔で測り(標本化)、
②段階に分けて丸め(量子化)、
③それを数字として表す(符号化)
ことで、アナログの声をデジタルデータへ変える方法なのです。
FFTとメル尺度
― 音を「高さの集まり」として見る
でも、数字の波になっただけでは、まだ音声処理はしにくいことがあります。
なぜなら、声というのはただ時間の中で揺れているだけでなく、
・低い音
・高い音
・強い成分
・弱い成分
が重なってできているからです。
たとえるなら、ひとつの声は、単純な一本の線ではなく、いろいろな高さの音が混ざったスープみたいなものなのです。
そこで次に必要になるのが、この音の中に、どんな高さの音がどれくらい入っているかを見ることです。
高速フーリエ変換(FFT)
ここで出てくるのが、高速フーリエ変換(FFT)です。
これは、時間の中の波を、周波数の集まりとして見直す方法です。
「周波数」というのは、ざっくり言えば、音の高さに関わるものだと思って大丈夫。
高速フーリエ変換を使うと、さっきまで「時間の中で揺れている波」だった音を、
・低い音がこれくらい
・中くらいの音がこれくらい
・高い音がこれくらい
というふうに見られるようになります。
たとえるなら、白っぽい光をプリズムに通して虹の色に分けるようなものです。
もともとは一つに見えていたものを、中にどんな成分が入っているかに分けて見る。
FFTは、音に対してそれをしていると思うとわかりやすいです。
メル尺度
でも、ここでまだひとつ問題があります。
機械は周波数をきっちり数字として見られるけれど、人間の耳の感じ方は、それとまったく同じではありません。
たとえば、人は低い音の違いにはわりと敏感だけれど、高い音になるほど、その差を細かく感じにくくなります。
つまり、人間の耳は、周波数を、そのまままっすぐ感じているわけではないのです。
そこで出てくるのが、メル尺度です。
メル尺度は、人間の耳が感じる音の高さに近いように、周波数を少し変換したものです。
たとえるなら、ふつうの定規ではなく、人間の感じ方に合わせて目盛りの間隔が少し変わる定規を使う感じです。
だからメル尺度を使うと、機械がただ数字として音を見るのではなく、人がどう聞き分けやすいかに少し近い見方ができます。
メル周波数ケプストラム係数(MFCC)、スペクトル包絡、フォルマント、フォルマント周波数
― 声らしさを取り出す
ここまでで、機械は
1 声を数字にして
2 その中にどんな高さの音があるか見て
3 人の耳に近い感じ方へ少し寄せる
ところまで来ました。
でも、音声認識や話者識別をするには、まだもう一歩必要です。
それは、その声らしさを、特徴として取り出すことです。
人の声には、
・どんな音色か
・どんな響きか
・母音らしい形がどう出ているか
といった特徴があります。そこを取り出してあげると、機械は声を扱いやすくなります。
スペクトル包絡
まず出てくるのが、スペクトル包絡です。
ちょっと難しく聞こえるけれど、ざっくり言うと、声全体の音色のかたちみたいなものです。
FFTで見ると、音の中にはいろいろな周波数成分があります。
その細かなデコボコを、なだらかな線で包むように見たものがスペクトル包絡です。
たとえるなら、細かい山がたくさん並んだ山脈を、遠くから見たときの全体の輪郭みたいなものです。
だからスペクトル包絡は、声の細かな振れそのものというより、その声が全体としてどんな音色をしているかを見る手がかりになります。
フォルマント
そのスペクトル包絡の中で、とくに大事になる山があります。
それがフォルマントです。
フォルマントは、ざっくり言うと、母音らしさや声道の形に深く関わる、目立った周波数の山です。
たとえば「あ」「い」「う」「え」「お」は、同じ声でも口の形が違いますよね。
口の開き方や舌の位置が変わると、声の響き方も変わります。
その違いが、フォルマントとして表れます。
だからフォルマントは、母音を区別したり、声の特徴を見たりするうえでとても大切なのです。
フォルマント周波数
そして、そのフォルマントが、どの周波数の位置に現れているかを表したものが、フォルマント周波数です。
つまり、
フォルマント→ 声の中の大事な山
フォルマント周波数→ その山が、どこにあるか
という関係です。
たとえるなら、フォルマントは「山そのもの」、フォルマント周波数は「その山が地図のどこにあるか」みたいな感じです。
メル周波数ケプストラム係数(MFCC)
そして、音声処理でとてもよく使われてきた代表的な特徴量が、メル周波数ケプストラム係数(MFCC)です。
名前は長いけれど、まずは、人間の耳の感じ方に少し近い形で、声の特徴をまとめたものくらいに考えて大丈夫です。
メル周波数ケプストラム係数は、
・音を周波数で見て
・メル尺度を使って人間の聞こえ方に寄せて
・そこから音声認識に使いやすい形に特徴をまとめる
という流れで作られます。
つまりメル周波数ケプストラム係数は、いろいろな処理を通ったあとにできる、音声の要約メモみたいなものなのです。
音そのものを全部そのまま抱えるのではなく、この声を認識するのに役立ちそうな特徴だけを、ぎゅっとまとめたものと考えるとわかりやすいです。
だからメル周波数ケプストラム係数は、音声認識の世界で長く大事にされてきた代表的な特徴量なのです。
まとめ
ここまでの話を一本につなぐと、こうなります。
1 声はまず、空気の揺れとして届く
2 A-D変換とPCMで、それを数字の列にする
3 FFTで、どんな高さの音がどれくらい入っているかを見る
4 メル尺度で、人間の耳に近い感じ方へ寄せる
5 スペクトル包絡やフォルマントで、声らしい響きを見る
6 MFCCのような特徴量にして、機械が扱いやすくする
つまり機械は、いきなり「これは『あ』だ」「この人の声だ」とわかるわけではありません。
まず声を数字にして、その数字を見やすい形にして、そこから声らしさを取り出しているのです。
A-D変換→ アナログな声を、デジタルな数字に変える
パルス符号変調器(PCM)→ 音の波を、一定の間隔で測って数字として並べる方法
高速フーリエ変換(FFT)→ 音の波を、どんな高さの音がどれくらい入っているかに分けて見る方法
メル尺度→ 人間の耳の感じ方に近いように、周波数を見直した尺度
スペクトル包絡→ 声全体の音色のかたち
フォルマント→ 母音らしさに関わる、目立った周波数の山
フォルマント周波数→ その山がどの周波数にあるか
メル周波数ケプストラム係数(MFCC)→ 人間の聞こえ方に少し近い形でまとめた、音声の代表的な特徴量
next ▶ 音声処理モデルの発展