(57)【特許請求の範囲】
【請求項１】
入力文字列に対応する形態素解析結果を出力する形態素解析装置であって、
漢字仮名交じり文である入力文字列から部分文字列を切り出して生成する部分文字列生成部と、
漢字仮名交じり文の部分文字列になりうる文字素列と、前記文字素列に対応する読み表記としての中間表現の組と、を対応付けて格納する中間表現辞書を用いて、前記生成された部分文字列から中間段階として変換されうる１以上の読み表記を中間表現として生成する中間表現生成部と、
前記中間表現の組と、形態素候補となりうる文字素列と、を対応付けて格納する形態素辞書を用いて、前記生成された中間表現および前記中間表現の連結に対応する形態素候補を列挙する形態素列挙部と、
前記列挙された形態素候補のうち、所定の条件を満たす形態素列を探索して出力する形態素列探索部と、を備え、
前記所定の条件は、前記列挙された形態素候補のそれぞれの出現頻度に対応する尺度と、前記列挙された形態素候補が連続する場合の繋がりやすさに対応する尺度と、の組み合わせで定義される尺度の最適化であり、
前記中間表現辞書および前記形態素辞書の少なくとも一方は、部分文字列を構成しうる文字素および前記文字素に対応する中間表現を交互に並べた符号列で辞書データとして格納し、前記文字素列から前記中間表現への変換または前記中間表現から前記形態素列への変換に用いることを特徴とする形態素解析装置。
【請求項２】
前記中間表現辞書および前記形態素辞書の一方の全部または一部を、他方の全部または一部として用いることを特徴とする請求項１記載の形態素解析装置。
【請求項３】
前記中間表現辞書および前記形態素辞書の一方は、文字素および前記文字素に対応する中間表現を交互に並べた符号列で第１の辞書データとして格納し、前記文字素列から前記中間表現への変換に用い、
他方は、前記第１の辞書データとして格納された文字素列の一部または全部の先頭から所定の文字素数までの文字素列に対して、文字素および前記文字素に対応する中間表現の格納の順序を前記第１の辞書データとは逆順で交互に並べた符号列で格納し、前記中間表現から前記形態素列への変換に用いることを特徴とする請求項２記載の形態素解析装置。
【請求項４】
辞書を有する形態解析装置のコンピュータに実行させることで、入力文字列に対応する形態素解析結果を出力するプログラムであって、
漢字仮名交じり文である入力文字列から部分文字列を切り出して生成する処理と、
漢字仮名交じり文の部分文字列になりうる文字素列と、前記文字素列に対応する読み表記としての中間表現の組と、を対応付けて格納する中間表現辞書を用いて、前記生成された部分文字列から中間段階として変換されうる１以上の読み表記を中間表現として生成する処理と、
前記中間表現の組と、形態素候補となりうる文字素列と、を対応付けて格納する形態素辞書を用いて、前記生成された中間表現および前記中間表現の連結に対応する形態素候補を列挙する処理と、
前記列挙された形態素候補のうち、所定の条件を満たす形態素列を探索して出力する処理と、を含み、
前記所定の条件は、前記列挙された形態素候補のそれぞれの出現頻度に対応する尺度と、前記列挙された形態素候補が連続する場合の繋がりやすさに対応する尺度と、の組み合わせで定義される尺度の最適化であり、
前記中間表現辞書および前記形態素辞書の少なくとも一方は、部分文字列を構成しうる文字素および前記文字素に対応する中間表現を交互に並べた符号列で辞書データとして格納し、前記文字素列から前記中間表現への変換または前記中間表現から前記形態素列への変換に用いることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力された文に対応する形態素列を出力する形態素解析装置およびプログラムに関する。
【背景技術】
【０００２】
音声合成技術の代表的な利用形態にテキスト音声変換（Ｔｅｘｔ−Ｔｏ−Ｓｐｅｅｃｈ、ＴＴＳ）がある。テキスト音声変換は、入力されたテキストに対応する音声波形を合成する処理である。以下では、この一連の処理は、入力されたテキストを解析してテキストの読み方に関する情報を生成する処理と、読み方に関する情報から音声波形を合成する処理の、大きく２つに分ける。また、入力は日本語の漢字仮名交じり文であるとする。
【０００３】
以下では、読み方に関する情報を表現するために用いる記号を、音声合成用記号と呼ぶ。音声合成用記号には様々な形式があり得るが、ここでは、一連の音声を構成する音韻的情報と、主としてポーズや声の高さとして表現される韻律的情報を同時に表記したものを想定する。そのような音声合成用記号の例として、ＪＥＩＴＡ（電子情報技術産業協会）規格ＩＴ−４００６「日本語テキスト音声合成用記号」がある（非特許文献１参照）。この記号だけで音声の感情表現等まで表現することは困難だが、少なくとも通常の読み上げ音声の言語的特徴を記述するために必要な情報は含まれている。
【０００４】
一方、音声波形を合成する処理は、音声合成用記号の通りの波形が合成されるように行われる。したがって、日本語テキストの正確な読み上げを実現するためには、日本語の漢字仮名交じり文に対応した、正確な音声合成用記号を作成すればよい。
【０００５】
任意の日本語テキストから音声合成用記号を生成する処理は、日本語漢字仮名交じり文を形態素と呼ばれる言語表現上意味を持つ最小の単位に区切り、形態素ごとの読みを付与し、形態素列等を参照し形態素の情報を適切に変形し、必要に応じ、ポーズ等の韻律的境界を挿入し、それらを接続することで実現できる。この際、各形態素の読みは、形態素辞書情報として予め作成し格納しておく（特許文献１参照）。
【０００６】
ただし、形態素は、言語学的な定義の通りである必要はなく、一連の処理を行う上で適当に区切られた単位でもよい。例えば、形態素の並びをより適切に処理するために、複数の形態素で構成される句（複合名詞句等）を便宜的に１つの形態素と見なして処理することがある。よって以下においては、形態素とは、その用途の観点から処理上の最小単位となるべく適当に設定された文字の並び（文字列）をいい、また、全ての文は、この文字列を連結することで構成できるものとする。
【０００７】
このように、ある文に対して、それを形態素に分割する処理は、一般に形態素解析処理と呼ばれ、音声合成処理に限らず、文の構成要素の抽出等で用いられている。ＴＴＳシステムの読みの正しさは形態素解析の精度に強く依存することになるので、ＴＴＳシステムでは高精度な形態素解析が求められる。一方で、Ｗｏｒｌｄ Ｗｉｄｅ Ｗｅｂ（ＷＷＷ）の大量のテキストデータからデータ抽出を行うような場合とは異なり、ＴＴＳシステムでは、通常、短時間に大量のテキストデータ処理する必要はない。
【０００８】
例えば、１文の処理時間が０．１秒程度を要し、それがＴＴＳシステムにおける処理遅延時間を０．１秒遅らせることになっても、その処理時間は多くの場合において問題にはならない。つまり、大量のテキストを処理するための形態素解析装置との比較において、高速な処理は不要である。一方で、スマートフォンのような携帯端末上でのＴＴＳシステムのニーズがあることを考えると、システムの速度を上げることよりも、システムのサイズをより小さくすることの方が重要である。つまり、この要求から、ＴＴＳシステムを対象とする形態素解析装置は、大量のテキストを処理するための形態素解析装置とは異なる設計となり得る。
【０００９】
まず、形態素解析の方法として、以下では、最小コスト法に基づく方法を説明する。最小コスト法による形態素解析では、まず、各形態素の出現頻度を反映させた生起コスト関数と、連続する形態素の繋がりやすさを表す連接コスト関数を予め定義しておく。そして、形態素辞書に登録された形態素から、入力テキストに一致し、かつ文全体のコストが最小となるような形態素列を探すことで、適切な形態素列を得る。通常、生起コスト関数は出現頻度が高い形態素ほど、連接コスト関数は繋がりやすい形態素列ほど、その値が小さくなるよう定義される。
【００１０】
すなわち形態素列をＭ＝（ｍ１，…，ｍｎ）、生起コスト関数をＣｔ（ｍ）、連接コスト関数をＣｃ（ｍ（ｉ−ｋ＋１），…，ｍｉ）とするとき、コストの総和ΣＣｔ＋ΣＣｃが最小となる形態素列Ｍ、すなわちａｒｇｍｉｎ（ΣＣｔ＋ΣＣｃ）を求めることで形態素解析処理が行われる。ただし、ここで連接コスト関数はｋ個の形態素の並びで決定されるものとする。
【００１１】
このようにコスト関数を定義すると、コスト的な最適な全体系列を構成する部分系列は、その部分系列だけを見てもコスト的には最適となる。したがって、コスト的に最適でない部分系列は、最適な全体系列の構成要素にはならないので、探索において考慮する必要がなくなる。このように、最適系列を構成する可能性がない部分系列を考慮しないように進めて行く最適系列の探索法は一般に動的計画法と呼ばれ、効率よく最適系列の探索を行うことができる。
【００１２】
コスト関数の構成要素のうち、生起コストに関する情報は形態素辞書の内容として保持することができる。一方、連接コストについては連接表と呼ばれるテーブルを予め作成しておき、その表の値を使うことで求めることができる。ただし、全ての形態素の組み合わせの表を作成し用いることは、形態素の種類が多いために一般には難しい。そこで、例えば形態素の品詞型だけに注目する等、形態素のクラスに注目し、クラス間の連接表を用いることも行われる。なお、これらの関数は値が大きいほど好ましいものとして定義される場合もある。その場合は、文全体の値が最も大きくなる形態素系列を探すことになる。
【００１３】
形態素解析における形態素列の探索処理では可能な形態素の並び全てを調べることが好ましい。そのため、通常の形態素解析では、形態素の候補を得るために、文中の任意の位置から始まる部分文字列を検索のキーとして、形態素辞書に登録された形態素のうち、キーの先頭部分文字列に等しい形態素全てを取り出す、という処理が繰り返し行われる。このような探索は、一般にＣｏｍｍｏｎ  ｐｒｅｆｉｘ  ｓｅａｒｃｈ（共通接頭辞探索）と呼ばれる。これを比較的効率よく表現するデータ構造として、ｔｒｉｅ（トライ）が知られている。
【００１４】
ここで、トライは複数の文字列を格納するための多分木構造で、ここでは、各文字列の先頭文字から順に各文字を木の枝として格納していくことで構築されものとする。トライでは、文字列間の共通な接頭辞が木構造上で共有されるので、検索対処の文字列の接頭辞となる全ての登録語は、木構造の１つのパス上に配置される。つまり、トライのルート（根）から検索キーに沿って木をリーフ（葉）方向にたどって行くことで、ｃｏｍｍｏｎ  ｐｒｅｆｉｘ  ｓｅａｒｃｈを実現できる。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２００９−１２９２５８号公報
【非特許文献】
【００１６】
【非特許文献１】「日本語テキスト音声合成用記号」ＪＥＩＴＡ規格 ＩＴ−４００６、２０１０年３月
【発明の概要】
【発明が解決しようとする課題】
【００１７】
一般に、日本語の文章では、ある程度の表記の揺らぎが避けられない。例えば、漢字と仮名、平仮名と片仮名、漢字における新字体と旧字体、また漢字の代替や誤用等が挙げられる。
【００１８】
仮に、形態素解析装置で行われる入力文字列と形態素辞書に登録された（形態素を表す）表記文字列との比較が完全一致に基づくものだとすると、この揺らぎを考慮した形態素辞書を構築する必要がある。そのような方法として、特許文献１には交ぜ書き（ここでは、例えば一形態素内で、常用漢字外といった難解な漢字のみ仮名書きする方法のことを言う。「挽回」にたいする「ばん回」など。）を含む文書の形態素解析を実現する方法として、形態素解析装置で用いる形態素辞書の作成時に、形態素の表記に含まれる難解な文字を仮名書きに変換し、それも形態素として登録する方法が開示されている。この方法によれば、交ぜ書きのような表記の揺れに対応することはできるが、形態素辞書に登録される語の数が増え、形態素辞書のサイズは大きくなる。
【００１９】
その他に、形態素辞書に登録された表記文字列と入力文字列の比較の際に、文字間の完全一致ではなく、より複雑な比較規則を適用する方法が考えられる。しかし、この方法は、平仮名と片仮名、新字体と旧字体、単純な代用や誤用については対応できるものの、交ぜ書きのようなケースに対応したルール記述を行うことは困難である。例えば漢字と仮名文字列の一致規則を定義すると、実用上は多くの漢字に対する規則が必要になり、その規則の総数が数千から数万といった規模ともなる。その結果、文字比較における適用規則の探索そのものにトライのような構造が必要になってしまうため、装置の構成がより複雑になる。
【００２０】
また、同様の方法としては、中間表現を用いて探索を行う方法が考えられる。この方法では、あらかじめ、例えば異なる文字であっても平仮名と片仮名、旧字体と新字体の関係にある等、関連性が強い文字だったり、形状が似ていて誤用されたり代用されたりする文字間については、同じ符号を割り当てた中間表現を作成し、入力と形態素辞書の形態素の双方を中間表現に変換して、中間表現上で形態素解析を行えばよい。
【００２１】
しかし、この方法も、交ぜ書きのようなケースに対応させることは容易ではない。中間表現の一意性がないと、形態素解析の解析対象に複数通りの可能性が生じてしまい、形態素解析処理が困難になる。一方で、中間表現として、例えば仮名による読み表記（例えば「ＡＢＣ」に対する「エービーシー」、等）を用いれば中間表現の一意性は実現できるが、同音異義語等の区別ができなくなり形態素解析結果の可能性が増え、結果として形態素解析の精度が低下する。
【００２２】
本発明は、このような事情に鑑みてなされたものであり、形態素辞書のサイズの増加を抑えつつ、形態素表記仮説を中間表現を含めて考慮することができ、交ぜ書き等の表記の揺らぎに対応して効率よく精度の高い形態素解析を行うことができる形態素解析装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２３】
（１）上記の目的を達成するため、本発明の形態素解析装置は、入力された文に対応する形態素解析結果を出力する形態素解析装置であって、入力された文から部分文字列を切り出して生成する部分文字列生成部と、中間表現辞書を用いて、前記生成された部分文字列から中間段階として変換されうる１以上の表現を中間表現として生成する中間表現生成部と、形態素辞書を用いて、前記生成された中間表現および前記中間表現の連結に対応する形態素を列挙する形態素列挙部と、前記列挙された形態素のうち、所定の条件を満たす形態素列を探索して出力する形態素列探索部と、を備えることを特徴としている。
【００２４】
これにより、形態素辞書のサイズの増加を抑えつつ、形態素表記仮説を中間表現を含めて考慮することができ、交ぜ書き等の表記の揺らぎに対応して効率よく精度の高い形態素解析を行うことができる。
【００２５】
（２）また、本発明の形態素解析装置は、前記中間表現辞書および前記形態素辞書の少なくとも一方は、部分文字列を構成しうる文字素および前記文字素に対応する中間表現を交互に並べた符号列を格納することを特徴としている。これにより、文字素列とそれに対応する中間表現の組を別々ではなく１つの領域に格納でき、辞書データ構造を単純化できる。
【００２６】
（３）また、本発明の形態素解析装置は、前記中間表現辞書および前記形態素辞書の一方の全部または一部を、他方の全部または一部として用いることを特徴としている。これにより、格納に必要なメモリ量を削減でき、形態素辞書のサイズの増加を抑えつつ、効率よく形態素解析を行うことができる。
【００２７】
（４）また、本発明の形態素解析装置は、前記中間表現辞書および前記形態素辞書の一方は、文字素および前記文字素に対応する中間表現を交互に並べた符号列で第１の辞書データとして格納し、他方は、前記第１の辞書データとして格納された文字素列の一部または全部の先頭から所定の文字素数までの文字素列に対して、文字素および前記文字素に対応する中間表現の格納の順序を前記第１の辞書データとは逆順で交互に並べた符号列で格納することを特徴としている。
【００２８】
（５）また、本発明のプログラムは、辞書を有する形態解析装置のコンピュータに実行させることで、入力された文に対応する形態素解析結果を出力するプログラムであって、入力された文から部分文字列を切り出して生成する処理と、中間表現辞書を用いて、前記生成された部分文字列から中間段階として変換されうる１以上の表現を中間表現として生成する処理と、形態素辞書を用いて、前記生成された中間表現および前記中間表現の連結に対応する形態素を列挙する処理と、前記列挙された形態素のうち、所定の条件を満たす形態素列を探索して出力する処理と、を含むことを特徴としている。
【００２９】
これにより、形態素辞書のサイズの増加を抑えつつ、形態素表記仮説を中間表現を含めて考慮することができ、交ぜ書き等の表記の揺らぎに対応して効率よく精度の高い形態素解析を行うことができる。
【発明の効果】
【００３０】
本発明によれば、形態素辞書のサイズの増加を抑えつつ、形態素表記仮説を中間表現を含めて考慮することができ、交ぜ書き等の表記の揺らぎに対応して効率よく精度の高い形態素解析を行うことができる。
【図面の簡単な説明】
【００３１】
【図１】本発明の形態素解析装置を示すブロック図である。
【図２】本発明のデータ構造の一例を示す図である。
【図３】本発明のデータ構造の一例を示す図である。
【図４】本発明の形態素解析装置による処理の一例を示すフローチャートである。
【図５】本発明の形態素解析装置による処理の一例を示すフローチャートである。
【図６】本発明の形態素解析装置による処理の一例を示すフローチャートである。
【図７】本発明のデータ構造の一例を示す図である。
【発明を実施するための形態】
【００３２】
次に、本発明の実施の形態について、図面を参照しながら説明する。以下の説明において表記文字列が同じであっても中間表現が異なる形態素は、異なる形態素として扱う。
【００３３】
［第１の実施形態］
（形態素解析装置の構成）
図１は、形態素解析装置１００を示すブロック図である。形態素解析装置１００は、例えばＰＣ等で構成され、入力された文に対応する形態素列を出力する。形態素解析装置１００は、形態素解析における形態素候補の列挙において、入力文字列の部分文字列を中間表現生成部１２０で所定の中間表現に一度変換し、同じ中間表現を有する形態素も形態素の候補として列挙する。形態素解析装置１００は、部分文字列生成部１１０、中間表現生成部１２０、形態素列挙部１３０および形態素列探索部１４０を備えている。
【００３４】
部分文字列生成部１１０は、入力された文から部分文字列を切り出して生成する。中間表現生成部１２０は、中間表現辞書１２５を用いて、生成された部分文字列から変換されうる１以上の表現を中間表現として生成する。中間表現は、文字列に対して形態素解析する際に中間の段階で変換されうる表現であり、例えば文字列に対して片仮名で表される読みである。このように、中間表現を用いることで、形態素辞書のサイズの増加を抑えつつ、形態素表記仮説を中間表現を含めて考慮することができ、交ぜ書き等の表記の揺らぎに対応して効率よく精度の高い形態素解析を行うことができる。
【００３５】
中間表現生成部１２０は、入力文に対するすべての部分文字列に対して所定の変換規則で中間表現への変換を行う。変換規則は、各文字素および形態素辞書に含まれる形態素（形態素を構成する文字素の列）を、中間表現に変換するために、中間表現辞書１２５により定められている。部分文字列が中間表現辞書１２５に登録されていた場合は、中間表現辞書１２５にアクセスし、その部分文字列と中間表現の組を形態素列挙部１３０に送る。その際に、入力文字列における対応位置情報（入力文字列の何文字目から何文字目に対応する等）と合わせて送ることとしてもよい。
【００３６】
形態素列挙部１３０は、形態素辞書１３５を用いて、生成された中間表現および中間表現の連結に対応する形態素を構成する文字列を生成する。中間表現の連結とは、中間表現の並びを所定の条件を満たす形で連結し作成した中間表現を意味する。所定の条件とは、例えば所定の個数である。
【００３７】
形態素列挙部１３０は、それぞれ形態素辞書１３５にアクセスし、中間表現が一致する形態素があれば、その中間表現と形態素情報を形態素候補の情報として出力し、形態素列探索部１４０に送る。この際、後述する形態素列探索部１４０の処理で用いるために、入力文における部分文字列を出力してもよい。その際に必要であれば中間表現と対応するように部分文字列を連結して出力してもよい。
【００３８】
なお、形態素情報には、入力文字列に対する対応位置情報と、形態素文字列が含まれる。後述するように表記文字列と形態素文字列の比較を形態素列探索において行う場合は、形態素情報に表記文字列を復元するための情報を含める必要がある。形態素列探索部１４０が入力文字列を参照できる構造になっていれば、先述の対応位置情報だけでもよい。
【００３９】
例として、中間表現に片仮名文字列表現を使うことを考える。以下、入力文字列等の、表記文字列に対する最小の構成要素を文字素と呼ぶ。なお、多くの場合で１文字素は1文字に対応するが、２文字以上で構成される文字列を１文字素として扱う方が好ましい場合もある。例えば、濁点や半濁点が独立した１文字として符号化されるシステムにおいて、仮名１文字と濁点または半濁点の連続は、２文字素と考えるのではなく、２文字の連続を１文字素として考えた方が、例えばトライ構造においては木の深さが浅くなりより効率的な処理ができる。
【００４０】
形態素列探索部１４０は、列挙された形態素のうち、所定の条件を満たす形態素列を探索する。その結果、形態素候補の最適な並びを探索して出力することが好ましい。例えば、形態素列探索部１４０は、最小コスト法等により、形態素列挙部１３０が出力した形態素候補に対して所定の条件を満たす並びを決定し、各形態素の形態素情報等と合わせて形態素解析結果として出力することが好ましい。
【００４１】
なお、中間表現生成においては、それぞれ１つの文字素列から複数種類の中間表現を生成してもよい。例えば中間表現が仮名表現の場合、文字素や文字素列に対して複数通りの仮名表記（読み）があれば、複数の中間表現が生成される。同様に、形態素候補列挙でも、１つの中間表現から複数の形態素候補が生成され得る。例えば、１つの中間表現から複数の同音異義語が生成される。
【００４２】
（具体例）
以下、「挽回＜バンカイ＞」（＜＞内は中間表現表記。以下、同様。）について、形態素解析を行う具体例として、形態素辞書１３５に「ばん回」という交ぜ書き表現の形態素がない場合を考える。
【００４３】
「ば＜バ＞」「ん＜ン＞」「挽回＜バンカイ＞」「回＜カイ＞」という文字列が形態素として登録されている場合、従来の方法では、入力文字列「ばん回」に対して「ば」「ん」「回」という３形態素が接続された形でしか形態素候補にならない。なお、「ば」や「ん」については通常、それぞれ助詞や感動詞等として登録される。
【００４４】
これに対し、中間表現生成部１２０では、「ば」「ん」「回」から中間表現「バ」「ン」「カイ」がまず生成される。このためには、文字素や形態素辞書に含まれる形態素（形態素を構成する文字素の列）から、中間表現への変換規則が定められている必要がある。例えば、全ての文字素に対する変換規則と、形態素辞書に含まれるすべての形態素に対応する文字素列からの変換規則を設けておけばよい。
【００４５】
次に、形態素列挙部１３０では、連続する中間表現の可能な連結全てである、中間表現「バ」「バン」「バンカイ」「ン」「ンカイ」「カイ」に対応する形態素を形態素辞書１３５から列挙する。これにより「バンカイ」から「挽回」も形態素の候補として列挙される。なお、可能な連結全てを考えるのではなく、例えば、最大の連結個数を定めて形態素辞書の参照回数を減らしてもよい。
【００４６】
このように、一度中間表現を経由させることで、「ばん回」という入力に対する形態素解析処理において、意味上「挽回」という形態素が含まれている可能性を考慮することができる。
【００４７】
（中間表現を経由した処理を行う影響の緩和）
形態素列の探索においては、例えば、表記文字列との編集距離をコスト関数に加えて、文字素置換が生じた形態素候補が選ばれにくくしてもよい。例えば、文字の挿入、削除、置換がそれぞれ距離１であるとしたとき、形態素文字列「挽回」と入力文字列「ばん回」の間の編集距離は２となる。この編集距離Ｄに適当な重み係数Ｗｄを乗じたものを、元の形態素生起コストＣｔ（ｍ）に加えたものは以下の式（１）で表される。
【００４８】
Ｃｔ‘（ｍ）＝Ｃｔ（ｍ）＋Ｗｄ・Ｄ  …  （１）
式（１）を、形態素解析における生起コストとすることで、置換により生成した形態素候補を最終的な形態素解析結果に含まれにくくできる。この例の場合、一般に形態素「ば」「ん」「回」の生起コストは比較的大きい（これはその形態素の出現頻度が低いことに対応する）と考えられることから、「ばん回」に対する形態素解析結果は、「ば」「ん」「挽」よりも中間表現を経由して生成された「挽回」が選ばれやすくなる。
【００４９】
また、中間表現自体を生起コストや連接コストの計算で考慮してもよい。例えば、大量のテキストから中間表現の出現確率をあらかじめ求めておき、出現確率が大きい中間表現となる場合ほど生起コストが小さくなるような生起コスト関数や、隣接形態素の中間表現対に対して出現確率を前もって大量のテキストから調べておき、中間表現対の出現確率が大きいほど連接コストが小さくなるような連接コスト関数を用いることで、中間表現から見て不自然な形態素解析結果になることを避けることができる。
【００５０】
［第２の実施形態］
第１の実施形態で用いられる中間表現辞書１２５は、表記文字列を構成する文字素列とそれに対応する中間表現の組の表で表されるデータ構造を有するが、同じ内容を異なる表現形態のデータ構造で構成してもよい。
【００５１】
すなわち、中間表現辞書１２５および形態素辞書１３５の少なくとも一方は、部分文字列を構成しうる文字素および文字素に対応する中間表現を交互に並べた符号列を格納することが好ましい。これにより、文字素列とそれに対応する中間表現の組を別々ではなく１つの領域に格納でき、辞書データ構造を単純化できる。
【００５２】
例えば、中間表現辞書１２５において「挽回＜バンカイ＞」は「挽／バン／回／カイ」（ここで「／」は表記文字列と中間表現表記の区切り記号を表す）の形で表現できる。この表現を用いることで、文字素列とそれに対応する中間表現の組を別々ではなく１つの領域に格納でき、辞書データ構造を単純化できる。これは、形態素辞書１３５における中間表現と形態素文字列との表現形態についても同様である。
【００５３】
さらに、これらをトライの形で格納すると、交互に並べることで符号化された情報により、先頭からの共通部分が各辞書で共有されて、変換表に格納に必要なメモリ量を削減できる。すなわち、中間表現辞書１２５および形態素辞書１３５の一方の全部または一部を、他方の全部または一部として用いることができる。これにより、辞書のサイズの増加を抑えつつ、効率よく形態素解析を行うことができる。
【００５４】
図２、図３は、データ構造の一例を示す図である。図２は、表記文字列から中間表現表記への変換のための辞書のトライの例を示しており、図３は、中間表現から形態素文字列への変換のための辞書のトライの例を示している。
【００５５】
ここでは、「い／イ」「か／カ」「ば／バ」「ん／ン」「挽／バン」「挽回／バンカイ」「挽く／ヒク」「回／カイ」「回す／マワス」「回る／マワル」の変換のための情報がトライにより表現されている。
【００５６】
同様に形態素辞書１３５において形態素情報の１つとして形態素文字列を含める場合、形態素文字列を構成する文字素と、文字素に対応する中間を交互に並べた表現の形で、中間表現と形態素文字列の組を格納することができる。
【００５７】
（辞書へのアクセス）
トライによる表現を用いた場合、辞書へのアクセスでは複数通りのパスについてトライの探索が必要になる場合がある。一例として、本実施形態の文字素列と中間表現の順に交互に並べたデータ構造の辞書へのアクセスを説明する。図４〜図６は、形態素解析装置１００の処理の一例を示すフローチャートである。ここでは、文字素、中間表現の順で交互に並べた場合の探索フローを例を示す。以下の処理では、ノード集合を｛Ｎｇ｝、｛Ｎｃ｝、｛Ｎｉ｝等で表す。
【００５８】
まず、｛Ｎｇ｝にルートノードを代入し、｛Ｎｉ｝を空集合とする（ステップＳ１）。そして、｛Ｎｇ｝に要素があるか否かを判定し（ステップＳ２）、｛Ｎｇ｝に要素があるときはステップＳ３に進み、｛Ｎｇ｝が空集合のときにはステップＳ１１に進む。ステップＳ３では｛Ｎｇ｝から１つノードを取り出し、取り出したノードをｎとする。取り出したノードは集合から削除する。なお、ノードを取り出す処理では、以下でも同様に取り出されたノードは属していた集合から削除するものとする。そして、ノードｎの子ノード全てをノード集合｛Ｎｃ｝に代入する（ステップＳ４）。
【００５９】
｛Ｎｃ｝に要素があるか否かを判定し（ステップＳ５）、要素があるときはステップＳ６に進み、要素が無いときにはステップＳ２に戻る。ステップＳ６では｛Ｎｃ｝から１つノードを取り出し、そのノードをｃとする。ステップＳ７では、ノードｎからノードｃへの枝に結び付けられた符号が、探索の対象の文字素と合致するか否かを判定し、探索の対象の文字素と合致する場合は、ステップＳ８へ進む。合致しない場合にはステップＳ９へ進む。ステップＳ８ではノードｃを｛Ｎｇ｝に追加し、ステップＳ５に戻る。
【００６０】
一方、ステップＳ９では、ノードｎからノードｃへの枝に結び付けられた符号が区切り文字か否かを判定し、区切り文字である場合は、ステップＳ１０へ進み、区切り文字でない場合はステップＳ５に戻る。そして、ステップＳ１０では、ノードｃを｛Ｎｉ｝に追加し、ステップＳ５に戻る。
【００６１】
ステップＳ１１では｛Ｎｉ｝に要素があるか否かを判定し、要素がある場合にはステップＳ１２に進み、｛Ｎｉ｝が空集合の場合にはステップＳ２１に進む。
【００６２】
ステップＳ１２では、｛Ｎｉ｝から１つノードを取り出し、取り出したノードをｎとする。ノードｎの子ノード全てを｛Ｎｃ｝に代入する（ステップＳ１３）。｛Ｎｃ｝に要素があるか否かを判定し（ステップＳ１４）、要素がある場合にはステップＳ１５に進む。空集合のときはステップＳ１１に戻る。
【００６３】
ステップＳ１５では、｛Ｎｃ｝から１つノードを取り出し、そのノードをｃとする。ノードｃがリーフノードか否かを判定し（ステップＳ１６）、リーフノードである場合にはステップＳ１７に進み、リーフノードでないときは、ステップＳ１８に進む。ステップＳ１７では、ルートノードからノードｃまでの枝にある文字素・中間表現を探索結果として出力し、ステップＳ１４に戻る。
【００６４】
ステップＳ１８では、ノードｎからノードｃへの枝に結び付けられた符号が区切り文字か否かを判定し、区切り文字である場合はステップＳ１９へ進み、区切り文字でない場合はステップＳ２０へ進む。ステップＳ１９では、ノードｃを｛Ｎｇ｝に追加し、ステップＳ１４に戻る。ステップＳ２０では、ノードｃを｛Ｎｉ｝に追加し、ステップＳ１４に戻る。ステップＳ２１では、｛Ｎｇ｝が空集合のときは終了する。空集合でない場合はステップＳ２に戻る。
【００６５】
［第３の実施形態］
第１の実施形態では、中間表現生成処理では中間表現辞書１２５を用い、形態素列挙処理では形態素辞書１３５を用いているが、中間表現生成処理で形態素辞書１３５を用いてもよい。
【００６６】
形態素辞書１３５における形態素情報に形態素文字列が含まれていれば、中間表現生成部１２０で必要となる形態素文字列に対応する中間表現は、形態素列挙部１３０における形態素辞書１３５から得るように構成することができる。
【００６７】
また、形態素列挙部１３０で必要な中間表現から形態素文字列への変換は、中間表現辞書１２５が有する表記文字列から中間表現への変換表において、形態素文字列でもある表記文字列に、そのことを示す符号を付しておき、その表において、所定の中間表現を持ち、かつ符号の付された表記文字列を探索することで行うこともできる。これにより、全体の辞書サイズを削減できる。
【００６８】
［第４の実施形態］
中間表現辞書１２５および形態素辞書１３５の一方は、文字素および文字素に対応する中間表現を交互に並べた符号列で第１の辞書データとして格納し、他方は、第１の辞書データとして格納された文字素列の一部または全部の先頭から所定の文字素数までの文字素列に対して、文字素および文字素に対応する中間表現の格納の順序を第１の辞書データとは逆順で交互に並べた符号列で格納してもよい。
【００６９】
これにより、木の下の部分のデータ構造に逆順の符号列を用いることができ、処理量の増加を抑えることができる。例えば、表記文字列から中間表現への変換に使うトライと、中間表現から形態素文字列への変換に用いるトライのうち、その片方（中間表現表記が先行する構成）は最初から２文字素目まで、といった小さいトライとし、そこより先の探索ではもう一方のトライを用いることができる。
【００７０】
表記文字列と中間表現との変換では、トライのデータ構造で木を根（図では上側）から葉の方向（図では下方向）にたどっていく。したがって、中間表現生成部１２０では文字素、中間表現の順に並べた「挽／バン／回／カイ」のトライを用いればよい。また、形態素列挙部１３０がアクセスする形態素辞書１３５では中間表現、文字素の順に並べた「バン／挽／カイ／回」のトライを使えばよい。
【００７１】
しかし、一般的な傾向として、木の葉に近づくにつれ木の分岐の数は減っていくので、試行的に木を下方向にたどっても、通常、処理量はそれほど増加しない。例えば、中間表現から形態素文字列への変換の際に、「挽／バン／回／カイ」の構造のトライを用いる場合、文字素を読み飛ばして先に中間表現を得る必要があり、文字素を読み飛ばす際はその場所での全ての分岐をたどらなければならないが、そのような処理を行う場合でも、木の上方と比較すると、木の下の部分では分岐が少ないので処理量はあまり増えない。したがって、表記文字列から中間表現への変換に使うトライと、中間表現から形態素文字列への変換に用いるトライのうち、片方は例えば最初から２文字素目まで、といった小さいトライとし、そこより先の探索では他方のトライを用いてもよい。これにより、全体のサイズをより削減することができ、試行的な探索は必要となるものの、処理量の増加は限定的である。
【００７２】
例えば、試行的な下方への探索は、深さ方向に浅い探索となる方が処理量的に好ましい。したがって、一般に文字素が中間表現に先行する「挽／バン／回／カイ」の構成のトライは従来同様に作成するのが好ましい。また、他方の中間表現が先行する構成では、形態素文字列の１文字素目までのトライを作る方法が好ましい。上記の例では「バン／挽」までで打ち切ったデータに対してトライを作る。
【００７３】
なお、中間表現から形態素文字列への変換の際に、上記の例の場合、「バン／挽」の葉（本文書上の表現においては最も右）までアクセスした状態から、次の処理のために、「挽／バン／回／カイ」における「回」に対応するノードにアクセスする必要があるが、そのノードに到達するために必要な情報である、「回」までの文字素（すなわち「挽」）とその中間表現（「バン」）は、既に得られているので、このアクセスは容易である。図７は、データ構造の一例を示す図であり、図３に対応する、1文字目までの表記文字までで作成したトライを示している。
【００７４】
あるいは、「挽／バン／回／カイ」の方のトライにおける「回」のノードを、トライのルートからたどらずに直接参照するための位置情報を、「バン／挽」のトライの葉ノードに格納しておき、これを用いてトライの中間ノードに直接アクセスする方法を用いてもよい。
【００７５】
［その他の実施形態］
（中間表現のその他の例）
上記では、中間表現として片仮名表記を用いたが、中間表現にこれ以外の表現を用いることもできる。例えばＩＰＡ（Ｉｎｔｅｒｎａｔｉｏｎａｌ Ｐｈｏｎｅｔｉｃ Ａｌｐｈａｂｅｔ、国際音声記号）による発音表記を用いてもよい。
【００７６】
あるいは、仮名と常用漢字だけで構成された文字の集合を用い、かつできるだけ漢字表記するようにした表記を中間表現で用いてもよい。上記手法によれば、形態素解析において、形態素の生起コスト関数は表記文字列と中間表現の双方が考慮され、固有名詞の様に、旧字体が使われやすい形態素と使われにくい形態素をより正確に区別することができる。例えば、地名としての「桜井」を「櫻井」と表記する場合は少なく、「櫻井」という表記は人名としての意味を持っている可能性が高いと考えられるが、一方で「櫻井」が地名である可能性も全くないわけではない。
【００７７】
最小コスト法に基づく形態素解析では、最終的には形態素の並びも考慮され、総合的な判断が行われるが、上記手法では、用いられることが多い人名としての「桜井」「櫻井」と、地名としての「桜井」が形態素辞書に登録されているとして、用いられることの少ない地名としての「櫻井」を形態素辞書に登録することなく、地名として用いられた「櫻井」を形態素解析の処理において考慮できる。これにより、例えば、地名の直後に「市」や「町」といった形態素が続く場合に、両者の間の連接コストがより小さくなるように定義した連接コスト関数を用いれば、人名ではなく、地名としての形態素が選ばれるようにすることができる。しかし、中間表現の抽象度が高すぎると、処理の際に考慮すべき形態素の可能性の数が増えることになる。
【００７８】
これは特に同音の形態素が多い固有名詞では問題となり得る。例えば上記の例において、中間表現に片仮名表記を用いると、「櫻井」に対する中間表現は「サクライ」となり、例えば「佐倉井」といったような、より多くの形態素の可能性も考慮する必要が生じる。上記手法では、文字置換数を生起コストに反映させることで、この可能性はコスト最適解の探索で排除されるようになっているものの、中間表現に「桜井」といった抽象度のより低い表現を用いることで、表記揺らぎへの対応が限定的になる一方で、その後の探索で考慮すべき可能性の数を減らし、処理量的にはより効率的な処理が可能となる。
【００７９】
（区切り文字を使わない例）
上記の第２および第４の実施形態では、文字素と中間表現を交互に並べた符号列表現において区切り文字を使用しているが、並べ方はこれに限らない。例えば、文字素を表す符号と中間表現を表す符号がその符号位置（符号の値）において完全に独立な場合は、区切り文字は不要である。
【００８０】
（プログラム）
なお、以上のような動作は、例えば形態素解析装置１００に搭載されるＣＰＵにプログラムを実行させることで実現できる。このプログラムは、記録媒体に記録された状態で流通しうる。また、このようなプログラムは、ネットワークを構成する公衆電話回線、専用電話回線、ケーブルテレビ回線、無線通信回線等により構成される通信網等の伝送媒体を介して、送信装置であるコンピュータにより送信された信号を受信することで流通しうる。
【符号の説明】
【００８１】
１００  形態素解析装置
１１０  部分文字列生成部
１２０  中間表現生成部
１２５  中間表現辞書
１３０  形態素列挙部
１３５  形態素辞書
１４０  形態素列探索部
【図１】
0006619932.tif 000002
【図２】
0006619932.tif 000003
【図３】
0006619932.tif 000004
【図４】
0006619932.tif 000005
【図５】
0006619932.tif 000006
【図６】
0006619932.tif 000007
【図７】
0006619932.tif 000008