こんにちは。ZMSの清水です。
早くも3回目の記事の執筆です。TechBLOGも運営開始から3か月が過ぎ、徐々に記事も充実してきました。
他の執筆者の記事を読んでいると、改めてZMSは多様な背景を持ったエンジニアの集まりであることを実感すると共に、自分の経験にはなかった新たな知見を得る場としてもブログを活用できることに気づかされます。
今回はそのように思ったきっかけの1つであるこちらの記事を参考に、「内に学ぶ」ことの大切さについて思ったことを書き連ねていきたいと思います。
数学的素養
私はエンジニアとして社会人のキャリアを歩み始め、その後大きく道を変えることなく今に至りますが、学生時代から今に至るまで数学的素養を体系的に身につけたことがありません。
経済学を専攻する中で統計学に関する基礎知識程度は学びましたが、例えばAIを用いたシステム開発の基軸になる知識などは学術の場において体系的に学んだことはありません。
ところが、ZMSで会話をしていると、所々に数学的な素養が求められる(正確には、数学的な素養を持っていればより深く理解できる)と思われる場面が出てきます。
その最たるものが先ほど参考として挙げたいっちさんのブログ記事です。
記事の中では内容について大学の学部レベルと語られていますが、高校卒業後まともに数学に触れてこなかった自分にとっては、記事の内容はほとんど暗号に近いものでした。
しかし考え方を変えれば、これは今更ながら数学的な考え方を学習する良い機会とも捉えられます。
そこで今回は、いっちさんがブログの中で書かれていたフーリエ変換をテーマに、これが音声解析という実務でどのように利用されているのか紹介していきたいと思います。
音声データのフーリエ変換
まず初めに、フーリエ変換の定義である「時間の関数 f(t)を、角周波数Ωの関数F(Ω)に変換すること」について理解を深めます。
音声データは非周期的は波形で表されるため、例えば以下のような非周期的関数を考えます。
非周期的で複雑な波形でも、それは周期的な関数(正弦関数)の和として表現することができます。
正弦関数は振幅(r)と角周波数(ω)によって表現されるため、複雑な波形は複数の周期的な正弦関数
rsinωx
の和として表現できます。
例えば、ある非周期的な波形が以下の3つの正弦関数の和で表現できたとします。
7sin2x
4sin5x
2sin6x
これを横軸に角周波数(ω)、縦軸に振幅(r)としてまとめると、振幅(r)が角周波数(ω)の関数として表現されます。
つまり、フーリエ変換とは「非周期的な波形を周期的な波形の和に分解し、波の大きさを角周波数の関数で表すこと」と理解できます。
フーリエ変換を用いた音声解析の精度向上
機械学習による音声解析プログラムとフーリエ変換の関係性について考えてみます。
音声データを時間の関数として捉えた場合、例えば機械学習でデータを分析して話者分類を行う際には特徴量の抽出がそのままでは困難です。
そこで、音声解析における教師データを作成するためには時間の関数である音声データをフーリエ変換によって角周波数の関数に変換し、対象データの特徴量として利用します。
つまり、この場合におけるフーリエ変換の意義とは「時系列データを周波数ごとの大きさでまとめることで、対象音声の特徴点データとして利用しやすい形を導き出す」ことだと理解できます。
但し、こう考えると現実にこの手法で特徴量データを取得することには問題点も考えられます。
それは、時間の関数を周波数の関数に変換しているため、音声データが長時間のものであっても短時間のものであっても抽出できる特徴量データは1つだけという点です。
機械学習では与えることのできる特徴量の数が多いほど認識精度を向上することができるため、1つの音声データから複数の特徴量を取得できるようにならないか、というのは実務における重要な視点ではないかと思います。
この点については次回以降に更に詳しく見ていきたいと思います。
最後に
今回の結論はフーリエ変換がどのように機械学習で利用されるかという意義を結論としますが、数学的な素養という意味ではフーリエ変換の導出過程すらも満足に理解できていないのが正直なところです。
次回の記事では今回のテーマに続けてさらに計算式などを用いて、AI開発に役立つ数学のお勉強を進めていきたいと思います。
そして数学に限らず、これからも幅広い視点で知識を身に着けていきたいと思います。