(57)【要約】【課題】形態素解析の際に各ノードで条件を満たさない候補を破棄することができ、処理を効率化することができる辞書装置、形態素解析装置、データ構造ならびに形態素解析の方法およびプログラムを提供する。【解決手段】ルートからリーフへ枝分かれするトライに基づく構造で文字列のデータを格納する形態素解析用の辞書装置１２０であって、形態素を構成する文字または部分文字列は、枝に対応付けられて格納され、少なくとも枝を接続するノードのルート側最近接の枝に対応付けられた文字または部分文字列に関する情報が、すべてのノードに対応付けられて格納されている。これにより、形態素解析装置は、共通接頭辞探索の途中で、登録形態素の先頭から途中までの読みに関する情報を参照できる。【選択図】図１
2015191317.tif 000002
【特許請求の範囲】
【請求項１】
ルートからリーフへ枝分かれするトライに基づく構造で文字列のデータを格納する形態素解析用の辞書装置であって、
形態素を構成する文字または部分文字列は、枝に対応付けられて格納され、
少なくとも前記枝を接続するノードのルート側最近接の枝に対応付けられた文字または部分文字列に関する情報が、すべてのノードに対応付けられて格納されていることを特徴とする辞書装置。
【請求項２】
前記ノードには、ルート側最近接の枝に対応付けられた文字または部分文字列の読みに関する情報および前記読みに関する情報の識別情報と、前記読みに関する情報に対してルート側最近接のノードに対応付けられて読み情報の識別情報が格納されていることを特徴とする請求項１記載の辞書装置。
【請求項３】
前記ノードには、ルートから前記ノードに至る経路の枝に対応付けられた文字または部分文字列を順に連結して構成した文字列の読みに関する情報が対応付けられて格納されていることを特徴とする請求項１記載の辞書装置。
【請求項４】
文字列をもとに、これに関する読みの情報を出力する形態素解析装置であって、
請求項１から請求項３のいずれかに記載の辞書装置と、
入力された文字列を形態素に区切り、文字列の順に沿って前記形態素ごとに前記入力された文字列を前記辞書装置に照合し、前記形態素ごとに読みに関する情報の候補を出力する照合部と、
前記入力された文字列に付随する所定の制約を参照し、前記ノードごとに読みに関する情報が前記所定の制約を満たすか否かを判定し、前記所定の制約を満たさない候補を破棄する制約参照部と、を備えることを特徴とする形態素解析装置。
【請求項５】
コンピュータ内の記憶部に、ルートからリーフへ枝分かれするトライに基づいて構成される形態素解析用の辞書のデータ構造であって、
形態素を構成する文字または部分文字列は、枝に対応付けられて格納され、
少なくとも前記枝を接続するノードのルート側最近接の枝に対応付けられた文字または部分文字列に関する情報が、すべてのノードに対応付けられて格納されていることを特徴とするデータ構造。
【請求項６】
文字列をもとに、これに関する読みの情報を出力する形態素解析の方法であって、
入力された文字列を形態素に区切り、文字列の順に沿って前記形態素ごとに前記入力された文字列を請求項１から請求項３のいずれかに記載の辞書装置に照合し、前記形態素ごとに読みに関する情報の候補を出力するステップと、
前記入力された文字列に付随する所定の制約を参照し、前記ノードごとに読みに関する情報が前記所定の制約を満たすか否かを判定し、前記所定の制約を満たさない候補を破棄するステップと、をコンピュータを用いて実行することを特徴とする方法。
【請求項７】
文字列をもとに、これに関する読みの情報を出力する形態素解析のプログラムであって、
入力された文字列を形態素に区切り、文字列の順に沿って前記形態素ごとに前記入力された文字列を請求項１から請求項３のいずれかに記載の辞書装置に照合し、前記形態素ごとに読みに関する情報の候補を出力する処理と、
前記入力された文字列に付随する所定の制約を参照し、前記ノードごとに読みに関する情報が前記所定の制約を満たすか否かを判定し、前記所定の制約を満たさない候補を破棄する処理と、を含む一連の処理をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トライに基づく構造で文字列のデータを格納する形態素解析用の辞書装置、形態素解析装置、データ構造ならびに形態素解析の方法およびプログラムに関する。
【背景技術】
【０００２】
音声合成技術の代表的な利用形態にテキスト音声変換（Ｔｅｘｔ−Ｔｏ−Ｓｐｅｅｃｈ、ＴＴＳ）がある。テキスト音声変換は、入力されたテキストに対応する音声波形を合成する処理である。以下では、この一連の処理は、入力されたテキストを解析してテキストの読み方に関する情報を生成する処理と、読み方に関する情報から音声波形を合成する処理の、大きく２つに分ける。また、入力は日本語の漢字仮名交じり文であるとする。
【０００３】
以下では、読み方に関する情報を表現するために用いる記号を、音声合成用記号と呼ぶ。音声合成用記号には様々な形式があり得るが、ここでは、一連の音声を構成する音韻的情報と、主としてポーズや声の高さとして表現される韻律的情報を同時に表記したものを想定する。そのような音声合成用記号の例として、ＪＥＩＴＡ（電子情報技術産業協会）規格ＩＴ−４００６「日本語テキスト音声合成用記号」がある（非特許文献１参照）。この記号だけで音声の感情表現等まで表現することは困難だが、少なくとも通常の読み上げ音声の言語的特徴を記述するために必要な情報は含まれている。
【０００４】
一方、音声波形を合成する処理は、音声合成用記号の通りの波形が合成されるように行われる。したがって、日本語テキストの正確な読み上げを実現するためには、日本語の漢字仮名交じり文に対応した、正確な音声合成用記号を作成すればよい。
【０００５】
任意の日本語テキストから音声合成用記号を生成する処理は、日本語漢字仮名交じり文を形態素と呼ばれる言語表現上意味を持つ最小の単位に区切り、形態素ごとの読みを付与し、形態素列等を参照し形態素の情報を適切に変形し、必要に応じ、ポーズ等の韻律的境界を挿入し、それらを接続することで実現できる。この際、各形態素の読みは、形態素辞書情報として予め作成し格納しておく。
【０００６】
ただし、形態素は、言語学的な定義の通りである必要はなく、一連の処理を行う上で適当に区切られた単位でもよい。例えば、形態素の並びをより適切に処理するために、複数の形態素で構成される句（複合名詞句等）を便宜的に１つの形態素と見なして処理することがある。よって以下においては、形態素とは、その用途の観点から処理上の最小単位となるべく適当に設定された文字の並び（文字列）をいい、また、全ての文は、この文字列を連結することで構成できるものとする。また、ある文に対して、それを形態素に分割する処理は、一般に形態素解析処理と呼ばれ、音声合成処理に限らず、文の構成要素の抽出等で用いられている。
【０００７】
形態素解析の方法として、以下では、最小コスト法に基づく方法を説明する。最小コスト法による形態素解析では、まず、各形態素の出現頻度を反映させた生起コスト関数と、連続する形態素の繋がりやすさを表す連接コスト関数を予め定義しておく。そして、形態素辞書に登録された形態素から、入力テキストに一致し、かつ文全体のコストが最小となるような形態素列を探すことで、適切な形態素列を得る。通常、生起コスト関数は出現頻度が高い形態素ほど、連接コスト関数は繋がりやすい形態素列ほど、その値が小さくなるよう定義される。
【０００８】
すなわち形態素列をＭ＝（ｍ１，…，ｍｎ）、生成コスト関数をＣｔ（ｍ）、連接コスト関数をＣｃ（ｍ（ｉ−ｋ＋１），…，ｍｉ）とするとき、コストの総和Σ Ｃｔ ＋Σ Ｃｃが最小となる形態素列Ｍ、すなわちａｒｇｍｉｎ （Σ Ｃｔ ＋Σ Ｃｃ）を求めることで形態素解析処理が行われる。ただし、ここで連接コスト関数はｋ個の形態素の並びで決定されるものとする。
【０００９】
このようにコスト関数を定義すると、コスト的な最適な全体系列を構成する部分系列は、その部分系列だけを見てもコスト的には最適となる。したがって、コスト的に最適でない部分系列は、最適な全体系列の構成要素にはならないので、探索において考慮する必要がなくなる。このように、最適系列を構成する可能性がない部分系列を考慮しないように進める最適系列の探索法は一般に動的計画法と呼ばれ、効率よく最適系列の探索を行うことができる。
【００１０】
コスト関数の構成要素のうち、生起コストに関する情報は形態素辞書の内容として保持することができる。一方、連接コストについては連接表と呼ばれるテーブルを予め作成しておき、その表の値を使うことで求めることができる。ただし、全ての形態素列の組み合わせの表を作ることは難しいので、例えば形態素の品詞型だけに注目した表を用いることも行われる。なお、これらの関数は値が大きいほど好ましいものとして定義される場合もある。その場合は、文全体の値が最も大きくなる形態素系列を探すことになる。
【００１１】
形態素解析における形態素列の探索処理では可能な形態素の並び全てを調べることが好ましい。そのため、通常の形態素解析では、形態素の候補を得るために、文中の任意の位置から始まる部分文字列を検索のキーとして、形態素辞書に登録された形態素のうち、キーの先頭部分文字列に等しい形態素全てを取り出す、という処理が繰り返し行われる。このような探索は、一般にＣｏｍｍｏｎ  ｐｒｅｆｉｘ  ｓｅａｒｃｈ（共通接頭辞探索）と呼ばれる。これを比較的効率よく表現するデータ構造として、ｔｒｉｅ（トライ）やＰａｔｒｉｃｉａ  ｔｒｅｅ（パトリシア木）が知られている。
【００１２】
ここで、トライは複数の文字列を格納するための多分木構造で、ここでは、各文字列の先頭文字から順に各文字を木の枝として格納していくことで構築されものとする。トライでは、文字列間の共通な接頭辞が木構造上で共有されるので、検索対処の文字列の接頭辞となる全ての登録語は、木構造の１つのパス上に配置される。つまり、トライのルート（根）から検索キーに沿って木をリーフ（葉）方向にたどって行くことで、ｃｏｍｍｏｎ  ｐｒｅｆｉｘ  ｓｅａｒｃｈを実現できる。
【００１３】
またパトリシア木とは、先述のトライにおいて、子が１つしかないノードを、その子ノードと結合させたものをいう。この結合によって、１つの枝には１文字だけでなく、連続する複数の文字が格納されることもある。以下ではパトリシア木の様なものも含めて、共通接頭辞がデータ構造上で共有され、全体として木構造となっているものをまとめてトライと呼ぶ。
【先行技術文献】
【非特許文献】
【００１４】
【非特許文献１】「日本語テキスト音声合成用記号」ＪＥＩＴＡ規格 ＩＴ−４００６、２０１０年３月
【発明の概要】
【発明が解決しようとする課題】
【００１５】
日本語に限らず、多くの言語では、文字表記からその読み方が規則的に決まらないことがある。あるいは規則があっても複雑なため、規則的に決めることが現実的でない場合がある。例えば「行った」という文字列に対して、それを「いった」と読むべきなのか「おこなった」と読むべきなのかは、その前後の文脈で決まるが、一般にその文脈までを考慮した自動処理は困難である。そこで、例えば日本語テキストにおいては、例えばルビのように読みに関する付加的な情報を付与し、その読み方・意味を示すことがある。
【００１６】
しかし、多くのケースでそのような情報は部分的にのみ与えられる。さらに、ルビのような情報が付与されている場合であっても、アクセント等に関する情報は通常付与されてないため、音声合成処理を行うためには何らかの形でアクセント型等を決定する必要がある。
【００１７】
このことを踏まえ、音声合成処理で高い読み・アクセント精度を実現するためには、例えば、ルビのような情報が与えられた場合でも、それを直接読み情報として使うのではなく、通常の音声合成処理と同様の形態素解析処理を行い、形態素情報に予め結び付けておいた読み情報に基づき、そのアクセント型等を決定する方法が考えられる。この場合のルビ情報は、形態素に付与された複数の読み情報から正解を選択するための情報として使われる。
【００１８】
しかし、形態素解析の段階から読みを考慮することで、より正確な形態素解析を実現できる。具体的には表記文字列が同じでも読みが異なる形態素は異なる形態素として扱い、それぞれの形態素の生成コストや連結コストにそれぞれ適切な値を設定することで、最小コスト法に基づく形態素解析をより高精度に行うことができる。この場合、ルビのような情報がある場合は、形態素候補としてルビに合致する形態素のみを候補として列挙し、一方、ルビがなければ、表記文字列が一致する全ての形態素を候補として列挙し、それらの最適な系列を探索することになる。
【００１９】
このような処理を効率的に実施するためには、形態素解析における形態素辞書参照段階で、形態素に関する読み情報を効率的に取得できる必要がある。このような処理においては、ルビ等を通じて与えられる、形態素の読みに関する制約条件にはマッチしない形態素候補を、形態素候補列挙のできるだけ処理の早い段階で捨てることができれば、その処理を効率化できる。
【００２０】
しかし、例えば木構造に基づく形態素辞書を用いた場合、読み情報は木のリーフにのみ結び付けられていたため、木をルートから辿って行きリーフノードに達するまで、辿った部分までの部分的な読み情報も得ることができない。つまり、読みに関する制約条件にマッチしない形態素候補についても、木構造辞書のリーフノードまで辿る必要がある。
【００２１】
共通接頭辞探索を行うための従来のトライに基づく形態素辞書構造では、形態素終端の位置にあるノード、すなわちルートノードからリーフノード方向に木を辿った場合に、表記の最後の文字に対応する枝の直後のノードに、読みに関する情報も含め、形態素に関する情報を全て結び付けていた。あるいは、形態素辞書上で文字列終端を示す符号を定義した場合は、対応する形態素に関する全ての情報を終端文字の枝の直下のリーフノードに結び付けていた。
【００２２】
つまり、形態素終端に対応するノードまで木を辿って初めてその形態素の情報を得られていた。このため、読みに関する制約の付きの形態素解析処理を行う場合、共通接頭辞探索により辞書登録された形態素を表記文字列情報だけを使ってまず取り出してから、読み制約に合わない形態素候補を仮説から捨てる操作を行う必要がある。
【００２３】
本発明は、このような事情に鑑みてなされたものであり、形態素解析の際に各ノードで条件を満たさない候補を破棄することができ、処理を効率化することができる辞書装置、形態素解析装置、データ構造ならびに形態素解析の方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２４】
（１）上記の目的を達成するため、本発明の辞書装置は、ルートからリーフへ枝分かれするトライに基づく構造で文字列のデータを格納する形態素解析用の辞書装置であって、形態素を構成する文字または部分文字列は、枝に対応付けられて格納され、少なくとも前記枝を接続するノードのルート側最近接の枝に対応付けられた文字または部分文字列に関する情報が、すべてのノードに対応付けられて格納されていることを特徴としている。
【００２５】
これにより、形態素解析装置は、共通接頭辞探索の途中で、登録形態素の先頭から途中までの読みに関する情報を参照できる。例えば、先頭一文字に読みが読み制約を満たさない場合には、その時点で、その文字と読みから始まる登録形態素全てが、形態素解析の正解にならないことが確定する。そして、それ以上トライ構造の辞書を辿る必要がなくなり、処理を効率化できる。これにより、形態素解析の際に各ノードで条件を満たさない候補を破棄することができ、処理を効率化することができる。
【００２６】
（２）また、本発明の辞書装置は、前記ノードに、ルート側最近接の枝に対応付けられた文字または部分文字列の読みに関する情報および前記読みに関する情報の識別情報と、前記読みに関する情報に対してルート側際近接のノードに対応付けられて読み情報の識別情報が格納されていることを特徴としている。これにより、ルートから続く読みのうち複数の読みが生じるノードで条件を満たさない候補を破棄できる。
【００２７】
（３）また、本発明の辞書装置は、前記ノードに、ルートから前記ノードに至る経路の枝に対応付けられた文字または部分文字列を順に連結して構成した文字列の読みに関する情報が対応付けられて格納されていることを特徴としている。これにより、ルートから続く読みのうち複数の読みが生じるノードで条件を満たさない候補を破棄できる。
【００２８】
（４）また、本発明の形態素解析装置は、文字列をもとに、これに関する読みの情報を出力する形態素解析装置であって、（１）から（３）のいずれかに記載の辞書装置と、入力された文字列を形態素に区切り、文字列の順に沿って前記形態素ごとに前記入力された文字列を前記辞書装置に照合し、前記形態素ごとに読みに関する情報の候補を出力する照合部と、前記入力された文字列に付随する所定の制約を参照し、前記ノードごとに読みに関する情報が前記所定の制約を満たすか否かを判定し、前記所定の制約を満たさない候補を破棄する制約参照部と、を備えることを特徴としている。これにより、形態素の読みを照合していく処理において条件を満たさない候補を早い段階で破棄できるため、処理を効率化できる。
【００２９】
（５）また、本発明のデータ構造は、コンピュータ内の記憶部に、ルートからリーフへ枝分かれするトライに基づいて構成される形態素解析用の辞書のデータ構造であって、形態素を構成する文字または部分文字列は、枝に対応付けられて格納され、少なくとも前記枝を接続するノードのルート側最近接の枝に対応付けられた文字または部分文字列に関する情報が、すべてのノードに対応付けられて格納されていることを特徴としている。これにより、形態素解析の際に各ノードで条件を満たさない候補を破棄することができ、処理を効率化することができる。
【００３０】
（６）また、本発明の方法は、文字列をもとに、これに関する読みの情報を出力する形態素解析の方法であって、入力された文字列を形態素に区切り、文字列の順に沿って前記形態素ごとに前記入力された文字列を（１）から（３）のいずれかに記載の辞書装置に照合し、前記形態素ごとに読みに関する情報の候補を出力するステップと、前記入力された文字列に付随する所定の制約を参照し、前記ノードごとに読みに関する情報が前記所定の制約を満たすか否かを判定し、前記所定の制約を満たさない候補を破棄するステップと、をコンピュータを用いて実行することを特徴としている。これにより、形態素の読みを照合していく処理において条件を満たさない候補を早い段階で破棄できるため、処理を効率化できる。これにより、形態素の読みを照合していく処理において条件を満たさない候補を早い段階で破棄できるため、処理を効率化できる。
【００３１】
（７）また、本発明のプログラムは、文字列をもとに、これに関する読みの情報を出力する形態素解析のプログラムであって、入力された文字列を形態素に区切り、文字列の順に沿って前記形態素ごとに前記入力された文字列を（１）から（３）のいずれかに記載の辞書装置に照合し、前記形態素ごとに読みに関する情報の候補を出力する処理と、前記入力された文字列に付随する所定の制約を参照し、前記ノードごとに読みに関する情報が前記所定の制約を満たすか否かを判定し、前記所定の制約を満たさない候補を破棄する処理と、を含む一連の処理をコンピュータに実行させることを特徴としている。これにより、形態素の読みを照合していく処理において条件を満たさない候補を早い段階で破棄できるため、処理を効率化できる。
【発明の効果】
【００３２】
本発明によれば、形態素解析の際に各ノードで条件を満たさない候補を破棄することができ、処理を効率化することができる。
【図面の簡単な説明】
【００３３】
【図１】本発明の形態素解析装置を示すブロック図である。
【図２】本発明の形態素解析装置の動作を示すフローチャートである。
【図３】従来のデータ構造の一例を示す図である。
【図４】本発明のデータ構造の一例を示す図である。
【図５】本発明のデータ構造の一例を示す図である。
【発明を実施するための形態】
【００３４】
次に、本発明の実施の形態について、図面を参照しながら説明する。以下の説明において表記文字列が同じであっても読みが異なる形態素は、異なる形態素として扱う。
【００３５】
［第１の実施形態］
（形態素解析装置の構成）
図１は、形態素解析装置１００を示すブロック図である。図１に示すように、形態素解析装置１００は、照合部１１０、辞書装置１２０、制約参照部１３０、決定部１４０および連接表記憶部１５０を備え、入力された文字列をもとに、読みに関する情報のうち適したものを決定し出力する。
【００３６】
照合部１１０は、入力された文字列（漢字仮名交じり文）を形態素に区切り、文字列の順に沿って形態素ごとに入力された文字列を辞書装置１２０に照合し、読みに関する情報の候補を出力する。辞書装置１２０内のデータは格納された文字列に沿った順で照合される。
【００３７】
辞書装置１２０は、文字列のデータおよび文字列のデータに関する情報を格納する。辞書装置１２０は、ルートからリーフへ枝分かれするトライに基づく構造で文字列のデータを格納する。辞書装置１２０は、そのインデックスに発音情報を埋め込んだデータ構造のデータを有している事が好ましい。
【００３８】
例えば、辞書装置１２０において、形態素を構成する文字または部分文字列は枝に対応付けられて格納される。少なくとも枝を接続するノードのルート側最近接の枝に対応付けられた文字または部分文字列に関する情報が、すべてのノードに対応付けられて格納されている。ノードには、ルートからノードに至る経路の枝に対応付けられた文字または部分文字列を順に連結して構成した文字列の読みに関する情報が対応付けられて格納されていることが好ましい。これにより、ルートから続く読みのうち複数の読みが生じるノードで条件を満たさない候補を破棄できる。
【００３９】
そのノードまでの部分文字列と一致する形態素が辞書登録されている場合は、そのフラグを１に、ない場合は０とする。また、フラグが１となっている読み関する情報に対応する形態素の生成コスト情報は仮に読み情報毎に設定する。なお、形態素の生成コスト情報は形態素の品詞型等、生成コスト関数のパラメータとなる情報も含む。
【００４０】
トライにより構成されたデータ構造を用いて形態素解析処理を行う場合、共通接頭辞探索として、トライのルートノードからリーフノード方向に木をたどり、ノード上の形態素を候補して出力する。
【００４１】
制約参照部１３０は、入力された文字列に付随する所定の制約を参照し、ノードごとに読みに関する情報が所定の制約を満たすか否かを判定し、所定の制約を満たさない候補を破棄する。これにより、形態素の読みを照合していく処理において条件を満たさない候補を早い段階で破棄できるため、処理を効率化できる。
【００４２】
制約参照部１３０は、入力された文字列に付随する読みに関する情報を制約として参照し、照合の結果として出力された候補のうち制約を満たす候補を出力する。辞書装置１２０のデータ構造を利用することで、形態素ごとに読みに関する情報を容易に参照することができるため、読みの情報の制約を考慮した形態素解析処理を実現できる。
【００４３】
決定部１４０は、照合参照部１３０が出力した形態素候補の最適な並びをコストに基づき決定し、形態素解析結果の形態素列として出力する。連接表記憶部１５０は、部分文字列とその読みが連続したものと対応する各コストを表す連接表を記憶している。
【００４４】
（トライに基づく特有のデータ構造）
辞書装置１２０では、トライに基づく形態素辞書のリーフノードを含む各ノードにおいて、ルートから各ノードまでに対応する部分文字列の読みに関する情報（部分文字列に関する情報）が格納されている。ただし、読みに関する情報は、複数種類登録される場合もある。また、形態素終端を表す符号は表記文字列側には設けず、各読み情報に対して、その読み情報に直接対応する形態素があるか否かを示す符号（ここでは終端フラグと呼ぶ）を設定する。
【００４５】
（形態素解析装置の動作）
形態素解析装置１００による共通接頭辞探索の動作例を説明する。図２は、形態素解析装置の動作を示すフローチャートである。まず、変数ｉを１に、トライのノードを表す変数ｎにトライのルートノードを設定する（ステップＳ１）。次に、探索文字列ｓのｉ番目の文字と一致するトライのノードｎの枝があるか否かを判定し（ステップＳ２）、あると判定された場合にはステップＳ３に進み、ないと判定された場合には処理を終了する。
【００４６】
ステップＳ３では探索文字列ｓのｉ番目の文字と一致するnの枝のリーフ側最近接のノードを新たに変数ｎに設定して、ステップＳ４に進む。ステップＳ４では、探索文字列ｓのｉ番目の文字までに対応する読み情報が読み制約を満たすか否かを判定し、満たす場合にはステップＳ５に進み、満たさない場合には処理を終了する。このようにして、音声合成等で必要とされる制約付きの形態素解析処理を、より効率的に実現できる。
【００４７】
ステップＳ５では、ノードｎを終端とする形態素があるか否かを判定し、ある場合にはステップＳ６へ進み、ない場合にはステップＳ７へ進む。ステップＳ６では、ノードｎを終端とする形態素のうち、読み制約を満たす形態素候補を形態素候補リストに追加し、ステップＳ７へ進む。ステップＳ７ではｉを１増加させて、ステップ２へ戻る。以上のような動作は、コンピュータにプログラムを実行させることで実現可能である。
【００４８】
（具体例） 
図３は、従来のデータ構造の一例を示す図である。従来の形態素辞書構造では、トライのノードに、そのノードを終端とする形態素に対応する形態素情報が結び付けられている。このため、読み情報に関する制約つき探索を行う場合、共通接頭辞探索により形態素候補の全てを列挙してから、各形態素情報を調べて、読み制約を満たさない候補を捨てる処理が必要となる。
【００４９】
これに対し、形態素辞書構造をルートノードから当該ノードに対応する文字までの読み情報付で構築した場合、発音情報を単に読み飛ばすのではなく、発音情報が、与えられた読み情報に関する制約を満たすか否かをトライの探索の段階でチェックできる。
【００５０】
このようにして読み情報の制約条件を満たさない形態素を、より早い時点で形態素候補の列挙対象から除外することができる。その結果、列挙対象の形態素の候補数が減り、処理量やメモリ使用量を減らすことができる。
【００５１】
以下では表記文字列「三田」に関する例を考える。まず、本例では、「三田」について読みの異なる、「ミタ」「サンダ」「サンタ」「ミツダ」の４つの形態素が辞書登録されている。さらに「三田図書館」に対する読みを一意に確定させるために、「ミタトショカン」という読みで「三田図書館」が形態素として登録されているとする。また、形態素辞書には「図書館」、「に」（助詞）、「行く」という形態素が登録されているとする。さらに、ここでは説明を簡単にするため、形態素辞書にそれ以外の形態素は登録されていないとする。
【００５２】
ここで、「三田図書館に行く」を形態素解析すると、結果として、「三田」「図書館」「に」「行く」あるいは、「三田図書館」「に」「行く」の２つの可能性がある。先述のように「三田図書館」という形態素を登録するのは、この文字列に対する読みを確定させるためなので、多くの場合で、後者が形態素解析結果となるように生成コストや連結コストが設定される。
【００５３】
しかし、その結果として「三田図書館に行く」は「ミタトショカンニイク」と読まれ、正解が「サンダトショカンニイク」であってもそのように読ませることはできない。また、仮に「さんだ図書館に行く」と読みを制約した個所を仮名表記に変えためた形で入力されると「さんだ」の部分は辞書登録されていないため、形態素解析結果上は候補がない。そこで通常の形態素解析では、「さんだ」の部分を未知語の形態素として一時的に捉え、文頭から文末までの形態素列を強制的に作成する。
【００５４】
しかし、そのような形態素解析では解析誤りが生じやすく、さらに「さんだ」は形態素辞書登録された語ではないため、アクセント型等の読みに関する正確な情報を得ることができない。これはアクセント型誤り等の不自然な読みの原因となる。
【００５５】
これに対し、「三田＜サンダ＞図書館に行く」（＜＞はルビ等の情報に基づく読み制約指定を表す）という入力を受け付けることができれば、先述の「三田」「図書館」「に」「行く」と、「三田図書館」「に」「行く」の２つの候補から、後者が正解にならないことがまず分かり、「三田」の読みとして「サンダ」を選択すれば良いことが分かる。ただし、この方法では可能な形態素列の全ての組み合わせをまず列挙した上で、読み制約を満たす候補を選ぶ、という処理が必要になる。
【００５６】
ところで、形態素解析処理では「三田図書館に行く」、「田図書館に行く」、「図書館に行く」、といったような入力文字列に対する各部分文字列に対して共通接頭辞探索を行い、形態素候補をそれぞれ列挙することになる。
【００５７】
最初の「三田図書館に行く」に対する共通接頭辞探索の時点で読み制約を満たさない「三田図書館」を候補から除外できれば、列挙する形態素候補数が減り、より少ない消費メモリと計算量で正解となる形態素列を得ることができる。本発明ではそのためにトライ構造を有する辞書の中間ノードにおいても、そこまでの読みに関する情報を含めることで、読み制約を満たさない形態素候補を候補として列挙しないようできる。
【００５８】
（具体例への適用）
上記の例は、第１の実施形態のデータ構造で表すことができる。図４は、第１の実施形態のデータ構造の一例を示す図である。図４に示す例では、中間ノードまでの表記文字列に対応する読み情報すべてを中間ノードに登録する。読み制約が与えられた共通接頭辞探索において、ルートノードからトライをたどっていく際、読み制約を満たす読みがなくなった時点で、読み制約を満たす形態素候補がないことが分かり、それ以上トライをたどって形態素候補を探す処理を行う必要がなくなり、処理量を削減できる。
【００５９】
この場合、例えば「三田」（ミタ）、「三田」（サンダ）、「三田」（サンタ）、「三田」（ミツダ）および「三田図書館」（ミタトショカン）という５単語で構成される辞書において、その構造は図３のようになる。このような例では、「三田図書館に行く」に対する共通接頭辞探索で、「図」の文字までトライをたどった段階で、「三田」の部分の読みが「サンダ」となる形態素が、トライをこれ以上たどっても存在しないことが分かる。
【００６０】
［第２の実施形態］
上記の実施形態では、ノードにルートからそのノードに至るまでの読みに関する情報が格納されているが、ノードにノードごとの差分の情報が格納されていてもよい。すなわち、ノードには、ルート側最近接の枝に対応付けられた文字または部分文字列の読みに関する情報および読みに関する情報の識別情報と、読みに関する情報に対してルート側際近接のノードに対応付けられて読み情報の識別情報が格納されている。これにより、ルートから続く読みのうち複数の読みが生じるノードで条件を満たさない候補を破棄できる。
【００６１】
上記の実施形態では各ノードごとに読み情報を配置しているが、各ノードにおける読み情報は、親（ルートノード側）ノードからの追加差分情報として格納してもよい。この場合、各ノードに複数の読み情報が格納されている場合を考えると、どの情報からの差分なのかを決定するための情報が必要となる。
【００６２】
これには、各ノードのそれぞれの読み情報に対しＩＤ番号を設定し、それぞれの読み情報に対して、親ノードにおけるどのＩＤの読み情報からの差分なのかを表す情報を追加すればよい。この方法により、複数形態素間で読み情報の共通部分が共有されるので、形態素辞書における読み情報の合計サイズを小さくすることができる。したがって、それぞれの情報は、当該ノードにおける読みを識別する「読みＩＤ」、親ノードで用いた読みＩＤを示す「前の読みＩＤ」、読み情報、終端フラグの４つで構築される。
【００６３】
（具体例への適用）
上記の例を第２の実施形態のデータ構造で表すことができる。図５は、第２の実施形態のデータ構造の一例を示す図である。第２の実施形態では、中間ノードに、前の（トライのおけるルートノード側の）中間ノードまで読みに対する差分情報を格納する。差分のみを格納することで、各ノードに結びつけるデータのサイズは小さくなるが、それぞれのノードには複数の読みが格納される場合があるため、前のノードのいずれの読みに対する差分なのかを示す識別子も合わせて格納する。
【００６４】
この場合、共通接頭辞探索処理において、各ノードで、読み制約を満たす読みに対する識別子のリストを作成する必要がある。あるノードにおいて、その前の中間ノードにおいて読み制約を満たした読みに対する差分のみが有効である。
【００６５】
この場合、例えば「三田」（ミタ）、「三田」（サンダ）、「三田」（サンタ）、「三田」（ミツダ）および「三田図書館」（ミタトショカン）という５単語で構成される辞書において、その構造は図５のようになる。この構造により共通接頭辞探索におけるトライの探索の途中において、読み制約を満たす候補の有無を判定でき、無い場合には共通接頭辞探索を打ち切ることができるのは第１の実施形態と同様であり、処理も同様となる。
【００６６】
（バリエーションなど）
これまでの説明では、形態素の表記文字列の側に終端符号を設定せず、読み情報の側に終端フラグを設定していたが、表記文字列側に終端符号文字を定義してもよい。この場合、終端符号文字に対応する枝の直下のノードの全ての読み情報は、先の説明における終端フラグが１になっていることに相当し、一方それ以外のノードの全ての読み情報は、終端フラグが０になっていることに相当する。
【００６７】
なお、読み情報を考慮した共通接頭辞探索において読み情報の制約は、完全一致条件に限らない。ルビでは拗音を例えば「きゃ」ではなく「きや」と記載することが多いが、このような事例に対応するために、曖昧性を認めた判断基準とする方法も可能である。この場合、例えば編集距離を用い、読み情報に関し、一定文字数まで置換・挿入・脱落を認める、といった方法が可能である。実際、ＪＥＩＴＡ  ＩＴ−４００６の仮名レベル表記で定義されているような、アクセント型情報や韻律境界情報（アクセント句境界情報など）を読み制約として記述することは容易ではないので、このような曖昧性を持たせることは有効である。
【００６８】
また、読み情報についても、ＪＥＩＴＡ  ＩＴ−４００６のような直接的な記法だけでなく、例えば、読みの揺らぎに対する付加情報として「読み記号表記上で２記号まで置換を許容する」「読み情報先頭において濁音化を認める」といった規則をそれを表す符号の形で読み情報に追加し、それを曖昧性を認めた判断基準で考慮してもよい。これにより、例えば連濁（２形態素が連結した場合の読みで、主として後続形態素の先頭が濁音化する現象）等の影響で生じる読み指示の揺らぎを、処理において考慮することができる。
【００６９】
また、本発明の方法において、読み情報以外の以外を格納し、形態素候補列挙の際の、列挙判定の有無にその情報を用いてもよい。 例えば形態素の生起コストが、文字表記における各文字の生起コストの和で定義されるような形態素解析システムにおいては、文字生起コストを表す記号を定義し、文字とこの記号の組を並べてトライのインデックスを構成することで、トライの木構造そのものに、形態素の生起コストに関する情報を直接埋め込むことができる。
【００７０】
この構造では、トライをたどる過程で生起コストの値が得られるので、形態素する候補を列挙する過程で形態素生成コストが大きい候補を捨てといったような、形態素の生起コストを考慮した候補の列挙を行うことができる。また、格納する情報は、読み情報と文字生起コストの組み合わせ等、様々な情報の組み合わせでもよい。
【００７１】
また、上記の説明で、ノードに結び付けられる表は3種類の情報で構成されていたが、表に含める情報の構成はこれに限定されない。例えば、読みの揺らぎに対する付加情報として「読み記号表記上で２記号まで置換を許容する」「読み情報先頭において濁音化を認める」といった情報を加えてもよい。これにより、例えば連濁（２形態素が連結した場合の読みで、主として後続形態素の先頭が濁音化する現象）等の影響で生じる読み指示の揺らぎを、処理において考慮することができる。なおこの場合、辞書登録されている読み情報を形態素情報として出力するのではなく、読みに関する制約情報を強い読み指定と見なして、指定された読みをそのまま形態素情報として出力する方法も可能である。
【００７２】
さらに、全ての表記文字列を前後逆順にした形での辞書構成も可能である。例えば、文字列を前後逆にした形態素辞書を構築しておき、文の形態素解析では、文の末尾から先頭方向に向かって形態素候補を列挙する方法が考えられる。この場合、最終的に得られる最適な形態素列が、文頭から文末に向かって確定していくが、多くの装置では、形態素解析結果も文頭から文末方向に向かって出力するため、形態素解析結果を文末から文頭方向に確定させていく場合と異なり、形態素解析結果を一時的に保存する必要がなくなる、といった利点がある。
【符号の説明】
【００７３】
１００  形態素解析装置
１１０  照合部
１２０  辞書装置
１３０  制約参照部
１４０  決定部
１５０  連接表記憶部
ｎ  トライのノード
ｓ  探索文字列
【図１】
2015191317.tif 000003
【図２】
2015191317.tif 000004
【図３】
2015191317.tif 000005
【図４】
2015191317.tif 000006
【図５】
2015191317.tif 000007