「フリーソフトでつくる 音声認識システム」 サンプルページ ·...

38

Upload: others

Post on 05-Dec-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

「フリーソフトでつくる

音声認識システム」

サンプルページ

この本の定価・判型などは,以下の URL からご覧いただけます.

http://www.morikita.co.jp/books/mid/084711

※このサンプルページの内容は,初版 1 刷発行当時のものです.

i

まえがき

本書は,読者のみなさんがパターン認識と機械学習理論を初歩から学び,その実践

として音声認識システムを作成する方法を身に付けることを目的として執筆しました.

解説はなるべく単純化された事例を用い,フリーソフトを使ってその手順を一歩一

歩確認しながら進めます.対象は主として初学者で,大学情報系の学部 3回生向けの

教科書および専門学校での指導書として利用されることを想定しています.

本書は 2部構成となっています.

第 1部ではパターン認識の基礎理論を説明します.パターン認識とは,人間が音声

を理解したり,文字を読み取ったり,人の顔を見分けたりする能力のことです.本書

の前半では,この能力をコンピュータに持たせるための理論を解説します.まず,パ

ターン認識システムの全体構成について説明した後,サンプルを使ってコンピュータ

に「学習」をさせる方法を説明します.そこでは,問題の難しさに応じていくつかの

学習アルゴリズムを使い分ける方法を具体的に示します.また,パターン認識におけ

るエラーへの対処法や,認識システムの評価法について解説します.

第 2部では,いくつかのフリーソフトを使って,パターン認識の応用分野のひとつ

である音声認識システムを作り上げる過程を説明します.ここで説明するソフトウェ

アは,他の時系列パターンの認識に応用できるものや,自然言語処理を応用したシス

テムにも使えるものもありますので,音声認識以外の認識分野を研究テーマにしてい

る方々にも,ツールで何ができるのかということと,その最も基本的な使い方を習得

していただけると思います.

本書は,理論をできるだけ平易に解説し,その理論を実装したフリーソフトを実際

に動かしながら,「手順を追うことによって理論を身に付ける」というスタイルをとり

ます.データを自分で準備し,そこから音声認識システムを構築する手順を詳細に追

うことで,作る喜びが体験できると考えています.しかし,手順通り進めているはず

でもエラーメッセージで処理が止まってしまったり,認識精度が著しく低いというよ

うなケースがあるでしょう.また,紹介したフリーソフトのバージョンアップなどに

より,説明した手順ではうまく動かないことがあるかもしれません.しかし,そのと

ii まえがき

きこそ,教科書通りの学習では得られない実践的知識が身に付くと著者は考えます.

必要に迫られてエラーメッセージやマニュアルを解読し,類似事例をWebで検索し,

試行錯誤でエラーに取り組むことで,教科書から得られる受身の知識とは別種の,い

わば能動的な知識が身に付くことでしょう.

本書では図や具体例を用いてなるべく直観的に理解できる説明を心がけました.そ

のため,厳密性を犠牲にした箇所がいくつかあります.また,著者の勉強不足による

誤りもあるかもしれません.御指摘・御批判をいただければ幸いです.

本書を通じて,パターン認識や音声認識に興味を持って下さる読者が少しでも増え

れば,これに勝る喜びはありません.

2007年 9月

著者しるす

iii

目 次

第 1部 パターン認識の基礎 1

第 1章 パターン認識って何? 2

1.1 パターン認識システムの構成 ··························································· 3

1.2 パターンの前処理 ·········································································· 5

1.3 特徴抽出とは ················································································ 5

1.4 識別部の役割 ················································································ 7

1.4.1 識別部の構成 7

1.4.2 プロトタイプの決め方 8

演習問題 11

第 2章 データをきちんと取り込もう 12

2.1 アナログ信号のディジタル化 ························································· 12

2.1.1 アナログ信号は波である 12

2.1.2 標本化と量子化 13

2.2 特徴抽出をしやすくする処理 ························································· 16

2.2.1 音の場合 16

2.2.2 画像の場合 17

演習問題 18

第 3章 パターンの特徴を調べよう 19

3.1 変動に強い特徴とは ····································································· 20

3.1.1 音声の場合 20

3.1.2 文字の場合 24

3.2 特徴の正規化 ·············································································· 24

3.3 特徴は多いほどよいか ·································································· 27

iv 目 次

3.3.1 偶然に見つかってしまってはまずい 27

3.3.2 特徴を減らそう 30

演習問題 34

第 4章 パターンを識別しよう 35

4.1 NN法の定式化 ··········································································· 35

4.1.1 距離最小とは 36

4.1.2 プロトタイプと決定境界の関係 37

4.2 プロトタイプの決め方 ·································································· 38

4.3 パーセプトロンの学習規則 ···························································· 40

4.3.1 識別関数の設定 41

4.3.2 識別関数とパーセプトロン 41

4.3.3 2クラスの識別関数の学習 42

4.3.4 パーセプトロンの学習アルゴリズム 45

4.4 区分的線形識別関数と k-NN法 ······················································ 48

4.4.1 平面で区切れない場合 48

4.4.2 区分的線形識別関数の実現 48

4.4.3 区分的線形識別関数の識別能力 50

4.4.4 学習をあきらめるのも一手 50

4.4.5 k-NN法の実現 51

演習問題 52

第 5章 誤差をできるだけ少なくしよう 53

5.1 誤差評価にもとづく学習とは ························································· 53

5.2 Widrow-Hoffの学習規則 ······························································ 55

5.2.1 最急降下法 55

5.2.2 Widrow-Hoffの学習規則 56

5.3 パーセプトロンの学習規則との比較 ················································ 58

5.3.1 パーセプトロンの学習規則を導く 58

5.3.2 着目するデータの違い 59

演習問題 60

第 6章 限界は破れるか—— SVMとニューラルネットワーク 61

6.1 サポートベクトルマシン ······························································· 61

目 次 v

6.1.1 分離面は見つかったけれど 62

6.1.2 SVMの学習アルゴリズム 62

6.1.3 線形分離可能にしてしまう 69

6.2 ニューラルネットワーク ······························································· 71

6.2.1 ニューラルネットワークの構成 72

6.2.2 誤差逆伝播法による学習 73

演習問題 80

第 7章 未知データを推定しよう——統計的方法 81

7.1 間違う確率を最小にしたい ···························································· 81

7.1.1 誤り確率最小の判定法 82

7.1.2 事後確率の求め方 82

7.1.3 事後確率の間接的な求め方 83

7.1.4 厄介者 p(x)を消そう 83

7.1.5 事前確率 84

7.1.6 最後の難敵「尤度」 85

7.2 データの広がりを推定する ···························································· 85

7.2.1 未知データの統計的性質を予測する 85

7.2.2 最尤推定 87

7.2.3 統計的な識別 88

演習問題 91

第 8章 本当にすごいシステムができたの? 92

8.1 未知データに対する認識率の評価 ··················································· 92

8.1.1 分割学習法 92

8.1.2 交差確認法 93

8.2 システムを調整する方法 ······························································· 95

8.2.1 悪いところを探す 96

8.2.2 前処理の確認 96

8.2.3 特徴空間の評価 96

8.2.4 ハイパーパラメータの調整 100

演習問題 102

vi 目 次

第 2部 実践編——音声認識システムをつくる 103

第 9章 連続音声を認識してみよう 104

9.1 統計的音声認識手法 ···································································· 105

9.2 音響モデルの難しさ ···································································· 106

9.3 言語モデルの難しさ ···································································· 107

9.3.1 文法による記述 107

9.3.2 統計的言語モデル 108

9.4 探索の難しさ ············································································· 109

演習問題 111

第 10章 声をモデル化してみよう——音響モデルの作り方・使い方・鍛え方 112

10.1 なぜ音響「モデル」か ······························································· 112

10.2 音響モデルの作り方 ·································································· 113

10.3 音響モデルの使い方 ·································································· 118

10.3.1 HMMにおける確率計算 118

10.3.2 トレリスによる効率のよい計算 119

10.3.3 ビタビアルゴリズムによる近似計算 120

10.4 音響モデルの鍛え方 ·································································· 122

10.4.1 状態遷移系列がわかっている場合 123

10.4.2 状態遷移系列の確率がわかっている場合 123

10.4.3 Baum-Welchアルゴリズム 124

10.5 実際の音響モデル ····································································· 127

10.5.1 離散値から連続値へ 127

10.5.2 モノフォンとトライフォン 128

演習問題 129

第 11章 HTKを使って単語を認識してみよう 130

11.1 HTKの構成 ············································································ 130

11.2 音声の録音とラベル付け ···························································· 132

11.2.1 音声の録音(HSLabの場合) 132

11.2.2 音声の録音(wavesurferの場合) 132

11.2.3 正解ラベル付け 134

11.3 特徴抽出 ················································································· 136

目 次 vii

11.4 初期モデルの作成 ····································································· 137

11.5 初期値の設定 ··········································································· 140

11.6 HMMの学習 ··········································································· 141

11.7 単語認識 ················································································· 143

11.8 認識率の評価 ··········································································· 145

演習問題 147

第 12章 文法を使って音声を認識してみよう 148

12.1 文法とは ················································································· 148

12.2 正規文法と文脈自由文法 ···························································· 150

12.2.1 文脈自由文法 151

12.2.2 正規文法 152

12.3 具体的な文法の記述法 ······························································· 152

12.3.1 Julianでの文法の記述方法 152

12.3.2 標準化された文法記述 158

演習問題 162

第 13章 統計的言語モデルを作ろう 163

13.1 N-グラムで確率計算 ·································································· 164

13.2 N-グラム言語モデルを作る ························································· 165

13.2.1 N-グラムの推定 165

13.2.2 語彙の制限 165

13.2.3 バックオフスムージング 166

13.2.4 ディスカウント値の決め方 168

13.2.5 線形補間法 169

13.3 言語モデルの評価 ····································································· 170

13.4 Palmkit入門 ··········································································· 170

演習問題 177

第 14章 連続音声認識に挑戦しよう 178

14.1 音声認識における探索 ······························································· 178

14.1.1 順番に探してゆこう 179

14.1.2 ヒューリスティック探索 180

14.1.3 調べる候補を絞り込む 186

viii 目 次

14.2 ゴールまでの近さの情報 ···························································· 187

14.3 Juliusを動かす ········································································ 189

14.4 Julianを動かす ········································································ 192

14.5 認識結果の評価 ········································································ 193

14.5.1 評価用データの準備 193

14.5.2 認識実験 194

14.5.3 認識率の算出 195

演習問題 197

第 15章 会話のできるコンピュータを目指して 198

15.1 会話のできるコンピュータの要素技術 ·········································· 198

15.2 音声合成のツール ····································································· 200

15.2.1 音声合成の手順 200

15.2.2 日本語音声合成ツール Galatea talk 201

15.3 顔画像合成のツール ·································································· 203

15.4 対話制御 ················································································· 203

15.4.1 対話記述言語 VoiceXML 203

15.4.2 VoiceXMLによる擬人化エージェントの制御 204

15.5 より自然な会話のために ···························································· 207

15.5.1 話し出すタイミング 208

15.5.2 わかるということ 208

15.5.3 本当の意味は 209

演習問題 210

演習問題の解答 211

付録 A 数学的な補足 220

A.1 平均と分散 ··············································································· 220

A.2 共分散行列 ··············································································· 220

A.3 固有ベクトル ············································································ 221

A.4 正規分布 ·················································································· 222

付録 B インストールガイド 223

B.1 cygwin ····················································································· 223

B.2 wavesurfer ··············································································· 223

目 次 ix

B.3 WEKA ···················································································· 223

B.4 HTK ······················································································· 224

B.5 Palmkit ··················································································· 224

B.6 Julius/Julian ············································································ 225

B.7 Galatea ··················································································· 225

付録 C 「楽して学べるパターン認識」と「その後」 226

参考文献 228

あとがき 229

索 引 230

2

1パターン認識って何?

人間や動物が知覚できる実世界の画像・音・匂いなどの情報をパターンといいます.

パターン認識とは,このようなパターンをあらかじめ定められた複数の概念(クラス)

のうちのひとつに対応させる処理のことです.

たとえば,人間は目から画像情報を得て,見ているものが何であるかがわかります.

また,知っている人であれば誰であるかがわかります.耳から音を聞いて,自分が普

段使っている言語であれば,何をいっているのかがわかります.玄関のドアを開けた

ら,ぷーんと匂いがしてきて,「今日はカレーだ」とわかったりします.この場合は,

「キッチンからの匂い」という「パターン」を,「カレー」という「クラス」に識別し

ているのです.このような処理がパターン認識です.

一般に「パターン認識技術」というときは,この識別する主体はコンピュータです.

コンピュータに人間が行っているパターン認識を代行させて,人間は楽をしようとい

うわけです.

たとえば,昔(1970年頃)は葉書に書かれている郵便番号は,人が読み取って行き

先ごとに別々の棚に振り分けていたのです.今では手書き数字をパターン認識する機

械が,郵便番号を読み取って自動的に振り分けてくれます(図 1.1).

また,電話で航空機のチケットや電車の指定券を予約することができる音声対話シ

ステムが実用化されています(図 1.2).録音された音声案内に従って電話の数字キー

で情報を入力するシステムは以前からありました.しかし,携帯電話では電話器を耳

からいったん離して入力しなければならないことや,ガイダンスが不明確なときには

自分がしたいことに対応すると思われる数字をガイダンスが終わるまで憶えていなけ

ればならないことなどの問題点があり,あまり使い勝手のよいものではありませんで

1.1 パターン認識システムの構成 3

図 1.1 郵便物の仕分けの変遷

図 1.2 音声対話システム

した∗1.一方,音声認識に対応したシステムでは希望の日時や席種などを声によって

入力できます.また,家電製品の電話サポートなどでは,最初に製品コードを音声認

識することによって,迅速に担当部署に振り分けるシステムがあります.

この第 1章ではパターン認識システムがどのようにして作られているのかというこ

とと,そこで用いられている基本的な方法について解説します.

1.1 パターン認識システムの構成

パターン認識を行うプログラムは,認識の対象(音声・静止画像・動画像など)に

関わらず,一般に図 1.3に示すようなモジュール構成で実現します.

前処理部には,コンピュータにつないだカメラやマイクから認識対象の信号が入力

∗1「…は 1と#を,…は 2と#を,…は 3と#を,オペレータとお話になりたい場合は 8と#を,終

了する場合は 9 と#を押して下さい」というようなガイダンスです.自分の目的が案内されたメ

ニューに該当するかどうか確信がないときは,これかなと思う番号を憶えておきながらガイダンスを最後まで聞かなくてはなりません.「これまでの選択肢を全部聞きたい場合は 49と#を,何のた

めに電話をかけたか忘れてしまった場合は 50 と#を…」というジョークまであります.

4 第 1 章 パターン認識って何?

図 1.3 パターン認識システムの構成

されます.カメラやマイクなどの入力装置から入力された実世界のアナログ信号は,

サウンドボードやキャプチャボードによって,コンピュータ内部で処理可能なディジ

タル信号に変換されます.ここでは,このようなディジタル化と,後の特徴抽出処理

を容易にする処理を含めて前処理とよびます.

特徴抽出部は,前処理部の出力であるディジタル化されたデータを入力し,パター

ンの識別∗2に役立つ情報を取り出します.これは逆にいうと,パターンの識別に役に

立たない情報を捨てるということです.文字の場合では,文字の色や大きさなどは識

別には関係のない情報です.枠の真ん中に書いても端っこに書いても,また,大きく

書いても小さく書いても,黒で書いても赤で書いても,あ(こちらは画像信号です)

というパターンは「あ」(こちらは記号です)という文字です.音声の場合では,誰が

話しているのかということや声の大きさなどは,話された音声がどの文字に対応して

いるかという識別には関係のない情報です.特徴抽出処理では,このようなパターン

の変動に影響されない情報で,かつ識別に役立つ情報をいくつか,通常はベクトルの

形式で抽出します.これを特徴ベクトルといいます.

識別部では,この特徴ベクトルを識別辞書中の各クラスのお手本ベクトルと比較し

て識別結果を決めます.識別辞書中には「あ」に対応するお手本ベクトル,「い」に対

応するお手本ベクトル,…といったものが格納されていると考えて下さい.通常,特

徴ベクトル,お手本ベクトルともに実数値を要素としますから,それらがぴったり一

致することはあまりありません.なんらかの基準で「近い」ものを選ぶわけです.こ

の選ばれたお手本ベクトルの属するクラスが,認識結果として出力されます.

以下では,もう少し詳しく各モジュールの役割を説明します.

∗2本書では,あるデータがどのクラスであるかを判定する処理を「識別」とよび,実世界のパターンをクラスに対応付ける処理を「認識」とよびます.すなわち「識別」とその前の何段階かの処理を

まとめた場合を「認識」とよぶことにします.

1.3 特徴抽出とは 5

1.2 パターンの前処理

パターン認識の対象は実世界の信号です.音声は空気の疎密波であり,画像は 2次

元に広がった光の強度分布です.このような信号は連続的に変化するので,当然アナ

ログ信号です.一方,コンピュータが処理できるのはディジタル信号です.したがっ

て,パターン認識の最初の処理はアナログ信号をディジタル信号に変換することです

(図 1.4).

図 1.4 アナログ–ディジタル変換

アナログ信号はコンピュータに接続された入出力デバイスを通じて取り込みます.

音声の場合はマイクロフォンを使って空気の疎密波を電気信号に変換します.画像の

場合はカメラを使って画像素子が感知した光の強さを電気信号に変換します.

音声は取り込みのハードウェア(パソコンの場合はオーディオデバイス)の性能の

上限まで細かな情報を取り込めます.また,画像の場合はカメラの画素数の上限まで

細かい情報を取り込めます.当然,アナログ信号はできるだけ忠実にディジタル化し

た方が望ましいと考えられます.しかし,元の情報を忠実に再現しようとすればする

ほど,表現に必要なデータ量は多くなります.データ量が多くなると,これ以降の特

徴抽出処理の負担が大きくなり,認識のスピードが落ちてしまう可能性があります.

後のことを考えると,ディジタル化した信号は,認識に必要な情報は落ちていないと

いう前提で,できるだけ小さくするほうが望ましいわけです.

パターンの前処理に関しては第 2章で詳しく説明します.

1.3 特徴抽出とは

特徴抽出とは,入力されたデータからパターンの認識に役に立つ情報を取り出す処

理のことです.必然的にこの処理は,入力パターンが何であるか(画像なのか,音な

のか),どのようなクラスに分類するのか(顔,文字,単語など)によって異なります.

具体的な事例は第 3章で説明するので,ここでは一般的な考え方を述べます.

1.1節で説明したように,パターンを識別するための特徴は,そのパターンの変動に

6 第 1 章 パターン認識って何?

影響されにくい情報でなければなりません.これは何を識別対象のクラスにするかに

依存します.たとえば音声認識だと,何をしゃべっているかに関係のある特徴を,誰

がしゃべっているかということに関係なく取り出さなければいけません.しかし,話

者認識だとその逆です.誰がしゃべっているかということに関係のある特徴を,何を

しゃべっているかに関係なく取り出さないといけないのです.同じ音声を対象にして

いても,取り出すべき情報がまったく違うわけです.

また,ひとつの特徴ですべてのクラスの分類がうまくいくものはなかなかありませ

ん.たとえば,目だけを切り出した情報からそれが誰であるかを見分けるのは難しい

ものです.人間でも人の顔を見分けるときは,髪型・輪郭・肌の色などの複数の特徴

を使っていると思われます.パターンの認識に使われる特徴は,一般に以下に示すよ

うな特徴ベクトルの形式で表現されます.

x = (x1, x2, . . . , xd)t (1.1)

これは d個の特徴を表現した d次元ベクトルです∗3.この d次元空間を特徴空間と

よび,xを特徴ベクトルとよびます.この特徴ベクトルは特徴空間上の 1点になりま

す(図 1.5).

図 1.5 特徴空間と特徴ベクトル

この特徴ベクトルが特徴抽出部の出力になります.特徴抽出処理については第 3章

で詳しく説明します.

∗3ベクトル表記の肩に tとあるのは転置を意味します.特徴ベクトル xは列ベクトルで表現するのが

一般的なのですが,スペースを節約するために行ベクトルで書いて転置の記号を付けています.

1.4 識別部の役割 7

1.4 識別部の役割

パターン認識システムの最後の識別部はパターン認識処理の結果を出すところで,

非常に責任重大です.本書の第 1部でも,説明の大半はこの識別部に関するものです.

1.4.1 識別部の構成識別部は入力された特徴ベクトルがどのクラスに属するかを判別します.そのとき

に用いる情報が識別辞書です.識別辞書にどのような情報を格納するかに関しては,

さまざまな手法があります.

最も簡単な方法としては,各クラスのお手本となるベクトルを格納しておく方法が

あります.このお手本となるベクトルを以後,プロトタイプとよびます.ここで識別

したいクラスが c種類あるとして,それらをそれぞれ ω1, ω2, . . . , ωc と表します.そ

うすると,プロトタイプはそれぞれのクラスに対応してひとつずつ用意され,それぞ

れ p1, p2, . . . , pc となります(図 1.6).

図 1.6 特徴空間上のプロトタイプ

次に,識別したいデータに対応する特徴ベクトルを xとします.これは特徴抽出部

の出力です.この xがどのクラスに識別されるかを判定する際に,xと各クラスのプ

ロトタイプとの距離を測り,いちばん近いプロトタイプpiの属するクラスωiを正解と

する方法が考えられます(図 1.7).この方法を最近傍決定則(Nearest Neighbor法,

略してNN法)といいます.

この方法について,詳しくは 4.1節で解説します.

8 第 1 章 パターン認識って何?

図 1.7 最近傍決定則

1.4.2 プロトタイプの決め方それでは,プロトタイプの位置はどうやって決めればよいのでしょうか.

一般に,パターン認識では多くのサンプルからプロトタイプの位置を決めるという

方法が用いられています.

たとえば,手書き数字認識の場合ですと,何人かの人に数字を書いてもらって,そ

の特徴ベクトルとそれがどのクラスに属するかという情報(通常はクラス番号で,こ

れを正解クラスラベルとよびます)を記録しておきます.このデータを使って識別部

を賢くしてゆくので,このようなデータを学習データといいます.同じクラスに属す

る学習データは,書いた人のクセで多少ばらつきはあったとしても,(特徴抽出部がう

まく特徴を取り出せているとすれば)特徴空間上でひとかたまりになっているはずで

す.このかたまりの中から,プロトタイプとして代表的なものを各クラスにつきひと

つ選ぶものとします.

ただし,適当にかたまりの真ん中あたりを選べばよいかというと,そうではありま

せん.

2クラスの識別問題を考えてみましょう.NN法は入力された特徴ベクトルxを,近

いほうのプロトタイプが属するクラスに分類するわけですから,特徴ベクトル xが,

プロトタイプから等距離にある線または平面∗4のどちら側であるかを判定することに

なります.したがって,プロトタイプの位置を決めるということは,それぞれのクラ

ス間の境界面を決めるという問題に等しくなります.プロトタイプの位置がまずけれ

ば,図 1.8のように間違った境界面(この場合は境界線)が引かれてしまうかもしれ

ません.

∗4一般に d 次元では,2 点間の垂直 2 等分 d − 1 次元超平面になります.

92

8本当にすごいシステムができたの?

第 1部の最後として,作ったパターン認識システムを評価する方法を学びます.

これまでも何度か述べてきましたが,学習データに対してよい認識率を達成しても

しかたがないのです.ニューラルネットワークなど,多くのパラメータで非線形の決

定境界を学習する方法では,学習データに対して識別率 100%に近い値を達成するこ

とはそれほど珍しいことではありません.

しかし,そのようなシステムは学習データに過剰に適応してしまっている可能性が

高く,新しいデータに対しては誤認識を頻繁に起こしてしまうということがよくあり

ます.

ここではまず,このような未知データに対する認識率の評価法について説明します.

次に,この評価法にもとづいてシステムの性能を向上させる方法について考察します.

8.1 未知データに対する認識率の評価

8.1.1 分割学習法未知データに対する認識率を求める最も簡単な方法は,用意されたデータを学習用

データと評価用データに分割することです.学習用データを使って識別部のパラメー

タ学習を行い,評価用データで認識率を測ります.評価用データは学習に使っていな

いので,仮にこれを未知データと見なすわけです.この方法を分割学習法(図 8.1)と

いいます.

分割学習法は,普通に思いつく,ごく簡単な方法ですが,この方法には二つの欠点

があります.

ひとつ目は,学習に用いるデータが減るので,識別性能が下がってしまうという問

8.1 未知データに対する認識率の評価 93

図 8.1 分割学習法

題です.これまで紹介したどの学習アルゴリズムを用いるにしても,学習データの量

が識別性能に大きく影響します.これをわざわざ減らすというのは,評価のためとは

いえ,非常にもったいない話です.

このひとつ目の問題を避けようとして,学習データを(全体の23や

910などのよう

に)多めに取ると,こんどは二つ目の問題が生じてきます.二つ目の問題は,評価用

データが少ないと,その分布が未知データと異なる確率が高くなってしまうということ

です.評価用データの分布が未知データの分布と異なると,当然のことながらうまく

評価できません.これは第 7章で学んだ確率密度関数の推定と本質的には同じことで

す.対象とするクラスの確率密度関数が精度よく推定できるのと同規模の評価用デー

タがなければ,未知データの分布がきれいに反映されたデータ集合とはいえません.す

なわち,評価のためにも学習のためにも,それぞれに十分なデータ量が必要なのです.

通常は,使えるデータ量は限られているので,単純に 2分割するのはあまりよい方

法とはいえません.

8.1.2 交差確認法分割学習法の欠点を克服する方法として,交差確認法があります.

用意されたデータを学習用データと評価用データに分割したうえで学習を行うとい

う考え方は分割学習法と共通しています.違うのは,すべてのデータを一通り評価用

データに使うというところです(図 8.2).

交差確認法の手順は以下のようになります.

1. χをm個のグループ χ1, . . . , χm に分割する.

2. χi を除いた (m− 1)個のグループで学習し,χi を用いて誤識別率を算出する∗1.

3. この手順をすべての i(1 ≤ i ≤ m)について行い,m個の誤識別率の平均を誤識

別率の推定値とする.

∗1これまで χi はクラス ωi に属する学習データ集合を表していましたが,ここではデータを m分割

したときの i 番目という意味なので,通常 χi には,複数のクラスのデータが混じります.

94 第 8 章 本当にすごいシステムができたの?

図 8.2 交差確認法

mの値としては,10分割する方法などがよく見られます.この方法では,学習用

に多くのデータを使うことができ(10分割の場合は 10分の 9),またすべてのデータ

が一通り評価用に用いられるので,実現した学習性能の上限に近いシステムを,未知

データの分布に(できるかぎり)近づけたデータで評価できます.

とくに,要素数が 1になるように分割する方法を一つ抜き法とよびます.

分割数mが多くなるほど,よい性能評価になるのですが,問題は評価にかかる時間

です.この手順ですと最低m回学習を行わなければなりません.各学習にかかる時間

が数分程度でもmが大きくなると大変です.まして,局所最適解を避けるために,複

数の初期値でパラメータの収束条件が満たされるまで繰り返し学習するようなアルゴ

リズムだと,評価だけで数日間計算機を回し続けるということもあり得ます.

このように,交差確認法による評価は非常に時間のかかる方法です.しかし,近年

のパターン認識に関連した論文では,システムの評価にあたって分割学習法を用いて

いるものは非常に少なく,大半が交差確認法で評価を行っています.

未知データに対する評価としては,この交差確認法が現在,最もよく用いられてい

る方法です.

例題 8.1 例題 6.2において,分割数 3の交差確認法で学習結果の評価を行え.

解答例

データの読み込みまでは例題 6.2と同じ手順を繰り返します.そして,機械学習の段階で

交差確認法を指定するには,図 8.3に示すように [Test options]領域で [Cross-validation]

のラジオボタンを選択し,[Folds]の項目には分割数 3を入れます.そして,[Choose]ボ

タンから [Multilayer Perceptron]を選択し,ネットワークを表示させるために [GUI]オ

プションを [True]にしておきましょう.

8.2 システムを調整する方法 95

図 8.3 WEKA での交差確認法の選択

それから [Start]ボタンをクリックして学習を始めます.学習および評価は分割数だけ

行われます∗2.最終的な評価は,学習終了後に以下のようにコンソールに出力されます.

=== Confusion Matrix ===

a b c d e <-- classified as

2 0 0 0 1 | a = a

0 3 0 0 0 | b = i

0 0 3 0 0 | c = u

0 0 0 3 0 | d = e

1 0 0 0 2 | e = o

/a/ と /o/ でひとつずつ誤りがあります.こんなに少ないデータで学習しているので

すから,誤りがないほうが不思議です.まあまあ妥当な結果だといえそうです.

8.2 システムを調整する方法

前節では,作成したシステムを交差確認法を用いて評価する方法を説明しました.

そこで満足ゆく結果が出れば,それでよいのですが,普通はそれでは終わりません.

従来手法と比べてあまりよい結果がでなかったり,もしよい結果が出たとしても少し

やり方を変えるだけでもっとよい結果が出るかもしれません.一通りシステムを作成

し,最初の評価が出たら,一般的にはそれからシステムを調整するという作業が始ま

∗2実際には分割数+1回繰り返されます.その理由は不明です.

96 第 8 章 本当にすごいシステムができたの?

ります.

8.2.1 悪いところを探すここでは,システムの性能が悪い場合の調整法を説明しましょう.

第 1 章で説明した構成図に従ってシステムを構築している場合は,それぞれのモ

ジュールがその役割を適切に果たしているかを順に確認します.

図 8.4 パターン認識システムの調整

8.2.2 前処理の確認前処理部では,アナログ信号をディジタル化する際に,認識に必要な情報が落ちて

いないかということをチェックします.音声の場合だと,サンプリング周波数や量子

化ビット数が適切かどうかを調べます.画像の場合だと,解像度が適切かどうかを調

べます.

実際には,信号を取り込む段階での設定に問題があることも多く見られます.マイ

ク入力レベルの調整やカメラのキャリブレーション(実世界のパラメータと画像のパ

ラメータとの対応付け)が適切でないために,そもそも必要な情報が取れていない場

合もあります.

また,ノイズ除去などを行っている場合は,かえって原信号の情報を落としている

こともありえます.したがってノイズ除去処理後の複数のデータを目で見たり,耳で

聞いたりして確認する必要があります.

8.2.3 特徴空間の評価特徴抽出部では,特徴空間上で各クラスが適切に分離できているかどうかを確認し

ます.

クラス間に重なりが多いのであれば,いくら識別部が学習をしても誤識別率は減り

8.2 システムを調整する方法 97

ません.一方,クラス間の重なりが少ないのに誤識別が多いのであれば,識別部に問

題があるということになります.

2次元の特徴量であれば,平面にプロットしてその重なりを確認することができま

すが,多次元では直観的に重なりを評価することは難しくなります.そこで,なんら

かの尺度が必要です.

(1) クラス内分散・クラス間分散比

簡易な特徴空間の評価法としては,クラス内分散・クラス間分散比を求めるという

方法があります.

クラス内分散 σ2W とは,各クラスでデータの分散を計算し,それを全クラスについ

てたし合わせたものです.この値が小さければ小さいほど,データがまとまっている

といえるので,よい特徴だということができます.

クラス間分散 σ2B とは,クラスの平均ベクトルの分散です.こちらは大きければ大

きいほど,クラスの中心どうしが離れていることになるので,識別境界が引きやすい

特徴だということができます.

これら二つを総合した,以下の式で表されるクラス内分散・クラス間分散比 Jσ は大

きければ大きいほど,よい特徴空間だということができます.

σ2W =

1n

c∑i=1

∑x∈χi

(x − mi)t(x − mi) (8.1)

σ2B =

1n

c∑i=1

ni(mi − m)t(mi − m) (8.2)

Jσ =σ2

B

σ2W

(8.3)

ただし,nは全データ数,ni はクラス ωi のデータ数,mは全データの平均ベクト

ル,mi はクラス ωi の平均ベクトルを表します.

このクラス内分散・クラス間分散比という尺度は簡単に求められるという利点はあ

るのですが,問題点が二つあります.

ひとつ目の問題は,3クラス以上の場合,特定のクラスどうしの重なりがあっても,

そのクラス対が他のクラスから離れているようなケースではクラス内分散・クラス間

分散比が大きくなってしまうということです.つまり,多クラスの場合ではクラス間

の重なりがうまく評価できていないということです.

二つ目の問題は,この尺度では,ある特徴空間が他の特徴空間に比べて相対的によ

いということがいえるだけで,要求される識別性能を発揮するかどうかは,識別部を

実現してから評価しなければわからないということです.

98 第 8 章 本当にすごいシステムができたの?

(2) ベイズ誤り確率

これらの問題を克服するためには,クラス間の重なりを評価でき,またその評価値

がなんらかの形でパターン認識器の性能を示すものであればよいわけです.

そのような要求を満たす評価尺度として,ベイズ誤り確率があります.

まず,1次元の特徴量で考えましょう.これまでに出てきた身長を入力として男女

を識別するような場合を思い浮かべてください.たとえば 165 cmという入力が得ら

れた場合,男の場合も女の場合もありえるので,この特徴空間ではクラスの分布,す

わなち確率密度関数に重なりがあることになります(図 8.5).

図 8.5 確率密度関数の重なり(図 7.1 再掲)

この確率密度関数が得られた上で,ベイズ判定規則を用いると,165 cm という入

力に対しては,P (ω男|165), P (ω女|165)のいずれが大きいかを求めることになります.

ベイズの定理を用い,かつ P (ω男) = P (ω女) = 0.5を仮定すると,

p(165|ω男) > p(165|ω女) (8.4)

なので,判定は男になります.

この場合,判定が誤っている確率は 1 − P (ω男|165) = P (ω女|165)ということにな

ります.

逆に,女と判定される特徴量 x(たとえば 145 cm)が入力されたときは,その判定

が誤っている確率は P (ω男|145)となります.

したがって,一般に 2クラス {ω1, ω2}の識別問題において,特徴量 xが与えられた

とき,ベイズ判定規則が誤る確率 eB(x)は,

eB(x) = min{P (ω1|x), P (ω2|x)} (8.5)

となります.

これをすべての xに関して積分したものがベイズ誤り確率 eB になります.ただし,

xの分布は一様ではない∗3ので,その出現確率 p(x)がかけられています.

∗3 xのすべての値が等確率で出現するわけではないということです.160 cmや 170 cmは頻繁に観測

されるでしょうが,230 cm はそうめったには観測されません.

178

14連続音声認識に挑戦しよう

ここまでで,音声認識の基本的な原理と,音響モデル・言語モデルそれぞれの確率

の計算法を学びました.しかし,まだ探索の問題が残っていました.

日本語の書き取りシステム(ディクテーションシステム)では,調べるべきwは日

本語文として妥当なものすべてになります.これを数え上げることは不可能だという

ことは,第 9章でも示しました.では,単語を数百語程度に限った音声対話システム

ではどうでしょう.このシステムに出現する名詞が 10種類程度のカテゴリー(日付・

場所名・個数など)に分けられるとします.各カテゴリーは平均 20単語程度,1文が

平均 4文節,文節は名詞と助詞の組み合わせあるいは動詞単独からなるとして,カテ

ゴリーの組み合わせだけでも 10C4×204= 33,600,000通りです.可能な組み合わせは

この中の 10 %程度だとしても,約 300万通りです.これだけのwに対して,P (x|w)

をビタビアルゴリズムで,また P (w)を N-グラムの表を引きながら計算していては,

とてもリアルタイムに応答を返せるシステムはできそうにありません.

さて,どうしましょう.

14.1 音声認識における探索

とても全部はあたりきれないけれど,答えがありそうな方向に向かって探してゆけ

ば,きっと答えは見つかる.そんな人間の知恵をコンピュータで実現したものが「探

索」です.「探索」は人工知能研究の輝かしい成果です.音声認識でもこの探索手法を

取り入れて,答えに近そうなwを効率よく求める方法が提案されています.

14.1 音声認識における探索 179

14.1.1 順番に探してゆこう人工知能分野における探索では,まず状態空間というものを考えます.迷路を抜け

る場合で考えると,入り口が初期状態,出口が目標状態(答えです),分岐点が中間的

な状態ということになります.一般に,分岐点ではいくつかの選択肢があります(まっ

すぐ行こうか,それとも右へ曲がろうか...).この分岐点での振る舞いで探索方法が分

類できます.

(1) 縦型探索

ここである選択肢を選び,分岐点に差し掛かるごとに後戻りせずに進んでゆきゴー

ルを目指す方法を縦型探索とよびます.もし,ゴールにたどり着かずに行き止まりに

なったら,最も最近の分岐点まで戻り,別の選択肢を選んで突き進んでゆきます.

このような状況を音声認識に置き換えます.入力音声の最初の部分からHMMのト

レリス探索を行って,いくつかの単語が先頭単語として候補に挙がったとします.こ

こから最もスコアの高い単語を選択し,その終端から接続可能な単語を調べて,同様

に最もスコアの高い単語を接続してゆきます(図 14.1).

図 14.1 縦型探索

この探索は,最後の単語の終端が音声区間の終端と一致すればゴールです.もし一

致しなければ(つまりゴールにたどり着かずに行き止まりになったら),ひとつ前の単

語候補に戻って次にスコアの高い単語を接続します.

この縦型探索によって得られた解は最もスコアの高い解,すなわち最適解であるこ

とは保証されません.迷路を抜けるときにいきあたりばったりにずんずん進んで行っ

て,たまたまゴールについたからといって,それが最短経路であったとはいえないと

いうのと同じ理屈です.ある分岐点で選ばなかった選択肢の向こう側に,ゴールまで

一直線の近道が付いているかもしれません.

180 第 14 章 連続音声認識に挑戦しよう

(2) 横型探索

一方,慎重な方法としては,最初の分岐点で可能な選択肢をひとつ選んで次の分岐

点まで進み,そこがゴールでなかったら最初の分岐点まで戻り,次の選択肢を選んで

同様にひとつ先の分岐点がゴールかどうかを確かめる方法があります.最初の分岐点

でどの選択肢を選んでも次の分岐点がゴールでないことがわかったら,そこではじめ

てひとつ先の分岐点まで進んで同じようにすべての選択肢を吟味します.このような

方法を横型探索とよびます.

音声認識にこの横型探索を適用したときのイメージを図 14.2に示します.

図 14.2 横型探索

一般に,縦型探索は使用するメモリ量が少なくて済みますが,最適解を見つける可

能性は低くなります.横型探索はその逆で,場合によっては膨大なメモリ量が必要で

すが,必ず最適解を見つけることができます.

14.1.2 ヒューリスティック探索一般的には,最適解は横型探索によってすべての系列のスコアを計算しなければわ

かりません.しかし,連続音声認識ではすべての系列というものを数え上げることが

できません.そこで,すべてを探すことは不可能というときに,取りえる方法は二つ

あります.

1. 探索の分岐点でどの選択肢が最適解に近そうかという情報を利用する.

2. 探索候補とする仮説の数を絞り,中間スコアの低い系列の探索を打ち切る.

これらの手法は併用できます.

14.1 音声認識における探索 181

まず,1.のゴールまでの近さの情報を利用する方法から見てゆきましょう.この情

報をヒューリスティックスとよび,ヒューリスティックスを利用した探索をヒューリ

スティック探索とよびます.ただし,ヒューリスティックスは 100%正しい情報では

ありません.いくつかの証拠から見積もるわけです.迷路の例でいうと,ゴールには

赤い旗が高く立っていて,それぞれの分岐点ではどっちに行けば出口に近そうかとい

う見当がつくものとします.近くまで着いたと思ったら行き止まりということもある

ので,この情報は必ずしも正しいというわけではないのです.音声認識の問題におい

て,この最適解への近さの情報をどうやって手に入れるかは次節で説明するので,こ

こではこのゴールまでの近さの情報を利用して探索を行う方法を考えてゆきましょう.

(1) 山登り法

まず,単純な方法としては,それぞれの分岐点ではもっともゴールに近いと思われる

道を選択し,行き止まりになるまで後戻りはしないという方法が考えられます.行き止

まりになってしまったら,まだ探していない道のあるもっとも近い分岐点まで戻って,

そこからやっぱりひたすら後戻りせずに進みます.この方法を山登り法といいます.

縦型探索では単語のスコアの高いものを選択しましたが,山登り法ではヒューリス

ティック値,すなわちゴールまでの近さの見積もり値を基準に経路を選択します.

この山登り法を実現するためには,これまでの分岐点を,通った順にすべて記憶し

ておく必要があります.もし,行き止まりになったときはひとつ前の分岐点に戻らな

ければならないからです.その分岐点からの選択肢がすべて行き止まりであった場合

は,さらにひとつ前の分岐点に戻ります.このような過去の分岐点の情報を保持する

のにはスタックとよばれるデータ構造が適しています.

スタックとは棚のことです.棚に荷物を積むときは,古いものの上に新しいものを

積みます.荷物を出すときは,上にある新しいものから順番に出すことになります.

図 14.3 スタックの構造

182 第 14 章 連続音声認識に挑戦しよう

この荷物を情報に置き換えたものがスタックです(図 14.3).スタックでは新しい情

報を保持することをプッシュといい,情報を読み出すことをポップといいます.ポッ

プされた情報はスタックから消えてしまいます.

このスタックを使った山登り法の探索手順を以下に示します.この中では,分岐点

のことをノード(節という意味です)とよびます.また,あるノードX のゴールまで

の距離を評価する関数を h(X)とします.h(X)が小さいほど,ゴールに近い可能性

が高いとします.

• 山登り法のアルゴリズム •1© 探索を始めるノードをスタックにプッシュ.2© if スタックが空 then 探索失敗.実行を終了.

else

(a) スタックのいちばん上のノードをポップし,N とする.(b) if N がゴール then 探索成功.実行を終了.

else

i. N からリンク可能なすべての子ノードを求め,各子ノード X につ

いて h(X)の小さい順に並べ替えてからスタックにプッシュ.ii. ステップ 2©へ

山登り法のイメージを図 14.4に示します.枝についているスコアがその先のノード

を選んだときの h(X)を表します.

山登り法は,ゴールにたどり着いたとしても,それが最短経路かどうかはわかりま

せん.どこかの分岐点で h(X)の見積もりが間違っていて,別の道に最短経路があっ

たかもしれないからです.

(2) 最良優先探索

最適解を見つける可能性がより高い方法として,最良優先探索があります.

最良優先探索は,すごく記憶のよい人がいて,すべての分岐点での情景を憶えてい

るような状況に例えることができます.ある分岐点で選択できるどの道よりも,過去

のある分岐点で選ばなかったある道がゴールに近そうだということを思い出すと,そ

の分岐点に戻って探索を再開します.

最良優先探索法の探索手順は以下のようになります.

14.1 音声認識における探索 183

図 14.4 山登り法による探索

• 最良優先探索法のアルゴリズム •1© 探索を始めるノードをスタックにプッシュ.2© if スタックが空 then 探索失敗.実行を終了.

else

(a) スタックのいちばん上のノードをポップし,N とする.(b) if N がゴール then 探索成功.実行を終了.

else

i. N からリンク可能なすべての子ノードを求め,スタックにプッシュ.ii. スタック中の全ノードX について h(X)の小さい順に並べ替える.iii. ステップ 2©へ

最良優先探索法のイメージを図 14.5に示します.

山登り法との違いは,スタック中の全ノードを並べ替えの対象とするところです.

山登り法がゴールに近いと思われる方向に行き止まりになるまでずんずん進んで行く

方法(縦型探索です)に近いのに対して,最良優先探索法はすべての可能性を検討し,

さらに一歩進んだ後でもそのすべての可能性を検討するといった横型探索に近い方法

です.

しかし,この方法でも最適解が見つかることは保障できません.もし,あるノード

の先に最短のゴールがあったとしても,そのノードのヒューリスティック値が大きす

230

索 引

数字・欧文

2 パス探索 188

A∗ 探索 184

ARFF 66

Baum-Welch アルゴリズム

141

BNF 記法 151

FACS 203

Forward-Backward アルゴリズム 127

forwardアルゴリズム 120

FSM 203

Galatea talk 201

Galateaツールキット 199

HMM 117

HTK 130

Julian 152

Julius 189

k-NN 法 51

MFCC 23

N-グラム言語モデル 164

NN 法 7, 8, 35, 41, 89

Palmkit 170

SRGS 158

SVM 63, 70

VoiceXML 158, 200, 203

WEKA 66

Widrow-Hoffの学習規則

57, 58

XISL 200

あ 行

アナログ信号 4, 5

オートマトン 114

重み 55

重み空間 44

重みベクトル 42

音響モデル 105, 113

音声合成 198, 200

音声波 21

か 行

カーネル関数 70

カーネルトリック 71

解領域 45

ガウシアンカーネル関数

71

過学習 78, 101

学習 40

学習係数 45, 46, 55

学習データ 8, 40, 42

確率密度関数 85

隠れマルコフモデル 117

カラー画像 13

木構造 151

キャリブレーション 96

境界面 8

教師信号 54

教師ベクトル 54

共振周波数 21, 22

共分散行列 32, 86

局所最適解 77

グッド・チューリング法

168

区分的線形 48

区分的線形識別面 48

クラス 2

クラス内分散・クラス間分散

比 97

形態素解析 200

決定境界 37

ケフレンシー 23

言語モデル 106, 163

語彙の制限 165

交差確認法 93, 100

コーパス 108

誤差 53–55, 75

誤差逆伝播法 74

さ 行

最急降下法 55

索 引 231

最近傍決定則 7

最適解 179

最尤推定 87

最良優先探索 182

サポートベクトル 63

サポートベクトルマシン

63

閾値関数 58

閾値論理ユニット 72

識別関数 41

識別辞書 4, 7

識別部 4, 7, 35

識別面 37

識別率 62

シグモイド関数 76

事後確率 82

事前確率 85

終端記号 149

主成分分析 31

出力層 72

スペクトル 16, 21

スペクトルサブトラクション

法 17

スムージング 165, 173

正解クラスラベル 8

正解ラベル 30

正規分布 86

正規文法 152

絶対法 168

線形分離可能 37, 45, 46,

61

線形分離不可能 61

線形法 168

線形補間法 169

た 行

ダイナミックレンジ 15

対話記述言語 199

多項式カーネル関数 71

縦型探索 179

単語辞書 149

単語頻度リスト 171

探索 110, 178

中間層 72

調音結合 129

超平面の容量 28

ディジタル信号 4, 5

ディジタル化 12

ディスカウント値 166

テストセット 170

統計的言語モデル 109,

163

特徴空間 6

特徴抽出 5, 19

特徴抽出部 4

特徴ベクトル 4, 6

トップダウンパージング

152

トライフォン 129

トレリス 120

な 行

ニューラルネットワーク72

入力層 72

ノイズ 16

ノイズ除去 96

濃淡画像 13

ノンパラメトリックな方法

87

は 行

パーセプトロン 42

パーセプトロンの学習規則

46, 58, 61

パーセプトロンの収束定理46, 59

パープレキシティ 170,

175

ハイパーパラメータ 101

パターン認識 2

バックオフスムージング166

バックオフ値 173

パラメータ 100

パラメトリックな方法 87

非終端記号 149

非線形識別面 73

非線形写像 70

非線形変換 70

ビタビアルゴリズム 121

ビットレート 15

一つ抜き法 94

ヒューリスティックス 181

ヒューリスティック探索181, 188

標本化 13

標本化数 13

標本化定理 14

フィードフォワード型 72

フーリエ級数展開 21

フーリエ変換 21

フォルマント 22

副次識別関数 49

プロトタイプ 7, 35, 36

分割学習法 92

文法 148

文脈自由文法 151

平均ベクトル 86

ベイズ誤り確率 98

ベイズの定理 83

ベイズ判定法 82

ベースライン 52

ボトムアップパージング

152

ま 行

マージン 63

232 索 引

前処理 5

前処理部 3

未知語 166

無音区間 153

メルケプストラム 23

モノフォン 129

や 行

山登り法 181

尤度 85

横型探索 180

ら 行

量子化 13

量子化数 13

連続音声認識 105

著 者 略 歴

荒木 雅弘(あらき・まさひろ)1993年 京都大学大学院工学研究科情報工学専攻

博士後期課程研究指導認定退学同 年 京都大学工学部助手1997年 京都大学総合情報メディアセンター講師1998年 博士号(工学)取得(京都大学)1999年 京都工芸繊維大学工芸学部助教授2007年 京都工芸繊維大学大学院工芸科学研究科准教授

現在に至る

フリーソフトでつくる音声認識システム C© 荒木雅弘 2007

2007 年 10 月 10 日 第 1 版第 1 刷発行 【本書の無断転載を禁ず】2013 年 2 月 10 日 第 1 版第 7 刷発行

著 者 荒木雅弘発 行 者 森北博巳発 行 所 森北出版株式会社

東京都千代田区富士見 1–4–11(〒102–0071)電話 03–3265–8341/ FAX 03–3264–8709

http://www.morikita.co.jp/

日本書籍出版協会・自然科学書協会・工学書協会 会員<(社)出版者著作権管理機構 委託出版物>

落丁・乱丁本はお取替えいたします 

印刷/モリモト印刷・製本/ブックアート組版/ウルス

Printed in Japan/ISBN978–4–627–84711–8