(57)【要約】【課題】音声認識及び形態素解析のそれぞれの単語の抽出を効率的に行う。【解決手段】情報処理装置１００は、音声解析及び形態素解析に用いられる共通の辞書データ１４２と、テキストデータと、を受け付け、受け付けた辞書データ１４２と、テキストデータとに基づき、辞書データ１４２に登録された各単語を特定する単語情報と、各単語に対するテキストデータに含まれる単語の共起情報と、を含む単語ＨＭＭデータ１４３を生成する。【選択図】図２
2019095603.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
音声解析及び形態素解析に用いられる共通の辞書データと、テキストデータと、を受け付け、
前記辞書データと、前記テキストデータとに基づき、前記辞書データに登録された各単語を特定する単語情報と、前記各単語に対する前記テキストデータに含まれる単語の共起情報と、を含む共起単語情報を生成する、
処理を実行させることを特徴とする情報生成プログラム。
【請求項２】
さらに、第１の音素表記データを受け付け、前記第１の音素表記データに含まれる各音素符号と、前記各音素符号に対する前記第１の音素表記データに含まれる他の音素符号の共起情報と、を含む共起音素情報を生成する、
処理を実行させることを特徴とする請求項１に記載の情報生成プログラム。
【請求項３】
さらに、第２の音素表記データを受け付け、
前記共起音素情報を参照して、前記第２の音素表記データに含まれる音素符号列を推定し、
前記辞書データに登録された単語の音素表記に含まれる各音素符号と、前記音素表記の先頭の音素符号と、前記音素表記の末尾の音素符号と、のそれぞれの音素符号の相対位置を示すインデックス情報に基づき、前記辞書データに登録された単語の音素表記のうち、推定した前記音素符号列に含まれる音素表記を特定し、特定した音素表記に対応する単語を特定し、
生成した前記共起単語情報を参照して、特定した前記単語の単語情報を用いて、特定した前記単語のうち、いずれかの単語を抽出する、
処理を実行させることを特徴とする請求項２に記載の情報生成プログラム。
【請求項４】
コンピュータに、
音声解析及び形態素解析に用いられる共通の辞書データを受け付け、
受け付けた前記辞書データに基づき、前記辞書データに登録された単語の音素表記に含まれる各音素符号と、前記音素表記の先頭の音素符号と、前記音素表記の末尾の音素符号と、のそれぞれの音素符号の相対位置を示すインデックス情報を生成する、
処理を実行させることを特徴とする情報生成プログラム。
【請求項５】
コンピュータに、
音素表記データを受け付け、
音声解析及び形態素解析に用いられる共通の辞書データに登録された単語の音素表記に含まれる各音素符号と、前記音素表記の先頭の音素符号と、前記音素表記の末尾の音素符号と、のそれぞれの音素符号の相対位置を示すインデックス情報に基づき、前記辞書データに登録された単語の音素表記のうち、受け付けた前記音素表記データに含まれる音素表記を特定し、特定した音素表記に対応する単語を特定し、
前記辞書データと、テキストデータとに基づき、前記辞書データに登録された各単語を特定する単語情報と、前記各単語に対する前記テキストデータに含まれる単語の共起情報と、を含む共起単語情報を参照して、特定した前記単語の単語情報を用いて、特定した前記単語のうち、いずれかの単語を抽出する
処理を実行させることを特徴とする単語抽出プログラム。
【請求項６】
音声解析及び形態素解析に用いられる共通の辞書データと、前記テキストデータとに基づき、前記辞書データに登録された各単語を特定する単語情報と、前記各単語に対する前記テキストデータに含まれる単語の共起情報と、を含む共起単語情報を生成する第１の生成部と、
前記辞書データに基づき、前記辞書データに登録された単語の音素表記に含まれる各音素符号と、前記音素表記の先頭の音素符号と、前記音素表記の末尾の音素符号と、のそれぞれの音素符号の相対位置を示すインデックス情報を生成する第２の生成部と、
音素表記データを受け付け、前記第２の生成部によって生成された前記インデックス情報に基づき、前記辞書データに登録された単語の音素表記のうち、受け付けた前記音素表記データに含まれる音素表記を特定し、特定した音素表記に対応する単語を特定する特定部と、
前記第１の生成部によって生成された前記共起単語情報を参照して、前記特定部によって特定された前記単語の単語情報を用いて、特定された前記単語のうち、いずれかの単語を抽出する抽出部と、
を有することを特徴とする情報処理装置。
【請求項７】
コンピュータが、
音声解析及び形態素解析に用いられる共通の辞書データと、テキストデータと、を受け付け、
前記辞書データと、前記テキストデータとに基づき、前記辞書データに登録された各単語を特定する単語情報と、前記各単語に対する前記テキストデータに含まれる単語の共起情報と、を含む共起単語情報を生成する、
処理を実行することを特徴とする情報生成方法。
【請求項８】
コンピュータが、
音素表記データを受け付け、
音声解析及び形態素解析に用いられる共通の辞書データに登録された単語の音素表記に含まれる各音素符号と、前記音素表記の先頭の音素符号と、前記音素表記の末尾の音素符号と、のそれぞれの音素符号の相対位置を示すインデックス情報に基づき、前記辞書データに登録された単語の音素表記のうち、受け付けた前記音素表記データに含まれる音素表記を特定し、特定した音素表記に対応する単語を特定し、
前記辞書データと、テキストデータとに基づき、前記辞書データに登録された各単語を特定する単語情報と、前記各単語に対する前記テキストデータに含まれる単語の共起情報と、を含む共起単語情報を参照して、特定した前記単語の単語情報を用いて、特定した前記単語のうち、いずれかの単語を抽出する
処理を実行することを特徴とする単語抽出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報生成プログラム等に関する。
【背景技術】
【０００２】
従来、ＣＪＫ（中国語、日本語、韓国語）文字については、形態素解析を行い、形態素の区切りを認識してから、分割可能な単語の文字列を出力する。例えば、テキストから形態素の区切りを認識し、分割可能な単語の文字列を出力する従来技術とし、ＭｅＣａｂやＣｈａＳｅｎ等がある。ＭｅＣａｂやＣｈａＳｅｎ等の形態素解析では、形態素辞書にトライ木とＤｏｕｂｌｅＡｒｒａｙを適用し、２パスにて、分割可能な複数の単語候補を抽出する。そして、テキストの末尾に到達した後、単語ＨＭＭ（Hidden  Markov  Model）やＣＲＦ（Conditional  random  field）により、スコアを演算し、スコア順にテキストを分割した単語群を出力する。
【０００３】
また、従来、音声認識では、単語辞書に音素が追加され、音素ＨＭＭと単語ＨＭＭが生成される。スペクトラム分析から得られる音素をもとに、まず、音素ＨＭＭにより音素の最尤推定を行う。次に、木構造のインデックスを介して音素で連結された単語辞書を参照し、単語を推定する。さらに、単語ＨＭＭにより、音声認識の精度の向上を図っている。
【０００４】
なお、それぞれの単語ＨＭＭとＣＲＦは、文字コード列で構成されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１０／１００９７７号
【特許文献２】特開２０１１−２２７１２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術では、音声認識及び形態素解析が併存する場合に、音声認識及び形態素解析のそれぞれの単語辞書の共通化や、単語の抽出と最尤推定を効率的に行うことができないという問題がある。
【０００７】
例えば、音声認識では、木構造で音素が連結された単語辞書が使用されるが、この単語辞書は、形態素解析に適用されるトライ木とＤｏｕｂｌｅＡｒｒａｙと構造や形式が異なるので、形態素解析に用いられない。したがって、音声認識及び形態素解析の２つの目的を達するためには、木構造で音素が連結された単語辞書、並びに、トライ木及びＤｏｕｂｌｅＡｒｒａｙを持つ形態素辞書を混在させる必要があり、音声認識における単語を効率的に抽出することができない。また、形態素解析においても、テキストから分割可能な単語の文字列を効率的に抽出することができない。
【０００８】
また、かな漢字変換における単語候補は、例えば、単語ＨＭＭを用いて最尤推定されるが、単語ＨＭＭは、文字コード列で構成されているので、単語が増加すると、サイズが大きくなる。したがって、かな漢字変換において、単語の最尤推定にコストがかかってしまう。すなわち、かな漢字変換において、単語を効率的に最尤推定することができない。また、形態素解析においても、テキストから分割可能な単語の文字列を抽出し、最尤推定する場合であっても、同様である。
【０００９】
１つの側面では、音声認識及び形態素解析のそれぞれの単語辞書の共通化や、単語の抽出と最尤推定を効率的に行うことを目的とする。
【課題を解決するための手段】
【００１０】
第１の案では、情報生成プログラムは、コンピュータに、音声解析及び形態素解析に用いられる共通の辞書データと、テキストデータと、を受け付け、前記辞書データと、前記テキストデータとに基づき、前記辞書データに登録された各単語を特定する単語情報と、前記各単語に対する前記テキストデータに含まれる単語の共起情報と、を含む共起単語情報を生成する、処理を実行させる。
【発明の効果】
【００１１】
１つの態様によれば、音声認識及び形態素解析のそれぞれの単語辞書の共通化や、単語の抽出と最尤推定を効率的に行うことができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、本実施例に係る情報処理装置の処理の一例を説明するための図である。
【図２】図２は、本実施例に係る情報処理装置の構成を示す機能ブロック図である。
【図３】図３は、辞書データのデータ構造の一例を示す図である。
【図４Ａ】図４Ａは、単語ＨＭＭデータのデータ構造の一例を示す図である。
【図４Ｂ】図４Ｂは、音素ＨＭＭデータのデータ構造の一例を示す図である。
【図５】図５は、配列データのデータ構造の一例を示す図である。
【図６】図６は、オフセットテーブルのデータ構造の一例を示す図である。
【図７】図７は、インデックスのデータ構造の一例を示す図である。
【図８】図８は、上位インデックスのデータ構造の一例を示す図である。
【図９】図９は、インデックスのハッシュ化を説明するための図である。
【図１０】図１０は、インデックスデータのデータ構造の一例を示す図である。
【図１１】図１１は、ハッシュ化したインデックスを復元する処理の一例を説明するための図である。
【図１２】図１２は、単語を抽出する処理の一例を説明するための図（１）である。
【図１３】図１３は、単語を抽出する処理の一例を説明するための図（２）である。
【図１４】図１４は、単語を推定する処理の一例を説明するための図である。
【図１５】図１５は、単語ＨＭＭ生成部の処理手順を示すフローチャートである。
【図１６Ａ】図１６Ａは、音素ＨＭＭ生成部の処理手順を示すフローチャートである。
【図１６Ｂ】図１６Ｂは、音素推定部の処理手順を示すフローチャートである。
【図１７】図１７は、インデックス生成部の処理手順を示すフローチャートである。
【図１８】図１８は、単語抽出部の処理手順を示すフローチャートである。
【図１９】図１９は、単語推定部の処理手順を示すフローチャートである。
【図２０】図２０は、情報処理装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する情報生成プログラム、情報生成方法、情報処理装置及び単語抽出プログラム、単語抽出方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００１４】
［実施例に係る情報生成処理］
図１は、本実施例に係る情報処理装置の一例を説明するための図である。図１に示すように、情報処理装置は、音声認識において、検索対象の音素表記データから単語を絞り込む場合に、下記の処理を実行する。例えば、検索対象の音素表記データ及び後述する音素表記データ１４５は、音素符号の符号列で記載されたデータであるものとする。一例として、単語が「斉藤」である場合、音素表記は「［ｓ］［ａ］［ｉ］［ｔ］［ｏ：］」となり、［ｓ］、［ａ］、［ｉ］、［ｔ］、［ｏ：］のそれぞれが音素符号となる。なお、音素符号は、音素記号と同義である。
【００１５】
情報処理装置は、音素表記データ１４５と、辞書データ１４２とを比較する。辞書データ１４２は、単語（形態素）を音素表記と対応付けて定義したデータである。辞書データ１４２は、形態素解析に用いられる辞書データであるとともに、音声認識に用いられる辞書データである。
【００１６】
情報処理装置は、音素表記データ１４５を先頭から走査し、辞書データ１４２に定義された音素表記にヒットした音素符号列を抽出し、配列データ１４６に格納する。
【００１７】
配列データ１４６は、音素表記データ１４５に含まれる音素符号列のうち、辞書データ１４２に定義された音素表記を有する。各音素表記の区切りには、＜ＵＳ（unit  separator）＞を登録する。例えば、情報処理装置は、音素表記データ１４５と、辞書データ１４２との比較により、辞書データ１４２に登録された「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」、「ｓ」「ａ」「ｓ」「ａ」「ｋ」「ｉ」、「ｓ」「ａ」「ｔ」「ｏ：」が順にヒットした場合には、図１に示す配列データ１４６を生成する。
【００１８】
情報処理装置は、配列データ１４６を生成すると、配列データ１４６に対応するインデックス１４７´を生成する。インデックス１４７´は、音素符号と、オフセットとを対応付けた情報である。オフセットは、配列データ１４６上に存在する該当する音素符号の位置を示すものである。例えば、音素符号「ｓ」が、配列データ１４６の先頭からｎ１文字目に存在する場合には、インデックス１４７´の音素符号「ｓ」に対応する行（ビットマップ）において、オフセットｎ１の位置にフラグ「１」が立つ。
【００１９】
また、本実施例におけるインデックス１４７´は、音素表記の「先頭」、「末尾」、＜ＵＳ＞の位置も、オフセットと対応付ける。例えば、音素表記「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」の先頭は、「ｓ」、末尾は「ｏ：」となる。音素表記「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」の先頭「ｓ」が、配列データ１４６の先頭からｎ２文字目に存在する場合には、インデックス１４７´の先頭に対応する行において、オフセットｎ２の位置にフラグ「１」が立つ。音素表記「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」の末尾「ｏ：」が、配列データ１４６の先頭からｎ３文字目に存在する場合には、インデックス１４７´の末尾に対応する行において、オフセットｎ３の位置にフラグ「１」が立つ。
【００２０】
また、「＜ＵＳ＞」が、配列データ１４６の先頭からｎ４文字目に存在する場合には、インデックス１４７´の「＜ＵＳ＞」に対応する行において、オフセットｎ４の位置にフラグ「１」が立つ。
【００２１】
情報処理装置は、インデックス１４７´を参照することで、音素表記データ１４５に含まれる音素表記を構成する音素符号の位置、音素符号の先頭、末尾、区切り「＜ＵＳ＞」を把握することができる。
【００２２】
そして、情報処理装置は、検索対象の音素表記データを受け付けると、インデックス１４７´を参照することで、受け付けた検索対象の音素表記データに含まれる音素表記を特定することができる。そして、情報処理装置は、辞書データ１４２に登録された単語のうち、特定した音素表記に対応する単語を絞り込むことができる。図１に示す抽出結果には、絞り込まれた音素表記として、音素表記「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」に対応する単語「斉藤」が抽出されている。
【００２３】
上記のように、情報処理装置は、音素表記データ１４５及び辞書データ１４２を基にして、辞書データ１４２の登録項目に関するインデックス１４７´を生成し、各登録項目について、先頭と末尾とを判別可能なフラグを設定する。そして、情報処理装置は、インデックス１４７´を利用することで、検索対象の音素表記データに含まれる音素表記を特定し、辞書データ１４２に登録された単語のうち、特定した音素表記に対応する単語を抽出する。
【００２４】
なお、情報処理装置は、音声認識に限定されず、形態素解析においても、音素表記データ１４５を文字列データに代えることで、当該文字列データ及び辞書データ１４２を基にして、辞書データ１４２の登録項目に関するインデックス１４７´を生成し、各登録項目について、先頭と末尾とを判別可能なフラグを設定することができる。そして、情報処理装置は、インデックス１４７´を利用することで、先頭から末尾までの文字列を区切りの単位として、最長一致文字列を判定することで、文字列データから、分割可能な単語を抽出することができる。
【００２５】
以降、音声認識の場合について説明する。
【００２６】
図２は、本実施例に係る情報処理装置の構成を示す機能ブロック図である。図２に示すように、情報処理装置１００は、通信部１１０と、入力部１２０と、表示部１３０と、記憶部１４０と、制御部１５０とを有する。
【００２７】
通信部１１０は、ネットワークを介して、他の外部装置と通信を行う処理部である。通信部１１０は、通信装置に対応する。例えば、通信部１１０は、外部装置から、教師データ１４１、辞書データ１４２、音素表記データ１４５等を受信して、記憶部１４０に格納しても良い。
【００２８】
入力部１２０は、各種の情報を情報処理装置１００に入力するための入力装置である。例えば、入力部１２０は、キーボードやマウス、タッチパネル等に対応する。
【００２９】
表示部１３０は、制御部１５０から出力される各種の情報を表示するための表示装置である。例えば、表示部１３０は、液晶ディスプレイやタッチパネルに対応する。
【００３０】
記憶部１４０は、教師データ１４１、辞書データ１４２、単語ＨＭＭデータ１４３、音素ＨＭＭデータ１４４、音素表記データ１４５、配列データ１４６、インデックスデータ１４７及びオフセットテーブル１４８を有する。記憶部１４０は、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子や、ＨＤＤ（Hard  Disk  Drive）等の記憶装置に対応する。
【００３１】
教師データ１４１は、同音異義語を含む、大量の自然文を示すデータである。例えば、教師データ１４１は、コーパス等の大量の自然文のデータであっても良い。
【００３２】
辞書データ１４２は、分割可能な候補（分割候補）となる音素表記及び単語を定義する情報である。
【００３３】
図３は、辞書データのデータ構造の一例を示す図である。図３に示すように、辞書データ１４２は、音素表記１４２ａ、読み仮名１４２ｂ、単語１４２ｃ及び単語コード１４２ｄを対応付けて記憶する。音素表記１４２ａは、単語１４２ｃに対する音素符号列を示す。なお、音素符号列は、発音記号列と同義である。読み仮名１４２ｂは、単語１４２ｃの読み仮名である。単語コード１４２ｄは、単語１４２ｃの文字コード列とは異なり、単語を一意に表す、符号化されたコード（符号化コード）のことをいう。例えば、単語コード１４２ｄは、教師データ１４１を基にして、文書のデータ中に出現する単語の出現頻度のより高い単語に対して、より短く割り当てられるコードを示す。なお、辞書データ１４２は、あらかじめ生成される。
【００３４】
図２に戻って、単語ＨＭＭデータ１４３は、辞書データ１４２に登録された各単語を特定する単語コードと、各単語に対する、教師データ１４１に含まれる単語の共起情報と、を含むデータである。共起情報には、例えば、共起単語や共起率が含まれる。なお、ここでいう共起とは、例えば、教師データ１４１に含まれるある単語と、他の単語とが連続して出現することをいう。共起率とは、例えば、教師データ１４１に含まれるある単語と、他の単語とが連続して出現する確率のことをいう。
【００３５】
音素ＨＭＭデータ１４４は、音素符号と音素符号の共起情報と、を含むデータである。共起情報には、例えば、共起音素符号や共起率が含まれる。なお、ここでいう共起とは、例えば、音素データに含まれる音素符号と、他の音素符号とが連続して出現することをいう。共起率とは、例えば、音素データに含まれるある音素符号と、他の音素符号とが連続して出現する確率のことをいう。
【００３６】
図４Ａは、単語ＨＭＭデータのデータ構造の一例を示す図である。図４Ａに示すように、単語ＨＭＭデータ１４３は、単語コード１４３ａ及び共起単語コード１４３ｂを対応付けて記憶する。単語コード１４３ａは、辞書データ１４２の単語コード１４２ｃに対応する。共起単語コード１４３ｂは、単語コード１４３ａが示す単語に共起する単語に対応する単語コードのことをいう。なお、括弧内の数字は、共起率を表す。一例として、単語コード１４３ａとして示される「１０８００１ｈ」の単語は、教師データ１４１の中で、共起単語コード１４３ｂとして示される「１０８Ｆ９７ｈ」の単語と３７％の確率で共起する。単語コード１４３ａとして示される「１０８００１ｈ」の単語は、教師データ１４１の中で、共起単語コード１４３ｂとして示される「１０８Ｄ１９ｈ」の単語と１３％の確率で共起する。なお、単語ＨＭＭデータ１４３は、後述する単語ＨＭＭ生成部１５１によって生成される。
【００３７】
図４Ｂは、音素ＨＭＭデータのデータ構造の一例を示す図である。図４Ｂに示すように、音素ＨＭＭデータ１４４は、音素符号１４４ａ及び共起音素符号１４４ｂを対応付けて記憶する。音素符号１４４ａは、音素記号に対応する。共起音素符号１４４ｂは、音素符号１４４ａが示す音素符号に共起する音素符号のことをいう。なお、括弧内の数字は、共起率を表す。一例として、音素符号１４４ａとして示される「ｓ」は、共起音素符号１４４ｂとして示される「ａ」と３７％の確率で共起する。音素符号１４４ａとして示される「ｓ」は、共起音素符号１４４ｂとして示される「ｉ」と１３％の確率で共起する。なお、音素ＨＭＭデータ１４４は、後述する音素ＨＭＭ生成部１５２によって生成される。
【００３８】
音素表記データ１４５は、処理対象となる音素符号列のデータである。言い換えれば、音素表記データ１４５は、処理対象となる発音された結果得られる発音記号列のデータである。一例として、音素表記データ１４５には、「・・・［ｓ］［ａ］［ｉ］［ｔ］［ｏ：］［ｓ］［ａ］［ｎ］［ｔ］［ｏ］［ｓ］［ａ］［ｓ］［ａ］［ｋ］［ｉ］［ｓ］［ａ］［ｎ］［ｔ］［ｏ］［ｓ］［ａ］［ｔ］［ｏ：］［ｓ］［ａ］［ｎ］［ｇ］［ａ］・・・」（・・・斉藤さんと佐々木さんと佐藤さんが・・・）が記載される。括弧は、文字列で示したものである。
【００３９】
図２に戻って、配列データ１４６は、音素表記データ１４５に含まれる音素符号列のうち、辞書データ１４２に定義された音素表記を有する。なお、音声認識を行う場合には、配列データ１４６は、音素表記データ１４５に含まれる音素表記を有するが、形態素解析を行う場合には、配列データ１４６は、音素表記データ１４５を文字列データに代えて、当該文字列データに含まれる単語を有するものとなる。
【００４０】
図５は、配列データのデータ構造の一例を示す図である。図５に示すように、配列データ１４６は、各音素表記が＜ＵＳ＞により分けられている。なお、配列データ１４６の上側に示す数字は、配列データ１４６の先頭「０」からのオフセットを示す。また、オフセットの上側に示す数字は、配列データ１４６の先頭の音素表記が示す単語からシーケンシャルに振られた単語のＮｏを示す。
【００４１】
図２に戻って、インデックスデータ１４７は、後述するように、インデックス１４７´をハッシュ化したものである。インデックス１４７´は、音素符号と、オフセットとを対応付けた情報である。オフセットは、配列データ１４６上に存在する音素符号の位置を示すものである。例えば、音素符号「ｓ」が、配列データ１４６の先頭からｎ１文字目に存在する場合には、インデックス１４７´の音素符号「ｓ」に対応する行（ビットマップ）において、オフセットｎ１の位置にフラグ「１」が立つ。
【００４２】
また、インデックス１４７´は、音素表記の「先頭」、「末尾」、＜ＵＳ＞の位置も、オフセットと対応付ける。例えば、音素表記「［ｓ］［ａ］［ｉ］［ｔ］［ｏ：］」の先頭は「ｓ」、末尾は「ｏ：」となる。音素表記「［ｓ］［ａ］［ｉ］［ｔ］［ｏ：］」の先頭「ｓ」が、配列データ１４６の先頭からｎ２文字目に存在する場合には、インデックス１４７´の先頭に対応する行において、オフセットｎ２の位置にフラグ「１」が立つ。音素表記「［ｓ］［ａ］［ｉ］［ｔ］［ｏ：］」の末尾「ｏ：」が、配列データ１４６の先頭からｎ３文字目に存在する場合には、インデックス１４７´の「末尾」に対応する行において、オフセットｎ３の位置にフラグ「１」が立つ。「＜ＵＳ＞」が、配列データ１４６の先頭からｎ４文字目に存在する場合には、インデックス１４７´の「＜ＵＳ＞」に対応する行において、オフセットｎ４の位置にフラグ「１」が立つ。
【００４３】
インデックス１４７´は、後述するようにハッシュ化され、インデックスデータ１４７として記憶部１４０に格納される。なお、インデックスデータ１４７は、後述するインデックス生成部１５４によって生成される。
【００４４】
図２に戻って、オフセットテーブル１４８は、インデックスデータ１４７の先頭のビットマップ、配列データ１４６及び辞書データ１４２から、各単語の先頭に対応するオフセットを記憶するテーブルである。なお、オフセットテーブル１４８は、インデックスデータ１４７を復元するときに生成される。
【００４５】
図６は、オフセットテーブルのデータ構造の一例を示す図である。図６に示すように、
オフセットテーブル１４８は、単語Ｎｏ１４８ａ、単語コード１４８ｂ及びオフセット１４８ｃを対応付けて記憶する。単語Ｎｏ１４８ａは、配列データ１４６上の各音素表記が示す単語を先頭からシーケンシャルに振られたＮｏを表す。なお、単語Ｎｏ１４８ａは、「０」からの昇順に振られる数字で示す。単語コード１４８ｂは、辞書データ１４２の単語コード１４２ｄに対応する。オフセット１４８ｃは、配列データ１４６の先頭からの音素表記の「先頭」の位置（オフセット）を表す。例えば、単語コード「１０８００１ｈ」に対応する音素表記「［ｓ］［ａ］［ｉ］［ｔ］［ｏ：］」が、配列データ１４６上の先頭から１単語目に存在する場合には、単語Ｎｏとして「１」が設定される。単語コード「１０８００１ｈ」に対応する音素表記「［ｓ］［ａ］［ｉ］［ｔ］［ｏ：］」の先頭「ｓ」が配列データ１４６の先頭から６文字目に位置する場合には、オフセットとして「６」が設定される。
【００４６】
図２に戻って、制御部１５０は、単語ＨＭＭ生成部１５１、音素ＨＭＭ生成部１５２、音素推定部１５３、インデックス生成部１５４、単語抽出部１５５及び単語推定部１５６を有する。制御部１５０は、ＣＰＵ（Central  Processing  Unit）やＭＰＡ（Micro  Processing  Unit）等によって実現できる。また、制御部１５０は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等のハードワイヤーロジックによっても実現できる。
【００４７】
単語ＨＭＭ生成部１５１は、形態素解析に用いられる辞書データ１４２と、教師データ１４１とに基づき、単語ＨＭＭデータ１４３を生成する。
【００４８】
例えば、単語ＨＭＭ生成部１５１は、辞書データ１４２を基にして、教師データ１４１に含まれる各単語を符号化する。単語ＨＭＭ生成部１５１は、教師データ１４１に含まれる複数の単語から順次単語を選択する。単語ＨＭＭ生成部１５１は、選択した単語に対する、教師データ１４１に含まれる他の単語の共起率を算出する。そして、単語ＨＭＭ生成部１５１は、選択した単語の単語コードと、他の単語の単語コード及び共起率とを対応付けて単語ＨＭＭデータ１４３に格納する。単語ＨＭＭ生成部１５１は、上記処理を繰り返し実行することで、単語ＨＭＭデータ１４３を生成する。なお、ここでいう単語とは、ＣＪＫ単語であっても良いし、英単語であっても良い。
【００４９】
音素ＨＭＭ生成部１５２は、音素データに基づき、音素ＨＭＭデータ１４４を生成する。例えば、音素ＨＭＭ生成部１５２は、音素データを基にして、複数の音素符号から順次音素符号を選択する。音素ＨＭＭ生成部１５２は、選択した音素符号に対する、音素データに含まれる他の音素符号の共起率を算出する。そして、音素ＨＭＭ生成部１５２は、選択した音素符号と、他の音素符号及び共起率とを対応付けて音素ＨＭＭデータ１４４に格納する。音素ＨＭＭ生成部１５２は、上記処理を繰り返し実行することで、音素ＨＭＭデータ１４４を生成する。
【００５０】
音素推定部１５３は、音素信号から音素符号を推定する。例えば、音素推定部１５３は、音素データをフーリエ変換し、スペクトル分析し、音声特徴を抽出する。音素推定部１５３は、音声特徴を基に、音素符号を推定する。音素推定部１５３は、音素ＨＭＭデータ１４３を用いて、推定された音素符号を確認する。これは、推定された音素符号の精度の向上を図るためである。なお、音素データは、検索対象の音素表記データであっても良い。
【００５１】
インデックス生成部１５４は、形態素解析に用いられる辞書データ１４２に基づき、インデックスデータ１４７を生成する。インデックスデータ１４７は、辞書データ１４２に登録された単語の音素表記に含まれる各音素符号と、音素表記の先頭の音素符号と、音素表記の末尾の音素符号と、のそれぞれの音素符号の相対位置を示すデータである。
【００５２】
例えば、インデックス生成部１５４は、音素表記データ１４５と、辞書データ１４２とを比較する。インデックス生成部１５４は、音素表記データ１４５を先頭から走査し、辞書データ１４２に登録された音素表記１４２ａにヒットした音素符号列を抽出する。インデックス生成部１５４は、ヒットした音素符号列を配列データ１４６に格納する。インデックス生成部１５４は、次にヒットした音素符号列を配列データ１４６に格納する場合には、先の文字列の次に＜ＵＳ＞を設定し、設定した＜ＵＳ＞の次に、次にヒットした音素符号列を格納する。インデックス生成部１５４は、上記処理を繰り返し実行することで、配列データ１４６を生成する。
【００５３】
また、インデックス生成部１５４は、配列データ１４６を生成した後に、インデックス１４７´を生成する。インデックス生成部１５４は、配列データ１４６を先頭から走査し、音素符号とオフセット、音素符号列の先頭とオフセット、音素符号列の末尾とオフセット、＜ＵＳ＞とオフセットとを対応付けることで、インデックス１４７´を生成する。
【００５４】
また、インデックス生成部１５４は、音素符号列の先頭と単語Ｎｏとを対応付けることで、音素符号列の先頭の上位インデックスを生成する。これにより、インデックス生成部１５４は、単語Ｎｏ等の粒度に対応した上位インデックスを生成することで、この後のキーワードを抽出する際の抽出領域の絞り込みを高速化できる。
【００５５】
図７は、インデックスのデータ構造の一例を示す図である。図８は、上位インデックスのデータ構造の一例を示す図である。図７に示すように、インデックス１４７´は、各音素符号、＜ＵＳ＞、先頭、末尾に対応するビットマップ２１〜３２を有する。
【００５６】
例えば、配列データ１４６「・・・［ｓ］［ａ］［ｉ］［ｔ］［ｏ：］＜ＵＳ＞・・・」の中の音素符号「ｓ」、「ａ」、「ｉ」、「ｔ」、「ｏ：」・・・に対応するビットマップを、ビットマップ２１〜２５とする。図７では、他の音素符号に対応するビットマップの図示は省略する。
【００５７】
＜ＵＳ＞に対応するビットマップをビットマップ３０とする。音素表記の「先頭」に対応するビットマップをビットマップ３１とする。音素表記の「末尾」に対応するビットマップをビットマップ３２とする。
【００５８】
例えば、図５に示した配列データ１４６において、音素符号「ｓ」が、配列データ１４６のオフセット「６、１２、１４、１９」に存在している。このため、インデックス生成部１５４は、図７に示すインデックス１４７´のビットマップ２１のオフセット「６、１２、１４、１９」にフラグ「１」を立てる。配列データ１４６は、他の音素符号、＜ＵＳ＞についても同様に、フラグを立てる。
【００５９】
図５に示した配列データ１４６において、各音素表記の先頭が、配列データ１４６のオフセット「６、１２、１９」に存在している。このため、インデックス生成部１５４は、図７に示すインデックス１４７´のビットマップ３１のオフセット「６、１２、１９」にフラグ「１」を立てる。
【００６０】
図５に示した配列データ１４６において、各音素表記の末尾が、配列データ１４６のオフセット「１０、１７、２２」に存在している。このため、インデックス生成部１５４は、図７に示すインデックス１４７´のビットマップ３２のオフセット「１０、１７、２２」にフラグ「１」を立てる。
【００６１】
図８に示すように、インデックス１４７´は、各音素表記の先頭の音素符号に対応する上位ビットマップを有する。例えば、先頭の音素符号「ｓ」に対応する上位ビットマップを上位ビットマップ４１とする。図５に示した配列データ１４６において、各音素表記の先頭「ｓ」が、配列データ１４６の単語Ｎｏ「１、２、３」に存在している。このため、インデックス生成部１５４は、図８に示すインデックス１４７´の上位ビットマップ４１の単語Ｎｏ「１、２、３」にフラグ「１」を立てる。
【００６２】
インデックス生成部１５４は、インデックス１４７´を生成すると、インデックス１４７´のデータ量を削減するため、インデックス１４７´をハッシュ化することで、インデックスデータ１４５を生成する。
【００６３】
図９は、インデックスのハッシュ化を説明するための図である。ここでは一例として、インデックスにビットマップ１０が含まれるものとし、かかるビットマップ１０をハッシュ化する場合について説明する。
【００６４】
例えば、インデックス生成部１５４は、ビットマップ１０から、底２９のビットマップ１０ａと、底３１のビットマップ１０ｂを生成する。ビットマップ１０ａは、ビットマップ１０に対して、オフセット２９ごとに区切りを設定し、設定した区切りを先頭とするフラグ「１」のオフセットを、ビットマップ１０ａのオフセット０〜２８のフラグで表現する。
【００６５】
インデックス生成部１５４は、ビットマップ１０のオフセット０〜２８までの情報を、ビットマップ１０ａにコピーする。インデックス生成部１５４は、ビットマップ１０ａの２９以降のオフセットの情報を下記のように処理する。
【００６６】
ビットマップ１０のオフセット「３５」にフラグ「１」が立っている。オフセット「３５」は、オフセット「２９＋６」であるため、インデックス生成部１５４は、ビットマップ１０ａのオフセット「６」にフラグ「（１）」を立てる。なお、オフセットの１番目を０としている。ビットマップ１０のオフセット「４２」にフラグ「１」が立っている。オフセット「４２」は、オフセット「２９＋１３」であるため、インデックス生成部１５４は、ビットマップ１０ａのオフセット「１３」にフラグ「（１）」を立てる。
【００６７】
ビットマップ１０ｂは、ビットマップ１０に対して、オフセット３１ごとに区切りを設定し、設定した区切りを先頭するフラグ「１」のオフセットを、ビットマップ１０ｂのオフセット０〜３０のフラグで表現する。
【００６８】
ビットマップ１０のオフセット「３５」にフラグ「１」が立っている。オフセット「３５」は、オフセット「３１＋４」であるため、インデックス生成部１５４は、ビットマップ１０ｂのオフセット「４」にフラグ「（１）」を立てる。なお、オフセットの１番目を０としている。ビットマップ１０のオフセット「４２」にフラグ「１」が立っている。オフセット「４２」は、オフセット「３１＋１１」であるため、インデックス生成部１５４は、ビットマップ１０ａのオフセット「１１」にフラグ「（１）」を立てる。
【００６９】
インデックス生成部１５４は、上記処理を実行することで、ビットマップ１０からビットマップ１０ａ、１０ｂを生成する。このビットマップ１０ａ、１０ｂが、ビットマップ１０をハッシュ化した結果となる。
【００７０】
インデックス生成部１５４は、図７に示したビットマップ２１〜３２に対してハッシュ化を行うことで、ハッシュ化後のインデックスデータ１４７を生成する。図１０は、インデックスデータのデータ構造の一例を示す図である。例えば、図７に示したハッシュ化前のインデックス１４７´のビットマップ２１に対して、ハッシュ化を行うと、図１０に示したビットマップ２１ａ及びビットマップ２１ｂが生成される。図７に示したハッシュ化前のインデックス１４７´のビットマップ２２に対して、ハッシュ化を行うと、図１０に示したビットマップ２２ａ及びビットマップ２２ｂが生成される。図７に示したハッシュ化前のインデックス１４７´のビットマップ３０に対して、ハッシュ化を行うと、図１０に示したビットマップ３０ａ及びビットマップ３０ｂが生成される。図１０において、その他のハッシュ化されたビットマップに関する図示を省略する。
【００７１】
ここで、ハッシュ化されたビットマップを復元する処理について説明する。図１１は、ハッシュ化したインデックスを復元する処理の一例を説明するための図である。ここでは、一例として、ビットマップ１０ａとビットマップ１０ｂとを基にして、ビットマップ１０を復元する処理について説明する。ビットマップ１０、１０ａ、１０ｂは、図９で説明したものに対応する。
【００７２】
ステップＳ１０の処理について説明する。復元処理は、底２９のビットマップ１０ａを基にして、ビットマップ１１ａを生成する。ビットマップ１１ａのオフセット０〜２８のフラグの情報は、ビットマップ１０ａのオフセット０〜２８のフラグの情報と同様となる。ビットマップ１１ａのオフセット２９以降のフラグの情報は、ビットマップ１０ａのオフセット０〜２８のフラグの情報の繰り返しとなる。
【００７３】
ステップＳ１１の処理について説明する。復元処理は、底３１のビットマップ１０ｂを基にして、ビットマップ１１ｂを生成する。ビットマップ１１ｂのオフセット０〜３０のフラグの情報は、ビットマップ１０ｂのオフセット０〜３０のフラグの情報と同様となる。ビットマップ１１ｂのオフセット３１以降のフラグの情報は、ビットマップ１０ｂのオフセット０〜３０のフラグの情報の繰り返しとなる。
【００７４】
ステップＳ１２の処理について説明する。復元処理は、ビットマップ１１ａとビットマップ１１ｂとのＡＮＤ演算を実行することで、ビットマップ１０を生成する。図１１に示す例では、オフセット「０、５、１１、１８、２５、３５、４２」において、ビットマップ１１ａ及びビットマップ１１ｂのフラグが「１」となっている。このため、ビットマップ１０のオフセット「０、５、１１、１８、２５、３５、４２」のフラグが「１」となる。このビットマップ１０が、復元されたビットマップとなる。復元処理は、他のビットマップについても同様の処理を繰り返し実行することで、各ビットマップを復元し、インデックス１４７´を生成する。
【００７５】
図２に戻って、単語抽出部１５５は、インデックスデータ１４７を基にしてインデックス１４７´を生成し、インデックス１４７´に基づき、検索対象の音素表記データに含まれる音素表記を特定し、特定した音素表記に対応する単語を抽出する処理部である。
【００７６】
図１２、図１３及び図１４は、単語を抽出する処理の一例を説明するための図である。図１２、図１３及び図１４に示す例では、検索対象の音素表記データに「［ｓ］［ａ］［ｉ］［ｔ］［ｏ：］」が含まれており、かかる検索対象の音素表記データの１番目の音素符号から順に、該当する音素符号のビットマップを、インデックスデータ１４７から読み出して、下記の処理を実行する。
【００７７】
まず、単語抽出部１５５は、インデックスデータ１４７から、先頭のビットマップを読み出し、読み出したビットマップを復元する。かかる復元処理は、図１１で説明したので、その説明を省略する。単語抽出部１５５は、復元した先頭のビットマップと、配列データ１４６と、辞書データ１４２とを用いて、オフセットテーブル１４８を生成する。
【００７８】
ステップＳ３０について説明する。例えば、単語抽出部１５５は、復元した先頭のビットマップ５０に「１」が立っているオフセットを特定する。一例として、オフセット「６」に「１」が立っている場合、単語抽出部１５５は、配列データ１４６を参照してオフセット「６」の音素表記と単語Ｎｏを特定し、辞書データ１４２を参照して特定した音素表記の単語コードを抽出する。そして、単語抽出部１５５は、単語Ｎｏ、単語コード及びオフセットを対応付けてオフセットテーブル１４８に追加する。単語抽出部１５５は、上記処理を繰り返し実行することで、オフセットテーブル１４８を生成する。
【００７９】
そして、単語抽出部１５５は、単語の粒度に応じた先頭の上位ビットマップ６０を生成する。単語の粒度に応じた先頭の上位ビットマップ６０を生成するのは、処理対象を限定し、検索の高速化を図るためである。ここでは、単語の粒度を、配列データ１４６の先頭から６４ビット区間とする。単語抽出部１５５は、オフセットテーブル１４８を参照して、オフセットが６４ビット区間に含まれる単語Ｎｏを特定し、先頭の上位ビットマップ６０の、特定した単語Ｎｏにフラグを「１」を立てる。ここでは、オフセット「０、６、１２、１９、２４」が、６４ビット区間に含まれているとする。すると、単語抽出部１５５は、先頭の上位ビットマップ６０の単語Ｎｏ「１、２、３、４」にフラグ「１」を立てる。
【００８０】
ステップＳ３１について説明する。単語抽出部１５５は、先頭の上位ビットマップ６０のフラグ「１」が立っている単語Ｎｏを特定し、オフセットテーブル１４８を参照して、特定した単語Ｎｏのオフセットを特定する。上位ビットマップ６０では、単語Ｎｏ「１」にフラグ「１」が立っており、単語Ｎｏ「１」のオフセットが「６」であることを示す。
【００８１】
ステップＳ３２について説明する。単語抽出部１５５は、インデックスデータ１４７から、検索対象の音素表記データの１番目の音素符号「ｓ」のビットマップ、先頭のビットマップを読み出す。単語抽出部１５５は、読み出した先頭のビットマップについて、オフセット「６」付近の領域を復元し、復元した結果をビットマップ８１とする。単語抽出部１５５は、読み出した音素符号「ｓ」のビットマップについて、オフセット「６」付近の領域を復元し、復元した結果をビットマップ７０とする。一例として、オフセット「６」を含む底分のビット「０」〜「２９」の領域のみが復元される。
【００８２】
単語抽出部１５５は、先頭のビットマップ８１と音素符号「ｓ」のビットマップ７０とのＡＮＤ演算を実行することで、音素表記の先頭位置を特定する。先頭のビットマップ８１と音素符号「ｓ」のビットマップ７０とのＡＮＤ演算の結果をビットマップ７０Ａとする。ビットマップ７０Ａでは、オフセット「６」にフラグ「１」が立っており、オフセット「６」が音素表記の先頭であることを示す。
【００８３】
単語抽出部１５５は、先頭と音素符号「ｓ」に対する上位ビットマップ６１を補正する。上位ビットマップ６１では、先頭のビットマップ８１と音素符号「ｓ」のビットマップ７０とのＡＮＤ演算の結果が「１」であるので、単語Ｎｏ「１」にフラグ「１」が立つ。
【００８４】
ステップＳ３３について説明する。単語抽出部１５５は、先頭と音素符号「ｓ」に対するビットマップ７０Ａを左に１つシフトすることで、ビットマップ７０Ｂを生成する。単語抽出部１５５は、インデックスデータ１４７から、検索対象の音素表記データの２番目の音素符号「ａ」のビットマップを読み出す。単語抽出部１５５は、読み出した音素符号「ａ」のビットマップについて、オフセット「６」付近の領域を復元し、復元した結果をビットマップ７１とする。一例として、オフセット「６」を含む底分のビット「０」〜「２９」の領域のみが復元される。
【００８５】
単語抽出部１５５は、先頭と音素符号「ｓ」に対するビットマップ７０Ｂと音素符号「ａ」のビットマップ７１とのＡＮＤ演算を実行することで、単語Ｎｏ「１」に先頭から音素符号列「ｓ」「ａ」が存在するかを判定する。先頭と音素符号「ｓ」に対するビットマップ７０Ｂと音素符号「ａ」のビットマップ７１とのＡＮＤ演算の結果をビットマップ７０Ｃとする。ビットマップ７０Ｃでは、オフセット「７」にフラグ「１」が立っており、先頭Ｎｏ「１」に先頭から音素符号列「ｓ」「ａ」が存在することを示す。
【００８６】
単語抽出部１５５は、先頭と音素符号列「ｓ」「ａ」に対する上位ビットマップ６２を補正する。上位ビットマップ６２では、先頭と音素符号「ｓ」に対するビットマップ７０Ｂと音素符号「ａ」のビットマップ７１とのＡＮＤ演算の結果が「１」であるので、単語Ｎｏ「１」にフラグ「１」が立つ。
【００８７】
ステップＳ３４について説明する。単語抽出部１５５は、先頭と音素符号列「ｓ」「ａ」に対するビットマップ７０Ｃを左に１つシフトすることで、ビットマップ７０Ｄを生成する。単語抽出部１５５は、インデックスデータ１４７から、検索対象の音素表記データの３番目の音素符号「ｉ」のビットマップを読み出す。単語抽出部１５５は、読み出した音素符号「ｉ」のビットマップについて、オフセット「６」付近の領域を復元し、復元した結果をビットマップ７２とする。一例として、オフセット「６」を含む底分のビット「０」〜「２９」の領域のみが復元される。
【００８８】
単語抽出部１５５は、先頭と音素符号列「ｓ」「ａ」に対するビットマップ７０Ｄと音素符号「ｉ」のビットマップ７２とのＡＮＤ演算を実行することで、単語Ｎｏ「１」に先頭から音素符号列「ｓ」「ａ」「ｉ」が存在するかを判定する。先頭と音素符号列「ｓ」「ａ」に対するビットマップ７０Ｄと音素符号「ｉ」のビットマップ７２とのＡＮＤ演算の結果をビットマップ７０Ｅとする。ビットマップ７０Ｅでは、オフセット「８」にフラグ「１」が立っており、先頭Ｎｏ「１」に先頭から音素符号列「ｓ」「ａ」「ｉ」が存在することを示す。
【００８９】
単語抽出部１５５は、先頭と音素符号列「ｓ」「ａ」「ｉ」に対する上位ビットマップ６３を補正する。上位ビットマップ６３では、先頭と音素符号列「ｓ」「ａ」に対するビットマップ７０Ｄと音素符号「ｉ」のビットマップ７２とのＡＮＤ演算の結果が「１」であるので、単語Ｎｏ「１」にフラグ「１」が立つ。
【００９０】
ステップＳ３５について説明する。単語抽出部１５５は、先頭と音素符号列「ｓ」「ａ」「ｉ」に対するビットマップ７０Ｅを左に１つシフトすることで、ビットマップ７０Ｆを生成する。単語抽出部１５５は、インデックスデータ１４７から、検索対象の音素表記データの４番目の音素符号「ｔ」のビットマップを読み出す。単語抽出部１５５は、読み出した音素符号「ｔ」のビットマップについて、オフセット「６」付近の領域を復元し、復元した結果をビットマップ７３とする。一例として、オフセット「６」を含む底分のビット「０」〜「２９」の領域のみが復元される。
【００９１】
単語抽出部１５５は、先頭と音素符号列「ｓ」「ａ」「ｉ」に対するビットマップ７０Ｆと音素符号「ｔ」のビットマップ７３とのＡＮＤ演算を実行することで、単語Ｎｏ「１」に先頭から音素符号列「ｓ」「ａ」「ｉ」「ｔ」が存在するかを判定する。先頭と音素符号列「ｓ」「ａ」「ｉ」に対するビットマップ７０Ｆと音素符号「ｔ」のビットマップ７３とのＡＮＤ演算の結果をビットマップ７０Ｇとする。ビットマップ７０Ｇでは、オフセット「９」にフラグ「１」が立っており、先頭Ｎｏ「１」に先頭から音素符号列「ｓ」「ａ」「ｉ」「ｔ」が存在することを示す。
【００９２】
単語抽出部１５５は、先頭と音素符号列「ｓ」「ａ」「ｉ」「ｔ」に対する上位ビットマップ６４を補正する。上位ビットマップ６４では、先頭と音素符号列「ｓ」「ａ」「ｉ」に対するビットマップ７０Ｆと音素符号「ｔ」のビットマップ７３とのＡＮＤ演算の結果が「１」であるので、単語Ｎｏ「１」にフラグ「１」が立つ。
【００９３】
ステップＳ３６について説明する。単語抽出部１５５は、先頭と音素符号列「ｓ」「ａ」「ｉ」「ｔ」に対するビットマップ７０Ｇを左に１つシフトすることで、ビットマップ７０Ｈを生成する。単語抽出部１５５は、インデックスデータ１４７から、検索対象の音素表記データの５番目の音素符号「ｏ：」のビットマップを読み出す。単語抽出部１５５は、読み出した音素符号「ｏ：」のビットマップについて、オフセット「６」付近の領域を復元し、復元した結果をビットマップ７４とする。一例として、オフセット「６」を含む底分のビット「０」〜「２９」の領域のみが復元される。
【００９４】
単語抽出部１５５は、先頭と音素符号列「ｓ」「ａ」「ｉ」「ｔ」に対するビットマップ７０Ｈと音素符号「ｏ：」のビットマップ７４とのＡＮＤ演算を実行することで、単語Ｎｏ「１」に先頭から音素符号列「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」が存在するかを判定する。先頭と音素符号列「ｓ」「ａ」「ｉ」「ｔ」に対するビットマップ７０Ｈと音素符号「ｏ：」のビットマップ７４とのＡＮＤ演算の結果をビットマップ７０Ｉとする。ビットマップ７０Ｉでは、オフセット「１０」にフラグ「１」が立っており、先頭Ｎｏ「１」に先頭から音素符号列「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」が存在することを示す。
【００９５】
単語抽出部１５５は、先頭と音素符号列「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」に対する上位ビットマップ６５を補正する。上位ビットマップ６５では、先頭と音素符号列「ｓ」「ａ」「ｉ」「ｔ」に対するビットマップ７０Ｈと音素符号「ｏ：」のビットマップ７４とのＡＮＤ演算の結果が「１」であるので、単語Ｎｏ「１」にフラグ「１」が立つ。
【００９６】
そして、単語抽出部１５５は、先頭の上位ビットマップ６０の、フラグ「１」が立っている他の単語Ｎｏについても上記処理を繰り返し実行することで、先頭と音素符号列「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」に対する上位ビットマップ６５を生成（更新）する。すなわち、上位ビットマップ６５が生成されることで、先頭と音素符号列「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」が、どの単語の先頭に存在しているかがわかる。つまり、単語抽出部１５５は、先頭と音素符号列「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」を先頭に存在する単語候補を抽出する。
【００９７】
図２に戻って、単語推定部１５６は、単語ＨＭＭデータ１４３を基にして、抽出された単語候補から単語を推定する。なお、単語ＨＭＭデータ１４３は、単語ＨＭＭ生成部１５１によって生成される。例えば、単語推定部１５６は、単語ＨＭＭデータ１４３に基づいて、単語抽出部１５５によって抽出された複数の単語候補に対する共起単語の共起率を取得する。単語推定部１５６は、各共起単語の共起率から、それぞれの共起単語の組み合わせについてスコア演算する。そして、単語推定部１５６は、スコア値の高い組み合わせを採用すべく、単語を最尤推定する。
【００９８】
図１４は、単語を推定する処理の一例を説明するための図である。図１４に示す例では、単語抽出部１５５が、図１３のＳ３６で説明したように、先頭と音素符号列「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」に対する上位ビットマップ６５を生成したものとする。
【００９９】
図１４に示すステップＳ３７について説明する。単語推定部１５６は、先頭と音素符号列「ｓ」「ａ」「ｉ」「ｔ」「ｏ：」に対する上位ビットマップ６５に「１」が立っている単語Ｎｏを特定する。ここでは、単語Ｎｏ「１」にフラグ「１」が立っているので、単語Ｎｏ「１」が特定される。そして、単語推定部１５６は、オフセットテーブル１４８から、特定した単語Ｎｏに対応する単語コードを取得する。ここでは、単語Ｎｏ「１」に対応する単語コードとして「１０８００１ｈ」が取得される。そして、単語推定部１５６は、辞書データ１４２から、取得した単語コードに対応する単語を抽出する。すなわち、単語推定部１５６は、検索対象の音素表記データに含まれる音素表記に対応する単語「斉藤」を抽出する。
【０１００】
加えて、単語推定部１５６は、単語ＨＭＭデータ１４３を参照し、取得した単語コードに対する他の共起単語の共起情報を取得する。共起情報には、例えば、共起単語の単語コードや共起率が含まれる。ここでは、単語推定部１５６は、取得した単語コード「１０８００１ｈ」に対する他の共起単語の共起情報（「１０８Ｆ９７ｈ」、（３７％））、・・・（「１０８Ｄ１９ｈ」、（１３％））を取得する。
【０１０１】
単語推定部１５６は、取得した単語コードに対する共起情報に基づき、それぞれの共起単語の組み合わせについてスコア演算する。例えば、単語推定部１５６は、取得した単語コードごとに、対応する共起単語コード及び共起率を取得する。単語推定部１５６は、取得した単語コードごとに、それぞれの共起単語コードの共起率を用いてスコア演算する。
【０１０２】
そして、単語推定部１５５は、スコア値が高い組み合わせを採用すべく、その組み合わせに対する単語コードが示す単語を最尤推定する。
【０１０３】
これにより、単語抽出部１５５は、単語コードを基に、単語ＨＭＭを連携し、共起単語を取得することができる。単語ＨＭＭを連携し、共起単語を取得することによって、例えば、単語抽出部１５５は、音声認識の精度の向上を図ることができる。また、単語抽出部１５５は、形態素解析と音声認識にて、単語ＨＭＭの共通化を図ることができる。また、単語抽出部１５５は、単語コードを用いることで、単語ＨＭＭデータ１４３のサイズ縮小を図ることができる。また、単語抽出部１５５は、形態素解析のテキスト分析や音声認識における単語ＨＭＭのスコア演算において、単語コードに依拠した単語ＨＭＭへのアクセスを効率化できる。
【０１０４】
次に、本実施例に係る情報処理装置１００の処理手順の一例について説明する。
【０１０５】
図１５は、単語ＨＭＭ生成部の処理手順を示すフローチャートである。図１５に示すように、情報処理装置１００の単語ＨＭＭ生成部１５１は、形態素解析に用いられる辞書データ１４２と教師データ１４１とを受け付けると、辞書データ１４２を基にして、教師データ１４１に含まれる各単語を符号化する（ステップＳ１０１）。
【０１０６】
単語ＨＭＭ生成部１５１は、教師データ１４１に含まれる各単語に対する、教師データ１４１に含まれる他の単語の共起情報を算出する（ステップＳ１０２）。
【０１０７】
単語ＨＭＭ生成部１５１は、各単語の単語コードと、他の単語の共起情報と、を含む単語ＨＭＭデータ１４３を生成する（ステップＳ１０３）。すなわち、単語ＨＭＭ生成部１５１は、各単語の単語コードと、他の単語の単語コード及び共起率とを、含む単語ＨＭＭデータ１４３を生成する。
【０１０８】
図１６Ａは、音素ＨＭＭ生成部の処理手順を示すフローチャートである。なお、図１６Ａで示される音素は、音素符号に対応する。図１６Ａに示すように、情報処理装置１００の音素ＨＭＭ生成部１５２は、音素データを受け付けると、音素データを基にして、各単語に含まれる各音素を抽出する（ステップＳ４０１）。
【０１０９】
音素ＨＭＭ生成部１５２は、各音素に対する他の音素の共起情報を算出する（ステップＳ４０２）。
【０１１０】
音素ＨＭＭ生成部１５２は、各音素と、他の音素の共起情報と、を含む音素ＨＭＭデータ１４４を生成する（ステップＳ４０３）。すなわち、音素ＨＭＭ生成部１５２は、各音素と、他の音素及び共起率とを、含む音素ＨＭＭデータ１４４を生成する。
【０１１１】
図１６Ｂは、音素推定部の処理手順を示すフローチャートである。なお、図１６Ｂで示される音素は、音素符号に対応する。図１６Ｂに示すように、情報処理装置１００の音素推定部１５３は、音素信号（音素データ）を受け付けると、音素データをフーリエ変換し、スペクトル分析し、音声特徴を抽出する（ステップＳ５０１）。
【０１１２】
音素推定部１５３は、抽出した音声特徴を基に音素を推定する（ステップＳ５０２）。音素推定部１５３は、音素ＨＭＭデータ１４４を用いて、推定された音素を確認する（ステップＳ５０３）。これは、推定された音素符号の精度の向上を図るためである。
【０１１３】
図１７は、インデックス生成部の処理手順を示すフローチャートである。図１７に示すように、情報処理装置１００のインデックス生成部１５４は、音素表記データ１４５と辞書データ１４２に登録された音素表記とを比較する（ステップＳ２０１）。
【０１１４】
インデックス生成部１５４は、辞書データ１４２に登録された音素表記１４２ａにヒットした音素符号列を配列データ１４６に登録する（ステップＳ２０２）。インデックス生成部１５４は、配列データ１４６を基にして、各音素符号のインデックス１４７´を生成する（ステップＳ２０３）。インデックス生成部１５４は、インデックス１４７´をハッシュ化し、インデックスデータ１４７を生成する（ステップＳ２０４）。
【０１１５】
図１８は、単語抽出部の処理手順を示すフローチャートである。図１８に示すように、情報処理装置１００の単語抽出部１５５は、検索対象の音素表記データを受け付けたか否かを判定する（ステップＳ３０１）。検索対象の音素表記データを受け付けていないと判定した場合には（ステップＳ３０１；Ｎｏ）、単語抽出部１５５は、検索対象の音素表記データを受け付けるまで、判定処理を繰り返す。
【０１１６】
一方、検索対象の音素表記データを受け付けたと判定した場合には（ステップＳ３０１：Ｙｅｓ）、単語抽出部１５５は、音素表記データについて、音素推定処理を実行する（ステップＳ３０１Ａ）。なお、音素推定処理は、図１６Ｂで示した音素推定部の処理である。そして、単語抽出部１５５は、音素推定処理が実行されると、実行結果の音素符号列について、以下のように、単語抽出処理を行う。
【０１１７】
単語抽出部１５５は、一時領域ｎに１を設定する（ステップＳ３０２）。なお、ｎは、音素符号列の先頭からの位置を表す。単語抽出部１５５は、ハッシュ化されたインデックスデータ１４７から、先頭の上位ビットマップを復元する（ステップＳ３０３）。
【０１１８】
単語抽出部１５５は、オフセットテーブル１４８を参照して、先頭の上位ビットマップから「１」が存在する単語Ｎｏに対応するオフセットを特定する（ステップＳ３０４）。そして、単語抽出部１５５は、先頭のビットマップの、特定したオフセット付近の領域を復元し、第１ビットマップに設定する（ステップＳ３０５）。単語抽出部１５５は、検索対象の音素表記データの先頭からｎ番目の文字に対応するビットマップの、特定したオフセット付近の領域を復元し、第２ビットマップに設定する（ステップＳ３０６）。
【０１１９】
単語抽出部１５５は、第１ビットマップと第２ビットマップとを「ＡＮＤ演算」し、検索対象の音素表記データの先頭からｎ番目までの音素符号又は音素符号列の上位ビットマップを補正する（ステップＳ３０７）。例えば、単語抽出部１５５は、ＡＮＤ結果が「０」である場合には、検索対象の音素表記データの先頭からｎ番目までの音素符号又は音素符号列の上位ビットマップの単語Ｎｏに対応する位置にフラグ「０」を設定することで、上位ビットマップを補正する。単語抽出部１５５は、ＡＮＤ結果が「１」である場合には、検索対象の音素表記データの先頭からｎ番目までの音素符号又は音素符号列の上位ビットマップの単語Ｎｏに対応する位置にフラグ「１」を設定することで、上位ビットマップを補正する。
【０１２０】
そして、単語抽出部１５５は、受け付けた音素表記データの音素符号が終了か否かを判定する（ステップＳ３０８）。受け付けた音素表記データの音素符号が終了であると判定した場合には（ステップＳ３０８；Ｙｅｓ）、単語抽出部１５５は、抽出結果を記憶部１４０に保存する（ステップＳ３０９）。そして、単語抽出部１５５は、単語抽出処理を終了する。一方、受け付けた音素表記データの音素符号が終了でないと判定した場合には（ステップＳ３０８；Ｎｏ）、単語抽出部１５５は、第１ビットマップと、第２ビットマップとを「ＡＮＤ演算」したビットマップを新たな第１ビットマップに設定する（ステップＳ３１０）。
【０１２１】
単語抽出部１５５は、第１ビットマップを左に１ビット分シフトする（ステップＳ３１１）。単語抽出部１５５は、一時領域ｎに１を加算する（ステップＳ３１２）。単語抽出部１５５は、検索対象の音素表記データの先頭からｎ番目の音素符号に対応するビットマップのオフセット付近の領域を復元し、新たな第２ビットマップに設定する（ステップＳ３１３）。そして、単語抽出部１５５は、第１ビットマップと第２ビットマップとのＡＮＤ演算をすべく、ステップＳ３０７に移行する。
【０１２２】
図１９は、単語推定部の処理手順を示すフローチャートである。なお、ここでは、単語抽出部１５５によって抽出された抽出結果として、例えば、先頭からｎ番目までの音素符号又は音素符号列の上位ビットマップが保存されているとする。
【０１２３】
図１９に示すように、情報処理装置１００の単語推定部１５６は、単語ＨＭＭデータ１４３に基づいて、単語抽出部１５５によって抽出された抽出結果に含まれる複数の単語候補に対する他の共起単語の共起率を取得する（ステップＳ６０１）。例えば、単語推定部１５６は、先頭からｎ番目までの音素符号又は音素符号列の上位ビットマップから「１」が存在する単語Ｎｏに田王する単語コードを特定する。単語推定部１５６は、単語ＨＭＭデータ１４３を参照して、特定した単語コードに対する他の共起単語の共起率を取得する。共起情報には、例えば、共起単語の単語コード及び共起率が含まれる。
【０１２４】
単語推定部１５６は、複数の単語候補に対する各共起単語の共起率に基づき、それぞれの共起単語の組み合わせについてスコア演算する（ステップＳ６０２）。
【０１２５】
単語推定部１５６は、スコア値が高い組み合わせを採用すべく、単語を最尤推定する（ステップＳ６０３）。そして、単語推定部１５６は、推定した単語を出力する。
【０１２６】
［実施例の効果］
次に、本実施例に係る情報処理装置１００の効果について説明する。情報処理装置１００は、音声認識及び形態素解析に用いられる共通の辞書データ１４２と、教師データ１４１と、を受け付ける。情報処理装置１００は、辞書データ１４２と、教師データ１４１とに基づき、辞書データ１４２に登録された各単語を特定する単語コードと、各単語に対するテキストデータに含まれる単語の共起情報と、を含む単語ＨＭＭデータ１４３を生成する。かかる構成によれば、情報処理装置１００は、音声認識及び形態素解析のそれぞれの辞書データ１４２を共通化できるとともに、音声認識が可能な単語候補を効率的に抽出することが可能となる。すなわち、情報処理装置１００は、辞書データ１４２及び単語ＨＭＭデータ１４３を用いることで、単語の抽出と最尤推定を効率的に行うことが可能となる。例えば、情報処理装置１００は、単語コードごとの共起情報を生成するので、単語コードで示される単語候補から単語コードで示される他の単語の共起状況に応じて変換候補となる単語を抽出することで、単語の抽出コストを低減できる。すなわち、情報処理装置１００は、音声認識において、変換候補となる単語の抽出コストを低減できる。また、従来の単語ＨＭＭは、可変長の文字列で構成されているため、サイズが大きいが、単語ＨＭＭデータ１４３は、可変長の文字列の代わりに単語コードで構成されているため、サイズの縮小が図れる。
【０１２７】
また、情報処理装置１００は、さらに、第１の音素表記データを受け付ける。情報処理装置１００は、音素表記データに含まれる各音素符号と、各音素符号に対する音素表記データに含まれる他の音素符号の共起情報と、を含む音素ＨＭＭデータ１４４を生成する。かかる構成によれば、情報処理装置１００は、音素ＨＭＭデータ１４４を用いることで、音素表記データから推定されるそれぞれの音素符号の精度の向上を図ることができる。
【０１２８】
また、情報処理装置１００は、さらに、第２の音素表記データを受け付ける。情報処理装置１００は、単語ＨＭＭデータ１４３を参照して、第２の音素表記データに含まれる音素符号列を推定する。情報処理装置１００は、辞書データ１４２に登録された単語の音素表記に含まれる各音素符号と、音素表記の先頭の音素符号と、音素表記の末尾の音素符号と、のそれぞれの音素符号の相対位置を示すインデックスデータ１４７に基づき、辞書データ１４２に登録された単語の音素表記のうち、推定した音素符号列に含まれる音素表記を特定する。そして、情報処理装置１００は、特定した音素表記に対応する単語を特定する。そして、情報処理装置１００は、生成した単語ＨＭＭデータ１４３を参照して、特定した単語の単語コードを用いて、特定した単語のうち、いずれかの単語を抽出する。かかる構成によれば、情報処理装置１００は、インデックスデータ１４７及び単語ＨＭＭデータ１４３を用いることで、音声認識に係る単語の推定と最尤推定を効率的に行うことができる。
【０１２９】
また、情報処理装置１００は、音声認識及び形態素解析に用いられる共通の辞書データ１４２を受け付ける。情報処理装置１００は、受け付けた辞書データ１４２に基づき、辞書データ１４２に登録された単語の音素表記に含まれる各音素符号と、音素表記の先頭の音素符号と、音素表記の末尾の音素符号と、のそれぞれの音素符号の相対位置を示すインデックスデータ１４７を生成する。かかる構成によれば、情報処理装置１００は、音声認識及び形態素解析のそれぞれの辞書データ１４２を共通化することができるとともに、辞書データ１４２に基づき生成されるインデックスデータ１４７を用いて、単語の抽出と最尤推定を効率的に行うことが可能となる。
【０１３０】
次に、上記実施例に示した情報処理装置１００と同様の機能を実現するコンピュータのハードウェア構成の一例について説明する。図２０は、情報処理装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【０１３１】
図２０に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、ユーザからのデータの入力を受け付ける入力装置２０２と、ディスプレイ２０３とを有する。また、コンピュータ２００は、記憶媒体からプログラム等を読み取る読み取り装置２０４と、有線又は無線ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置２０５とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ２０６と、ハードディスク装置２０７とを有する。そして、各装置２０１〜２０７は、バス２０８に接続される。
【０１３２】
ハードディスク装置２０７は、単語ＨＭＭ生成プログラム２０７ａ、音素ＨＭＭ生成プログラム２０７ｂ、音素推定プログラム２０７ｃ、インデックス生成プログラム２０７ｄ、単語抽出プログラム２０７ｅ及び単語推定プログラム２０７ｆを有する。ＣＰＵ２０１は、各種プログラムを読み出してＲＡＭ２０６に展開する。
【０１３３】
単語ＨＭＭ生成プログラム２０７ａは、単語ＨＭＭ生成プロセス２０６ａとして機能する。音素ＨＭＭ生成プログラム２０７ｂは、音素ＨＭＭ生成プロセス２０６ｂとして機能する。音素推定プログラム２０７ｃは、音素推定プロセス２０６ｃとして機能する。インデックス生成プログラム２０７ｄは、インデックス生成プロセス２０６ｄとして機能する。単語抽出プログラム２０７ｅは、単語抽出プロセス２０６ｅとして機能する。単語推定プログラム２０７ｆは、単語推定プロセス２０６ｆとして機能する。
【０１３４】
単語ＨＭＭ生成プロセス２０６ａの処理は、単語ＨＭＭ生成部１５１の処理に対応する。音素ＨＭＭ生成プロセス２０６ｂの処理は、音素ＨＭＭ生成部１５２の処理に対応する。音素推定プロセス２０６ｃの処理は、音素推定部１５３の処理に対応する。インデックス生成プロセス２０６ｄの処理は、インデックス生成部１５４の処理に対応する。単語抽出プロセス２０６ｅの処理は、単語抽出部１５５の処理に対応する。単語推定プロセス２０６ｆの処理は、単語推定部１５６の処理に対応する。
【０１３５】
なお、各プログラム２０７ａ〜２０７ｆについては、必ずしも最初からハードディスク装置２０７に記憶させておかなくても良い。たとえば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカード等の「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ２００が各プログラム２０７ａ〜２０７ｆを読み出して実行するようにしても良い。
【符号の説明】
【０１３６】
１００  情報処理装置
１１０  通信部
１２０  入力部
１３０  表示部
１４０  記憶部
１４１  教師データ
１４２  辞書データ
１４３  単語ＨＭＭデータ
１４４  音素ＨＭＭデータ
１４５  音素表記データ
１４６  配列データ
１４７  インデックスデータ
１４８  オフセットテーブル
１５０  制御部
１５１  単語ＨＭＭ生成部
１５２  音素ＨＭＭ生成部
１５３  音素推定部
１５４  インデックス生成部
１５５  単語抽出部
１５６  単語推定部
【図１】
2019095603.tif 000003
【図２】
2019095603.tif 000004
【図３】
2019095603.tif 000005
【図４Ａ】
2019095603.tif 000006
【図４Ｂ】
2019095603.tif 000007
【図５】
2019095603.tif 000008
【図６】
2019095603.tif 000009
【図７】
2019095603.tif 000010
【図８】
2019095603.tif 000011
【図９】
2019095603.tif 000012
【図１０】
2019095603.tif 000013
【図１１】
2019095603.tif 000014
【図１２】
2019095603.tif 000015
【図１３】
2019095603.tif 000016
【図１４】
2019095603.tif 000017
【図１５】
2019095603.tif 000018
【図１６Ａ】
2019095603.tif 000019
【図１６Ｂ】
2019095603.tif 000020
【図１７】
2019095603.tif 000021
【図１８】
2019095603.tif 000022
【図１９】
2019095603.tif 000023
【図２０】
2019095603.tif 000024