音声認識の概要をまとめてみた

# はじめに
日本語の自動音声認識システムの開発に向けて、音声認識の基礎を独学で勉強したのでここにその概要を簡単にまとめる。
ただし、音声認識は現在発展中の技術であり、次々と新しい方法やアルゴリズムが考えだされている。
ここでは隠れマルコフモデル（HMM）と呼ばれる音響モデルを用いた方法を紹介するが、近年では深層学習を用いた方法が主流になりつつあるようである。
機械学習分野の成長は近年特に目覚ましく、今後ますます深層学習等を取り入れる動きが加速するものと思われる。


# 音声認識とは
自動音声認識（Automatic Speech Recognition, ASR）とは、人間が声で話す言葉（音声）を文字に変換する技術であり、文字認識や顔認識などと同じくパターン認識の一分野である。
中でも特に音声認識は「複数入力複数出力のパターン認識問題」であり、パターン認識の中でも最も難しい問題とされる。
さらに、実用化の際には幅広い専門知識や多くのノウハウが必要とされる。


# 音声認識システムの構成
音声認識システムは一般に前処理部、特徴抽出部、識別部から構成される。


## 前処理部
音（音波）は空気などの物質中を伝搬する縦波（圧縮波）であり、マイクロフォンを通じて電気信号に変換される。
この電気信号はアナログ信号であるので、コンピュータが取り扱えるデジタル信号に変換（サンプリング）する必要がある。
このサンプリングを行うのが前処理部であり、一般的な音声認識システムにおいてはサンプリング周波数16kHz、量子化ビット数16ビットがよく用いられる。


## 特徴抽出部
特徴抽出部は、前処理部がサンプリングした音声データから特徴連続ベクトルを作成する。
前処理部がサンプリングしたデータは、容量・ノイズが多く取り扱いにくいので、フーリエ変換を行い音声のスペクトラム（spectrum）を得る。
ここで、スペクトラムから更に音素を区別するための共振（フォルマント）周波数の情報を得るために、離散コサイン変換（DCT）を行いケプストラム（cepstrum）を得る。
こうして得られたケプストラムの低次の成分とその変化量等から特徴ベクトル**x**（~30次元）を得る。
これらの処理を10msごとに行い特徴連続ベクトル**X**(**x1**, ..., **xt**)を得る。


### 音素
音素とは、言語情報を伝達するのに必要となる最小限の音の種類である。
日本語は音素数が比較的少ない言語で、母音（a, i, u, e, o）、子音（k, g, s, z, t, c, d, n, h, f, p, b, m, r, y, w）、特殊音（N：撥音（ん）, Q：促音（っ）, R：長音（ー））の約20種類からなる。


## 識別部
識別部は、特徴抽出部が出力した特徴連続ベクトル**X**(**x1**, ..., **xt**)から、それに対応する尤もらしい単語列**W**(**w1**, ..., **wn**)を出力する。
すなわち、arg **W** max P(**W**|**X**)を求める。
ここでベイズの定理を用いると、
arg **W** max P(**W**|**X**) = arg **W** max P(**X**|**W**)P(**W**)
と書き換えられる。
ここで、P(**X**|**W**), P(**W**)を求めるための確率モデルをそれぞれ音響モデル, 言語モデルと呼び、それらの積P(**X**|**W**)P(**W**)を最大とする単語列**Ｗ**を探す方法を探索手法と呼ぶ。


### 音響モデル
音響モデルとして、隠れマルコフモデル（HMM）を用いたものが良く知られる。
HMMは自己遷移（ループ）を持つ確率オートマトンであり、これを音素ごとに用意し、それらを結合して単語を構成する。
このとき、調音結合を考慮した音素モデルをトライフォンと呼び、考慮しないものをモノフォンと呼ぶ。


### 言語モデル
統計的言語モデルは、文例を大量に含むコーパスと呼ばれる言語資料を使用し、認識対象とする文の出現確立P(**W**)を求める。
N-グラム言語モデルがよく用いられ、これは「ある単語の出現確立は、直前の（N-1）個の単語のみに影響される」という仮定を置く。
2-グラムもしくは3-グラムがよく用いられる。


#### 日本語話し言葉コーパス（CSJ）
http://pj.ninjal.ac.jp/corpus_center/csj/
音響・言語モデルを作成する際に用いるコーパスとして、日本語話し言葉コーパス（CSJ）が良く知られる。
> 『日本語話し言葉コーパス( Corpus of Spontaneous Japanese : CSJ ) 』は、日本語の自発音声を大量にあつめて多くの研究用情報を付加した話し言葉研究用のデータベースであり、国立国語研究所・ 情報通信研究機構（旧通信総合研究所）・ 東京工業大学 が共同開発した、質・量ともに世界最高水準の話し言葉データベースです。
　本コーパスは、音声言語情報処理、自然言語処理、 日本語学、言語学、音声学、心理学、社会学、日本語教育、辞書編纂など幅広い領域で利用されています。
(公式サイトより引用)


### 探索手法
基本的な探索手法として、ビームサーチが良く用いられる。
これは全体として保持する単語列の候補数（ビーム幅）をあらかじめ決めておき、スコアの高い順に保持する方式である。
一般にビーム幅を広げると精度は向上するが、処理に時間がかかる。
また、WFST（weighted finite state transducer）を用いた探索手法が存在する。


# 音声認識に関するツール
音声認識（文字出力）を行うソフトをデコーダと呼び、デコーダは音響モデル、言語モデル、単語辞書を用いて入力音声を文字出力に変換する。
デコーダとしてはJulius、音響モデルの作成はHTK, Kaldi、言語モデルの作成はSRILM, Palmkitといったフリーソフトがよく用いられるようである。


## Julius
- http://julius.osdn.jp/
- 音声認識システムの開発・研究のためのオープンソースの高性能な汎用大語彙音声認識エンジン。数万語彙の連続音声認識を一般のPCやスマートフォン上でほぼ実時間で実行できる軽量さとコンパクトさを持つ。
- 現在、名古屋工業大学 Julius開発チームが主に研究・開発を行なっており、日本語のマニュアル・リファレンスが充実している。
- ディクテーションキット（音響モデル・言語モデル・単語辞書がパッケージとなったもの）が配布されており、すぐに音声認識を実行することができる。


## HTK
- http://htk.eng.cam.ac.uk/
- イギリス・ケンブリッジ大学が公開しているHMMに関するツール群であり、音声の収録から認識結果の評価まで、HMMを使って音声認識をするための一通りの道具が揃う。
- 公式マニュアル（英語）が非常に詳細で充実しているらしい。


## Kaldi
- http://kaldi-asr.org/
- 国際的な開発チームにより非常に活発に開発が継続されており、近年注目されている。
- 最新の音声認識技術が多く取り入られており、新しい特徴抽出法であるPLP（perceptual linear prediction）や、深層学習をカバーする。
- 日本語話し言葉コーパス（CSJ）用のレシピ（スクリプト群）が用意されている。


## SRILM, Palmkit
SRILM
- http://www.speech.sri.com/projects/srilm/
Palmkit
- http://palmkit.sourceforge.net/


# 音声認識の精度向上に向けて
一般に認識対象の語彙数を絞り、話者を制限（特定話者認識）すると認識精度は向上する。
従って、まず認識対象を明確にし、対象に合わせたシステム（特徴抽出部・識別部）の構築が必要である。
特徴抽出部では、認識対象の音声特性に合わせたノイズの除去が必要である。
また識別部では、認識対象の音声・言語情報を用いて音響・言語モデルをそれぞれ学習させることで、高精度なモデルの作成が可能であると考えられる。


# 参考図書
- フリーソフトでつくる音声認識システム(第2版) - 荒木雅弘
- イラストで学ぶ音声認識 - 荒木雅弘
- 音声認識 - 篠田 浩一