(57)【特許請求の範囲】
【請求項１】
プロセッサと、メモリと、外部記憶装置とを備え、
前記プロセッサは、テキストから当該テキストに含まれる処理対象単語の出現頻度を記録したリストを作成する処理、前記リストに含まれる処理対象単語の少なくとも一部に対応してランダム行列を生成する処理、前記リストに含まれる処理対象単語と共起する共起単語の組を前記テキストから抽出する処理、前記処理対象単語と共起する共起単語の組を前記ランダム行列によってランダム射影し、ランダム射影結果の和を計算することによって、前記処理対象単語の意味を表現するベクトルを計算する処理、前記ベクトル間の距離を計算することにより前記処理対象単語間で同義語の組を抽出する処理を実行し、
前記メモリ上に、前記処理対象単語の出現頻度を記録したリスト、前記ランダム行列及び前記処理対象単語の意味を表現するベクトルの計算結果が置かれ、
前記メモリ上に置かれる処理対象単語のリストに含まれる単語数Ａが予め設定されており、全ての処理対象単語を含む全体単語リストが前記外部記憶装置に記憶され、前記全体単語リスト中の出現頻度順上位Ａ個に含まれる処理対象単語が変化したとき、前記プロセッサは、前記メモリ上に置かれる処理対象単語のリスト及び前記ランダム行列を前記全体単語リスト中の出現頻度順上位Ａ個に含まれる処理対象単語に対応したものに変更する
ことを特徴とする同義語抽出装置。
【請求項２】
プロセッサと、メモリと、インタフェースとを備え、
前記メモリは、テキストから当該テキストに含まれる処理対象単語の出現頻度を記録したリストを作成する処理、前記リストに含まれる処理対象単語の少なくとも一部に対応してランダム行列を生成する処理、前記リストに含まれる処理対象単語と共起する共起単語の組を前記テキストから抽出する処理、前記処理対象単語と共起する共起単語の組を前記ランダム行列によってランダム射影し、ランダム射影結果の和を計算することによって、前記処理対象単語の意味を表現する意味ベクトルを計算する処理を実行した結果得られた複数の処理対象単語に対応する意味ベクトルを保持し、
前記プロセッサは、前記インタフェースを介して受け付けた単語に対応する意味ベクトルと前記メモリ上に保持されている他の処理対象単語に対応する意味ベクトル間の距離を計算し、距離が近い処理対象単語を前記受け付けた単語の同義語として出力し、
前記メモリ上に置かれる処理対象単語のリストに含まれる単語数Ａが予め設定されており、全ての処理対象単語を含む全体単語リストが前記外部記憶装置に記憶され、前記全体単語リスト中の出現頻度順上位Ａ個に含まれる処理対象単語が変化したとき、前記プロセッサは、前記メモリ上に置かれる処理対象単語のリスト及び前記ランダム行列を前記全体単語リスト中の出現頻度順上位Ａ個に含まれる処理対象単語に対応したものに変更する
ことを特徴とする同義語抽出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テキスト中から同義語を抽出する技術に関し、特に有限のメモリを用いて、大量のテキストを対象として同義語を抽出する技術に関する。
【背景技術】
【０００２】
パソコン及びインターネットの普及によって、ユーザがアクセス可能な電子化文書の量が増大している。このような大規模な文書情報の中から、所望の文書を効率的に発見するための技術の一つに文書検索技術がある。文書検索技術によれば、入力されたキーワードを含む文書を発見することで、ユーザが所望の文書を効率的に入手することができる。しかしながら、単純な文字列の検索だけでは不十分な場合も多い。文字列検索における問題の一つに同義語の問題がある。すなわち、同じ意味を表現する複数の単語が存在するために、同じ意味を表す文書が単純な文字列検索では発見できず、検索漏れが発生する場合がある。このような同義語の問題に対処するために、同義語辞書を検索システムに持たせることが従来から行われている。
【０００３】
同義語辞書の人手作成には大きなコストが必要であるため、同義語辞書をテキストデータから自動で作成することが従来から試みられている。同義語辞書を作成するための方法の一つとして、単語の出現文脈、すなわち着目している単語の近傍に現れる単語や文字列に着目する方法がある。非特許文献１に、同義語抽出技術が開示されている。
【非特許文献１】P.P. Senellart, V. D. Blondel, Automatic discovery of similar words, Survey of Text Mining: Clustering, Classification, and Retrieval, M. W. Berry, Springer, (2003/08).
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来技術では、十分な精度で同義語を抽出することは実現できていない。その理由の代表的なものが、スパースネスである。スパースネスの問題とは、ある単語に注目した場合に、本来なら近傍に出現すべき単語が「偶然」出現していないために、単語の出現文脈を正確に捉えられない現象を言う。
【０００５】
スパースネスの問題を解決するための最もオーソドックスな方法は、対象テキストのサイズを大きくすることである。しかしながら、テキストサイズを大きくすると、同義語抽出を行うために必要な計算量、及び記憶領域のサイズが急速に大きくなる。特に、記憶領域サイズに関する問題が大きい。現実的な処理時間を実現するためには、計算機のメモリのサイズ内で処理を行うことが必須である。なぜならば、ハードディスクはメモリと比較すると、記憶可能な領域のサイズは大きく、安価ではあるものの、そのアクセス速度は極めて遅いためである。そのため、扱うことが可能なテキストサイズに、メモリのサイズに起因する事実上の上限があり、テキストサイズを大きくすることでスパースネスの問題を解決することは困難であった。
【０００６】
本発明はこのような課題を解決するためになされたものであり、有限のメモリを用いて、事実上無制限のサイズのテキストを対象とした同義語抽出を行うことを目的とする。
【課題を解決するための手段】
【０００７】
本発明の代表的な形態は、プロセッサ、メモリ及びインタフェースを備え、テキストから単語（処理対象単語）とその出現文脈、すなわち共起する単語（共起単語）の組を抽出し、前記共起単語をランダム行列によって射影し、射影した結果を集約して得られる圧縮文脈行列から得られる圧縮文脈の類似度から、単語間の類似度を判定する。
【０００８】
すなわち、本発明による同義語抽出装置は、プロセッサと、メモリと、外部記憶装置とを備え、プロセッサは、テキストから当該テキストに含まれる処理対象単語の出現頻度を記録したリストを作成する処理、リストに含まれる処理対象単語の少なくとも一部に対応してランダム行列を生成する処理、リストに含まれる処理対象単語と共起する共起単語の組をテキストから抽出する処理、処理対象単語と共起する共起単語の組をランダム行列によってランダム射影し、ランダム射影結果の和を計算することによって、処理対象単語の意味を表現するベクトルを計算する処理、ベクトル間の距離を計算することにより処理対象単語間で同義語の組を抽出する処理を実行し、メモリ上に、処理対象単語の出現頻度を記録したリスト、ランダム行列及び処理対象単語の意味を表現するベクトルの計算結果が置かれている。
【０００９】
また、本発明の同義語抽出装置は、プロセッサと、メモリと、インタフェースとを備え、メモリは、テキストから当該テキストに含まれる処理対象単語の出現頻度を記録したリストを作成する処理、リストに含まれる処理対象単語の少なくとも一部に対応してランダム行列を生成する処理、リストに含まれる処理対象単語と共起する共起単語の組をテキストから抽出する処理、処理対象単語と共起する共起単語の組をランダム行列によってランダム射影し、ランダム射影結果の和を計算することによって、処理対象単語の意味を表現する意味ベクトルを計算する処理を実行した結果得られた複数の処理対象単語に対応する意味ベクトルを保持し、プロセッサは、インタフェースを介して受け付けた単語に対応する意味ベクトルとメモリ上に保持されている他の処理対象単語に対応する意味ベクトル間の距離を計算し、距離が近い処理対象単語を受け付けた単語の同義語として出力する。
【００１０】
ランダム行列の次元は、共起単語の総数をＭ個とするとき、Ｍ×Ｎ次元（Ｎ≪Ｍ）である。
【発明の効果】
【００１１】
本発明によれば、有限の計算機メモリを用いて、事実上無制限のサイズのテキストを対象とした同義語抽出を行うことが可能となる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の実施の形態を、図面を参照して説明する。
図１は、本発明の同義語抽出装置を実現する計算機システムのブロック図である。本実施の形態の同義語抽出装置は、ＣＰＵ１０１、主メモリ１０２、入出力装置１０３及びディスク装置１１０を備える。
【００１３】
ＣＰＵ１０１は、主メモリ１０２に記憶されるプログラムを実行することによって各種処理を行う。具体的には、ＣＰＵ１０１は、ディスク装置１１０に記憶されるプログラムを、主メモリ１０２上に呼び出して実行する。主メモリ１０２は、ＣＰＵ１０１によって実行されるプログラム及びＣＰＵ１０１によって必要とされる情報等を記憶する。入出力装置１０３には、ユーザから情報が入力される。また、入出力装置１０３は、ＣＰＵ１０１の指示に応じて、情報を出力する。例えば、入出力装置１０３は、キーボード、マウス及びディスプレイのうち少なくとも一つを含む。
【００１４】
ディスク装置１１０は、各種情報を記憶する。具体的には、ディスク装置１１０は、ＯＳ１１１、同義語抽出プログラム１１２、テキスト１１３、単語リスト１１４、ランダム行列１１５、圧縮文脈行列１１６、及び形態素解析結果１１７を記憶する。ＯＳ１１１は、同義語抽出装置１００の処理の全体を制御する。同義語抽出プログラム１１２は、テキストから同義語を抽出する。テキスト１１３は、同義語抽出プログラムへの入力となるテキストである。単語リスト１１４は、テキストから抽出された単語が格納される。なお、単語リスト１１４については、図４で詳細を説明する。ランダム行列１１５は、単語文脈ベクトルを射影するために用いる変換行列である。圧縮文脈行列１１６は、ランダム行列１１５によって変換された後の単語の文脈情報が格納される行列である。形態素解析結果１１７は、テキスト１１３を形態素解析した結果が格納される。
【００１５】
以下では、本発明の基本的な考え方について説明する。図２は、従来の同義語抽出技術において用いられる単語文脈行列の例である。単語文脈行列は、単語の「意味」を、その単語と共起する単語とその共起の頻度によって表現した行列である。各行、各列はそれぞれ単語を表しており、行列の要素（ｉ，ｋ）は、単語ｉが、単語ｋと何回共起したかを示す。行列の各行は、ある単語に着目した場合の、その単語と共起する単語の共起頻度が格納されている。例えば、図２では、「サーチ」という単語が、「ネット」と２０回、「英語」と２回、「画像」と１０回、「高速」と２回、「日本語」と３回、「文書」と３０回、それぞれ共起したという情報が格納されており、この情報が「サーチ」の意味を表していると考える。
【００１６】
同義語の抽出、すなわち単語の意味が似ているかどうかの計算は、この共起頻度の分布の類似性を計算することによって行うことができる。各行に対応する単語を処理対象単語、各列に相当する単語を共起単語と特に呼ぶ場合がある。誤解されるおそれがない場合は、両方をまとめて単語と呼ぶ。また、各行は、処理対象単語の「意味」を、共起単語を次元とするベクトルで表現したものであり、単語文脈ベクトルと呼ぶ。
【００１７】
従来の同義語抽出技術により、大量のテキストから同義語を抽出しようとすると、大量の計算機リソース、特にメモリが必要となる。例えば、処理対象単語数、共起単語数として、１００万語を扱うことを想定する。図２の行列を、単純に１００万×１００万の行列として保持しようとすると、１０の１２乗個の要素からなる行列となるため、メモリ上で処理を行うことは非現実的である。この行列のほとんどの要素が０であるため、例えばリストなどの構造を用いて、行列の非ゼロの要素のみを保持することにより、必要なメモリを低減することが行われる。文書検索でよく用いられる文書と単語の行列においても同様の問題があるが、この場合、各行における非ゼロの要素は一定であるため、非ゼロの要素のみを保持する方法が有効である。しかしながら、同義語抽出のための単語と単語の行列では、行内の非ゼロの要素は一定ではない。テキスト量が増加するにしたがって、行内の非ゼロの要素が徐々に増加していくため、このようなデータ構造の工夫を行ったとしても、有限のメモリ量で処理を行える保証がない。
【００１８】
本発明では、ランダム行列を用いたランダム射影によってこの問題を解決する。図３は、本発明の基本的な考え方を示す説明図である。ランダム射影は、ランダム行列によって高次元空間をより低次元の部分空間に射影することで次元圧縮を行う技術である。同義語抽出に適用する際には、高次元の行列である単語文脈行列にランダム射影を適用することにより、サイズが小さい圧縮文脈行列を得ることができる。
【００１９】
ランダム行列は、行ベクトルの長さの期待値が１であるという制約を満たした、乱数が格納された行列である。元の空間における距離が、射影後の低次元部分空間において確率的な意味で保存されていることが知られている。このとき、単語文脈行列における２個の単語に対応する単語文脈ベクトル間のユークリッド距離が、下式(1)で推定できる。圧縮後の次元数Ｎが大きいほど誤差は小さいが、Ｎが大きいと必要なメモリ量が多くなる。実際には、要求される誤差のレベルおよび使用可能なメモリ量により決定すれば良い。
【００２０】
【数１】
0005079471.tif 000002
Ｍ：単語文脈行列の共起単語の次元数
Ｎ：圧縮文脈行列の次元数
Ｒ：ランダム行列
Ｘ：圧縮文脈行列の行ベクトル
【００２１】
図３のように、Ａ次元×Ｍ次元の行列に、Ｍ次元×Ｎ次元のランダム行列を掛けることによってできる、Ａ次元×Ｎ次元の圧縮文脈行列において、単語ｉと単語ｊの距離を計算することによって、元の単語×単語文脈行列における距離計算を代替する。ランダム射影及びランダム行列の構成法としては、例えば、“E. Bingham, Random projection in dimensionality reduction: Applications to image and text data, Proc. of 7th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD 2001), PP.245-250, 2001.”に記載されている方法を用いることができる。
【００２２】
ランダム射影によって、以下の利点が得られる。第一に、次元圧縮により必要なメモリを削減するとともに、有限のメモリで全ての計算を行うことを保証できる。Ａ×Ｍ次元の単語文脈行列は、実際には行列の形で保持する必要はなく、Ａ次元×Ｎ次元のランダム行列と、圧縮文脈行列のみをメモリ上に保持すれば良い。よって、処理が進むにつれて、必要なメモリ量が増大するなどの問題がない。また、次元圧縮による精度の低下分は、圧縮後の行列の次元数によって定まるため、テキスト量の増大によって変化しない。第二に、単純なデータ構造で実装が容易である。固定長の配列を用いることができるため、リストなどのデータ構造における複雑な操作が不必要である。
【００２３】
図４は、単語リストの概念図である。単語リストは、処理対象のテキストを形態素解析し、同じ単語の出現回数を集計して得られる、頻度つきの異なり単語リストである。単語の文字列、単語ＩＤ、出現頻度からなる。単語ＩＤは、一意に付与されたＩＤであり、行列のアクセスに利用される。以下では、単語ＩＤと行列の行あるいは列が対応しているものとして説明する。また、高速なアクセスが可能であるように、トライ、ハッシュなどの技術を用いて実装することが望ましい。
【００２４】
図５は、本発明の同義語抽出装置によって実行される同義語抽出処理のフローチャートである。
【００２５】
まず、テキストを読み込み、形態素解析処理を行う（Ｓ１１）。形態素解析結果は、一旦ファイルなどに保持しておくが、メモリ量に余裕がある場合には、メモリ上に保持していても構わない。なお、文単位、あるいはパラグラフ、ファイルなどを単位として形態素解析を行いながら、Ｓ１２の処理を行っても良い。次に、単語リスト作成処理を行う（Ｓ１２）。形態素解析結果を読み込みながら、同じ単語をまとめ上げて、頻度をカウントし、一意な単語ＩＤを付与する。この処理は、メモリ上で行われるが、単語リストに必要なメモリ量は、文脈行列と比較して大幅に小さいため、実際上は問題が起きない。例えば、１０００万語の単語を対象とするとして、１単語平均が４文字（８バイト）だとしても、高々８０メガバイトのメモリがあれば、文字列を保持することができる。また、“有村他、データストリームのためのマイニング技術、情報処理学会誌、Vol.46, No.1”に記載される技術を用いて有限のメモリを用いて、頻度が高い順に一定個数の単語リストを近似的に作成することで、必要最低限のメモリによって単語リストを管理することも可能である。
【００２６】
次に、ランダム行列、圧縮文脈行列を生成する（Ｓ１３）。ランダム行列、圧縮文脈行列のサイズ、Ｍ，Ｎを決定し、必要なメモリ領域を確保する。ランダム行列に関しては、ランダムに値を設定する。行列サイズＭは、単語リスト中の単語の個数に準じて決定する。具体的には、出現頻度が多い順などの優先度順に、閾値以上の出現頻度を有する単語を取り出すなどの方法でＭを決定する。Ｎは、Ｎが大きい方が精度が高く、小さいと精度が低くなるので、メモリサイズの制約や必要な精度に応じて決定する。
【００２７】
全ての共起に対して処理を完了したかどうかを調べる（Ｓ１４）。完了していれば、Ｓ１７に進む。完了していなければ、Ｓ１５に進む。Ｓ１５では、形態素解析結果を読み込み、共起を１個取得する。この処理を、図６を用いて詳細に説明する。
【００２８】
図６は、形態素解析結果の例を示す説明図である。今、例えば、２番目の単語「解析」に着目しているとする。このとき、「解析」との共起には様々な考え方が存在する。例えば、前、後、あるいは前後Ｎ単語以内に出現した単語が共起したとみなす方法がある。前後１単語を文脈とする場合には、「解析」に対し、「形態素」、「結果」が共起単語となり、（解析、形態素）、（解析、結果）という共起が得られる。また、構文解析を行って、係り受け関係にある単語の組を共起とするという方法もある。この場合、助詞などの機能語は除外し、（結果、読み込む）、（共起、取得する）などの共起が得られる。本発明では、どのような種類の共起を使用するかは問題ではなく、任意のタイプの共起を利用可能である。
【００２９】
次に、共起をランダム行列によってランダム射影し、圧縮文脈行列を更新する（Ｓ１６）。処理対象単語ｉの文脈に共起単語ｊが出現し、（処理対象単語ｉ，共起単語ｊ）という共起が得られたとする。このとき、ランダム行列のｊ行の内容を、圧縮文脈行列のｉ行に加算する。正確には、ランダム行列の（ｊ，ｋ）要素（ｋ＝１，２，…，Ｎ）の値を、圧縮文脈行列の（ｉ，ｋ）要素の値に加算する。これは以下のように説明できる。単語文脈行列とランダム行列の掛け算は、式(2)のように表される。すなわち、単語文脈行列のｉ行とランダム行列の任意の列ｋ列との内積が圧縮文脈行列の（ｉ，ｋ）要素に格納される。
【００３０】
【数２】
0005079471.tif 000003
【００３１】
（単語ｉ，単語ｊ）の共起が出現したということは、（ｉ，ｊ）要素の値が１大きくなったことを示すが、この際の圧縮文脈行列の（ｉ，ｊ）要素の増分は、ランダム行列の（ｊ，ｋ）要素の値となる。すなわち、線形の操作のみで圧縮文脈行列の要素を求めることができるため、単語文脈行列全体を作成しなくても、（単語ｉ，単語ｊ）の共起が見つかる度に圧縮文脈行列の更新を行えば良い。
【００３２】
共起が１個見つかる度に、Ｓ１６の処理を繰り返すことで、全ての共起に対して単語文脈行列を作成した後に、ランダム行列によってランダム射影を行った場合と同じ結果の、圧縮文脈行列を取得することができる。この繰り返し処理では、単語文脈行列を作成する必要がなく、インクリメンタルに処理を行うことができるため、必要なメモリ量を大幅に減らすことができる。また、１個の共起に対してＳ１６の処理を行うのに必要な計算量は常に一定であるため、テキストサイズが大規模化しても計算速度が低下していくという心配がない。
【００３３】
Ｓ１７では、全ての処理対象単語の組み合わせについて、単語の類似性を計算する。単語の類似性は、圧縮文脈行列の行ベクトル同士の類似性によって求めることができる。類似性の判定には、例えば、ユークリッド距離などを用いることができる。Johnson-Lindenstraussの補題では、ユークリッド距離が保存されることが証明されているが、それ以外の距離を利用することも可能である。各単語について、例えば、類似性の高い順に予め決められた数の単語を同義語として抽出し、出力する。
【００３４】
以下では、本発明の第２の実施の形態について説明する。まず、図５に示した第１の実施の形態の問題点について説明する。第１の実施の形態では、全てのテキストに対し、一旦単語リストの作成を行った後、文脈行列の作成を行う２パス方式を採用している。しかしながら、この方式では以下のような問題が存在する。例えば、１年単位で販売されている新聞のテキストデータを処理対象とする場合を考える。同義語抽出対象となるテキストは量が多い方が望ましいため、新たにテキストが販売された場合には、これを追加して同義語抽出を行うことができる必要がある。同様に、Ｗｅｂの文書なども次々に新たな文書が作成されるため、このような新規文書を追加して処理を行える必要がある。このような場合、新規テキストが追加されることで、最初、単語リストに含まれていないにも関わらず、新規テキストが追加されるにつれ、多く出現するようになる単語が存在する可能性がある。例えば、「サーチエンジン」のような単語はインターネットが普及した後に作成された文書には非常に多く出現するが、それ以前の文書にはほとんど出現しない。このような場合、以下のような問題が生じる。説明のために、２種類のテキスト（テキスト１、テキスト２）が存在し、テキスト１には「サーチエンジン」が含まれず、テキスト２には「サーチエンジン」が多く含まれるとする。すなわち、テキスト１とテキスト２をあわせて処理すれば、「サーチエンジン」は単語リストに採用されるものとする。また、処理を始める時点では、テキスト１しか入手できていないものとする。
【００３５】
図７は、テキスト１のみから抽出した単語リスト、テキスト２から抽出した単語リスト、テキスト１、２をあわせて処理を行った場合の単語リストをそれぞれ示している。ここで、単語リストは頻度が多い順に５個の単語を抽出して格納するものとする。テキスト１のみに多い単語として「図書」があり、テキスト２のみに多い単語として「サーチエンジン」があることが分かる。また、テキスト１、２を合わせて全体を見ると、「図書」よりも「サーチエンジン」が多いことが分かる。よって、テキスト１、２を合わせて一括して処理した場合には、「図書」が単語リストに採用されず、「サーチエンジン」が採用される。
【００３６】
ここで、第１の実施の形態で述べた方式で、テキスト１から単語リストを作成し、同義語抽出を行ったとし、その後、テキスト２が入手できたとする。このとき、第一の実施の形態の方式では、テキスト１に関して処理を行った時点で、単語リスト及びランダム行列、圧縮文脈行列は確定してしまっている。そのため、「サーチエンジン」に関する共起単語及び共起頻度を圧縮文脈行列に反映することができず、全体での頻度がより小さい「図書」が採用されたままになってしまうという問題が発生する。
【００３７】
本発明の第２の実施の形態では、このようにテキストが長期にわたって追加され、単語の出現傾向が途中で変化したとしても、その変化に追随できる同義語抽出方式について説明する。ここで、出現傾向の変化に追随できるとは、テキスト１、２を合わせて処理を行った場合と、テキスト１、２を分けて順番に処理を行った場合で、近似的に同じ結果が得られることを言う。
【００３８】
図８は、第２の実施の形態における同義語抽出方式の基本的考え方を示す説明図である。本実施の形態の考え方は、以下の通りである。まずメモリの制約はないものと仮定する。この場合、新たな単語が単語リストに追加された場合には、それに伴ってランダム行列の行数を１だけ大きくする。新たに生成されたランダム行列の行には、予め定められた方法で、ランダムに値を設定する。新たな単語を処理対象単語として扱う場合には、圧縮文脈行列の行数も１だけ大きくする。これにより、新たな単語が単語リストに追加される場合に対しても、単語ベクトルの次元を適切に圧縮することができる。しかしながら、ランダム行列の行数が大きくなるため、徐々に必要なメモリサイズも大きくなることが問題である。そこで、本実施の形態では、ハードディスクとメモリを組み合わせることによってこの問題を解決する。すなわち、新たに追加された単語を含む単語リストに対応するランダム行列、圧縮文脈行列をハードディスク上に持つことにする。そして、ある一定数の単語に対応する部分集合のみをメモリ上に持ち、部分集合である、メモリ上のランダム行列のみを用いて圧縮文脈行列の変更を行う。この場合、圧縮文脈行列の値は近似値となる。
【００３９】
メモリ上にロードされる行の決定は、各行に対応する単語の出現頻度に基づいて行う。すなわち、単語リスト中の出現頻度が高い順に単語を一定個数取り出し、この単語に対応するランダム行列中の行をメモリ上に保持する。単語リスト中の単語の出現頻度に基づく順序が変化した場合には、頻度が低下した単語に対応する行をハードディスクに退避し、出現頻度が増加した単語に対応する行をメモリ上にロードする。
【００４０】
図８に例を示す。図８（ａ）は、ハードディスク上のデータの概念図である。ハードディスク上のデータに関しては、「図書」のような途中で低頻度であることが判明した単語も含めたランダム行列、圧縮文脈行列が保持されている。図８（ｂ）は、メモリ上のデータの概念図である。メモリ上のデータに関しては、「図書」のような低頻度語は除外した、部分集合のデータが保持されている。
【００４１】
以上の処理を実現するために単語リストに以下のような変更を加える。図９に、第２の実施の形態で用いる単語リストの構成図を示す。第１の実施の形態で用いた単語リストと異なる点は、複数の単語ＩＤを保持している点である。全体単語ＩＤは一旦付与されたＩＤは変更されず、処理を通じて不変であり、ハードディスク上のデータを一意に特定するために用いられる。一方、一時単語ＩＤはメモリ上のデータを一意に特定するために用いられるＩＤである。作業ＩＤは、一時単語ＩＤの更新のために用いる作業用のＩＤである。図９の例では、「サーチエンジン」の一時単語ＩＤが「−」となっているが、これは共起単語として利用されていないことを示す。また、一時単語ＩＤが付与されている単語は、単語リスト中で出現頻度が高い順にある一定の個数(図８の場合は、５個)である。単語リストは、ランダム行列等の行列と比較して十分小さいため、ランダム行列に採用される個数と比較して十分な個数の単語を全てメモリ上に保持しておく。
【００４２】
図１０は、本発明の第２の実施の形態の同義語抽出装置によって実行される同義語抽出処理のフローチャートである。全てのファイルに対して処理を完了したかどうかを調べる（Ｓ２１）。完了していれば、Ｓ２８に進む。完了していなければ、Ｓ２２に進む。なお、図１０ではファイルを単位としてＳ２２〜Ｓ２７の処理を行っているが、ファイル以外の単位として、文単位、あるいはパラグラフ単位で処理を行っても構わない。Ｓ２２では、未処理のファイルからテキストを読み込み、形態素解析処理を行う。形態素解析結果は、一旦ファイルなどに保持しておくが、メモリ量に余裕がある場合には、メモリ上に保持していても構わない。Ｓ２３では、単語リスト更新処理を行う。形態素解析結果を読み込みながら、同じ単語をまとめ上げて、頻度をカウントし、単語リストを更新する。既に登録済みの単語については頻度を加算し、新しい単語に関しては新規単語として単語リストに登録して全体単語ＩＤを付与し、頻度を設定する。次に、ランダム行列、圧縮文脈行列更新処理を行う（Ｓ２４）。本ステップの処理は、後で図１１を用いて詳細に説明する。
【００４３】
次に、全ての共起に対して処理を完了したかどうかを調べる（Ｓ２５）。完了していれば、Ｓ２１に進み、次のファイルの処理を行う。完了していなければ、Ｓ２６に進む。Ｓ２６では、形態素解析結果を読み込み、共起を１個取得する。次に、共起をランダム行列によってランダム射影し、圧縮文脈行列を更新する（Ｓ２７）。
【００４４】
Ｓ２８では、圧縮文脈行列を検索エンジンに登録する。第１の実施の形態では、任意の２個の単語の組に対し、類似度計算を行い、同義語データを作成したが、第２の実施の形態では、圧縮文脈行列の形でデータを保持しておき、ユーザが入力した単語に対し、同義語の候補を返す構成としている。ユーザが入力した単語の行ベクトルを取得し、この行ベクトルとの類似度を計算して、類似度が高い単語を例えば類似度の高い順に予め決められた数だけ、同義語候補として返す。検索エンジンに関しては、Ｓ１７の処理と同等の処理を動的に行えば良い。
【００４５】
図１１は、Ｓ２４のランダム行列、圧縮文脈行列更新処理の詳細なフローチャートである。単語リスト中の単語について、頻度が大きい順にＭ個の単語を抽出し、単語リストにおいて作業ＩＤを付与する（Ｓ２４１）。ここで、Ｍはメモリ上のランダム行列の行数を示す。図９の例において、例えばＭを５とする。この場合、「図書」以外の単語に作業ＩＤが付与される。Ｓ２３の単語リスト更新処理において新たに追加された新規追加単語（新たに全体単語ＩＤを付与された単語）に対し、ハードディスク上のランダム行列、圧縮文脈行列に新たに行を追加して値を設定する（Ｓ２４２）。ランダム行列に対しては、所定の方法により生成した乱数を設定する。圧縮文脈行列に対しては０を設定する。図９の例において、新規追加単語が「サーチエンジン」であったとする。その場合、サーチエンジンに対応する行をランダム行列、圧縮文脈行列に追加し、値を設定する。
【００４６】
メモリからハードディスクに退避される単語の一覧を取得する（Ｓ２４３）。単語リスト内の全ての単語について、作業ＩＤが付与されておらず、一時単語ＩＤが付与されている単語を、退避される単語として抽出する。退避される単語に対応するランダム行列、圧縮文脈行列の行が書き換えの対象となる。図９の例の場合、「図書」が退避される単語として抽出される。次に、ハードディスクからメモリにロードされる単語の一覧を取得する（Ｓ２４４）。単語リスト内の全ての単語について、作業ＩＤが付与されており、一時ＩＤが付与されていない単語を、ロードする単語として抽出する。Ｓ２４３で抽出した語数とＳ２４４で抽出した語数は等しい。図９の例の場合、「サーチエンジン」がロードされる単語として抽出される。
【００４７】
次に、メモリ上のランダム行列、圧縮文脈行列を更新する（Ｓ２４５）。Ｓ２４４で取得した単語に対応するデータを、ハードディスク上のランダム行列、圧縮文脈行列から取得し、メモリ上のランダム行列、圧縮文脈行列の、Ｓ２４３で取得した単語に対応する位置に複写する。図９の場合、ハードディスク上のランダム行列、圧縮文脈行列の「サーチエンジン」に対応する行の内容を、メモリ上の「図書」に対応する行に複写する。
【図面の簡単な説明】
【００４８】
【図１】本発明による同義語抽出装置の構成例を示すブロック図。
【図２】単語文脈行列の概念図。
【図３】本発明の第１の実施の形態の基本的な考え方の説明図。
【図４】単語リストの概念図。
【図５】同義語抽出処理のフローチャート。
【図６】形態素解析結果の説明図。
【図７】複数のテキストがある場合の問題点を説明する図。
【図８】本発明の第２の実施の形態の基本的な考え方の説明図。
【図９】単語リストの説明図。
【図１０】同義語抽出処理のフローチャート。
【図１１】ランダム行列、圧縮文脈行列更新処理のフローチャート。
【符号の説明】
【００４９】
１００  同義語抽出装置
１０１  ＣＰＵ
１０２  主メモリ
１０３  入出力装置
１１０  ディスク装置
１１１  ＯＳ
１１２  同義語抽出プログラム
１１３  テキスト
１１４  単語リスト
１１５  ランダム行列
１１６  圧縮文脈行列
１１７  形態素解析結果
【図１】
0005079471.tif 000004
【図２】
0005079471.tif 000005
【図３】
0005079471.tif 000006
【図４】
0005079471.tif 000007
【図５】
0005079471.tif 000008
【図６】
0005079471.tif 000009
【図７】
0005079471.tif 000010
【図８】
0005079471.tif 000011
【図９】
0005079471.tif 000012
【図１０】
0005079471.tif 000013
【図１１】
0005079471.tif 000014