このファイルは、3年春学期科目「音声情報処理」の授業において、口頭で説明する内容をテキスト(.txt)に書き起こしたものです。 事前に科目のHPにアクセスして「講義ノート」の PDF ファイルをダウンロードし、印刷しておいてください。このテキストには講義ノートの記述より多くの情報を含んでいます。講義ノートの行間に、テキストの説明を書きこんで行くことをお勧めします。最後にプリントを綴じれば、将来必要になったときに見返せる自分の「講義ノート」ができあがります。 「学生用ページ」「レポート提出システム」 から、その日の「宿題」レポートを提出してください。 〆切は 次回授業日の前日 23:59 です。 _/_/_/ 第九回 音声認識(2) _/_/_/ 【講義ノート】音声認識システムの構成 (2) 再掲 「分析処理」「音声区間検出」の話の続きです。今日は「分析処理」の中の「特徴抽出」の話をします。 【講義ノート】技術各論>特徴抽出 この科目の前半で、音声の生成機構の話をしました。思い出しながら聞いてください。 人間は、発声器官である「舌」と「顎」の位置を調整して、いろいろな形状の声道を作り出します。 声道の形状によって、共振特性が変わり、スペクトルが変わり、音色の違いを作り出します。 ・声道の形状  ⇒ 共振特性(音色)の違い  ⇒ スペクトル形状の違い 空気の圧力の波として空間に放射された音声は、標本周期ごとにマイクによって電気信号に変換され、時間の関数である「音声波形」に変換されます。しかし、この時間波形はあまり音声認識のための特徴量としてはよい特性を持っていません。 ・音声(時間波形)  ⇒ 一定時間幅の周波数分析  ⇒ スペクトル時系列 そこで、この時間波形を、各時刻、一定時間 30ms くらいの長さ(時間窓といいます)を取り出して、周波数分析、スペクトル計算を行うわけです。 時刻を 10ms くらいずつ、ずらしながら(フレームといいます)、連続して分析を続けると、スペクトルの時系列ができます。 【講義ノート】技術各論>特徴抽出 (2) ・時間窓をシフトしながらスペクトル分析 時間窓をシフトしながらスペクトル分析を行うようすを図に示しています。 図中の音声波形に、ある長さの時間窓をかけ、そこでスペクトル分析を行います。分析の時間窓を一定時間ずつシフトし、次々とスペクトルを計算していきます。 吹き出しに「スペクトル分析の時間窓」とメモしておきましょう。 【講義ノート】技術各論>特徴抽出 (3) 音声認識に用いられる特徴量を列挙してみました。 ケプストラム係数、線形予測係数、MFCC、区間パワー、デルタ特徴量。 ・音声認識に用いられる特徴量  - ケプストラム係数  - 線形予測係数  - MFCC  - 区間パワー  - デルタ特徴量 ケプストラム係数と線形予測係数は前に詳しく勉強しました。スペクトルを表現する特徴量です。 「MFCC」もまた、強力なスペクトル特徴量です。いや強力どころか、現在商品化あるいは研究されている、ほどんどの音声認識システムで使われています。定番の特徴量です。後で詳しく述べましょう。 区間パワーはもう知ってますね。音声区間検出のところで出てきました。声の大きさを表現する特徴帳です。 デルタ特徴量というのは、単独で意味のある特徴量ではなく、これまで出てきた特徴量の時間差分として計算される特徴量です。これによって、特徴量の動的変化を定量化する特徴量を得ることができます。 デルタ特徴量は既存特徴量の隣接フレーム間の差を取るだけで計算でき、また有効性も高いので、定番特徴量としてよく使われています。 【講義ノート】技術各論>特徴抽出 (4) 音声認識における定番特徴量、「MFCC」の説明をします。 ・MFCC (Mel-Frequency Cepstrum Coefficients)  - メル尺度(音の高低の間隔尺度)のフィルタバンク   に基づいて、スペクトルを L 次元に圧縮 まずメルというのは何でしょうか?  人間の聴覚機構において、周波数軸は線形ではありません。例えば音楽で「ラ」の音が 440Hz として、その一オクターブ上の「ラ」は 880Hz になります。差は 880-440=440 Hz さらに一オクターブ上の「ラ」は 1760Hz です。差は 1760-880=880 Hz で一定になりませんね。 同じ音の高さの違いが、周波数の差と一致しません。線形ではないというのはそういうことです。実は対数に近いのですが、いろいろな研究の結果、厳密な対数ではないことも分かっています。 この人間の聴覚における音の高さ知覚の尺度を「メル尺度」といいます。 MFCC を計算する第一歩は、スペクトルの横軸すなわち「周波数」軸上に、音の高低の間隔尺度に合わせて幅を調整した、L 種類の三角形の重み窓を設定します。 一つの三角窓について、スペクトルのある周波数の範囲のみを、重み付き二乗加算して通過させます。ある周波数を通し、それ以外の周波数を通さないような仕掛けを何というのでしたでしょうか?「フィルタ」というのでしたね。 これらの三角窓は、ある周波数帯域(band)を通過させるので「BPF」(Band Pass Filter) と呼びます。また、フィルタを複数集めたものを「フィルタバンク」と呼びます。 フーリエ変換によるスペクトルの次元数は、例えば 512 とか 1024 とか大きな値になることが多いのですが、今説明したフィルタバンクを用いることによって、スペクトルの次元数を、バンク中のフィルタ数 L に圧縮することができます。 ここまでをまとめると、MFCC を計算する第一歩は、メル尺度(音の高低の間隔尺度)のフィルタバンクに基づいて、入力音声のスペクトルを L 次元に圧縮します。 【講義ノート】技術各論>特徴抽出 (5) ・MFCC (Mel-Frequency Cepstrum Coefficients)  - フィルタバンクで L 次元に圧縮されたスペクトルを   離散コサイン変換 (DCT) する MFCC を計算する次の処理は、離散コサイン変換(DCT)による情報圧縮です。 フィルタバンクで L 次元に圧縮されたスペクトルを、離散コサイン変換(DCT : Discrete Cosine Transformation) によってさらに圧縮します。 mfcc(i) = ... 離散コサイン変換というのは、離散フーリエ変換の一種で、情報圧縮率が高いといわれています。フーリエ変換の基底である複素指数関数の代わりに余弦関数を用いる違いがありますが、ここでは、フーリエ変換と似た働きをすると、大雑把に思っておきましょう。 さて、L 次元フィルタバンク出力 m(l) は、重み付き二乗加算によって、パワースペクトル的な量になっています。上記の計算式は m(l) の対数をとって、DCT を行うことで、 MFCC を計算しています。 「パワースペクトルの対数のフーリエ変換」ってどっかで聞いたことありませんか? そうですね。ケプストラムですね。だから、このスペクトル特徴量を、 「MFCC」(Mel-Frequency Cepstrum Coefficients) というんです。 音声認識の定番特徴量「MFCC」のお話しでした。 【講義ノート】音声認識システムの構成 (3) 次は「音響モデル」の話をします。 左から入力音声が入ってきます。AD変換され、区間検出され、分析処理によって求められた、特徴量の時系列が「探索処理」に送られます。さて音声認識システムは、この入力音声の特徴時系列と、照合し類似度を計算するために、過去に学習した典型的な音声パターンを記憶しています。 この照合用の音声パターンは結構複雑に構造化されています。これを「音響モデル」といいます。 どのような音声単位を記憶しておけばよいのでしょう。単語でしょうか、音素でしょうか。また、音響モデルは特定の話者の音声から学習するのでしょうか。それとも多数の話者の音声から学習するのでしょうか。 緑の吹き出しに「照合用音声パターン・単語単位・音素単位・多数の話者から」とメモしておいてください。 【講義ノート】技術各論>音響モデル ・入力された音声と照合(類似度計算)する基本単位 ・「音素」を音響モデルの単位にするのが一般的   ⇒ 任意語彙の合成が可能 ・調音結合の考慮(トライフォンなど) 音響モデルは、入力された音声と照合(類似度計算)する基本単位になります。 電話番号認識などの特定の用途においては、「数字」など単語を音響モデルの単位にすることもあります。しかし、全ての単語を学習・記憶する手間がたいへんなので、大語彙を認識対象とするシステムには向いていません。 一般的には「音素」または「音節」を音響モデルの単位にします。「音素」は前に勉強しましたね。日本語をローマ字で書くときのアルファベットに似た単位です。「音節」は、あいうえおかきくけこ…、50音というやつですね。濁音半濁音いれるともっと多い。 「音素」または「音節」を音響モデルの単位に選べば、音声認識の対象にしたい単語を「よみ」に従って音素・音節を組み合わせ、任意語彙の「単語辞書」を合成することができます。 もう一つ、音響モデルの単位として「トライフォン」がよく用いられます。トライフォンとは「3つの音素」くらいの意味で、音素の種類に加え前後の音素の種類を考慮に入れることで、ある音素の音響的特徴が前後の音声の影響を受ける「調音結合」に対処し、精度の良い音声認識を行うことができます。 【講義ノート】技術各論>音響モデル (2) 音響モデルは、入力された音声と照合する基本単位。「音素」「音節」「トライフォン」 に対して音響モデルを作成・記憶していけばよい。 いやあ、そんな簡単じゃない。音素の音響的性質は、人によって変わるし、声の高さで変わるし、前後の音素の種類で変わるし。何か一つの典型的特徴を記憶しておくだけでは、これらのバリエーションに対応できません。 1989 頃、日本と米国の研究機関がほぼ同時に、音素を単位とした隠れマルコフモデル(HMM) による音声認識手法を提案しました。確率モデルによって、音素の音響的変動を吸収し、その組み合わせで単語や文章を認識する技術です。 音声の特徴量を確率的に表現し、統計的手法によって音響モデルを学習形成する。これによって、発話者や発声状況の違いによる音声スペクトルの時間的・周波数的ゆらぎを吸収します。 音素ベース隠れマルコフモデル (HMM, Hidden Markov Model) の登場は、音声認識研究・開発の歴史において、大きな変化点を作り出しました。それまで実験室内で、せいぜい 70〜80% 程度と思われていた認識精度が、100% 近くまで跳ね上がったのです。 ・統計的音響モデル  - 音声の特徴量を確率的に表現  - 発話者や発声状況の違いによる音声スペクトルの   時間的・周波数的ゆらぎを確率モデルによって吸収  ⇒ 隠れマルコフモデル(HMM, Hidden Markov Model) 【講義ノート】技術各論>音響モデル (3) HMM=隠れマルコフモデルは、確率過程モデルの一つである「マルコフ連鎖」の一種です。 このモデルにはいくつかの状態があり、時間の進行に沿って状態から状態へ「現在の状態」が遷移していきます。 「/p a/」という発声を考えてみましょう。 まず口唇が閉じられ、無音状態が作られます。次に口唇にて破裂が起こり、雑音的なスペクトルが観測されます。続いて後続母音の影響が重なってきて、最後に定常的な「/a/」のスペクトルになります。 このように音素の発声には、いくつかのイベントが時間的に順序を保持しながら、連なっていきます。マルコフ連鎖は状態遷移で、音素の時間構造を表現できるのです。 左側の緑の吹き出しに「状態遷移で音素の時間構造を表現」とメモしましょう。 各状態には、音素を構成するイベントに対応して、異なる特徴分布が与えられます。例えば、状態1は口唇閉鎖中の「無音」、状態2は破裂後の「雑音的スペクトル」、状態3は「母音への渡り」といった感じです。ただしこれらの対応を、設計者が明示的に指定するのではなく、学習によって自動的に形成されます。 右側のピンクの吹き出しに「状態ごとに異なる特徴量分布を持つ」とメモしましょう。 【講義ノート】技術各論>音響モデル (4) HMM は次に述べるような、数学的な構成要素からなっています。 ・HMMの構成要素  - 状態集合 HMM は複数の状態から構成されています。これを状態の集合  ={S_i} で表します。  - 遷移確率 HMM はどの状態からどの状態へどんな確率で遷移が起こりうるかをパラメータとして持っています。状態 i から状態 j への遷移確率を「a_ij」で表します。遷移確率を行列に並べたものが遷移確率行列  A={a_ij} です。  - 出力確率 音声特徴(ベクトル) o を出力する確率を与える関数を状態 i ごとに設定します。関数の集合です。  B={b_i(o)} 具体例を次ページで述べます。 【講義ノート】技術各論>音響モデル (5) ・出力確率 bi (o) の計算(一例) これは、出力確率 b_i(o) の計算例です。 確率密度関数として正規分布を仮定しています。特徴 o の実現値を x とします。対数をとって計算しやすくしています。 緑の吹き出しに「確率密度関数として正規分布を仮定」とメモしましょう。 これは最もシンプルなもので、実際には複数の正規分布の和である「混合正規分布」や、多次元化した「多次元正規分布」などがよく用いられています。 【講義ノート】技術各論>音響モデル (6) HMM=隠れマルコフモデルを構成する多数のパラメータ、遷移確率行列「A」や、関数の集合「B」をどのように与えたらよいのでしょうか。 統計的手法によって音響モデルを学習形成するために、音素ごとに「音声特徴の時系列」を大量に収集する必要があります。 話者による変動を確率モデルで吸収するためには、多数の話者の発声データが欲しいところです。声の大きさや高さよる変動を確率モデルで吸収するためには、大きい声、小さい声、高い声、低い声、いろんなバリエーションの音声が欲しい。さらに、前後の音素の種類(調音結合)による変動を扱うには、いろいろな音素文脈の発話が欲しい。 統計的手法は、音声認識に素晴らしい性能向上をもたらしましたが、その代償として、音声データ収集のコストが、跳ね上がったともいえるでしょう。 さて、集まったデータを用いて、統計的な手法を用いて、HMM のパラメータ (A, B) を学習形成します。このために用いられる計算手順が、「Baum-Welch のアルゴリズム」として知られるものです。これを用いて、集めた時系列(の集合)を高い確率で出力するように、その音素のHMMを学習することができます。 このアルゴリズムは難しいので、この授業中には詳しく説明しません。ここでは「Baum-Welch のアルゴリズム」という名前を忘れないようにしましょう。いつか仕事に必要になったら、この名前で検索してください。 ・HMMの学習(A, B の決定)  - 音素ごとに「音声特徴の時系列」を大量に収集  - 「Baum-Welch のアルゴリズム」を用いて、集めた    時系列(の集合)を高い確率で出力するように、    その音素のHMMを学習する 【講義ノート】技術各論>音響モデル (7) さて、音響モデルの話の最後に、もう一つのアルゴリズムの名前を憶えておきましょう。 HMM を用いて音声認識を行う際には、いろいろな音素 HMM の連接について、認識したい音声の「音声特徴時系列」が、どんな確率で出力されるかを計算する必要があります。この確率を類似度として使うわけです。 HMM の学習ではなく、HMM を使って音声認識を行う際に、確率が最も大きくなる HMM の連接を見つける高速の計算方法があります。それば「Viterbi アルゴリズム」による高速近似計算として知られています。 ここも名前だけ忘れないようにしましょう。認識時に使う「Viterbi アルゴリズム」です。 ・HMMによる音声認識  - いろいろなHMMの連接について、認識したい音声の   「音声特徴時系列」が、どんな確率で出力されるかを計算  - 確率が最も大きくなるHMMの連接に対応する音素の並び   を認識結果とする  - 「Viterbi アルゴリズム」による高速近似計算 --