身の回りの音声技術まとめ

IPFactory Advent Calender 2023 15日目の記事です。

https://qiita.com/advent-calendar/2023/ipfactory

# はじめに
皆さんは普段身の回りにある音に関係した技術を意識したことはありますか？
例を挙げるとするとAmazonのAlexaやAppleのSiri、Sonyなどのイヤホンに搭載されているノイズキャンセリングなどの言われてみれば思いつくものがあると思います。私は音に関する技術に興味があり、色々調べてみたので、今回はそのような身の回りにある音に関する技術についてちょっとだけ解説していけたらと思います。
## 身の回りの音声技術

### 音声認識
音声認識とは音声データを解析してテキストデータに変換する技術です。
利用例を挙げると

* ボイスアシスタント
* 自動翻訳
* スマートスピーカー


などがあります。
どれも身近にあるものですが、面白い仕組みをしています。

#### 仕組み

##### 1.音声を分析してデジタルデータに変換します。
まずは入力した音声をデータ化します。音声を「**特徴量**」と呼ばれる数値に変換します。
音の周波数や強弱、間隔、時系列といった特徴を抽出してデジタル信号に変換します。
アナログ信号からデジタル信号へとコンピューターが認識しやすい形に整形します。
>**特徴量**とは分析すべきデータや対象物の特徴・特性を、定量的に表した数値。 ディープラーニングなどの機械学習による予測や判断の精度を高めるためには、必要な特徴量のみを適切に選択することが重要となる。

人間では認識できないデータの特徴を掴むコンピューターは凄いですね。

##### 2.音響モデルを利用して音素を抽出します。
音響分析で抽出された特徴量がどの「**音素**」にどれくらい近いのかを機械の学習パターンに沿って照らし合わせていきます。
音声言語の最小単位が[音素](https://www.nihongo-appliedlinguistics.net/wp/archives/7011)となり、[音素](https://www.nihongo-appliedlinguistics.net/wp/archives/7011)は話し手がテキストを読むときに意識する言語音です。
音素はアルファベットで表されます。そして音素は普段意識していませんが、たくさんあります。

##### 3.発話辞典を音素と連結します。
音素だけでは言語はできません。そのため、「発音辞書」と「言語モデル」で意味が通じる日本語にしていきます。
発音辞書は発音と単語が登録されたデータベースで、 言語モデルは単語や文章が適切かを評価する仕組みです。

##### 4.文章を組み立てて日本語をテキストとして出力します。
ここで、日本語が自然な文字列で文章が形成され、テキストとして出力されます。

これが普段皆さんが使っている音声入力の仕組みです。
尚、現在はディープラーニングを利用しているサービスもあるようで、より正確性のある音声認識が可能になっているみたいです。
機械学習には[Google Cloud Speech-to-Text](https://cloud.google.com/speech-to-text?hl=ja)のようなサービスがあります。
私はこの機能を用いてAIと対話できるようなプログラムを組みたくなりました。
それには後述の音声合成も必要になってくると思います。
***
### 音声合成
音声合成とはテキストから音声を合成する技術です。私が今一番気になっている技術です。
利用例を挙げると

* 音声ガイド
* VOCALOID
* 音声対話
* 防災警報
* バーチャルキャラクター

などほかにも沢山用途があります。
そんな音声合成ですが、仕組みはかなり難しいです。

#### 仕組み

##### ・録音編集方式
限定的な単語や文章を録音しておき、それらをつなぎ合わせて利用する方式です。限定的な場所(駅のホームや車内アナウンスなど)でないと使えないですが、高品質な音声で読み取りができます。ただし、限定的な場所以外だと再度録音が必要になります。

##### ・テキスト音声合成方式
テキストを読み上げ音声にする方式です。音素、音節などのアクセントを抽出し、制御パラメータを生成して合成音声を作ります。どのような言葉にも対応できるので先ほどの録音編集方式よりも自由度があります。

###### 1.規則合成方式
音声合成の専門家たちが音響や言語の規則を設定して音声波形を合成する方式です。高度な専門知識が必要になります。また、機械的な音声になりがちです。

###### 2.コーパスベース合成方式
**コーパス**とは音声と言語をセットにして集めたデータベースのことで、会話やスピーチを集めた音声コーパスを作成します。そして、テキストを入力したときにコーパスに格納された音声波形を利用して合成します。
###### (1).波形接続型合成方式
音声を先に録音しておき、それらの素片をつなぐ方法です。肉声に近くなりますが繊細なつなぎ合わせの作業があるため自然言語処理や音声信号処理の高度な知識が必要になります。
###### (2).統計モデル型合成方式
音声コーパスから抽出した音響特徴量を機械学習によって分析し、それに基づいたテキストから音声を予測して合成します。そのため、波形接続型合成方式よりも少ないデータ量で音声合成を行うことができます。
##### ・統計モデル型音声合成方式
機械学習を用いた方式で、音声素片ではなく音声パラメータを表現する統計モデルから作られます。
データを基に学習し、それによって作られたモデルを使って推論する機械学習です。
この機械学習として代表的な種類として「**HMM音声合成**」と「**DNN音声合成**」があります。
[**HMM音声合成**](https://spjai.com/speech-recognition/)は隠れマルコフモデルといい、
>言語特徴量と音響特徴量の関係を決定木に基づくコンテキスト依存のHMMによって表現する手法です。

また、[**DNN音声合成**](https://readspeaker.jp/news/deep-neural-network-text-to-speech/)はディープニューラルネットワークといい、
>モデルパラメータから言語特徴量と音響特徴量の関係を読み取ることは難しい反面，決定木では表現することが困難な複雑な非線形変換関数によって言語特徴量と音響特徴量の関係を表現することが可能です。

この辺りはかなり難しく感じます。恥ずかしながら、DNN音声合成の方がHMM音声合成よりも処理が重くなる程度しか理解していません。
この他にも音は波なので物理がかかわってきて難しいです。
***

### 音声分離
音声分離とは混ざり合った音声から個別の音声へと分離する技術です。
利用例を挙げると、

* 高音質なWebミーティング
* 補聴器の高機能化
* 工場での特定音の分離、異音検知

など役に立つものばかりです。
この技術の仕組みも面白いです。

#### 仕組み
##### ・線形フィルタリングによる音声分離
足し算、引き算の考えで音を削除する仕組みです。基本的に複数のマイクが必要になります。
マイクにはすべての音が入ってくるのでその合計値から取り除きたい音を引くと取り出したい音が抽出できるということです。
* 全体の音-取り除きたい音=取り出したい音(一つのマイクの場合)

複数のマイクがある場合は音源からの距離が違うので到達する時間に差が生まれることになります。そのため、取り出したい音と取り除きたい音のゲインを一瞬のうちに調整して音声を分離することができます。

##### ・非線形フィルタリングによる音声分離
こちらは単一のマイクでも音を分離できます。
線形フィルタリングとは違って掛け算の考え方で目的の音を選別します。
この仕組みは、周波数成分を時系列で**可視化したスペクトログラム**上では重なりにくいという性質を利用しています。
そのために、マイクが一個だけでも分離できるということです。
[スペクトログラム](http://adlib.rsch.tuis.ac.jp/~akira/zemi/ocampus/html/specana.html)とは
>周波数分析を時間的に連続して行い、色によって強さを表すことで、強さ、周波数、時間の３次元表示を行う。
# まとめ
~~まとめのまとめってなんだ...?~~
今回初めて記事を書かせてもらったBellkです。まずはここまでご覧いただきありがとうございました！
この3つの音声技術はどれも特色があって、活用方法がワクワクするものばかりだったので今後も勉学に励みたいと思います。参考にしたサイトや書籍の情報を自分なりに嚙み砕いて記事を書いたので間違えていたらすみません。次はスペクトログラムでお絵描きしたいなと思っています。また、参考にさせて頂いた箇所が多すぎてこの後の参考文献・書籍がとんでもないことになってますね...
知識を授けていただき本当にありがとうございました:bow:
これからも寒いので皆さん風はひかないようにご自愛ください。
# 参考文献・書籍
https://gijiroku.ai/blog/artificial-intelligence/2535

https://www.persol-wd.co.jp/column/voice-recognition/

https://coestation.jp/blog/detail.php?id=1002241

https://ai-market.jp/howto/ai_voice_recognition_how/

https://dictionary.goo.ne.jp/word/%E7%89%B9%E5%BE%B4%E9%87%8F/#:~:text=%E3%81%A8%E3%81%8F%E3%81%A1%E3%82%87%E3%81%86%E2%80%90%E3%82%8A%E3%82%87%E3%81%86%E3%80%94%E2%80%90%E3%83%AA%E3%83%A4%E3%82%A6%E3%80%95%E3%80%90%E7%89%B9%E5%BE%B4%E9%87%8F%E3%80%91&text=%E5%88%86%E6%9E%90%E3%81%99%E3%81%B9%E3%81%8D%E3%83%87%E3%83%BC%E3%82%BF%E3%82%84,%E3%81%93%E3%81%A8%E3%81%8C%E9%87%8D%E8%A6%81%E3%81%A8%E3%81%AA%E3%82%8B%E3%80%82

https://www.nihongo-appliedlinguistics.net/wp/archives/7011

https://spjai.com/speech-recognition/

https://readspeaker.jp/news/deep-neural-network-text-to-speech/

http://adlib.rsch.tuis.ac.jp/~akira/zemi/ocampus/html/specana.html

https://laboro.ai/activity/column/engineer/source-separation/

### [Pythonで学ぶ音声合成 機械学習実践シリーズ](https://www.amazon.co.jp/Python%E3%81%A7%E5%AD%A6%E3%81%B6%E9%9F%B3%E5%A3%B0%E5%90%88%E6%88%90-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%B1%B1%E6%9C%AC%E9%BE%8D%E4%B8%80/dp/4295012270)
山本龍一 (著), 高道慎之介 (著)