このファイルは、3年春学期科目「音声情報処理」の授業において、口頭で説明する内容をテキスト(.txt)に書き起こしたものです。 事前に科目のHPにアクセスして「講義ノート」の PDF ファイルをダウンロードし、印刷しておいてください。このテキストには講義ノートの記述より多くの情報を含んでいます。講義ノートの行間に、テキストの説明を書きこんで行くことをお勧めします。最後にプリントを綴じれば、将来必要になったときに見返せる自分の「講義ノート」ができあがります。 「学生用ページ」「レポート提出システム」 から、その日の「宿題」レポートを提出してください。 〆切は 次回授業日の前日 23:59 です。 _/_/_/ 第八回 音声認識(1) _/_/_/ これまで「音声情報処理」の基礎編として、音声生成の機構から話を初めて、信号処理を用いたスペクトル分析、ピッチ分析の話をしてきました。本日からは応用編として「音声認識」の話題を取り上げていきます。 【講義ノート】音声認識とは ・コンピュータが人間の音声を聞いて、何と言ったか判定する技術 音声認識というのは、コンピュータが人間の音声を聞いて、何と言ったか判定する技術です。コンピュータに耳を与える技術、といってよろしいんじゃないかと思います。 例えばこの図にあるように、人間がコンピュータに向けて「第一会議室を予約してください」と話しかけたとします。 コンピュータが自分に何を話しかけられたのか聞き取ることができなければ、例えば「第一会議室を予約ですか?」と反応することができませんね。 人間の音声を聞いて何と言ったか判定する技術、それが音声認識です。 【講義ノート】音声認識の枠組み さてそれでは、音声認識の技術的な仕組みをお話ししていくんですが、まずは音声認識における3つの枠組みについてお話しします。 初めにお話しする枠組みは「単語認識」と呼ばれるものです。 この枠組みにおいては、人間はコンピュータに向かって何か「単語」を発声します。 例えば単語を色の名前だとすると、「あか」とか「あお」とか発声するわけです。 単語認識の枠組みにおいては、システムの中に「単語辞書」というものが用意されています。辞書というとですね。国語辞書とか、英和辞書とか、思い浮かべますが、全く違うものです。 共通点といえば「赤(あか)」とか「青(あお)」といった単語が見出し語として並んでいるところでしょうか? ただそこに意味が書いてあるんじゃなくて、典型的な「赤(あか)」「青(あお)」「黄(きいろ)」の音声についての情報が記憶されています。 システムは人間の発声した音声と、この記憶しているいろいろな色名の音声との類似度を計算して、最も類似度の高かった単語を「認識結果」として選択するんですね。 どうですか、音声認識の仕掛けがちょっと見えてきましたか。 一つ大事なことがあります。今、このような「既に知っている音声の中から入力音声と一番近いものを選ぶ」仕掛けになっているので、単語辞書に入ってない単語、知らない単語が入力されると、それと各単語辞書項目との類似度を計算して、何が何でもどれかを認識結果として出してきます。 例えば「みどり」と言ったとすると、あるものの中から探して無理やり「きいろ」と出力したりするわけです。これは「単語辞書中から類似度の大きいものを選ぶ」ことを実行しているだけでわけで、原理通りなのですが、人間の直感とは反する動作ですね。 いまお話したことを一言で表すと「コンピュータは自分の知っていることしか認識しない」ということです。 これが人間とコンピュータの大きな違いです。人間は知らない言葉を聞いても「それどういう意味ですか?」と聞き返して、知識を広げていくことができます。今のところ、コンピュータには、知らないことを知らないと認識して新しい知識を形成していく能力はない。 それからもう一つ、この単語辞書の項目数が多すぎると、音声認識の性能が悪くなります。例えば話した単語が、10個のどれかをあてるのと、10万個のどれかをあてるのでは、項目が多いほうが難しいに決まってます。 人間が、こういうことを喋ったかもしれない、という可能性の種類が少ないほうが、音声認識の性能が良くなるのです。この点、覚えておきましょう。 【講義ノート】音声認識の枠組み (2) というわけで、音声認識の枠組みのうち「単語認識」でした。人間が単語をぼそっと発声してコンピュータが何かの動作を行うというのは、これはこれで使い道があります。例えば工場で不良品の仕分けを行うにはこの単語認識で十分なわけで、実際使われてます。 が、まあ音声によるコミュニケーションとしては、単語認識では不自然極まりない。もう少し日常の言語行動に近づけたい。 音声認識の枠組み、次にお話しするのは「定型文認識」と呼ばれるものです。 今度は何か「文章」を発声してよいことにします。 システムの中に「単語辞書」が用意されているのは先ほどと同じですが、今度はそれに加えて「文法」というものが規定してあります。 「文法」聞いたことあるでしょうか?中学校や高校で習ったかも知れない、国文法あるいは英語のグラマーが「文法」の例ですね。文法というのはね、要するに「単語」のつながり方を定める「規則」と考えるとよろしい。 例えば『「文」というものは「形容詞」と「名詞」と「助詞」が連接したものである』といった感じの規則が定められている。 この規則に沿ってつなげた単語の連続のみが文である。それ以外のことは人間は発声しない、とするんです。これによって無数にある文の可能性全部について、入力音声との類似度を計算することを避けます。計算量の点からも、精度の点からもそのほうが有利になるからですね。 この文法に従った「あかいぼうしをみせてください」という発声を正しく認識処理し、 「赤い帽子を見せてください」という認識結果を出力します。文法から外れた発声は認識されません。「ぼうしを、あかい、みせてください」では認識されないということです。 これが「定型文認識」の枠組みです。人間が思いつくままいい加減な語順で喋ることはできませんが、まあ丁寧に文章を発声することはできなくもない。コンピュータ相手に許容できる枠組みと考えられます。 この「文法」についてはいろいろな記述法があります。後で、その一つをお話しします。 【講義ノート】音声認識の枠組み (3) さて3番目は「ディクテーション」と呼ばれる枠組みです。 たぶん中学くらいでやっているでしょう。先生が英語の文章を読み上げて、皆さんはそれをノートに書いていく、あれがディクテーションです。書き取りとか書き起こしとか、覚えてませんか。 ひとつ前にお話しした定型文認識の枠組みでは、人間が注意して文法から外れないように発声する必要がありました。でも、現実にはそのような心掛けなしに既に発声されてしまった音声データがたくさんあります。例えば会議の録音データとか。 音声認識の枠組みの一つである「ディクテーション」は、いかなる語順に発声された音声でも、それを文書化するための技術です。実際、会議の録音データを聞いてみると、倒置やら述語省略やらとても文法に沿っていない音声ばかりです。 しかし、単語辞書に含まれる語彙が任意の順に現れることを許したら最後、発声の可能性が膨大な数になって、まったく処理できなくなります。何らかの方法で、発話の可能性を絞り込むことが必要です。 さて、ここで登場するのが、統計的「言語モデル」です。前の定型文認識の図で「文法」だったところが、今度の絵では「言語モデル」に置き換わっているのを確認してください。 まずは、文章を山ほど集めてきます。新聞記事がよく用いられます。文章中に単語が現れますので、どの単語の後にどの単語がどのくらいの頻度で現れるか統計を取ります。すなわち単語の連鎖する確率を調べて、この確率を用いて、文章候補の絞り込みを行うのです。 連鎖の確率をゼロにしないで、どのような稀な連鎖でも小さな確率を残しておくことにより、珍しい語順で発声された、あるいは言い間違いなどで語順のおかしくなった音声をも処理することができるのです。 現在、国会の議事録はこのディクテーションの枠組みで、自動的に作成されています。 統計的言語モデルは、その文章の「話題」に強く依存することが知られています。ディクテーションの精度を上げるためには、その話題についての大量の文章データを集めることが必要です。 【講義ノート】音声認識の基礎技術 このページでは、音声認識のソフトウェアの仕様の見方について触れておきましょう。 皆さんが将来、情報系の開発職に就いていて、何かの案件でサービスに音声認識技術を組み込まなければならなくなったとします。ありそうなシチュエーションです。 いろいろなソフトウェアが製品として販売されていますので、皆さんはその中から適切な製品を選ばなければならない。「仕様」を読めなければいけないのです。音声認識の仕様を左右する基礎技術をここで列挙しておきましょう。 ・不特定話者  - 誰の声でも認識できる まず「特定話者」か「不特定話者」か、 音声認識には、特定の操作者の音声のみ処理できれば良い「特定話者」を対象とするシステムと、誰の声でも認識できる「不特定話者」を対象とするものがあります。特定話者のほうがコストが低くかつ認識精度を上げやすいという利点があります。工場で使うのはこちら。一方、公共サービスに利用する場合は不特定話者が必要条件になります。 ・任意語彙  - 任意の単語をテキストで登録できる 次の仕様は「特定語彙」か「任意語彙」か、特定語彙システムは認識対象を例えば「電話番号のみ」に限定することで非常に高い認識性能を実現します。しかし用途は限られてしまいますね。一般的にはやはり「任意語彙」のシステムが使いやすいでしょう。任意の単語をテキストで記述するだけで「単語辞書」を構成できます。 ・連続音声  - 単語で区切って発声しなくてもよい もう一つ「孤立音声」か「連続音声」か、音声を単語で区切って発声することで認識性能を上げるのが「孤立発声」システムです。システムの質問に対し一問一答する形式ならば孤立発声にできるのでコストを下げるために用いられます。いまどきは、コンピュータの性能も上がったので、ほとんど「連続音声」に対応していると思いますが、仕様に「孤立音声」対応と書いてあったら要注意です。 【講義ノート】音声認識システムの構成 この図は音声認識システムの構成要素を信号の流れでつないで表示したものです。 左側の矢印の上に「入力音声」と記入しましょう。 初めの黄色い枠に「分析処理・音声区間検出」と記入しましょう。 左から音声が入ってきて、この「分析処理/音声区間検出」で音声認識のやりやすい特徴量、例えばスペクトルの時系列に変換されます。 上の方の黄色い枠に「音響モデル」と記入しましょう。 一方、システムの中には音声の音響的特徴を表現した「音響モデル」が記憶されています。この音響モデルは典型的には「音素」と対応づけられます。 覚えてますか?「音素」(phoneme)「意味の違いを生じせしめる最小自由形式」でしたね。これが違うとことばの意味が変わってくる。あれです。 単語じゃなくて、ここに音素を記憶してあります。 下の方の黄色い枠は「文法・言語モデル」と記入しましょう。 下の方に「文法」「言語モデル」がありますね。これらは、単語の連鎖関係を設定する要素だとお話ししましたが、実際には「音素」の連鎖関係を設定するんです。 中間の黄色い枠に「探索処理」と記入しましょう。 文法ないし言語モデルによって音素の連鎖が規定され、発話内容に対応する音響モデルが生成されていきます。入力音声の特徴系列とこの音響モデルの類似度(的なもの)が計算されます。 この類似度計算を工夫して高速にする仕組みが、この「探索処理」というブロックの中に入っています。 最後に、最もそれらしい発話内容が、音声認識結果として出力されます。 右側の矢印の上に「認識結果」と記入しましょう。 【講義ノート】音声認識システムの構成 (2) それでは、この構成図の各ブロックを少し詳しく説明していきましょう。 今日のところは、この「分析処理」「音声区間検出」のブロック中の「音声区間検出」の話をします。 緑の吹き出しに「周波数分析・特徴抽出・BPF・LPC」とメモしておいてください。 【講義ノート】技術各論>音声区間検出 さてコンピュータに入力される音声は、そこにそれだけが単独であるとは限りません。実際には、横でエアコンのファンの音がしたり、廊下で誰かの足音がしたり、まあ関係ない音の中に埋もれていると思われます。 この注目したくない音の成分を「背景音」といいます。音声は背景音の中に埋もれている。 コンピュータで音声認識をするためには、それなりの計算が必要になります。特徴抽出やら類似度計算やら探索処理やら、結構大変です。不必要な計算はあまりしたくない。 ・認識対象とする音声区間の「始点」と「終点」を決定する そこで、認識の対象とする音声区間の「始点」と「終点」を決定して、その間のみいろいろな計算を行うという考えが出てきます。この技術を「音声区間検出」と呼びます。 次のページで、一つの手法を紹介します。そこでは、 ・音声信号の「区間パワー」と「継続時間」を利用します。 【講義ノート】技術各論>音声区間検出 (2) まず「区間パワー」です。 ・一定間隔ごとに、区間パワーを計算 音声は背景音の中に埋もれていますが、音声のあるところはないところよりも、多少でも音量が大きいはずですね。この局所的な音量の変化をとらえているのが「区間パワー」という特徴量です。 この図は音声波形です。この音声波形を N 点ごとに区切ってしまいます。この区切られた「区間」の中で、波形 x(t) の値を2乗して平均します。2乗してますので、波形が正でも負でも振幅が大きければ大きい値になります。 1 τ+N pow(t) = --- x(τ)^2 N τ=t これがその時間区間の中での局所的な音の大きさを表す「区間パワー」です。 【講義ノート】技術各論>音声区間検出 (3) ある背景音に埋もれた音声の区間パワーを次々と計算して、各時刻の値をグラフで書いてみました。横軸が時間、縦塾が区間パワーです。 次のページの曲線をまねして描いてみてください。 区間パワーの値に、ある「レベル」を設定しておきます。 背景音の区間パワーも上下に変動します。今、ある時点で区間パワーが設定レベルを超えたとします。まず、この時刻を記憶します。観測を続けて区間パワーが大きい状態が一定時間続かなければ、音声区間の開始とせずに先ほど記憶した時刻を捨てます。 区間パワーが設定レベルを超えた状態がある時間継続した場合、音声区間が開始したとみなして、記憶しておいた区間パワーが設定レベルを超えた時刻を音声区間の「始点」と判断します。 ・パワーが一定時間以上、ある大きさを超えるとき「区間開始」 【講義ノート】技術各論>音声区間検出 (4) 音声区間の終了についても同じような考え方をします。 音声区間と判定されている状態で、区間パワーが設定レベルより小さくなれば、その時刻を記憶します。観測を続けて区間パワーが小さい状態が一定時間続かなければ、音声区間の終了とせずに先ほど記憶した時刻を捨てます。 区間パワーが設定レベルより小さい状態がある時間継続した場合、音声区間が終了したとみなして、記憶しておいた区間パワーが設定レベルを下回った時刻に遡って、音声区間の「終点」と判断します。 ・パワーが一定時間以上、ある大きさを下回るとき「区間終了」 --