以下に、本願の開示する出力プログラム、情報処理装置及び出力制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
[実施例に係る特定処理]
図1は、本実施例に係る情報処理装置の一例を説明するための図である。図1に示すように、情報処理装置は、音声認識に関し、検索対象の音素表記データF1を取得すると、インデックス147´と、文HMMデータ143とを基にして、音素表記データF1に含まれる特定の音素列に対応する単語F3を最尤推定する。情報処理装置は、検索対象の音素表記データF1に含まれる特定の音素列を、最尤推定した単語F3に変換して、検索対象の音素表記データF1に応じた文章F4を出力する。ここでいう特定の音素列とは、発音が同じ且つ意味が異なる単語である同音異義語の音素列のことをいう。
検索対象の音素表記データF1及び後述する音素表記データ145は、音素符号の符号列で記載されたデータである。一例として、単語が「成功」や「精巧」である場合、音素表記は、「seiko」となり、「s」、「e」、「i」、「k」、「o」のそれぞれが音素符号となる。なお、音素符号は、音素記号と同義である。
また、検索対象の音素表記データF1及び後述する音素表記データ145には、「文章」が含まれる。文章には、複数の「文」から成り立つものである。例えば、文章「・・・着陸は困難だ。それに成功した。・・・」には、「chakurikuwakoNnaNda」(着陸は困難だ)、「soreniseikoshita」(それに成功した)が含まれる。
まず、情報処理装置が、音素表記データ145からインデックス147´を生成する処理について説明する。
例えば、情報処理装置は、音素表記データ145と、辞書データ142とを比較する。辞書データ142は、単語(形態素)を音素表記と対応付けて定義したデータである。辞書データ142は、形態素解析に用いられる辞書データであるとともに、音声認識に用いられる辞書データである。
情報処理装置は、音素表記データ145を先頭から走査し、辞書データ142に定義された音素表記にヒットした音素符号列を抽出し、配列データ146に格納する。
配列データ146は、音素表記データ145に含まれる音素符号列のうち、辞書データ142に定義された音素符号列の音素表記を有する。各音素表記の区切りには、<US(unit separator)>を登録する。例えば、情報処理装置は、音素表記データ145と、辞書データ142との比較により、辞書データ142に登録された「c」「h」「a」「k」「u」「r」「i」「k」「u」、「k」「o」「N」「n」「a」「N」、「s」「e」「i」「k」「o」が順にヒットした場合には、図1に示す配列データ146を生成する。
情報処理装置は、配列データ146を生成すると、配列データ146に対応するインデックス147´を生成する。インデックス147´は、音素符号と、オフセットとを対応付けた情報である。オフセットは、配列データ146上に存在する該当する音素符号の位置を示すものである。例えば、音素符号「s」が、配列データ146の先頭からn1文字目に存在する場合には、インデックス147´の音素符号「s」に対応する行(ビットマップ)において、オフセットn1の位置にフラグ「1」が立つ。
また、本実施例におけるインデックス147´は、音素表記の「先頭」、「末尾」、<US>の位置も、オフセットと対応付ける。例えば、音素表記「s」「e」「i」「k」「o」の先頭は、「s」、末尾は「o」となる。音素表記「s」「e」「i」「k」「o」の先頭「s」が、配列データ146の先頭からn2文字目に存在する場合には、インデックス147´の先頭に対応する行において、オフセットn2の位置にフラグ「1」が立つ。音素表記「s」「e」「i」「k」「o」の末尾「o」が、配列データ146の先頭からn3文字目に存在する場合には、インデックス147´の末尾に対応する行において、オフセットn3の位置にフラグ「1」が立つ。
また、「<US>」が、配列データ146の先頭からn4文字目に存在する場合には、インデックス147´の「<US>」に対応する行において、オフセットn4の位置にフラグ「1」が立つ。
情報処理装置は、インデックス147´を参照することで、音素表記データ145に含まれる音素表記を構成する音素符号の位置、音素符号の先頭、末尾、区切り「<US>」を把握することができる。
次に、情報処理装置は、検索対象の音素表記データF1を受け付けると、音素表記データF1の先頭から順番に音声認識を行う。このとき、情報処理装置は、検索対象の音素表記データF1に含まれる特定の音素列に応じた文を特定する。特定の音素列とは、同音異義語の音素列である。すなわち、情報処理装置は、音素列の音素認識を行った際に、音素列が辞書データ142の複数の音素表記にヒットした場合には、音素列が同音異義語であると判断する。そして、情報処理装置は、検索対象の音素表記データF1から、この音素列に応じた文を特定する。かかる文は、この音素列を含む文と関連する文であれば良い。例えば、かかる文は、この音素列を含む文の直前の文であれば良い。一例として、検索対象の音素表記データF1が「「c」「h」「a」「k」「u」「r」「i」「k」「u」「w」「a」「k」「o」「N」「n」「a」「N」「d」「a」<US>「s」「o」「r」「e」「n」「i」「s」「e」「i」「k」「o」「s」「h」「i」「t」「a」<US>」(着陸は困難だ。それに成功した。)であるとする。検索対象の音素表記データF1に含まれる音素列が「s」「e」「i」「k」「o」であるとする。すると、この音素列は、例えば「成功」や「精巧」等を表す同音異義語の音素列であるので、特定の音素列となる。特定の音素列に応じた文として、この音素列を含む文と関連する文である「「c」「h」「a」「k」「u」「r」「i」「k」「u」「w」「a」「k」「o」「N」「n」「a」「N」「d」「a」<US>」(着陸は困難だ。)が特定される。
情報処理装置は、特定した文の文ベクトルを算出する。なお、情報処理装置が、文ベクトルを算出する場合には、Word2Vec技術に基づいて、文に含まれる各単語の単語ベクトルを算出し、各単語の単語ベクトルを集積することで、文ベクトルを算出する。Word2Vec技術は、ある単語と、隣接する他の単語との関係に基づいて、各単語のベクトルを算出する処理を行うものである。情報処理装置が、上記処理を行うことで、ベクトルデータF2を生成する。
情報処理装置は、ベクトルデータF2が示す文ベクトルと、文HMM(Hidden Markov Model)143とを比較することで、特定の音素列に対応する単語の文ベクトルを特定する。例えば、情報処理装置は、検索対象の音素表記データF1に含まれる特定の音素列「s」「e」「i」「k」「o」が示す単語を、インデックス147´、配列データ146及び辞書データ142から特定する。一例として、情報処理装置は、検索対象の音素表記データF1に含まれる特定の音素列「s」「e」「i」「k」「o」に対する、配列データ146の中の位置を、インデックス147´を参照して検索する。そして、情報処理装置は、検索した位置に示される特定の音素列の単語を、配列データ146及び辞書データ142から特定する。ここでは、特定の音素列の単語として「成功」及び「精巧」が特定されたとする。情報処理装置は、ベクトルデータF2が示す文ベクトルと、文HMMデータ143の中の特定した単語に対応する共起情報(共起文ベクトル)とを比較することで、特定の音素列「s」「e」「i」「k」「o」に対応する単語の共起文ベクトルを特定する。
文HMMデータ143は、単語と、複数の共起文ベクトルとを対応付ける。文HMMデータ143の単語は、辞書データ142に登録された単語であり、この単語により、特定の音素列に対応する単語が定まる。共起文ベクトルは、単語と共起する文から求められる文ベクトルである。
共起文ベクトルは、共起率と対応付けられる。例えば、検索対象の音素表記データF1に含まれる音素列が示す単語が「成功」である場合には、この単語と共起する文について、文ベクトルが「V108F97」となる可能性が「37%」であり、文ベクトルが「V108D19」となる可能性が「29%」であることが示される。
情報処理装置は、ベクトルデータF2が示す文ベクトルと、文HMMデータ143の各共起文ベクトルとを比較して、ヒットするレコードを判定する。例えば、ベクトルデータF2が示す文ベクトルが、共起文ベクトル「V0108F97」と一致(あるいは類似)する場合には、情報処理装置は、単語「成功」を、特定の音素列「s」「e」「i」「k」「o」に対応する単語として特定(最尤推定)する(符号F3)。
情報処理装置は、検索対象の音素表記データF1に含まれる特定の音素列「s」「e」「i」「k」「o」を、特定した単語「成功」に変換して、検索対象の音素表記データF1に応じた文章F4を出力する。ここでは、文章F4として「着陸は困難だ。それに成功した。」が出力される。
上記のように、情報処理装置は、検索対象の音素表記データF1に含まれる特定の音素列に応じた文の文ベクトルを算出し、文ベクトルと、文HMMデータ143の共起文ベクトルとを比較し、特定の音素列に対応する単語を特定(最尤推定)する。これにより、情報処理装置は、検索対象の音素表記データF1に含まれる特定の音素列に応じた文と、文HMMデータ143との共起関係に基づいて、特定の音素列に対応する単語を特定するので、複数の文で構成される文章を音声認識する場合に、音声認識の精度を向上することができる。例えば、情報処理装置は、同音異義語の音素列に対応する単語の音声認識の精度を向上することができる。
一例では、検索対象の音素表記データF1が「「c」「h」「a」「k」「u」「r」「i」「k」「u」「w」「a」「k」「o」「N」「n」「a」「N」「d」「a」<US>「s」「o」「r」「e」「n」「i」「s」「e」「i」「k」「o」「s」「h」「i」「t」「a」<US>」(着陸は困難だ。それに成功した。)である場合に、同音異義語の音素列「s」「e」「i」「k」「o」に応じた文「「c」「h」「a」「k」「u」「r」「i」「k」「u」「w」「a」「k」「o」「N」「n」「a」「N」「d」「a」<US>」(着陸は困難だ。)と文HMMデータ143との共起関係に基づいて、同音異義語の音素列に対応する単語を「精巧」でなく「成功」と特定できる。
別の例では、検索対象の音素表記データF1が「「t」「o」「k」「e」「i」「w」「a」「c」「h」「i」「s」「a」「n」「a」「b」「u」「h」「i」「N」「k」「a」「r」「a」「k」「o」「:」「s」「e」「i」「s」「a」「r」「e」「t」「e」「i」「r」「u」<US>「s」「o」「r」「e」「w」「a」「s」「e」「i」「k」「o」「d」「a」<US>」(時計は小さな部品で構成されている。それは精巧だ。)である場合に、同音異義語の音素列「s」「e」「i」「k」「o」に応じた文「「t」「o」「k」「e」「i」「w」「a」「c」「h」「i」「s」「a」「n」「a」「b」「u」「h」「i」「N」「k」「a」「r」「a」「k」「o」「:」「s」「e」「i」「s」「a」「r」「e」「t」「e」「i」「r」「u」<US>」(時計は小さな部品で構成されている。)と文HMMデータ143との共起関係に基づいて、同音異義語の音素列に対応する単語を「成功」でなく「精巧」と特定できる。
図2は、本実施例に係る情報処理装置の構成を示す機能ブロック図である。図2に示すように、情報処理装置100は、通信部110と、入力部120と、表示部130と、記憶部140と、制御部150とを有する。
通信部110は、ネットワークを介して、他の外部装置と通信を行う処理部である。通信部110は、通信装置に対応する。例えば、通信部110は、外部装置から、教師データ141、辞書データ142、音素表記データ145等を受信して、記憶部140に格納しても良い。
入力部120は、各種の情報を情報処理装置100に入力するための入力装置である。例えば、入力部120は、キーボードやマウス、タッチパネル等に対応する。
表示部130は、制御部150から出力される各種の情報を表示するための表示装置である。例えば、表示部130は、液晶ディスプレイやタッチパネルに対応する。
記憶部140は、教師データ141、辞書データ142、文HMMデータ143、音素HMMデータ144、音素表記データ145、配列データ146、インデックスデータ147及びオフセットテーブル148を有する。加えて、記憶部140は、静的辞書データ149A及び動的辞書データ149Bを有する。記憶部140は、フラッシュメモリ(Flash Memory)等の半導体メモリ素子や、HDD(Hard Disk Drive)等の記憶装置に対応する。
教師データ141は、同音異義語を含む、大量の自然文を示すデータである。例えば、教師データ141は、コーパス等の大量の自然文のデータであっても良い。
辞書データ142は、分割可能な候補(分割候補)となる音素表記及び単語を定義する情報である。
図3は、辞書データのデータ構造の一例を示す図である。図3に示すように、辞書データ142は、音素表記142a、読み仮名142b、単語142c及び単語コード142dを対応付けて記憶する。音素表記142aは、単語142cに対する音素符号列を示す。なお、音素符号列は、発音記号列と同義である。読み仮名142bは、単語142cの読み仮名である。単語コード142dは、単語142cの文字コード列とは異なり、単語を一意に表す、符号化されたコード(符号化コード)のことをいう。例えば、単語コード142dは、教師データ141を基にして、文書のデータ中に出現する単語の出現頻度のより高い単語に対して、より短く割り当てられるコードを示す。なお、辞書データ142は、あらかじめ生成される。
図2に戻って、文HMMデータ143は、文と単語とを対応付ける情報である。
図4Aは、文HMMのデータ構造の一例を示す図である。図4Aに示すように、文HMMデータ143は、単語を特定する単語コード143a及び複数の共起文ベクトル143bを対応付けて記憶する。単語コード143aは、辞書データ142に登録された単語を特定するコードである。共起文ベクトル143bは、共起率と対応付けられる。共起文ベクトル143bは、教師データ141に含まれる単語と共起する文から求められるベクトルである。共起率は、該当する単語コードの単語が、検索対象の単語に応じた文と共起する確率を示すものである。例えば、ある文に対応する単語の単語コードが「108001h」である場合には、ある文と文(文ベクトル「V108F97」の文)とが共起する可能性が「37%」であることが示されている。なお、文HMMデータ143は、後述する文HMM生成部151によって生成される。
図2に戻って、音素HMMデータ144は、音素符号と音素符号とを対応付ける情報である。
図4Bは、音素HMMデータのデータ構造の一例を示す図である。図4Bに示すように、音素HMMデータ144は、音素符号144a及び共起音素符号144bを対応付けて記憶する。音素符号144aは、音素記号に対応する。共起音素符号144bは、音素符号144aが示す音素符号に共起する音素符号のことをいう。なお、括弧内の数字は、共起率を表す。一例として、音素符号144aとして示される「s」は、共起音素符号144bとして示される「a」と37%の確率で共起する。音素符号144aとして示される「s」は、共起音素符号144bとして示される「i」と13%の確率で共起する。なお、音素HMMデータ144は、後述する音素HMM生成部152によって生成される。
図2に戻って、音素表記データ145は、処理対象となる音素符号列のデータである。言い換えれば、音素表記データ145は、処理対象となる発音された結果から得られる発音記号列のデータである。一例として、音素表記データ145には、「・・・「c」「h」「a」「k」「u」「r」「i」「k」「u」「w」「a」「k」「o」「N」「n」「a」「N」「d」「a」<US>「s」「o」「r」「e」「n」「i」「s」「e」「i」「k」「o」「s」「h」「i」「t」「a」<US>・・・」(・・・着陸は困難だ。それに成功した。・・・)が記載される。括弧は、文字列で示したものである。
図2に戻って、配列データ146は、音素表記データ145に含まれる音素符号列のうち、辞書データ142に定義された音素表記を有する。
図5は、配列データのデータ構造の一例を示す図である。図5に示すように、配列データ146は、各音素表記が<US>により分けられている。なお、配列データ146の上側に示す数字は、配列データ146の先頭「0」からのオフセットを示す。また、オフセットの上側に示す数字は、配列データ146の先頭の音素表記が示す単語からシーケンシャルに振られた単語のNoを示す。
図2に戻って、インデックスデータ147は、後述するように、インデックス147´をハッシュ化したものである。インデックス147´は、音素符号と、オフセットとを対応付けた情報である。オフセットは、配列データ146上に存在する音素符号の位置を示すものである。例えば、音素符号「s」が、配列データ146の先頭からn1文字目に存在する場合には、インデックス147´の音素符号「s」に対応する行(ビットマップ)において、オフセットn1の位置にフラグ「1」が立つ。
また、インデックス147´は、音素表記の「先頭」、「末尾」、<US>の位置も、オフセットと対応付ける。例えば、音素表記「「s」「e」「i」「k」「o」」の先頭は「s」、末尾は「o」となる。音素表記「「s」「e」「i」「k」「o」」の先頭「s」が、配列データ146の先頭からn2文字目に存在する場合には、インデックス147´の先頭に対応する行において、オフセットn2の位置にフラグ「1」が立つ。音素表記「「s」「e」「i」「k」「o」」の末尾「o」が、配列データ146の先頭からn3文字目に存在する場合には、インデックス147´の「末尾」に対応する行において、オフセットn3の位置にフラグ「1」が立つ。「<US>」が、配列データ146の先頭からn4文字目に存在する場合には、インデックス147´の「<US>」に対応する行において、オフセットn4の位置にフラグ「1」が立つ。
インデックス147´は、後述するようにハッシュ化され、インデックスデータ147として記憶部140に格納される。なお、インデックスデータ147は、後述するインデックス生成部154によって生成される。
図2に戻って、オフセットテーブル148は、インデックスデータ147の先頭のビットマップ、配列データ146及び辞書データ142から、各単語の先頭に対応するオフセットを記憶するテーブルである。なお、オフセットテーブル148は、インデックスデータ147を復元するときに生成される。
図6は、オフセットテーブルのデータ構造の一例を示す図である。図6に示すように、
オフセットテーブル148は、単語No148a、単語コード148b及びオフセット148cを対応付けて記憶する。単語No148aは、配列データ146上の各音素表記が示す単語を先頭からシーケンシャルに振られたNoを表す。なお、単語No148aは、「0」からの昇順に振られる数字で示す。単語コード148bは、辞書データ142の単語コード142dに対応する。オフセット148cは、配列データ146の先頭からの音素表記の「先頭」の位置(オフセット)を表す。例えば、単語コード「108001h」に対応する音素表記「「s」「e」「i」「k」「o」」が、配列データ146上の先頭から1単語目に存在する場合には、単語Noとして「1」が設定される。単語コード「108001h」に対応する音素表記「「s」「e」「i」「k」「o」」の先頭「s」が配列データ146の先頭から6文字目に位置する場合には、オフセットとして「6」が設定される。
図2に戻って、静的辞書データ149Aは、単語と、静的コードとを対応付ける情報である。
動的辞書データ149Bは、静的辞書データ149Aで定義されていない単語(あるいは文字列)に動的コードを割り当てるための情報である。
図2に戻って、制御部150は、文HMM生成部151、音素HMM生成部152、音素推定部153、インデックス生成部154、単語候補抽出部155、文抽出部156及び単語推定部157を有する。制御部150は、CPU(Central Processing Unit)やMPA(Micro Processing Unit)等によって実現できる。また、制御部150は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等のハードワイヤーロジックによっても実現できる。なお、単語候補抽出部155は、受付部の一例である。文抽出部156は、第1の特定部の一例である。単語推定部157は、第2の特定部、生成部及び出力部の一例である。
文HMM生成部151は、形態素解析に用いられる辞書データ142と、教師データ141とに基づき、文HMMデータ143を生成する。
例えば、文HMM生成部151は、辞書データ142を基にして、教師データ141に含まれる各単語を符号化する。文HMM生成部151は、教師データ141に含まれる複数の単語から順次単語を選択する。文HMM生成部151は、選択した単語に応じた、教師データ141に含まれる文を特定し、特定した文の文ベクトルを算出する。文HMM生成部151は、選択した単語と、特定した文の文ベクトルとの共起率を算出する。そして、文HMM生成部151は、選択した単語の単語コードに対して、特定した文の文ベクトル及び共起率を対応付けて文HMMデータ143に格納する。文HMM生成部151は、上記処理を繰り返し実行することで、文HMMデータ143を生成する。なお、ここでいう単語とは、CJK単語であっても良いし、英単語であっても良い。
音素HMM生成部152は、音素データに基づき、音素HMMデータ144を生成する。例えば、音素HMM生成部152は、音素データを基にして、複数の音素符号から順次音素符号を選択する。音素HMM生成部152は、選択した音素符号に対する、音素データに含まれる他の音素符号の共起率を算出する。そして、音素HMM生成部152は、選択した音素符号と、他の音素符号及び共起率とを対応付けて音素HMMデータ144に格納する。音素HMM生成部152は、上記処理を繰り返し実行することで、音素HMMデータ144を生成する。
音素推定部153は、音素信号から音素符号を推定する。例えば、音素推定部153は、音素データをフーリエ変換し、スペクトル分析し、音声特徴を抽出する。音素推定部153は、音声特徴を基に、音素符号を推定する。音素推定部153は、音素HMMデータ143を用いて、推定された音素符号を確認する。これは、推定された音素符号の精度の向上を図るためである。なお、音素データは、検索対象の音素表記データであっても良い。
インデックス生成部154は、形態素解析に用いられる辞書データ142に基づき、インデックスデータ147を生成する。インデックスデータ147は、辞書データ142に登録された単語の音素表記に含まれる各音素符号と、音素表記の先頭の音素符号と、音素表記の末尾の音素符号と、のそれぞれの音素符号の相対位置を示すデータである。
例えば、インデックス生成部154は、音素表記データ145と、辞書データ142とを比較する。インデックス生成部154は、音素表記データ145を先頭から走査し、辞書データ142に登録された音素表記142aにヒットした音素符号列を抽出する。インデックス生成部154は、ヒットした音素符号列を配列データ146に格納する。インデックス生成部154は、次にヒットした音素符号列を配列データ146に格納する場合には、先の文字列の次に<US>を設定し、設定した<US>の次に、次にヒットした音素符号列を格納する。インデックス生成部154は、上記処理を繰り返し実行することで、配列データ146を生成する。
また、インデックス生成部154は、配列データ146を生成した後に、インデックス147´を生成する。インデックス生成部154は、配列データ146を先頭から走査し、音素符号とオフセット、音素符号列の先頭とオフセット、音素符号列の末尾とオフセット、<US>とオフセットとを対応付けることで、インデックス147´を生成する。
また、インデックス生成部154は、音素符号列の先頭と単語Noとを対応付けることで、音素符号列の先頭の上位インデックスを生成する。これにより、インデックス生成部154は、単語No等の粒度に対応した上位インデックスを生成することで、この後のキーワードを抽出する際の抽出領域の絞り込みを高速化できる。
図7は、インデックスのデータ構造の一例を示す図である。図8は、上位インデックスのデータ構造の一例を示す図である。図7に示すように、インデックス147´は、各音素符号、<US>、先頭、末尾に対応するビットマップ21~32を有する。
例えば、配列データ146「・・・[s][e][i][k][o]<US>・・・」の中の音素符号「s」、「e」、「i」、「k」、「o」・・・に対応するビットマップを、ビットマップ21~25とする。図7では、他の音素符号に対応するビットマップの図示は省略する。
<US>に対応するビットマップをビットマップ30とする。音素表記の「先頭」に対応するビットマップをビットマップ31とする。音素表記の「末尾」に対応するビットマップをビットマップ32とする。
例えば、図5に示した配列データ146において、音素符号「s」が、配列データ146のオフセット「6、24」に存在している。このため、インデックス生成部154は、図7に示すインデックス147´のビットマップ21のオフセット「6、24」にフラグ「1」を立てる。配列データ146は、他の音素符号、<US>についても同様に、フラグを立てる。
図5に示した配列データ146において、各音素表記の先頭が、配列データ146のオフセット「6、24」に存在している。このため、インデックス生成部154は、図7に示すインデックス147´のビットマップ31のオフセット「6、24」にフラグ「1」を立てる。
図5に示した配列データ146において、各音素表記の末尾が、配列データ146のオフセット「10、28」に存在している。このため、インデックス生成部154は、図7に示すインデックス147´のビットマップ32のオフセット「10、28」にフラグ「1」を立てる。
図8に示すように、インデックス147´は、各音素表記の先頭の音素符号に対応する上位ビットマップを有する。例えば、先頭の音素符号「s」に対応する上位ビットマップを上位ビットマップ41とする。図5に示した配列データ146において、各音素表記の先頭「s」が、配列データ146の単語No「1、4」に存在している。このため、インデックス生成部154は、図8に示すインデックス147´の上位ビットマップ41の単語No「1、4」にフラグ「1」を立てる。
インデックス生成部154は、インデックス147´を生成すると、インデックス147´のデータ量を削減するため、インデックス147´をハッシュ化することで、インデックスデータ147を生成する。
図9は、インデックスのハッシュ化を説明するための図である。ここでは一例として、インデックスにビットマップ10が含まれるものとし、かかるビットマップ10をハッシュ化する場合について説明する。
例えば、インデックス生成部154は、ビットマップ10から、底29のビットマップ10aと、底31のビットマップ10bを生成する。ビットマップ10aは、ビットマップ10に対して、オフセット29ごとに区切りを設定し、設定した区切りを先頭とするフラグ「1」のオフセットを、ビットマップ10aのオフセット0~28のフラグで表現する。
インデックス生成部154は、ビットマップ10のオフセット0~28までの情報を、ビットマップ10aにコピーする。インデックス生成部154は、ビットマップ10aの29以降のオフセットの情報を下記のように処理する。
ビットマップ10のオフセット「35」にフラグ「1」が立っている。オフセット「35」は、オフセット「29+6」であるため、インデックス生成部154は、ビットマップ10aのオフセット「6」にフラグ「(1)」を立てる。なお、オフセットの1番目を0としている。ビットマップ10のオフセット「42」にフラグ「1」が立っている。オフセット「42」は、オフセット「29+13」であるため、インデックス生成部154は、ビットマップ10aのオフセット「13」にフラグ「(1)」を立てる。
ビットマップ10bは、ビットマップ10に対して、オフセット31ごとに区切りを設定し、設定した区切りを先頭するフラグ「1」のオフセットを、ビットマップ10bのオフセット0~30のフラグで表現する。
ビットマップ10のオフセット「35」にフラグ「1」が立っている。オフセット「35」は、オフセット「31+4」であるため、インデックス生成部154は、ビットマップ10bのオフセット「4」にフラグ「(1)」を立てる。なお、オフセットの1番目を0としている。ビットマップ10のオフセット「42」にフラグ「1」が立っている。オフセット「42」は、オフセット「31+11」であるため、インデックス生成部154は、ビットマップ10bのオフセット「11」にフラグ「(1)」を立てる。
インデックス生成部154は、上記処理を実行することで、ビットマップ10からビットマップ10a、10bを生成する。このビットマップ10a、10bが、ビットマップ10をハッシュ化した結果となる。
インデックス生成部154は、例えば図7に示したビットマップ21~32に対してハッシュ化を行うことで、ハッシュ化後のインデックスデータ147を生成する。図10は、インデックスデータのデータ構造の一例を示す図である。例えば、図7に示したハッシュ化前のインデックス147´のビットマップ21に対して、ハッシュ化を行うと、図10に示したビットマップ21a及びビットマップ21bが生成される。図7に示したハッシュ化前のインデックス147´のビットマップ22に対して、ハッシュ化を行うと、図10に示したビットマップ22a及びビットマップ22bが生成される。図7に示したハッシュ化前のインデックス147´のビットマップ30に対して、ハッシュ化を行うと、図10に示したビットマップ30a及びビットマップ30bが生成される。図10において、その他のハッシュ化されたビットマップに関する図示を省略する。
ここで、ハッシュ化されたビットマップを復元する処理について説明する。図11は、ハッシュ化したインデックスを復元する処理の一例を説明するための図である。ここでは、一例として、ビットマップ10aとビットマップ10bとを基にして、ビットマップ10を復元する処理について説明する。ビットマップ10、10a、10bは、図9で説明したものに対応する。
ステップS10の処理について説明する。復元処理は、底29のビットマップ10aを基にして、ビットマップ11aを生成する。ビットマップ11aのオフセット0~28のフラグの情報は、ビットマップ10aのオフセット0~28のフラグの情報と同様となる。ビットマップ11aのオフセット29以降のフラグの情報は、ビットマップ10aのオフセット0~28のフラグの情報の繰り返しとなる。
ステップS11の処理について説明する。復元処理は、底31のビットマップ10bを基にして、ビットマップ11bを生成する。ビットマップ11bのオフセット0~30のフラグの情報は、ビットマップ10bのオフセット0~30のフラグの情報と同様となる。ビットマップ11bのオフセット31以降のフラグの情報は、ビットマップ10bのオフセット0~30のフラグの情報の繰り返しとなる。
ステップS12の処理について説明する。復元処理は、ビットマップ11aとビットマップ11bとのAND演算を実行することで、ビットマップ10を生成する。図11に示す例では、オフセット「0、5、11、18、25、35、42」において、ビットマップ11a及びビットマップ11bのフラグが「1」となっている。このため、ビットマップ10のオフセット「0、5、11、18、25、35、42」のフラグが「1」となる。このビットマップ10が、復元されたビットマップとなる。復元処理は、他のビットマップについても同様の処理を繰り返し実行することで、各ビットマップを復元し、インデックス147´を生成する。
図2に戻って、単語候補抽出部155は、インデックスデータ147を基にしてインデックス147´を生成し、インデックス147´に基づき、検索対象の音素表記データに含まれる同音異義語の音素表記について、対応する単語候補を抽出する処理部である。
図12及び図13は、単語候補を抽出する処理の一例を説明するための図である。図12及び図13に示す例では、検索対象の音素表記データに同音異義語の音素表記「[s][e][i][k][o]」が含まれている。かかる同音異義語の音素表記の1番目の音素符号から順に、該当する音素符号のビットマップを、インデックスデータ147から読み出して、下記の処理を実行する。
まず、単語候補抽出部155は、インデックスデータ147から、先頭のビットマップを読み出し、読み出したビットマップを復元する。先頭のビットマップは、図7で説明したインデックス147´の先頭のビットマップ31をハッシュ化したビットマップである。かかる復元処理は、図11で説明したので、その説明を省略する。単語候補抽出部155は、復元した先頭のビットマップと、配列データ146と、辞書データ142とを用いて、オフセットテーブル148を生成する。
ステップS30について説明する。例えば、単語候補抽出部155は、復元した先頭のビットマップ50に「1」が立っているオフセットを特定する。一例として、オフセット「6」に「1」が立っている場合、単語候補抽出部155は、配列データ146を参照してオフセット「6」の音素表記と単語Noを特定し、辞書データ142を参照して特定した音素表記の単語コードを抽出する。そして、単語候補抽出部155は、単語No、単語コード及びオフセットを対応付けてオフセットテーブル148に追加する。単語候補抽出部155は、上記処理を繰り返し実行することで、オフセットテーブル148を生成する。
そして、単語候補抽出部155は、単語の粒度に応じた先頭の上位ビットマップ60を生成する。単語の粒度に応じた先頭の上位ビットマップ60を生成するのは、処理対象を限定し、検索の高速化を図るためである。ここでは、単語の粒度を、配列データ146の先頭から64ビット区間とする。単語候補抽出部155は、オフセットテーブル148を参照して、オフセットが64ビット区間に含まれる単語Noを特定し、先頭の上位ビットマップ60の、特定した単語Noにフラグ「1」を立てる。ここでは、オフセット「0、6、12、19、24」が、64ビット区間に含まれているとする。すると、単語候補抽出部155は、先頭の上位ビットマップ60の単語No「1、2、3、4」にフラグ「1」を立てる。
ステップS31について説明する。単語候補抽出部155は、先頭の上位ビットマップ60のフラグ「1」が立っている単語Noを特定し、オフセットテーブル148を参照して、特定した単語Noのオフセットを特定する。上位ビットマップ60では、単語No「1」にフラグ「1」が立っており、単語No「1」のオフセットが「6」であることを示す。
ステップS32について説明する。単語候補抽出部155は、インデックスデータ147から、検索対象の音素表記データに含まれる同音異義語の1番目の音素符号「s」のビットマップ、先頭のビットマップを読み出す。単語候補抽出部155は、読み出した先頭のビットマップについて、オフセット「6」付近の領域を復元し、復元した結果をビットマップ81とする。単語候補抽出部155は、読み出した音素符号「s」のビットマップについて、オフセット「6」付近の領域を復元し、復元した結果をビットマップ70とする。一例として、オフセット「6」を含む底分のビット「0」~「29」の領域のみが復元される。
単語候補抽出部155は、先頭のビットマップ81と音素符号「s」のビットマップ70とのAND演算を実行することで、音素表記の先頭位置を特定する。先頭のビットマップ81と音素符号「s」のビットマップ70とのAND演算の結果をビットマップ70Aとする。ビットマップ70Aでは、オフセット「6」にフラグ「1」が立っており、オフセット「6」が音素表記の先頭であることを示す。
単語候補抽出部155は、先頭と音素符号「s」に対する上位ビットマップ61を補正する。上位ビットマップ61では、先頭のビットマップ81と音素符号「s」のビットマップ70とのAND演算の結果が「1」であるので、単語No「1」にフラグ「1」が立つ。
ステップS33について説明する。単語候補抽出部155は、先頭と音素符号「s」に対するビットマップ70Aを左に1つシフトすることで、ビットマップ70Bを生成する。単語候補抽出部155は、インデックスデータ147から、検索対象の音素表記データの2番目の音素符号「e」のビットマップを読み出す。単語候補抽出部155は、読み出した音素符号「e」のビットマップについて、オフセット「6」付近の領域を復元し、復元した結果をビットマップ71とする。一例として、オフセット「6」を含む底分のビット「0」~「29」の領域のみが復元される。
単語候補抽出部155は、先頭と音素符号「s」に対するビットマップ70Bと音素符号「e」のビットマップ71とのAND演算を実行することで、単語No「1」に先頭から音素符号列「s」「e」が存在するかを判定する。先頭と音素符号「s」に対するビットマップ70Bと音素符号「e」のビットマップ71とのAND演算の結果をビットマップ70Cとする。ビットマップ70Cでは、オフセット「7」にフラグ「1」が立っており、先頭No「1」に先頭から音素符号列「s」「e」が存在することを示す。
単語候補抽出部155は、先頭と音素符号列「s」「e」に対する上位ビットマップ62を補正する。上位ビットマップ62では、先頭と音素符号「s」に対するビットマップ70Bと音素符号「e」のビットマップ71とのAND演算の結果が「1」であるので、単語No「1」にフラグ「1」が立つ。
ステップS34について説明する。単語候補抽出部155は、先頭と音素符号列「s」「e」に対するビットマップ70Cを左に1つシフトすることで、ビットマップ70Dを生成する。単語候補抽出部155は、インデックスデータ147から、検索対象の音素表記データの3番目の音素符号「i」のビットマップを読み出す。単語候補抽出部155は、読み出した音素符号「i」のビットマップについて、オフセット「6」付近の領域を復元し、復元した結果をビットマップ72とする。一例として、オフセット「6」を含む底分のビット「0」~「29」の領域のみが復元される。
単語候補抽出部155は、先頭と音素符号列「s」「e」に対するビットマップ70Dと音素符号「i」のビットマップ72とのAND演算を実行することで、単語No「1」に先頭から音素符号列「s」「e」「i」が存在するかを判定する。先頭と音素符号列「s」「e」に対するビットマップ70Dと音素符号「i」のビットマップ72とのAND演算の結果をビットマップ70Eとする。ビットマップ70Eでは、オフセット「8」にフラグ「1」が立っており、先頭No「1」に先頭から音素符号列「s」「e」「i」が存在することを示す。
単語候補抽出部155は、先頭と音素符号列「s」「e」「i」に対する上位ビットマップ63を補正する。上位ビットマップ63では、先頭と音素符号列「s」「e」に対するビットマップ70Dと音素符号「i」のビットマップ72とのAND演算の結果が「1」であるので、単語No「1」にフラグ「1」が立つ。
ステップS35について説明する。単語候補抽出部155は、先頭と音素符号列「s」「e」「i」に対するビットマップ70Eを左に1つシフトすることで、ビットマップ70Fを生成する。単語候補抽出部155は、インデックスデータ147から、検索対象の音素表記データの4番目の音素符号「k」のビットマップを読み出す。単語候補抽出部155は、読み出した音素符号「k」のビットマップについて、オフセット「6」付近の領域を復元し、復元した結果をビットマップ73とする。一例として、オフセット「6」を含む底分のビット「0」~「29」の領域のみが復元される。
単語候補抽出部155は、先頭と音素符号列「s」「e」「i」に対するビットマップ70Fと音素符号「k」のビットマップ73とのAND演算を実行することで、単語No「1」に先頭から音素符号列「s」「e」「i」「k」が存在するかを判定する。先頭と音素符号列「s」「e」「i」に対するビットマップ70Fと音素符号「k」のビットマップ73とのAND演算の結果をビットマップ70Gとする。ビットマップ70Gでは、オフセット「9」にフラグ「1」が立っており、先頭No「1」に先頭から音素符号列「s」「e」「i」「k」が存在することを示す。
単語候補抽出部155は、先頭と音素符号列「s」「e」「i」「k」に対する上位ビットマップ64を補正する。上位ビットマップ64では、先頭と音素符号列「s」「e」「i」に対するビットマップ70Fと音素符号「k」のビットマップ73とのAND演算の結果が「1」であるので、単語No「1」にフラグ「1」が立つ。
ステップS36について説明する。単語候補抽出部155は、先頭と音素符号列「s」「e」「i」「k」に対するビットマップ70Gを左に1つシフトすることで、ビットマップ70Hを生成する。単語候補抽出部155は、インデックスデータ147から、検索対象の音素表記データの5番目の音素符号「o」のビットマップを読み出す。単語候補抽出部155は、読み出した音素符号「o」のビットマップについて、オフセット「6」付近の領域を復元し、復元した結果をビットマップ74とする。一例として、オフセット「6」を含む底分のビット「0」~「29」の領域のみが復元される。
単語候補抽出部155は、先頭と音素符号列「s」「e」「i」「k」に対するビットマップ70Hと音素符号「o」のビットマップ74とのAND演算を実行することで、単語No「1」に先頭から音素符号列「s」「e」「i」「k」「o」が存在するかを判定する。先頭と音素符号列「s」「e」「i」「k」に対するビットマップ70Hと音素符号「o」のビットマップ74とのAND演算の結果をビットマップ70Iとする。ビットマップ70Iでは、オフセット「10」にフラグ「1」が立っており、先頭No「1」に先頭から音素符号列「s」「e」「i」「k」「o」が存在することを示す。
単語候補抽出部155は、先頭と音素符号列「s」「e」「i」「k」「o」に対する上位ビットマップ65を補正する。上位ビットマップ65では、先頭と音素符号列「s」「e」「i」「k」に対するビットマップ70Hと音素符号「o」のビットマップ74とのAND演算の結果が「1」であるので、単語No「1」にフラグ「1」が立つ。
そして、単語候補抽出部155は、先頭の上位ビットマップ60の、フラグ「1」が立っている他の単語Noについても上記処理を繰り返し実行することで、先頭と音素符号列「s」「e」「i」「k」「o」に対する上位ビットマップ65を生成(更新)する(S36A)。すなわち、上位ビットマップ65が生成されることで、先頭と音素符号列「s」「e」「i」「k」「o」を先頭に持つ単語の単語Noがわかる。言い換えれば、単語候補抽出部155は、先頭と音素符号列「s」「e」「i」「k」「o」に対する、配列データ146の中の位置を特定できる。つまり、単語候補抽出部155は、先頭と音素符号列「s」「e」「i」「k」「o」を先頭に持つ単語候補を抽出する。
図2に戻って、文抽出部156は、検索対象の音素表記データに含まれる同音異義語の音素表記に応じた特徴文データを抽出する。例えば、文抽出部156は、検索対象の音素表記データから、同音異義語の音素表記を含む文データと関連する文データを特徴文データとして抽出する。一例として、文抽出部156は、検索対象の音素表記データから、同音意義語の音素表記を含む文データの直前の文データを特徴文データとして抽出する。
単語推定部157は、特徴文データと、文HMMデータ143を基にして、抽出された単語候補から単語を推定する。なお、文HMMデータ143は、文HMM生成部151によって生成される。例えば、単語推定部157は、特徴文データから文ベクトルを算出する処理を行った後に、算出した文ベクトルと、文HMMデータ143とを基にして、単語を推定する。
単語推定部157が、文のベクトルを算出する処理の一例について、図14を参照して説明する。図14は、文のベクトルを算出する処理の一例を説明するための図である。図14では、一例として、文x1のベクトルxVec1を算出する処理について説明する。
例えば、文x1には、単語a1~単語anが含まれている。単語推定部157は、静的辞書データ149A及び動的辞書データ149Bを用いて、文x1に含まれる各単語を符号化する。
例えば、単語推定部157は、単語が静的辞書データ149Aにヒットした場合には、単語の静的コードを特定し、特定した静的コードに単語を置き換えることで、符号化を行う。単語推定部157は、単語が静的辞書データ149Aにヒットしない場合には、動的辞書データ149Bを用いて、動的コードを特定する。例えば、単語推定部157は、単語が動的辞書データ149Bに未登録である場合には、単語を動的辞書データ149Bに登録して、登録位置に対応する動的コードを得る。単語推定部157は、単語が動的辞書データ149Bに登録済みである場合には、既に登録済みの登録位置に対応する動的コードを得る。単語推定部157は、特定した動的コードに単語を置き換えることで、符号化を行う。
図14に示す例では、単語推定部157は、単語a1から単語anを、符号b1からbnに置き換えることで、符号化を行う。
単語推定部157は、各単語の符号化を行った後に、Word2Vec技術に基づいて、各単語(各符号)の単語ベクトルを算出する。Word2Vec技術は、ある単語(符号)と、隣接する他の単語(符号)との関係に基づいて、各符号のベクトルを算出する処理を行うものである。図14に示す例では、単語推定部157は、符号b1から符号bnの単語ベクトルVec1~Vecnを算出する。単語推定部157は、各単語ベクトルVec1~Vecnを集積することで、文x1の文ベクトルxVec1を算出する。
続いて、単語推定部157は、文ベクトルと、文HMMデータ143とを基にして、抽出された単語候補から単語を推定する処理の一例について説明する。単語推定部157は、文ベクトルと、文HMMデータ143の共起文ベクトルとを比較して、文ベクトルと一致する(あるいは類似する)共起文ベクトルを特定する。なお、単語推定部157は、文ベクトルと、文HMMデータ143との距離が閾値未満となる共起文ベクトルを、一致する共起文ベクトルとして特定しても良い。
単語推定部157は、特定した共起文ベクトルに対応付けられた単語を特定(推定)する。この後、単語推定部157は、検索対象の音素表記データに含まれる同音異義語の音素表記を、特定した単語に変更することにより、検索対象の音素表記データに応じた文章を生成する。そして、単語推定部157は、生成した文章を出力する。
図15は、単語を推定する処理の一例を説明するための図である。図15に示す例では、単語候補抽出部155が、図13のS36Aで説明したように、先頭と音素符号列「s」「e」「i」「k」「o」に対する上位ビットマップ65を生成したものとする。
図15に示すステップS37について説明する。単語推定部157は、先頭と音素符号列「s」「e」「i」「k」「o」に対する上位ビットマップ65に「1」が立っている単語Noを特定する。ここでは、単語No「1」及び単語No「4」にそれぞれフラグ「1」が立っているので、単語No「1」及び単語No「4」が特定される。そして、単語推定部157は、オフセットテーブル148から、特定した単語Noに対応する単語コードを取得する。ここでは、単語No「1」に対応する単語コードとして「108001h」が取得される。単語No「4」に対応する単語コードとして「108004h」が取得される。そして、単語推定部157は、辞書データ142から、取得した単語コードに対応する単語を特定する。すなわち、単語推定部157は、単語コード「108001h」に対応する単語として「成功」を特定し、単語コード「108004h」に対応する単語として「精巧」を特定する。
加えて、単語推定部157は、文ベクトルと、文HMMデータ143の中の取得した単語コードに対応する共起文ベクトルを比較して、文ベクトルと一致する(あるいは類似する)共起文ベクトルを特定する。単語推定部157は、特定した共起文ベクトルに対応付けられた単語コードが示す単語を特定(推定)する。ここでは、単語推定部157は、文ベクトルと共起する文の文ベクトルが「V108F97」である場合には、「成功」を特定(推定)する。
単語推定部157は、文ベクトルと一致する共起文ベクトルが複数存在する場合には、共起率が最大となる共起文ベクトルを選択しても良いし、その他の選択ポリシーに基づいて、共起文ベクトルを選択しても良い。
これにより、単語推定部157は、検索対象の音素表記データに含まれる音素表記が同音異義語である場合に、この音素表記に応じた文の文ベクトルと文HMMとを用いることで、この音素表記に対応する単語候補のうち適切な単語を推定できる。この結果、単語推定部157は、音声認識の精度を向上することができる。ここでは、同音異義語の音素表記が「s」「e」「i」「k」「o」であった場合に、「成功」及び「精巧」等が単語候補として抽出される。ここでは、単語推定部157は、音素表記「s」「e」「i」「k」「o」を含む文の前の文の文ベクトルと文HMMとを用いることで、単語候補「成功」及び「精巧」から適切な単語「成功」を推定することで、音声認識の精度を向上することができる。
次に、本実施例に係る情報処理装置100の処理手順の一例について説明する。
図16は、文HMM生成部の処理手順を示すフローチャートである。図16に示すように、情報処理装置100の文HMM生成部151は、形態素解析に用いられる辞書データ142と教師データ141とを受け付けると、辞書データ142を基にして、教師データ141に含まれる各単語を符号化する(ステップS101)。
文HMM生成部151は、教師データ141に含まれる各文から、文ベクトルをそれぞれ算出する(ステップS102)。
文HMM生成部151は、教師データ141に含まれる各単語に対する各文の共起情報を算出する(ステップS103)。
文HMM生成部151は、各単語の単語コードと、文ベクトルと、文の共起情報と、を含む文HMMデータ143を生成する(ステップS104)。すなわち、文HMM生成部151は、単語の単語コードに対して、文の共起ベクトル及び共起率を対応付けて文HMMデータ143に格納する。
図17Aは、音素HMM生成部の処理手順を示すフローチャートである。なお、図17Aで示される音素は、音素符号に対応する。図17Aに示すように、情報処理装置100の音素HMM生成部152は、音素データを受け付けると、音素データを基にして、各単語に含まれる各音素を抽出する(ステップS401)。
音素HMM生成部152は、各音素に対する他の音素の共起情報を算出する(ステップS402)。
音素HMM生成部152は、各音素と、他の音素の共起情報と、を含む音素HMMデータ144を生成する(ステップS403)。すなわち、音素HMM生成部152は、各音素と、他の音素及び共起率とを、含む音素HMMデータ144を生成する。
図17Bは、音素推定部の処理手順を示すフローチャートである。なお、図17Bで示される音素は、音素符号に対応する。図17Bに示すように、情報処理装置100の音素推定部153は、音素信号(音素データ)を受け付けると、音素データをフーリエ変換し、スペクトル分析し、音声特徴を抽出する(ステップS501)。
音素推定部153は、抽出した音声特徴を基に音素を推定する(ステップS502)。音素推定部153は、音素HMMデータ144を用いて、推定された音素を確認する(ステップS503)。これは、推定された音素符号の精度の向上を図るためである。
図18は、インデックス生成部の処理手順を示すフローチャートである。図18に示すように、情報処理装置100のインデックス生成部154は、音素表記データ145と辞書データ142に登録された音素表記とを比較する(ステップS201)。
インデックス生成部154は、辞書データ142に登録された音素表記142aにヒットした音素符号列を配列データ146に登録する(ステップS202)。インデックス生成部154は、配列データ146を基にして、各音素符号のインデックス147´を生成する(ステップS203)。インデックス生成部154は、インデックス147´をハッシュ化し、インデックスデータ147を生成する(ステップS204)。
図19は、単語候補抽出部の処理手順を示すフローチャートである。図19に示すように、情報処理装置100の単語候補抽出部155は、検索対象の音素表記データを受け付けたか否かを判定する(ステップS301)。検索対象の音素表記データを受け付けていないと判定した場合には(ステップS301;No)、単語候補抽出部155は、検索対象の音素表記データを受け付けるまで、判定処理を繰り返す。
一方、検索対象の音素表記データを受け付けたと判定した場合には(ステップS301:Yes)、単語候補抽出部155は、音素表記データについて、音素推定処理を実行する(ステップS301A)。なお、音素推定処理は、図17Bで示した音素推定部153の処理である。そして、単語候補抽出部155は、音素推定処理が実行されると、実行結果の音素符号列に含まれる特定の音素符号列を選択する(ステップS301B)。ここでいう選択される特定の音素符号列は、同音異義語の音素符号列のことをいう。かかる選択される特定の音素符号列について、以下のように、単語候補抽出処理を行う。
単語候補抽出部155は、一時領域nに1を設定する(ステップS302)。なお、nは、選択された特定の音素符号列の先頭からの位置を表す。単語候補抽出部155は、ハッシュ化されたインデックスデータ147から、先頭の上位ビットマップを復元する(ステップS303)。なお、ここでは、オフセットテーブル148は、生成されているものとする。
単語候補抽出部155は、オフセットテーブル148を参照して、先頭の上位ビットマップから「1」が存在する単語Noに対応するオフセットを特定する(ステップS304)。そして、単語候補抽出部155は、先頭のビットマップの、特定したオフセット付近の領域を復元し、第1ビットマップに設定する(ステップS305)。単語候補抽出部155は、選択された特定の音素符号列の先頭からn番目の文字に対応するビットマップの、特定したオフセット付近の領域を復元し、第2ビットマップに設定する(ステップS306)。
単語候補抽出部155は、第1ビットマップと第2ビットマップとを「AND演算」し、選択された特定の音素符号列の先頭からn番目までの音素符号又は音素符号列の上位ビットマップを補正する(ステップS307)。例えば、単語候補抽出部155は、AND演算の結果が「0」である場合には、選択された特定の音素符号列の先頭からn番目までの音素符号又は音素符号列の上位ビットマップの単語Noに対応する位置にフラグ「0」を設定することで、上位ビットマップを補正する。単語候補抽出部155は、AND演算の結果が「1」である場合には、選択された特定の音素符号列の先頭からn番目までの音素符号又は音素符号列の上位ビットマップの単語Noに対応する位置にフラグ「1」を設定することで、上位ビットマップを補正する。
そして、単語候補抽出部155は、選択した特定の音素符号列の音素符号が終了か否かを判定する(ステップS308)。選択した特定の音素符号列の音素符号が終了であると判定した場合には(ステップS308;Yes)、単語候補抽出部155は、抽出結果を記憶部140に保存する(ステップS309)。ここでは、単語候補抽出部155は、選択された特定の音素符号列の上位ビットマップを抽出結果として記憶部140に保存する。そして、単語候補抽出部155は、単語候補抽出処理を終了する。一方、選択した特定の音素符号列の音素符号が終了でないと判定した場合には(ステップS308;No)、単語候補抽出部155は、第1ビットマップと、第2ビットマップとを「AND演算」したビットマップを新たな第1ビットマップに設定する(ステップS310)。
単語候補抽出部155は、第1ビットマップを左に1ビット分シフトする(ステップS311)。単語候補抽出部155は、一時領域nに1を加算する(ステップS312)。単語候補抽出部155は、選択した特定の音素符号列の先頭からn番目の音素符号に対応するビットマップのオフセット付近の領域を復元し、新たな第2ビットマップに設定する(ステップS313)。そして、単語候補抽出部155は、第1ビットマップと第2ビットマップとのAND演算をすべく、ステップS307に移行する。
図20は、単語推定部の処理手順を示すフローチャートである。なお、ここでは、単語候補抽出部155によって抽出された抽出結果として、例えば、特定の音素符号列の上位ビットマップが保存されている。
図20に示すように、情報処理装置100の文抽出部156は、検索対象の音素表記データから、特定の音素符号列に応じた特徴文データを抽出する(ステップS601)。例えば、文抽出部156は、検索対象の音素表記データから、特定の音素符号列を含む文データと関連する文データを特徴文データとして抽出する。一例として、文抽出部156は、検索対象の音素表記データから、特定の音素符号列を含む文データの直前の文データを特徴文データとして抽出する。
文抽出部156は、特徴文データに含まれる文の文ベクトルを算出する(ステップS602)。情報処理装置100の単語推定部157は、算出した文の文ベクトルと、文HMMデータ143とを比較して、共起条件を満たす単語コードの文ベクトルを特定する(ステップS603)。
そして、単語推定部157は、辞書データ142を参照して、単語コードを復号化する(ステップS604)。すなわち、単語推定部157は、特定の音素符号列の単語を最尤推定する。この後、単語推定部157は、検索対象の音素表記データに含まれる特定の音素列を、最尤推定した単語に変更することにより、検索対象の音素表記データに応じた文章を生成する。そして、単語推定部157は、生成した文章を出力し、単語推定処理を終了する。
[実施例の効果]
次に、本実施例に係る情報処理装置100の効果について説明する。情報処理装置100は、複数の文を有する文章に対する音素列を受け付け、受け付けた音素列に含まれる特定の音素又は音素列に応じた文を特定する。情報処理装置100は、単語に対する文の共起情報を該単語に対応付けて記憶する文HMMデータ143を参照して、単語のうち、特定した文の共起情報が基準を満たす単語を特定する。情報処理装置100は、受け付けた音素列に含まれる特定の音素又は音素列を、特定した単語に変更することにより、受け付けた音素列に応じた文章を生成する。情報処理装置100は、生成した文章を出力する。かかる構成によれば、情報処理装置100は、複数の文で構成される文章を音声認識する場合に、文章に含まれる特定の音素又は音素列に応じた文の共起情報を用いて特定の音素又は音素列に対する単語を特定することで、音声認識の精度を向上することができる。
また、上記実施例によれば、情報処理装置100は、音声解析及び形態素解析に用いられる共通の辞書データ142に登録された単語の音素表記に含まれる各音素符号と、前記音素表記の先頭の音素符号と、前記音素表記の末尾の音素符号と、のそれぞれの音素符号の相対位置を示すインデックスデータ147に基づき、辞書データ142に登録された単語の音素表記のうち、特定の音素又は音素列に含まれる音素表記を特定し、特定した音素表記に対応する単語候補を特定する。情報処理装置100は、文HMMデータ143に記憶された情報を参照して、特定した単語候補から、文の共起情報が基準を満たす単語を特定する。かかる構成によれば、情報処理装置100は、インデックスデータ147及び文HMMデータ143を用いることで、音声認識に係る単語候補の特定と単語の最尤推定を効率的に行うことができる。
また、上記実施例によれば、情報処理装置100は、単語に対する文に応じたベクトル情報を含む共起情報を該単語に対応付けて記憶する文HMMデータ143を参照して、単語のうち、特定した文の共起情報が基準を満たす単語を特定する。かかる構成によれば、情報処理装置100は、ベクトル情報に対応付けられた文HMMデータ143を用いて、文ベクトルから最尤な単語を特定し、音声認識の高精度化を図ることができる。
また、上記実施例によれば、情報処理装置100は、複数の文を有する文章に対する音素列に含まれる同音異義語に対する特定の音素又は音素列に応じた文を特定する。情報処理装置100は、単語に対する文の共起情報を該単語に対応付けて記憶する文HMMデータ143を参照して、単語のうち、特定した文の共起情報が基準を満たす単語を特定する。情報処理装置100は、受け付けた音素列に含まれる特定の音素又は音素列を、特定した単語に変更することにより、受け付けた音素列に応じた文章を生成する。かかる構成によれば、情報処理装置100は、複数の文で構成される文章を音声認識する場合に、文HMMデータ143を用いて、文章に含まれる同音異義語に対する単語を特定することで、音声認識の精度を向上することができる。
なお、上記実施例では、文抽出部156が、検索対象の音素表記データに含まれる同音異義語の音素表記に応じた文データを抽出すると説明した。しかしながら、文抽出部156は、これに限定されず、抽出するデータを文データの代わりに文章データとしても良い。この結果、単語推定部157は、文章データをベクトル化した文章ベクトルと、文HMMの代わり生成される文章HMMの共起文章ベクトルとを比較して、文章ベクトルと一致する(あるいは類似する)共起文章ベクトルを特定する。そして、単語推定部157は、特定した共起文章ベクトルに対応する単語を最尤推定する。これにより、単語推定部157は、同音異義語の音素表記に応じたデータを文から文章にすることで、同音異義語の音素表記と関連する情報が増えるため、さらに、同音異義語の音声認識の精度を向上することが可能となる。
また、上記実施例では、情報処理装置100が、日本語に関する同音異義語の音素列に対応する単語を最尤推定する場合を説明した。しかしながら、情報処理装置100は、これに限定されず、日本語とは別の言語に関する同音異義語の音素列に対応する単語を最尤推定する場合であっても良い。例えば、情報処理装置100は、英語に関する同音異義語の音素列に対応する単語を最尤推定する場合であっても良い。すなわち、情報処理装置100は、英語で示される検索対象の音素表記データF1に含まれる同音異義語の特定の音素列に応じた文の文ベクトルを算出し、文ベクトルと、文HMMデータ143の共起文ベクトルとを比較し、特定の音素列に対応する単語を特定(最尤推定)すれば良い。
次に、上記実施例に示した情報処理装置100と同様の機能を実現するコンピュータのハードウェア構成の一例について説明する。図21は、情報処理装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
図21に示すように、コンピュータ200は、各種演算処理を実行するCPU201と、ユーザからのデータの入力を受け付ける入力装置202と、ディスプレイ203とを有する。また、コンピュータ200は、記憶媒体からプログラム等を読み取る読み取り装置204と、有線又は無線ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置205とを有する。また、コンピュータ200は、各種情報を一時記憶するRAM206と、ハードディスク装置207とを有する。そして、各装置201~207は、バス208に接続される。
ハードディスク装置207は、文HMM生成プログラム207a、音素HMM生成プログラム207b、音素推定プログラム207c、インデックス生成プログラム207d、単語候補抽出プログラム207e、文抽出プログラム207f及び単語推定プログラム207gを有する。CPU201は、各種プログラムを読み出してRAM206に展開する。
文HMM生成プログラム207aは、文HMM生成プロセス206aとして機能する。音素HMM生成プログラム207bは、音素HMM生成プロセス206bとして機能する。音素推定プログラム207cは、音素推定プロセス206cとして機能する。インデックス生成プログラム207dは、インデックス生成プロセス206dとして機能する。単語候補抽出プログラム207eは、単語候補抽出プロセス206eとして機能する。文抽出プログラム207fは、文抽出プロセス206fとして機能する。単語推定プログラム207gは、単語推定プロセス206gとして機能する。
文HMM生成プロセス206aの処理は、文HMM生成部151の処理に対応する。音素HMM生成プロセス206bの処理は、音素HMM生成部152の処理に対応する。音素推定プロセス206cの処理は、音素推定部153の処理に対応する。インデックス生成プロセス206dの処理は、インデックス生成部154の処理に対応する。単語候補抽出プロセス206eの処理は、単語候補抽出部155の処理に対応する。文抽出プロセス206fの処理は、文抽出部156の処理に対応する。単語推定プロセス206gの処理は、単語推定部157の処理に対応する。
なお、各プログラム207a~207gについては、必ずしも最初からハードディスク装置207に記憶させておかなくても良い。たとえば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD-ROM、DVDディスク、光磁気ディスク、ICカード等の「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ200が各プログラム207a~207gを読み出して実行するようにしても良い。