(57)【要約】【課題】  形態素解析で用いる辞書を自動生成することができ、形態素解析で用いていた文法を用いることなく形態素解析を行うことが可能な言語知識獲得プログラムを提供することを目的とする。【解決手段】  コンピュータを、解析対象メモリから解析対象文を取得し、解析対象文の文字列の全ての組合せを基礎データファイルに出力する抽出手段（Ｓ１）と、基礎データファイルのソートを行うソート手段（Ｓ２）と、基礎データファイルに格納されている各文字列の生起頻度を計算する生起頻度計算手段（Ｓ３）と、基礎データファイルの一の文字列の生起頻度を、一の文字列を部分文字列とする隣接する長い文字列の生起頻度を除いた数として書き換える独立生起頻度計算手段（Ｓ４）と、基礎データファイルに格納された文字列、該文字列ごとの生起頻度、該文字列ごとの独立生起頻度を言語知識として出力する出力手段として動作させることにより、上記課題を解決する。【選択図】  図２
2005032269.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
解析対象メモリから解析対象文を取得し、該解析対象文の文字列の全ての組合せを基礎データファイルに出力する抽出手段と、
前記基礎データファイルのソートを行うソート手段と、
前記基礎データファイルに格納されている各文字列の生起頻度を計算する生起頻度計算手段と、
前記基礎データファイルの隣接する長い文字列と該長い文字列の部分文字列の生起頻度を比較し、該生起頻度が同一であった場合は、該部分文字列を除去する除去手段と、
前記基礎データファイルの一の文字列の生起頻度を、該一の文字列を部分文字列とする隣接する長い文字列の生起頻度を除いた数として書き換える独立生起頻度計算手段と、
前記基礎データファイルに格納された文字列、該文字列ごとの生起頻度、該文字列ごとの独立生起頻度を言語知識として出力する出力手段として動作させることを特徴とする言語知識獲得プログラム。
【請求項２】
コンピュータを、
解析対象メモリから解析対象文を取得し、該解析対象文の文字列の全ての組合せを基礎データファイルに出力する抽出手段と、
前記基礎データファイルのソートを行う第一のソート手段と、
前記基礎データファイルに格納されている各文字列の生起頻度を計算する第一の生起頻度計算手段と、
前記基礎データファイルの隣接する長い文字列と該長い文字列の部分文字列の生起頻度を比較し、該生起頻度が同一であった場合は、該部分文字列を除去する第一の除去手段と、
前記基礎データファイルの一の文字列の生起頻度を、該一の文字列を部分文字列とする隣接する長い文字列の生起頻度を除いた数として書き換える第一の独立生起頻度計算手段と、
前記基礎データファイルの各文字列を構成する文字の前後を置換する第一の文字列順序置換手段と、
前記基礎データファイルのソートを行う第二のソート手段と、
前記基礎データファイルに格納されている各文字列の生起頻度を計算する第二の生起頻度計算手段と、
前記基礎データファイルの隣接する長い文字列と該長い文字列の部分文字列の生起頻度を比較し、該生起頻度が同一であった場合は、該部分文字列を除去する第二の除去手段と、
前記基礎データファイルの一の文字列の生起頻度を、該一の文字列を部分文字列とする隣接する長い文字列の生起頻度を除いた数として書き換える第二の独立生起頻度計算手段と、
前記基礎データファイルの各文字列を構成する文字の前後を置換する第二の文字列順序置換手段と、
前記基礎データファイルに格納された文字列、該文字列ごとの生起頻度、該文字列ごとの独立生起頻度を言語知識として出力する出力手段として動作させることを特徴とする言語知識獲得プログラム。
【請求項３】
前記コンピュータを、
前記出力手段により出力された文字列、該文字列ごとの生起頻度、該文字列ごとの独立生起頻度が言語知識として格納されている言語知識格納手段から、形態素解析を行う文に含まれている全ての文字列を取得し、取得した全ての文字列を該形態素解析を行う文に記載されている順番に並び替えて形態素テーブルを生成する形態素テーブル生成手段と、
前記全ての文字列の始点及び終点を分割点として計数し、該分割点の数に応じて前記形態素解析を行う文の分割位置を決定する分割位置決定手段と、
決定した分割位置に応じた形態素解析結果を出力する形態素解析結果出力手段として動作させることを特徴とする請求項１又は２に記載の言語知識獲得プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、言語知識獲得プログラムに係り、特に自然言語処理に利用される言語知識獲得プログラムに関する。
【背景技術】
【０００２】
例えば日本語などのように単語と単語との境界が不明確な言語をコンピュータで処理するためには、単語の同定を行う必要がある。このような単語の同定は、形態素解析を用いて行われる。形態素解析とは、形態素解析のための辞書および文法を用いて隣接２項間での形態素の隣接可能性を評価しながら、最適な形態素列を取得するものである。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
近年では、機械学習によって統計的に形態素分割位置を学習する方法が提案されているが、既存の形態素解析結果を基礎データとして学習しているため、形態素解析結果の品質向上に対する有効な手段でない。また、既存の形態素解析結果から機械学習を行うため、既存の形態素解析結果が誤って解析したものもそのまま学習してしまうという問題があった。なお、正しく解析された形態素解析結果のみから機械学習をすれば問題はないが、膨大な機械学習量が必要となるために実現の見込みは低い。
【０００４】
また、形態素解析で用いる文法は、２−ｇｒａｍの形式で記述された隣接２項関係に関する規則である。しかし、言語現象のすべてを満足できる規則を構築することは非常に困難であるという問題があった。
【０００５】
さらに、形態素解析で用いる辞書は、文法的な素性を備えたものである。したがって、辞書の構築時に扱ったデータを処理すれば高い精度を得られるが、全く異なった分野のデータに適用すると辞書が十分に対応しきれず、十分な精度を得ることができないという問題があった。
【０００６】
本来、形態素解析で用いる辞書は、扱うデータの分野に合わせて構築することが望ましい。しかしながら、形態素解析で用いる辞書の構築には多大な手間および膨大なコストを要するという問題があった。
【０００７】
本発明は、上記の点に鑑みなされたもので、形態素解析で用いる辞書を自動生成することができ、形態素解析で用いていた文法を用いることなく形態素解析を行うことが可能な言語知識獲得プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
そこで、上記課題を解決するため、本発明は、コンピュータを、解析対象メモリから解析対象文を取得し、該解析対象文の文字列の全ての組合せを基礎データファイルに出力する抽出手段と、前記基礎データファイルのソートを行うソート手段と、前記基礎データファイルに格納されている各文字列の生起頻度を計算する生起頻度計算手段と、前記基礎データファイルの隣接する長い文字列と該長い文字列の部分文字列の生起頻度を比較し、該生起頻度が同一であった場合は、該部分文字列を除去する除去手段と、前記基礎データファイルの一の文字列の生起頻度を、該一の文字列を部分文字列とする隣接する長い文字列の生起頻度を除いた数として書き換える独立生起頻度計算手段と、前記基礎データファイルに格納された文字列、該文字列ごとの生起頻度、該文字列ごとの独立生起頻度を言語知識として出力する出力手段として動作させることを特徴とする。
【０００９】
このような言語知識獲得プログラムでは、解析対象文から文字列の全ての組合せを出力し、出力した文字列の重複を除去して言語知識として出力する。この言語知識は形態素解析で用いる辞書として利用できるので、形態素解析で用いる辞書を自動生成することが可能である。
【００１０】
また、本発明は、コンピュータを、解析対象メモリから解析対象文を取得し、該解析対象文の文字列の全ての組合せを基礎データファイルに出力する抽出手段と、前記基礎データファイルのソートを行う第一のソート手段と、前記基礎データファイルに格納されている各文字列の生起頻度を計算する第一の生起頻度計算手段と、前記基礎データファイルの隣接する長い文字列と該長い文字列の部分文字列の生起頻度を比較し、該生起頻度が同一であった場合は、該部分文字列を除去する第一の除去手段と、前記基礎データファイルの一の文字列の生起頻度を、該一の文字列を部分文字列とする隣接する長い文字列の生起頻度を除いた数として書き換える第一の独立生起頻度計算手段と、前記基礎データファイルの各文字列を構成する文字の前後を置換する第一の文字列順序置換手段と、前記基礎データファイルのソートを行う第二のソート手段と、前記基礎データファイルに格納されている各文字列の生起頻度を計算する第二の生起頻度計算手段と、前記基礎データファイルの隣接する長い文字列と該長い文字列の部分文字列の生起頻度を比較し、該生起頻度が同一であった場合は、該部分文字列を除去する第二の除去手段と、前記基礎データファイルの一の文字列の生起頻度を、該一の文字列を部分文字列とする隣接する長い文字列の生起頻度を除いた数として書き換える第二の独立生起頻度計算手段と、前記基礎データファイルの各文字列を構成する文字の前後を置換する第二の文字列順序置換手段と、前記基礎データファイルに格納された文字列、該文字列ごとの生起頻度、該文字列ごとの独立生起頻度を言語知識として出力する出力手段として動作させることを特徴とする。
【００１１】
このような言語知識獲得プログラムでは、形態素解析を行う文の分割位置を分割点の数に応じて決定することにより、形態素解析を行うことができる。したがって、言語知識を形態素解析で用いる辞書として利用することにより、形態素解析で用いていた文法を用いることなく形態素解析を行うことが可能である。
【発明の効果】
【００１２】
上述の如く、本発明の言語知識獲得プログラムによれば、解析対象文から文字列の全ての組合せを出力し、出力した文字列の重複を除去して言語知識として出力する。この言語知識は形態素解析で用いる辞書として利用できるので、形態素解析で用いる辞書を自動生成することが可能である。
【００１３】
また、本発明の言語知識獲得プログラムによれば、形態素解析を行う文の分割位置を分割点の数に応じて決定することで、形態素解析を行うことができる。したがって、言語知識を形態素解析で用いる辞書として利用することにより、形態素解析で用いていた文法を用いることなく形態素解析を行うことが可能である。
【発明を実施するための最良の形態】
【００１４】
次に、本発明を実施するための最良の形態を、以下の実施例に基づき図面を参照しつつ説明していく。
【００１５】
図１は、本発明の言語知識獲得プログラムおよび形態素解析プログラムを実行するコンピュータシステムの一実施例のハードウェア構成図を示す。言語知識獲得プログラムおよび形態素解析プログラムを実行するコンピュータシステム１は、それぞれバスＢで相互に接続されている入力装置１０，表示装置１１，ドライブ装置１２，記録媒体１３，補助記憶装置１４，メモリ装置１５，演算処理装置１６を有するように構成される。
【００１６】
入力装置１０はキーボード及びマウスなどで構成され、様々な操作指示を入力するために用いられる。表示装置１１は、操作に必要な各種ウインドウやデータ等を表示する。
【００１７】
言語知識獲得プログラムおよび形態素解析プログラムは、ＣＤ−ＲＯＭ等の記録媒体１３によって提供される。言語知識獲得プログラムおよび形態素解析プログラムを記録した記録媒体１３は、ドライブ装置１２にセットされ、言語知識獲得プログラムおよび形態素解析プログラムが記録媒体１３からドライブ装置１２を介して補助記憶装置１４にインストールされる。
【００１８】
補助記憶装置１４は、インストールされた言語知識獲得プログラムおよび形態素解析プログラムを格納すると共に、必要なファイルやデータ等を格納する。例えば補助記憶装置１４は、言語知識獲得プログラムおよび形態素解析プログラムの処理に必要な各種テーブルを格納している。なお、各種テーブルはコンピュータシステム１の他に設けられたデータベースサーバに管理させてもよい。
【００１９】
メモリ装置１５は、コンピュータシステム１の起動時に補助記憶装置１４から言語知識獲得プログラムおよび形態素解析プログラムを読み出して格納する。演算処理装置１６は、メモリ装置１５に格納された言語知識獲得プログラムおよび形態素解析プログラムに従って処理を実行する。
【００２０】
次に、言語知識獲得プログラムの詳細について説明する。言語知識獲得プログラムは、ｎ−ｇｒａｍを用いて言語知識を獲得するためのものである。ｎ−ｇｒａｍとは、ｎ文字またはｎ単語の連鎖確率を指すものである。特に、ｎ−ｇｒａｍは、文字として扱う場合を文字ｎ−ｇｒａｍ，単語として扱う場合を単語ｎ−ｇｒａｍと区別して表現される。
【００２１】
ｎ−ｇｒａｍは、膨大なデータを扱うために解析対象となるデータを絞った形でその有効性が示されてきた。例えば特開平８−１６１３４０号公報に記載された連語自動抽出装置は、単語ｎ−ｇｒａｍを用いることで扱うデータを小さくする試みがなされている。しかし、解析対象となるデータを絞った形や単語ｎ−ｇｒａｍを用いることで得られたデータは、予め想像可能なデータや本来言語が持っている性質を十分反映しないデータとなる場合が多い。
【００２２】
単語ｎ−ｇｒａｍは単語として扱っているため、ｎ−ｇｒａｍを抽出する以前に単語を認識するための辞書を用いなければならない。ここで用いる辞書は、人間のノウハウとして集められた語のセットであり、必ずしも言語現象を的確に表現したものでない。さらに、単語を認識する際の認識ミスを否定することはできない。このため、単語ｎ−ｇｒａｍを用いることで得られたデータは、言語が持つ意味のまとまりを言語知識として十分に取り出せていない場合がある。
【００２３】
また、解析対象となるデータを絞った形では、情報量の問題がある。曖昧さの多い自然言語では出来るだけ多くのデータを用いて解析することが望ましく、小規模なデータでそれなりのものが得られたとしてもｎ−ｇｒａｍの有効性を示すにとどまり、実用可能なデータのセットを取り出せない。
【００２４】
そこで、文字ｎ−ｇｒａｍで言語知識を獲得する方法が提案されている。例えば特開平１１−１８４８６６号公報には、文字ｎ−ｇｒａｍで言語知識を獲得する自然言語統計データベース装置が記載されている。しかし、特開平１１−１８４８６６号公報に記載された自然言語統計データベース装置は、後述するような後方に内包する文字列を除去できない。
【００２５】
ｎ−ｇｒａｍを用いてデータを取り出すシステムでは、扱う文字数や単語数を無制限とすると処理が膨大となるため、扱う文字数や単語数を予め決定しておく必要がある。そこで、ｎ−ｇｒａｍを用いてデータを取り出すシステムではｎ＝２としたｂｉ−ｇｒａｍやｎ＝３としたｔｒｉ−ｇｒａｍなどとして扱う対象を限定している。
【００２６】
しかし、ｎ−ｇｒａｍで言語知識を獲得する場合、扱う文字数や単語数を決定しなければならないということは未知の言語現象に対して予め閾値を設定することとなり、言語現象を的確に捉えるための妨げとなる。すなわち、自然言語処理では、扱う対象となる言語自身に曖昧性があり、人間により見つけられてきたヒューリスティックス（定性的ノウハウ）を用いた時点で言語現象と異なった結果を得ることになる。
【００２７】
このように、ｎ−ｇｒａｍで言語知識を獲得する場合、扱う対象について何らかの制約（例えば、データ量，単語単位，文字数限定など）を与えなければならない。例えば文字数限定を与えてｎ−ｇｒａｍで言語知識を獲得する場合、十分に大きなｎを設定すると処理自身が重くなり、ｎを小さくすると言語現象を捕らえられない可能性がある。
【００２８】
そこで、本発明の言語知識獲得プログラムでは、文字ｎ−ｇｒａｍを用いて言語知識を獲得するときに、システム的な制約を与えなくても十分に実用的な処理時間で結果を得るようにする。なお、言語知識の獲得は頻繁に発生するものではないため、リアルタイムに処理できるほどの能力を要求されない。
【００２９】
本発明の言語知識獲得プログラムは、安定した生起頻度で得られた文字列の連続を、その文字列自身が固有の意味を持つ単位であると仮定する。文字列自身が固有の意味を持つ単位としては、例えば単語や慣用表現が該当する。
【００３０】
つまり、本発明の言語知識獲得プログラムは、システム的な制約を排除することにより、先入観なしに言語現象を捕捉し、より言語現象に近い文字の連続を導出する。
【００３１】
以下、言語知識獲得プログラムの具体的な処理について説明する。図２は、言語知識獲得処理の一例のフローチャートを示す。図２中、ステップＳ１では、文字ｎ−ｇｒａｍを用いて言語知識を獲得するために必要な基礎データの抽出を行う。ここで、基礎データ抽出処理について図３を参照しつつ説明する。
【００３２】
図３は、基礎データ抽出処理の一例のフローチャートを示す。基礎データ抽出処理は、記事データベース２１および基礎データファイル２２のオープン処理を行った後でステップＳ１１に進む。ステップＳ１１では、演算処理装置１６が記事データベース２１から解析対象とする１文を取得する。
【００３３】
ステップＳ１１に続いてステップＳ１２に進み、演算処理装置１６はステップＳ１１で取得した解析対象とする１文を句点または読点で分割する。図４は、文分割，読点分割処理の一例のフローチャートを示す。図５は、文分割，読点分割処理の一例の説明図を示す。
【００３４】
図４中、ステップＳ２１では、演算処理装置１６が、解析対象とする１文の先頭から１文字ずつ読み込む。ステップＳ２１に続いてステップＳ２２に進み、演算処理装置１６はステップＳ２１で読み込んだ文字が句点であるか否かを判定する。読み込んだ文字が句点であると判定すると（Ｓ２２においてＹＥＳ）、演算処理装置１６はステップＳ２４に進む。一方、読み込んだ文字が句点でないと判定すると（Ｓ２２においてＮＯ）、演算処理装置１６はステップＳ２３に進む。
【００３５】
ステップＳ２３では、演算処理装置１６が、ステップＳ２１で読み込んだ文字が文末であるか否かを判定する。読み込んだ文字が文末でないと判定すると（Ｓ２３においてＮＯ）、演算処理装置１６はステップＳ２１に進み、次の１文字を読み込む。一方、読み込んだ文字が文末であると判定すると（Ｓ２３においてＹＥＳ）、演算処理装置１６はステップＳ２４に進む。
【００３６】
ステップＳ２４では、演算処理装置１６が、解析対象とする１文の先頭から１文字ずつ読み込む。ステップＳ２４に続いてステップＳ２５に進み、演算処理装置１６はステップＳ２４で読み込んだ文字が読点であるか否かを判定する。読み込んだ文字が読点であると判定すると（Ｓ２５においてＹＥＳ）、演算処理装置１６はステップＳ２７に進む。一方、読み込んだ文字が読点でないと判定すると（Ｓ２５においてＮＯ）、演算処理装置１６はステップＳ２６に進む。
【００３７】
ステップＳ２６では、演算処理装置１６が、ステップＳ２４で読み込んだ文字が文末であるか否かを判定する。読み込んだ文字が文末でないと判定すると（Ｓ２６においてＮＯ）、演算処理装置１６はステップＳ２４に進み、次の１文字を読み込む。一方、読み込んだ文字が文末であると判定すると（Ｓ２６においてＹＥＳ）、演算処理装置１６はステップＳ２７に進む。ステップＳ２７では、演算処理装置１６が、文頭から句点または読点までを解析対象範囲に設定して解析対象メモリ２３に格納する。
【００３８】
例えば図５のように、解析対象とする１文が『「今日は良い天気だ。」と太郎は叫んだ。』である場合、先頭から１文字ずつ句点か読点かを判断し、句点を見つけた部分で解析対象とする１文を「今日は良い天気だ。」と「と太郎は叫んだ。」とに分割する。
【００３９】
なお、文分割、読点分割処理では、解析対象とする１文に複数文が埋め込まれている場合、句点で分割される。また、読点は形式的に語の明示的なセパレータであることから、解析対象とする１文は読点でも分割される。
【００４０】
図５の例では、解析対象とする１文に読点が含まれていないが、句点で分割される場合の処理と同様である。また、図５の例では、解析対象とする１文を句点または読点により分割した部分を順番に文字ｎ−ｇｒａｍ解析を行う例について説明しているが、解析対象とする１文を最後まで分割した後で順番に文字ｎ−ｇｒａｍ解析を行ってもよい。
【００４１】
ステップＳ１２に続いてステップＳ１３に進み、演算処理装置１６はステップＳ１２で分割した部分の文字ｎ−ｇｒａｍ解析を行う。図６は、文字ｎ−ｇｒａｍ解析処理の一例のフローチャートを示す。図７は、文字ｎ−ｇｒａｍ解析処理の一例の説明図を示す。
【００４２】
図６中、ステップＳ３１では、演算処理装置１６が、解析対象メモリ２３からステップＳ２７で設定した解析対象範囲の１文を読み込む。例えば図７では、解析対象範囲の１文として「今日は良い天気だ」が読み込まれている。ステップＳ３１に続いてステップＳ３２に進み、演算処理装置１６はステップＳ３１で読み込んだ１文に文頭を設定する。例えば図７では、「今」が文頭として設定される。
【００４３】
ステップＳ３２に続いてステップＳ３３に進み、演算処理装置１６は文頭が文末と同じ文字に設定されたか否かを判定する。文頭が文末と同じ文字に設定されたと判定すると（Ｓ３３においてＹＥＳ）、演算処理装置１６は処理を終了する。一方、文頭が文末と同じ文字に設定されていないと判定すると（Ｓ３３においてＮＯ）、演算処理装置１６はステップＳ３４に進む。
【００４４】
ステップＳ３４では、演算処理装置１６が、基礎データとして出力する文字列の文字数ｎの初期値（ｎ＝１）を設定する。ステップＳ３４に続いてステップＳ３５に進み、演算処理装置１６はステップＳ３１で読み込んだ１文の文頭から文字数ｎを切り取って基礎データとして基礎データファイル２２に格納する。例えば図７では、「今」を基礎データとして基礎データファイル２２に格納する。
【００４５】
ステップＳ３５に続いてステップＳ３６に進み、演算処理装置１６は文頭から文末までの文字数と文字数ｎとが同じであるか、言い替えれば文末であるか否かを判定する。文末であると判定すると（Ｓ３６においてＹＥＳ）、演算処理装置１６はステップＳ３２に進み、文頭を１文字後ろへ移動する。
【００４６】
一方、文末でないと判定すると（Ｓ３６においてＮＯ）、演算処理装置１６はステップＳ３７に進み、基礎データとして出力する文字列の文字数ｎを１文字増やしてステップＳ３５に進む。例えば図７の解析対象範囲の１文「今日は良い天気だ」に対して図６の文字ｎ−ｇｒａｍ解析処理を行うと、ｎ文字の文字列「今，今日，・・・，気だ，だ」が出力される。
【００４７】
このように、演算処理装置１６は文字ｎ−ｇｒａｍ解析処理を利用して解析対象とする１文から文字列の全ての組合せを出力する。したがって、演算処理装置１６は、ステップＳ１３で出力されたｎ文字の文字列を基礎データファイル２２に格納できる。
【００４８】
そして、ステップＳ１３に続いてステップＳ１４に進み、演算処理装置１６は基礎データ抽出処理を行うべき対象が依然として記事データベース２１に存在するか否かを判定する。基礎データ抽出処理を行うべき対象が記事データベース２１に存在すると判定すると（Ｓ１４において継続）、演算処理装置１６はステップＳ１１に進み、基礎データ抽出処理を継続する。一方、基礎データ抽出処理を行うべき対象が記事データベース２１に存在しないと判定すると（Ｓ１４において終了）、演算処理装置１６は処理を終了する。
【００４９】
図２中、ステップＳ１に続いてステップＳ２に進み、演算処理装置１６は基礎データファイル２２に格納されている基礎データのソートを行う。ステップＳ２で行うソートは、基礎データファイル２２に基礎データとして格納されている文字列のうち同一の文字列を探しやすくするための処理である。
【００５０】
ソートが行われた基礎データファイル２２では、同一の文字列が連続して記述されていることが保証され、同一な文字列ごとの生起頻度の計算を容易としている。ここで、生起頻度とは、基礎データファイル２２に含まれる同一な文字列の数をいう。なお、ソートの手法は、バイナリソート（Binary Sort），クイックソート（Quick Sort）などの周知のソート手法を用いることができる。
【００５１】
一般に文字ｎ−ｇｒａｍ解析を扱う場合、中間過程で得られるデータは膨大となる。例えば文字数ｎのデータを文字ｎ−ｇｒａｍ解析した場合、中間過程で得られるデータ（文字列数，文字数）は、以下のようになる。
【００５２】
【数１】
2005032269.tif 000003
本発明の言語知識獲得プログラムでは、データを分割して行う基礎データ抽出処理と、基礎データファイル２２に格納されている基礎データのソートとで、膨大なデータ量の扱いを可能としている。
【００５３】
ステップＳ２に続いてステップＳ３に進み、演算処理装置１６は基礎データファイル２２に基礎データとして格納されている文字列ごとに生起頻度の計算を行う。例えばステップＳ３の生起頻度の計算により、図８のような生起頻度が作成される。
【００５４】
図８は、生起頻度データの一例の説明図を示す。図８中、左側の文字列が基礎データファイル２２に基礎データとして格納されている文字列である。また、右側の数値は文字列ごとの生起頻度である。ただし、図８の生起頻度は、より長い文字列の部分列として出現した数を含んでいるため、重複を許した数となっている。
【００５５】
また、文字列「今日は良い天気だ」に付与されている生起頻度１は、解析対象としたデータに一文しか存在しなかった文字列を意味している。生起頻度１という文字列は、意味ある文字列の連続として認定しにくいため、生起頻度１という文字列を生起頻度データから削除する。さらに、閾値を設定して生起頻度の低い文字列を削除することにより、最終的なデータ量を調整することも可能である。
【００５６】
基礎データをソートした後に計算した文字列ごとの生起頻度は、文字列間で重複を許したものとなっているが、以下のように文字列間の重複を除去することが考えられる。ここでは、解析対象とする１文が「２５６メガビットＤＲＡＭ」である場合に、文字列間の重複を除去する例について説明していく。
【００５７】
例えばステップＳ１〜Ｓ３の処理を行うことで、解析対象とする１文「２５６メガビットＤＲＡＭ」から図９のような文字列および文字列ごとの生起頻度が得られる。図９は、文字列ごとの生起頻度について説明するための図を示す。
【００５８】
算出された文字列の生起頻度には、図９に表すような依存関係が存在する。例えば最も長い文字列Ｓ０（２５６メガビットＤＲＡＭ）の生起頻度をｆ０とした場合、１文字短い文字列Ｓ１（２５６メガビットＤＲＡ）の生起頻度はｆ０＋ｆ１となる。文字列Ｓ１は文字列Ｓ０の部分列であるが、ｆ１＝０の場合、文字列Ｓ０の完全な部分文字列となる。一方、ｆ１≠０の場合、文字列Ｓ１は他の文字列Ｓ’の部分文字列となる可能性がある。
【００５９】
この場合、文字列Ｓ’は文字列Ｓ１を前方包含する文字列を形成し、以下のような関係を有する。なお、ｃｉは文字列Ｓ’に含まれる文字を表す。文字列Ｓ１は、独自の意味の単位もしくは他の文字列の単なる部分文字列となる。
【００６０】
【数２】
2005032269.tif 000004
多くの場合、意味の単位を構成しない文字列の生起頻度は、意味の単位を構成する、より長い文字列と同等の生起頻度をとる。したがって、図９では生起頻度ｆ１，ｆ２，ｆ３，ｆ５，ｆ６，ｆ７およびｆ８が０である可能性が高い。したがって、生起頻度ｆ１，ｆ２，ｆ３，ｆ５，ｆ６，ｆ７およびｆ８が０であると仮定すると、図９を図１０のように書き換えることができる。
【００６１】
図１０は、生起頻度の単一化について説明するための図を示す。図１０を参照すると、生起頻度として有効なものはｆ０，ｆ４，ｆ９，ｆ１０およびｆ１１となる。隣接する文字列間で生起頻度の差異（差分）を計算することにより、単純に長い文字列の部分列として出力されている部分文字列を除去できる。単純に長い文字列の部分列として出力されている部分文字列を除去することにより、図１０を図１１のように書き換えることができる。
【００６２】
図１１は、文字列間の重複が除去された結果を説明するための図を示す。図１１に含まれる文字列は言語的に意味の単位を構成するものであって、意味の単位を構成する文字列とその文字列の生起頻度を表している。したがって、意味の単位を構成する文字列とその文字列の生起頻度とを容易に導出することができる。
【００６３】
ステップＳ３に続いてステップＳ４に進み、演算処理装置１６は意味の単位を構成する文字列の独立生起頻度の計算を行う。ここで、独立生起頻度とは、意味の単位を構成する文字列の部分文字列として出現した回数を生起頻度から除いたものである。
【００６４】
例えば図１１の文字列「２５６メガビット」では、文字列「２５６メガビットＤＲＡＭ」の生起頻度ｆ０を除いたｆ４が独立生起頻度に相当する。文字列「２５６メガビット」の独立生起頻度は、文字列「２５６メガビット」が文字列「２５６メガビットＤＲＡＭ」の部分文字列として出現した場合以外の生起頻度となる。同様な処理を繰り返すことにより、図１１を図１２のように書き換えることができる。
【００６５】
図１２は、文字列ごとの独立生起頻度について説明するための図を示す。図１２中、左側の文字列が意味の単位を構成する文字列である。また、右側の数値は意味の単位を構成する文字列の独立生起頻度である。図１２の文字列「２５６メガビットＤＲＡＭ」を前方に包含する、より長い文字列が存在しない場合、文字列「２５６メガビットＤＲＡＭ」の独立生起頻度は確定する。
【００６６】
また、文字列「２５６メガビット」，「２５６」，「２５」，「２」を前方に包含する、より長い文字列が存在するかの検証も行う必要がある。図１３は、文字列の独立生起頻度を確定する処理について説明するための図を示す。
【００６７】
まず、検証する文字列は隣接している方が容易に計算できるので、予め独立生起頻度が確定している文字列を除去した上で検証する文字列の隣接関係を維持する。例えば、文字列「２５６メガビットＤＲＡＭ」の独立生起頻度が確定している場合、図１３から文字列「２５６メガビットＤＲＡＭ」が除去される。
【００６８】
文字列「２５６メガビット」を前方に包含する、より長い文字列が文字列「２５６メガビットＳＤＲＡＭ」および文字列「２５６メガビットＲＡＭ」しか存在せず、以下の関係を示せば文字列「２５６メガビット」は文字列「２５６メガビットＳＤＲＡＭ」および文字列「２５６メガビットＲＡＭ」の部分文字列としてのみ存在する文字列であると解釈できる。
【００６９】
このとき、文字列「２５６」の独立生起頻度に対する文字列「２５６メガビットＳＤＲＡＭ」，文字列「２５６メガビットＲＡＭ」の関係が気になるが、文字列「２５６メガビットＳＤＲＡＭ」および文字列「２５６メガビットＲＡＭ」の文字列「２５６」に関する独立生起頻度は、既に文字列「２５６メガビット」の独立生起頻度として除去しているため、文字列「２５６メガビット」と文字列「２５６メガビットＳＤＲＡＭ」および文字列「２５６メガビットＲＡＭ」との関係の中だけで計算を行えばよい。すなわち、隣接関係上の計算となるため、前述してきた処理と同様な処理を繰り返し行えばよい。
【００７０】
したがって、文字列「２５６メガビット」の生起頻度はこれまでと同様に隣接関係上の独立生起頻度の差分を行えばよいことになる。文字列「２５６メガビット」から文字列「２５６メガビットＳＤＲＡＭ」の独立生起頻度を除去すると、文字列「２５６メガビット」の独立生起頻度は、ｆ４−ｆ’０となる。また、文字列「２５６メガビットＲＡＭ」の独立生起頻度を除去すると、文字列「２５６メガビット」の独立生起頻度は、ｆ４−ｆ’０−ｆ’’０となる。
【００７１】
文字列「２５６メガビット」を前方に包含する、より長い文字列が無くなった時点で文字列「２５６メガビット」の独立生起頻度が確定する。上記を繰り返し行って図１３の文字列を全て処理した時点で独立生起頻度の重複をすべて除去することができる。したがって、文字列ごとの独立生起頻度を確定することが可能である。
【００７２】
ここまでの処理により前方に包含する文字列を除去したが、後方に包含する文字列を除去する必要もある。後方に包含する文字列を除去するために、文字列を後方からの方向でソートすることにより、後方に包含する文字列を一カ所に集めることができる。図１４は、ステップＳ１〜Ｓ４までの処理により得られた文字列およびその文字列の独立生起頻度を示す。
【００７３】
文字列「６メガビットＤＲＡＭ」には、文字列「１６メガビットＤＲＡＭ」の部分文字列としての生起頻度が含まれている。さらに、文字列「６メガビットＤＲＡＭ」には、文字列「１６メガビットＤＲＡＭ」を構成する部分文字列としての生起頻度が含まれている。
つまり、文字列「６メガビットＤＲＡＭ」は、前方からの生起頻度計算において意味の単位を構成するように計算されるが、後方からの生起頻度計算において他の文字列の部分文字列になっている場合がある。そこで、本発明の言語知識獲得プログラムでは、後方に包含する文字列を除去するため、図１５のような処理を行う。
【００７４】
図１５は、文字列順序の置換処理について説明するための図を示す。文字列順序の置換処理は、文字列を構成する文字の前後を置換するものである。例えば文字列が「今日は良い天気です」であれば、文字列順序の置換処理により「すで気天い良は日今」に並び替えられる。図１５の文字列順序の置換処理により、図１４を図１６のように並び替えられる。図１６は、文字列順序の置換処理により並び替えられた文字列および生起頻度を示す。ステップＳ５では、図１５のような文字列順序の置換処理を行う。
【００７５】
ステップＳ５の処理により得られた図１６のような文字列およびその文字列の生起頻度について、前述したステップＳ２〜Ｓ４と同様なステップＳ６〜ステップＳ８の処理を行うことにより、後方に包含する文字列を除去できる。ステップＳ８に続いてステップＳ９に進み、演算処理装置１６は図１５のような文字列順序の置換処理を再度行うことにより、ステップＳ５で並び替えられた文字列を元の文字列に並び替える。
【００７６】
このように、図２の言語知識獲得処理を行うことにより、文字ｎ−ｇｒａｍを用いて言語知識を獲得することが可能である。なお、本発明の言語知識獲得プログラムにより取得された言語知識は、形態素解析の辞書，データベースシステムおよび情報抽出システムなどのインデックス情報として利用できる。
【００７７】
したがって、本発明の言語知識獲得プログラムは、形態素解析の辞書を自動的に構築することができる。また、本発明の言語知識獲得プログラムは文字列を抽出するために外部知識を与えないため、解析対象とするデータに合わせた辞書を構築できる。さらに、本発明の言語知識獲得プログラムは外部から言語的な知識を与えてデータを抽出するものでないため、抽出されたデータが言語現象に結びついたものとなっている。そのため、抽出されるデータは言語現象を分析するデータとして非常に高い価値を有している。
【００７８】
次に、形態素解析プログラムの詳細について説明する。形態素解析プログラムは、前述の言語知識獲得プログラムにより獲得した言語知識を用いて形態素解析を行うものである。以下、形態素解析プログラムの具体的な処理について説明する。
【００７９】
図１７は、形態素解析処理の一例のフローチャートを示す。図１７中、ステップＳ４１では、演算処理装置１６が、形態素解析を行う文（以下、解析対象文という）を入力する。ステップＳ４１に続いてステップＳ４２に進み、演算処理装置１６はｎ−ｇｒａｍ語彙辞書３１からステップＳ４１で入力した解析対象文に含まれる文字列を全て取得する。即ち、演算処理装置１６はｎ−ｇｒａｍ語彙辞書３１から解析対象文の部分文字列を取得する。
【００８０】
ｎ−ｇｒａｍ語彙辞書３１は、前述の言語知識獲得プログラムにより獲得した言語知識としての形態素（単語）エントリを格納したものであり、各形態素エントリごとに生起頻度と独立生起頻度とが付加されている。ｎ−ｇｒａｍ語彙辞書３１は、例えば図１８のような内容を含む。
【００８１】
図１８は、ｎ−ｇｒａｍ語彙辞書の内容について説明するための図を示す。図１８のｎ−ｇｒａｍ語彙辞書３１は、文字列「インターネット」の部分文字列を一例として表したものである。
【００８２】
ステップＳ４２に続いてステップＳ４３に進み、演算処理装置１６は形態素解析の前作業としての形態素テーブル作成処理を行う。形態素テーブル作成処理とは、ステップＳ４２で取得した文字列を解析対象文に記述されている順番に並び替えて、図１９のような形態素テーブル３２を作成する処理をいう。
【００８３】
図１９は、形態素テーブルの一例の構成図を示す。図１９の形態素テーブル３２は、解析対象文が「インターネット」のときのものである。形態素テーブル３２は解析対象文「インターネット」を構成する文字の順序に従って１文字ごとにポインタで結合されている線形リストとしての見出しと、ステップＳ４２で取得した文字列をその文字列の先頭の文字に応じて見出しに振り分けたｎ−ｇｒａｍエントリ（以下、単にエントリという）とで構成される。
【００８４】
例えばステップＳ４２で取得した文字列のうち「インターネット，インター，インタ，イン，イ」は、先頭の文字が「イ」なので見出し「イ」に振り分けられる。同様に、ステップＳ４２で取得した文字列を全て処理すると、図１９のような形態素テーブル３２が生成される。
【００８５】
ステップＳ４３に続いてステップＳ４４に進み、演算処理装置１６はステップＳ４２で取得した文字列，言い替えればエントリに対し、そのエントリの前後で分割すべきか否かを判定するための分割位置計算を行う。
【００８６】
分割位置計算は、ｎ−ｇｒａｍ語彙辞書３１に格納されているエントリそのもの，独立生起頻度，生起頻度に基づいた評価関数により行われる。ここで、エントリそのものとは、エントリの長さ，他のエントリの始まりと区切りの個数などをいう。なお、始まりと区切りの個数とは、図１８のｎ−ｇｒａｍ語彙辞書３１の場合、例えば「タ」で始まるエントリが２個，「タ」の直前を区切りとしたエントリが２個いうような情報をいう。
【００８７】
分割位置計算では、エントリＳｎについて、エントリそのものに関する評価関数をｆentry（Ｓｎ），独立生起頻度に関する評価関数をｆif（Ｓｎ），生起頻度に関する評価関数をｆdf（Ｓｎ），頻度に関する評価関数をｆfreq（ｆif（Ｓｎ），ｆdf（Ｓｎ））と設定して詳細な計算を行うべきであるが、理解を容易とするために直感的な動作について説明する。
【００８８】
例えば、解析対象文「インターネットを利用した情報技術は今後・・・」を形態素解析処理した場合の解析過程例を図２０に表し、ステップＳ４４の分割位置計算およびステップＳ４５の最適解取得処理４５について説明する。
【００８９】
図２０は、形態素解析処理における一例の解析過程を示す。図２０では、先頭に数字が付与されているエントリと、先頭に数字が付与されていないエントリとが記載されている。エントリの先頭に付与されている数字は、形態素テーブル３２の先頭からの位置を表している。
【００９０】
エントリ「インターネットを」の先頭の文字「イ」は形態素テーブル３２の先頭に位置しているのでエントリ「インターネットを」の先頭に「０」が付与されている。また、エントリ「ネットを」の先頭の文字「ネ」は形態素テーブル３２の先頭から５文字目に位置しているのでエントリ「インターネットを」の先頭に「４」が付与されている。
【００９１】
また、先頭に数字が付与されているエントリにおいて、数字の次に記載されている＜＞内の文字は、形態素テーブル３２の見出しを指している。即ち、エントリの先頭の１文字となる。矢印「→」の右側にある＜＞内の文字は、後述する最適解取得処理により選択された文字列を表す。
【００９２】
さらに、先頭に数字が付与されていないエントリにおいて、矢印「→」の右側にある＜＞内の文字および数字は、最適解取得処理により選択された文字列およびステップＳ４４の分割位置計算により計算した数値を表している。
【００９３】
例えばステップＳ４４の分割位置計算では、形態素テーブル３２を用いてエントリが見出しのどの部分で何回分割したかを数え上げ、その数値を見出しごとに設定する。この処理を形態素テーブルの見出しに対して行うと、分割位置計算を終了する。なお、より詳細な計算を行いたい場合は、頻度関数などを導入した分割コストとして形態素テーブル３２の見出しに設定すればよい。
【００９４】
ステップＳ４４に続いてステップＳ４５に進み、演算処理装置１６は最適解取得処理を行う。最適解取得処理は、ステップＳ４４の分割位置計算により得られた数値が最も高い見出し部分を分割位置として決定し、各エントリを取得する処理を行う。
【００９５】
ステップＳ４５に続いてステップＳ４６に進み、演算処理装置１６はステップＳ４５の最適解取得処理の結果に応じて、図２１のような形態素解析結果を出力する。図２１は、形態素解析結果の一例の出力図を示す。図２１の形態素解析結果は、形態素，形態素ごとの単独生起頻度および生起頻度を含んでいる。
【００９６】
このように、図１７の形態素解析処理を行うことにより、図２の言語知識獲得処理で取得した言語知識を辞書として用いた形態素解析を行うことができる。したがって、本発明の形態素解析プログラムは、形態素解析の文法を用いることなく形態素解析可能な枠組みを提供できる。また、本発明の形態素解析プログラムは言語知識獲得プログラムを用いて自動的に取り出した辞書を利用するため、様々な分野に合わせた辞書を容易に適用できる。さらに、本発明の形態素解析プログラムは言語特有の文法を用いていないため、日本語に限らずあらゆる言語系で動作する仕組みを提供できる。
【００９７】
本発明は、以下に記載する付記のような構成が考えられる。
（付記１）  コンピュータに、
取得した解析対象文から文字列の全ての組合せを基礎データとして出力する基礎データ出力手順と、
前記基礎データに基づき前記文字列ごとの生起頻度および独立生起頻度を算出し、算出した生起頻度に応じて一の文字列の部分列に相当する他の文字列を除去して言語知識として出力する言語知識出力手順と
を実行させるための言語知識獲得プログラム。
（付記２）  前記言語知識出力手順は、一の文字列の生起頻度と前記一の文字列の部分列に相当する他の文字列の生起頻度とを比較し、一の文字列の生起頻度と前記一の文字列の部分列に相当する他の文字列の生起頻度とが同じときに前記一の文字列の部分列に相当する他の文字列を除去することを特徴とする付記１記載の言語知識獲得プログラム。
（付記３）  前記言語知識出力手順は、一の文字列の部分列に相当する他の文字列の生起頻度から前記一の文字列の生起頻度を減算し、前記一の文字列の部分列に相当する他の文字列の独立生起頻度を算出することを特徴とする付記１記載の言語知識獲得プログラム。
（付記４）  前記言語知識出力手順は、算出した生起頻度が所定の閾値以下の前記文字列を除去することを特徴とする付記１記載の言語知識獲得プログラム。
（付記５）  前記言語知識出力手順は、前記基礎データに基づき前記文字列ごとの生起頻度および独立生起頻度を算出し、算出した生起頻度に応じて一の文字列の部分列に相当する他の文字列を除去する前方包含部分列除去手順と、
前記文字列を構成する文字の順番を前後入れ替えたあと、前記文字列ごとの生起頻度および独立生起頻度を算出し、算出した生起頻度に応じて一の文字列の部分列に相当する他の文字列を除去する後方包含部分列除去手順と、
前記文字列を構成する文字の順番を元に戻したあと、前記文字列を言語知識として出力する言語知識出力手順と
を有することを特徴とする付記１記載の言語知識獲得プログラム。
（付記６）  コンピュータに、
形態素解析を行う文から所定の言語知識格納手段に格納されている全ての文字列を取得し、取得した全ての文字列を前記形態素解析を行う文に記載されている順番に並び替えて形態素テーブルを生成する形態素テーブル生成手順と、
前記全ての文字列の始点および終点を分割点として計数し、前記分割点の数に応じて前記形態素解析を行う文の分割位置を決定する分割位置決定手順と、
決定した分割位置に応じた形態素解析結果を出力する形態素解析結果出力手順と
を実行させるための形態素解析プログラム。
（付記７）  前記形態素テーブル生成手順は、一の文字列を構成する文字を見出しとして設定し、前記文字を始点とする他の文字列を前記文字と対応付けて形態素テーブルを生成することを特徴とする付記６記載の形態素解析プログラム。
（付記８）  前記分割位置決定手順は、全ての文字列の始点および終点から前記見出しごとの分割点を計数し、計数した分割点の数が大きい見出し位置を前記分割位置と決定することを特徴とする付記７記載の形態素解析プログラム。
（付記９）  前記言語知識格納手段は、解析対象文から文字列の全ての組合せを基礎データとして出力し、前記基礎データに基づき前記文字列ごとの生起頻度および独立生起頻度を算出し、算出した生起頻度に応じて一の文字列の部分列に相当する他の文字列を除去して生成された言語知識を格納していることを特徴とする付記６記載の形態素解析プログラム。
（付記１０）  コンピュータに、
取得した解析対象文から文字列の全ての組合せを基礎データとして出力する基礎データ出力手順と、
前記基礎データに基づき前記文字列ごとの生起頻度および独立生起頻度を算出し、算出した生起頻度に応じて一の文字列の部分列に相当する他の文字列を除去して言語知識として出力する言語知識出力手順と
を実行させるための言語知識獲得プログラムを記録したコンピュータ読み取り可能な記録媒体。
（付記１１）  コンピュータに、
形態素解析を行う文から所定の言語知識格納手段に格納されている全ての文字列を取得し、取得した全ての文字列を前記形態素解析を行う文に記載されている順番に並び替えて形態素テーブルを生成する形態素テーブル生成手順と、
前記全ての文字列の始点および終点を分割点として計数し、前記分割点の数に応じて前記形態素解析を行う文の分割位置を決定する分割位置決定手順と、
決定した分割位置に応じた形態素解析結果を出力する形態素解析結果出力手順と
を実行させるための形態素解析プログラムを記録したコンピュータ読み取り可能な記録媒体。
【図面の簡単な説明】
【００９８】
【図１】本発明の言語知識獲得プログラムおよび形態素解析プログラムを実行するコンピュータシステムの一実施例のハードウェア構成図である。
【図２】言語知識獲得処理の一例のフローチャートである。
【図３】基礎データ抽出処理の一例のフローチャートである。
【図４】文分割，読点分割処理の一例のフローチャートである。
【図５】文分割，読点分割処理の一例の説明図である。
【図６】文字ｎ−ｇｒａｍ解析処理の一例のフローチャートである。
【図７】文字ｎ−ｇｒａｍ解析処理の一例の説明図である。
【図８】生起頻度データの一例の説明図である。
【図９】文字列ごとの生起頻度について説明するための図である。
【図１０】生起頻度の単一化について説明するための図である。
【図１１】文字列間の重複が除去された結果を説明するための図である。
【図１２】文字列ごとの独立生起頻度について説明するための図である。
【図１３】文字列の独立生起頻度を確定する処理について説明するための図である。
【図１４】ステップＳ１〜Ｓ４までの処理により得られた文字列およびその文字列の独立生起頻度である。
【図１５】文字列順序の置換処理について説明するための図である。
【図１６】文字列順序の置換処理により並び替えられた文字列および生起頻度である。
【図１７】形態素解析処理の一例のフローチャートである。
【図１８】ｎ−ｇｒａｍ語彙辞書の内容について説明するための図である。
【図１９】形態素テーブルの一例の構成図である。
【図２０】形態素解析処理における一例の解析過程である。
【図２１】形態素解析結果の一例の出力図である。
【符号の説明】
【００９９】
１    コンピュータシステム
１０    入力装置
１１    表示装置
１２    ドライブ装置
１３    記録媒体
１４    補助記憶装置
１５    メモリ装置
１６    演算処理装置
Ｂ    バス（bus）
２１    記事データベース
２２    基礎データ
２３    解析対象メモリ
３１    ｎ−ｇｒａｍ語彙辞書
３２    形態素テーブル
【図１】
2005032269.tif 000005
【図２】
2005032269.tif 000006
【図３】
2005032269.tif 000007
【図４】
2005032269.tif 000008
【図５】
2005032269.tif 000009
【図６】
2005032269.tif 000010
【図７】
2005032269.tif 000011
【図８】
2005032269.tif 000012
【図９】
2005032269.tif 000013
【図１０】
2005032269.tif 000014
【図１１】
2005032269.tif 000015
【図１２】
2005032269.tif 000016
【図１３】
2005032269.tif 000017
【図１４】
2005032269.tif 000018
【図１５】
2005032269.tif 000019
【図１６】
2005032269.tif 000020
【図１７】
2005032269.tif 000021
【図１８】
2005032269.tif 000022
【図１９】
2005032269.tif 000023
【図２０】
2005032269.tif 000024
【図２１】
2005032269.tif 000025