(57)【特許請求の範囲】
【請求項１】
主記憶装置と、
補助記憶装置と、
複数の文書を含む文書集合中の個々の文書から、単語あるいは連続する複数の文字からなる文字列のいずれかを、索引語として切り出す索引語切り出し手段と、
前記文書集合中の各文書に、それぞれ異なる文書識別番号を割り当てる文書識別番号割当手段と、
前記文章集合中の一部の文書群に対して、当該文書群に出現する索引語に対するハッシュ表を作成すると共に、当該ハッシュ表を用いて前記主記憶装置上に、各索引語を含む文書の文書識別番号のリストである転置リストからなるオンメモリ転置インデックスを構築する手段と、
前記オンメモリ転置インデックスを、部分転置インデックスとして前記補助記憶装置に書き出す部分転置インデックス書出手段と、
前記補助記憶装置に記憶された複数の部分転置インデックスを１つの転置インデックスに統合する部分転置インデックス統合手段とを有し、
前記部分転置インデックス書出手段は、索引語のハッシュ値の順に、各索引語の転置リストを格納した部分転置インデックスを前記補助記憶装置に書き出し、同一ハッシュ値の索引語が複数存在するときには、それらの索引語の転置リストを、事前に与えられた索引語間の全順序(total order)に従い前記部分転置インデックスに格納し、
前記部分転置インデックス統合手段は、索引語のハッシュ値の順に、前記複数の部分転置インデックス中の各索引語の転置リストを統合し、全索引語についての転置インデックスを作成することを特徴とする転置インデックス作成装置。
【請求項２】
請求項１記載の転置インデックス作成装置において、全順序として索引語の辞書順を用いることを特徴とする転置インデックス作成装置。
【請求項３】
請求項１記載の転置インデックス作成装置において、前記部分転置インデックスを前記全索引語についての転置インデックスに統合する際に、現れる索引語をハッシュ値の順に逐次追記することにより、全索引語のハッシュ表を生成することを特徴とする転置インデックス作成装置。
【請求項４】
主記憶装置と、
補助記憶装置と、
複数の文書を含む文書集合中の個々の文書から、単語あるいは連続する複数の文字からなる文字列のいずれかを、索引語として切り出す索引語切り出し手段と、
前記文書集合中の各文書に、それぞれ異なる文書識別番号を割り当てる文書識別番号割当手段と、
前記文章集合中の一部の文書群に対して、当該文書群に出現する索引語に対するハッシュ表を作成すると共に、出現順に各索引語に索引語識別番号を割り当てながら、前記主記憶装置上に、前記文書群の文書識別番号とその文書識別番号の文書に出現する索引語識別番号のリストからなるオンメモリのフォワードインデックスを構築する手段と、
前記オンメモリのフォワードインデックスを、部分フォワードインデックスとして前記補助記憶装置に書き出す部分フォワードインデックス書出手段と、
前記補助記憶装置に記憶された複数の部分フォワードインデックスを１つのフォワードインデックスに統合する部分フォワードインデックス統合手段とを有し、
前記部分フォワードインデックス書出手段は、前記部分フォワードインデックス中の前記索引語識別番号を前記ハッシュ表に格納されたハッシュ値順の仮の索引語識別番号に変換して前記補助記憶装置に書き出し、
前記部分フォワードインデックス統合手段は、複数の部分フォワードインデックスで用いられている個々の仮の索引語識別番号を全文書集合のフォワードインデックスでのハッシュ値順の索引語識別番号に変換するための変換表を作成し、当該変換表を使用して部分フォワードインデックス内での索引語識別番号を全文書集合のフォワードインデックスでの索引語識別番号に変換することを特徴とするフォワードインデックス作成装置。
【請求項５】
請求項４記載のフォワードインデックス作成装置において、同一ハッシュ値の索引語が複数存在する場合には、それらの索引語の索引語識別番号を、事前に与えられた索引語間の全順序(total order)に従い決定することを特徴とするフォワードインデックス作成装置。
【請求項６】
請求項５記載のフォワードインデックス作成装置において、全順序として索引語の辞書順を用いることを特徴とするフォワードインデックス作成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、巨大な文書集合を対象に文書の全文検索を行なうための検索インデックス作成方法に関し、特に巨大な文書集合を対象にして転置インデックス及びフォワードインデックスを作成する装置に関する。
【背景技術】
【０００２】
現代社会では、膨大な量の電子文書が日々作成され、その量はますます増え続けている。オフィスでは文書作成やプレゼンテーションに電子文書は不可欠であり、インターネットの拡大も、爆発的な数の電子文書が生み出される要因となっている。電子文書の量の増大とともに、多数の膨大な文書から必要な情報が記された文書を、短時間で検索し出力できる文書検索技術が必須となっており、技術開発も進んでいる。
【０００３】
文書検索の典型的なスタイルは、与えられた文書集合から、指定された単語を含む文書を、極力短時間で出力するというものである。この目的のために、転置インデックスと呼ばれるデータ構造が使用される。図１は、検索対象となる文書集合101と、それに基づき構築される転置インデックス102の概略図である。ある単語103が出現する全文書の文書識別番号105からなるリストを、転置リスト106と呼ぶ。
【０００４】
英語、フランス語、スペイン語のような単語がスペースで区切られている言語と異なり、日本語、韓国語や中国語では、文書を正確に単語に分割することが困難である。そこでn-gramと呼ばれる、連続するn文字からなる、文書中の任意の部分文字列を単語の代わりに用いて転置インデックスを構築する場合があり、実用上有用であることが知られている(情報検索アルゴリズム、北研二他著、共立出版）。nは、主に1〜10の整数である。本明細書では転置インデックスの作成に使用する、単語あるいは、長さnの部分文字列を、索引語と表記する。
【０００５】
文書検索では、転置インデックスのほかに図２に示すフォワードインデックス201と呼ばれるデータ構造が使用される場合がある。フォワードインデックス201は、検索対象文書集合101中の各文書104に対し、その文書が含む索引語103の索引語識別番号202のリストを格納したものである。ここで言う索引語識別番号202とは、同一の索引語に対しては同じ番号であり、異なる索引語に対しては異なるように与えられる番号である。フォワードインデックス201は、転置インデックス102作成に用いる中間データとして使用されるほか、類似文書を探索する連想検索と呼ばれる技術(安田、今一、岩山、丹羽、情報処理学会第69回全国大会、3D-1、2007)で使用されるデータ構造である。
【０００６】
検索対象となる文書データ量が爆発的に拡大してゆく一方で、検索システムを構築するための計算機リソースには限りがある。特に、計算機のメモリ(主記憶装置)は高速なランダムアクセスが可能であり、インデックス構築時に既知の索引語の一覧及び各索引語の伸張可能なリストを保持する作業領域として必須であるが、大容量のメモリはコストが高い。したがって、少ないメモリで巨大なインデックスを構築する技術が必要である。
【０００７】
メモリの容量を上回る巨大な転置インデックスを構築する技術として、ソートを用いる方法(非特許文献１)と、索引語の辞書順に転置リストを記録した部分転置インデックスを用いる方法(非特許文献２)が知られている。非特許文献１の技術では検索対象文書を逐次読み、索引語識別番号、文書識別番号及び当該文書中の当該索引語の頻度の３つの要素から成るタプルを蓄積する。これらのタプルの集合を、メモリに格納できる量の分割単位に分割し、各々の分割単位ごとに索引語識別番号でソートする。最後に、各分割単位を先頭から同時に読み、同一の索引語識別番号をもつタプルを収集して当該索引語の転置リストを作成する処理を、全索引語に対して繰り返して転置インデックスを構築する。しかし、非特許文献１の技術で索引語識別番号を索引語に与えるためには、それまでに処理した全索引語の文字列が計算機メモリ上に記憶されていないと、現実的な処理性能が期待できない。したがって、非特許文献１の方法は、索引語数が非常に多い場合には実用上処理不可能となる。なお、前記タプルの代わりに、索引語識別番号、文書識別番号だけから成るペアを用いれば、図１のような転置リスト106内に文書識別番号のみが記録され出現頻度が省略された転置インデックス102を作成できる。一方、非特許文献２の方法はオンメモリで転置インデックスを構築し、メモリ容量の限界に到達すると、その時点でメモリ上に記憶されている全索引語について辞書順に、索引語文字列103とその索引語の転置リスト106を補助記憶装置上の部分転置インデックス301へ出力する(図３)。これを、全文書集合101の情報が補助記憶装置上の部分転置インデックス301に書き込まれるまで繰り返す。その後、各々の部分転置インデックス301を先頭から同時に読み、同一索引語が現れた部分転置インデックスから当該索引語の転置リストを読み出して、一本の転置リストに統合し最終的な転置インデックス102へ出力する(図４)。こうして、計算機のメモリ容量を上回る巨大な転置インデックスを構築可能である。
【０００８】
一方、フォワードインデックスについては、大規模な検索対象文書の全体を反映した巨大なフォワードインデックスを作成する技術は知られていない。
【０００９】
【非特許文献１】A. Moffat & J. Zobel, In situ generation of compressed inverted files, J. American Society of Information Science 46(7): 537-550, 1995.
【非特許文献２】S.Heinz & J. Zobel, Efficient Single-pass index construction for text databases, J. American Society of Information Science and Technology 54(8):713-729, 2003.
【発明の開示】
【発明が解決しようとする課題】
【００１０】
非特許文献２の技術により、実搭載メモリの容量を遥かに上回る巨大な転置インデックスの構築が可能だが、検索に索引語のハッシュ表(アルゴリズム イントロダクション 第一巻、T.コルメン他著、浅野哲夫他訳、近代科学社)を使用する場合、ハッシュ表を別途作成することが好ましい。ハッシュ表を用いれば、何百万件にもなる場合がある索引語集合の中から特定の索引語に関するデータを、効率的に探索できる。ハッシュ表を使用するには、任意の索引語文字列sを整数値に変換する関数h(s)を用意する。ハッシュ表の大きさをMとすれば、h(s)は0≦h(s)＜Mの範囲の整数値を取るものを用意する。索引語sに関するデータを格納する場合には、ハッシュ表の中でh(s)が指すエントリに格納する。このようにすれば、文字列sが与えられたとき、h(s)が指すエントリを見るだけでsが索引語として存在するか否かがわかり、sが索引語なら関連するデータ構造にアクセスできる。
【００１１】
巨大な文書集合では、索引語文字列だけでもメインメモリを超えることがあり、そのような場合にもハッシュ表を効率よく作成できなくてはならない。また、非特許文献２の技術では、部分転置インデックスを出力する際、索引語の辞書順ソートを行なうため、余分な計算時間と、作業用メモリが必要になる。
【００１２】
一方、巨大なフォワードインデックスを構築する際は、最後の文書を処理するまで全索引語の索引語識別番号が確定しないため、部分的なフォワードインデックスを作成する際に索引語識別番号が不明であるという問題がある。索引語が出現した順番に索引語識別番号を与えれば、任意の時点で索引語識別番号を確定させることはできるが、この方法では全索引語の文字列をメモリ上に記憶しておかない限り、実用上十分な速度で処理できない。そのため、一部の文書群から部分フォワードインデックス501を作成する際には、仮の索引語識別番号502を付与し、全体のフォワードインデックス201に統合する際に最終的な索引語識別番号202に変換する必要がある(図５)。したがって、特定の部分フォワードインデックス501を作成する際に使用された文書群のみから計算でき、かつ大規模なメモリを使わず効率的に、最終的な索引語識別番号202へ変換できる仮の索引語識別番号502を与える方法が必要となる。
【００１３】
本発明の目的は、非特許文献２の技術を拡張するとともに、仮の索引語識別番号の割り当て方法を提供し、上記の問題を解決することである。
【課題を解決するための手段】
【００１４】
非特許文献２の方法では、部分転置インデックスを作成する際に索引語の辞書順に転置リストを出力しているが、本発明では下記の順に索引語の転置リストを出力する。
【００１５】
１．ハッシュ値が異なる索引語は、ハッシュ値が小さいものを先に出力する。
２．ハッシュ値が同一の索引語は、辞書順で先のものを先に出力する。
本明細書では以下、この順序をhash-lex順と呼ぶ。
【００１６】
hash-lex順を用いることにより、転置インデックスの構築に関する前述の問題を解決できる。まず、メモリに記憶されている全索引語のソートが不要になる。代わりに、ハッシュ表をスキャンし、表の各エントリで衝突している索引語を辞書順ソートするのみでよい。ハッシュ表上で衝突する索引語の数は通常、全索引語の数に比べ遥かに小さいため、そのソートのコストは小さい。これに加え、ハッシュ表の順に索引語が部分転置インデックスに記録されるため、索引語とともにハッシュ値を格納するか、部分転置インデックスの統合時にハッシュ値を再計算すれば、ハッシュ表を、補助記憶装置上のファイルへの逐次追加処理により作成できる。なお、辞書順の代わりに、辞書順の逆順など、索引語間に定義される他の種類の全順序(アルゴリズム イントロダクション 第一巻、T.コルメン他著、浅野哲夫他訳、近代科学社)を使用してもよい。
【００１７】
部分フォワードインデックス作成時の仮の索引語識別番号にも、本発明では、hash-lex順の番号を用いる。まず、部分フォワードインデックス作成時にhash-lex順の仮の索引語識別番号を与える方法を述べる。はじめに、索引語に出現順の索引語識別番号を与えつつ、オンメモリ転置インデックスとオンメモリフォワードインデックスを作成する。部分転置インデックスを部分転置インデックス書出手段により作成後、オンメモリの転置インデックスを消去して空きメモリを確保し、オンメモリのフォワードインデックスを作成する際に割り当てられた索引語識別番号とhash-lex順の索引語識別番号との変換表を構築する。そしてこの変換表を用いて、オンメモリのフォワードインデックスを、索引語識別番号を仮の索引語識別番号へ変換しながら部分フォワードインデックスへ書き出す。
【００１８】
次に、hash-lex順の仮の索引語識別番号を、最終的な索引語識別番号に変換する方法を述べる。最終的な索引語識別番号は、全索引語にhash-lex順に与えた番号とする。このようにすれば、文書に出現する転置インデックスを統合する際に、各索引語の個々の部分フォワードインデックスでの索引語識別番号と最終的な索引語識別番号との対応を、逐次計算できる。なぜなら、仮の索引語識別番号は最終的な索引語識別番号と比較した場合、当該部分フォワードインデックスに出現しない索引語の番号を詰めたものなので、部分転置インデックスの統合時に、各部分転置インデックスに出現した索引語数と全体の索引語数を照合することで、これら2種類の索引語識別番号の対応がわかるからである。この対応を、各々の部分フォワードインデックスごとに、仮の索引語識別番号と最終的な索引語識別番号の対応表として出力する。部分フォワードインデックスを、作成した順に最終的なフォワードインデックスに逐次追加しながら、仮の索引語識別番号を前記の対応表を用いて変換すれば、与えられた文書集合全体に対するフォワードインデックスが得られる。
【００１９】
なお、本発明のhash-lex順は、関係データベースのjoin演算の実現方法の一つであるsort-merge join法(P. Mishra and M.H.Eich, Join processing in relational databases, ACM Computing Surveys, 24(1):63-113, 1992)において、結合前の２つの関係をソートするために使用可能である。それぞれの関係の要素数をN,Mとすれば、通常の比較ソートが平均的にNlogN+MlogMに比例する時間を要するのに対し、ハッシュ表を用いたhash-lex順のソートは、join attributeに対するハッシュ値の大規模な衝突が無い限りN+Mに比例する時間で可能なため、join演算の計算量オーダが改善される。
【発明の効果】
【００２０】
本発明により、計算機のメモリ(主記憶装置)に入りきらない巨大な転置インデックスを構築する際に、検索時に用いるハッシュ表も同時に作成することが可能となる。また、従来技術で必要であった部分転置インデックスごとの索引語のソートが不要となる。さらに、メモリ容量を上回る巨大なフォワードインデックスも構築可能になる。
【発明を実施するための最良の形態】
【００２１】
本発明の方法によって、転置インデックス及びフォワードインデックスを作成する装置の一形態を説明する。装置全体の概観を図６に示す。中央演算装置(CPU)601に、メモリ(主記憶装置)602、ハードディスク等の補助記憶装置603が接続され、ネットワーク604、ユーザ端末605が接続される。本実施形態の装置は、CPU 601により実行されるメモリ602上のプログラムとして、オンメモリ転置インデックス作成手段S709、オンメモリフォワードインデックス作成手段S710、索引語切り出し手段S701、索引語識別番号割当手段S702、文書識別番号割当手段S703、部分転置インデックス書出手段S704、部分フォワードインデックス書出手段S705、部分転置インデックス統合手段S706、部分フォワードインデックス統合手段S707を備える。補助記憶装置603には、入力となる文書集合101、部分転置インデックス301、部分フォワードインデックス501、最終的に作成される転置インデックス102、フォワードインデックス201、全索引語のハッシュ表1002が格納される。なお、補助記憶装置603に格納されるデータはネットワーク604上のストレージに格納してもよい。以下では、説明を簡単にするために、これらのデータが補助記憶装置603に置かれることを仮定する。
【００２２】
本装置におけるデータ及び処理の流れを、図７に示す。また、転置インデックス102及びフォワードインデックス201を構築する処理の流れを、それぞれ図８、図１１にまとめた。
【００２３】
はじめに、CPU 601が補助記憶装置603から入力として検索対象文書集合101中の検索対象文書104を１つずつ取得する。各々の検索対象文書104に、下記の処理が行なわれる。まず、索引語切り出し手段S701により、文書中の索引語が切り出される。前述のように、切り出し手段として、公知の形態素解析方法又はn-gramが使用できる(情報検索アルゴリズム、北研二他著、共立出版)。さらに、それぞれの索引語に対し、索引語識別番号割当手段S702により、オンメモリのフォワードインデックス607を構築するための索引語番号が取得される。索引語識別番号割当手段S702の好ましい実施形態は、ハッシュ表に索引語を登録していき、最初の索引語には１を与え、ハッシュ表に存在しない未知の索引語が現れるごとに、それまでに割り当てた最大の番号より１つ大きい番号を割り当てることである。さらに、文書識別番号割り当て手段S703により、検索対象文書毎に文書識別番号を割り当てる。この手段の好ましい実施形態の１つは、１に初期化された整数変数を１つ保持し、新しい文書識別番号が必要な際にこの変数の値を割り当て、その直後に前記変数の値を１増やすことである。これらの処理により、１つの検索対象文書104が、ある1つの文書識別番号105に対応付けられたオンメモリのフォワードインデックス607用の索引語識別番号の集合708に変換される。
【００２４】
そして、オンメモリ転置インデックス作成手段S709は、オンメモリ転置インデックス606内の、前記検索対象文書104に出現する各索引語の転置リストに前記文書識別番号105を追加して、前記検索対象文書104をオンメモリ転置インデックス606に反映させる。同様に、オンメモリフォワードインデックス作成手段S710はオンメモリフォワードインデックス607に、索引語の番号の集合708から構築したリストを、前記文書識別番号105に対応付けて追加する。このとき、メモリ消費が予め決められた容量の閾値を超えたら補助記憶装置603へ、オンメモリの転置インデックス606を部分転置インデックス書出手段S704によって部分転置インデックス301として書き出し、オンメモリのフォワードインデックス607も部分フォワードインデックス書出手段S705によって部分フォワードインデックス501として書き出す。
【００２５】
部分転置インデックス書出手段S704は、図８及び図９に示すように、オンメモリの転置インデックス606を作成するために使用したハッシュ表を先頭から読み、空でない未処理のエントリを探す。そのようなエントリが見つかったら、そのエントリに対応する索引語について、それらの辞書順に、索引語の文字列とハッシュ値、転置リストを、補助記憶装置上の部分転置インデックス301へ出力する。この処理を、オンメモリの転置インデックス606に格納されている全索引語について繰り返す。
【００２６】
さらにオンメモリのフォワードインデックス607を、部分フォワードインデックス書出手段S705によって部分フォワードインデックス501として書き出す(図１２)。不要になったオンメモリの転置インデックス606を消去して空きメモリを確保した上で、オンメモリのフォワードインデックス607を作る際に使用した索引語識別番号と、hash-lex順の仮の索引語識別番号502との変換表を作成する。そのためには、索引語数に応じた大きさの表をメモリ上に確保した上で、オンメモリの索引語のハッシュ表を先頭から順にアクセスし、見つかった索引語にhash-lex順の仮の索引語番号を割り当てつつ、割り当てられたhash-lex順の番号が指し示す変換表のエントリに、各索引語のオンメモリフォワードインデックスでの索引語識別番号を書き入れればよい。この変換表を使って、索引語識別番号をhash-lex順の番号502に変換しながら、オンメモリのフォワードインデックス607を補助記憶装置上の部分フォワードインデックス501へ出力する。
【００２７】
全ての検索対象文書の情報が部分転置インデックス301及び部分フォワードインデックス501に変換されたら、それらを下記の方法で統合することにより、検索対象文書集合101全体に対応する転置インデックス102及びフォワードインデックス201を構築する。
【００２８】
はじめに、全体の転置インデックス102を、部分転置インデックス統合手段S706により部分転置インデックス301から構築する。その方法を、図８及び図１０を用いて説明する。まず、部分転置インデックス統合手段S706は、全ての部分転置インデックス301の未処理部分の先頭の索引語のうち、hash-lex順で最も先の索引語1001を同定する。この処理は、全ての部分転置インデックスを走査することで可能であり、全ての部分転置インデックスの数をNとするとき、Nに比例する時間内に完了できる。だが、より好ましい実施形態は、各部分転置インデックスを要素、前記部分転置インデックスの先頭の索引語をキーとするプライオリティキュー(アルゴリズム イントロダクション 第一巻、T.コルメン他著、浅野哲夫他訳、近代科学社)を構築し、プライオリティキューの先頭要素を取得することである。プライオリティキューを使用することで、１つの索引語の処理が完了した際に、次に処理する索引語を同定する処理が、logNに比例する時間内に完了できる。
【００２９】
未処理の索引語から、hash-lex順で最も先の索引語1001（図１０に示す例では、「cat」）を同定したら、まずその索引語1001を補助記憶装置603上に新たに作成する全索引語のハッシュ表1002に追加する。この好ましい実施形態は、図１５に示すように、ハッシュ表とハッシュ表に記録される内容をそれぞれ個別のファイルとし、新しいハッシュ値の索引語が現れたときにハッシュ表のファイル1501に新しいエントリを追加してハッシュ表の内容のファイル1502における末尾位置を記録し、ハッシュ表の内容のファイル1502に当該索引語の索引語識別番号202や転置インデックス102内での転置リスト106の位置といった情報を記録することである。ハッシュ値が、直前に処理したハッシュ値と連続する値でなかった場合、ファイル1501中で対応する索引語が存在しないハッシュ値に対応するエントリは、そのエントリが空であることを示すデータで埋める。図１５に示した実施形態では、索引語の文字列そのものと索引語識別番号を書き込み、索引語文字列から索引語識別番号を取得可能としている。索引語はhash-lex順で部分転置インデックス301内に格納されているため、ファイル1501、1502に索引語を逐次追記していけば正しいハッシュ表を構築できると保証される。
【００３０】
部分転置インデックス統合手段S706ではさらに、各部分転置インデックス301から、前記索引語1001に対応する転置リストを読み出して統合する。例えば図１０では「cat」に対応する２つの転置リストを統合して１つの転置リストを作成している。このとき、各転置リストの文書識別番号1003を比較し、番号の小さい文書識別番号から順に抽出する。この、最小の文書識別番号を選択する処理においても、プライオリティキューを使用できる。プライオリティキューの要素を部分転置インデックス301の転置リスト、キーを未処理の先頭の文書番号とすればよい。ただし、先に作られた部分転置インデックスの文書番号識別番号ほど小さい番号になるように文書識別番号を割り当てている場合には、プライオリティキューを使用せずに、部分転置インデックス301を作成した順に、それぞれの部分転置インデックス中の転置リストを、部分転置インデックスが作られた順に連結するだけでよい。この統合の処理により、前記索引語1001が出現する全ての文書の文書識別番号からなる転置リスト106が得られる。この転置リスト106を、作成中の転置インデックス102の末尾に追加する。全索引語について、転置リスト106を作成中の転置インデックス102に逐次追加していくことで、所望の転置インデックスが得られる。
【００３１】
部分転置インデックス統合手段S706では、部分フォワードインデックス501を最終的なフォワードインデックスに統合するために使用する、仮の索引語識別番号502から最終的な索引語識別番号202への対応表1303も作成する。図１３に示すように、部分転置インデックスから処理すべき索引語1001を選択する際に、それまでに処理した処理中の索引語1001も含めた索引語の総数1301及び、それぞれの部分転置インデックスに関して処理した処理中の索引語1001を含む索引語数1302を記録する。これは、部分転置インデックスの数にほぼ等しい数の整数を記録するだけの僅かなメモリを用いて可能である。hash-lex順に最終的な索引語識別番号を与えれば、処理済みの索引語の総数1301は索引語1001の最終的な索引語識別番号202に等しく、この索引語を含む各部分転置インデックス301に対して処理した索引語数は、前記索引語1001の仮の索引語識別番号502に等しい。したがって、総索引語数1301と当該部分転置インデックスの索引語数1302のペアを出力することで、当該部分転置インデックスとともに作成された部分フォワードインデックスの仮の索引語識別番号502を最終的な索引語識別番号202に変換するために利用する対応表1303が構築できる。
【００３２】
最後に、部分フォワードインデックスを統合して最終的なフォワードインデックスに変換する。部分フォワードインデックス統合手段S707は、図１１及び図１４に示すように、部分フォワードインデックス501を、作成された順に逐次、最終的なフォワードインデックス201に追記する。追記する際には、部分転置インデックス統合手段S706で構築した対応表1303を用いて、仮の索引語識別番号502を最終的な索引語識別番号202に変換する。
【００３３】
本発明の巨大な転置インデックス及びフォワードインデックス構築方法には、様々なバリエーションがありえる。例えば、部分フォワードインデックスにはhash-lex順の仮の索引語番号を記録したが、次の方法も可能である。すなわち、オンメモリのフォワードインデックス607で使用した出現順の番号をそのまま記録し、部分転置インデックス書出手段S704において、部分転置インデックス301を作成する際に各索引語の出現順の番号を追記する。そして、変換表1303を作成する際に、各部分転置インデックスでの処理済索引語数1302の代わりに、部分転置インデックスに記録された出現順の番号を、処理中の索引語1001を含めた処理済み索引語の総数1301とともに出力する。これにより、部分フォワードインデックスに書かれた索引語番号を最終的な索引語番号に変換する対応表が得られる。一方、転置インデックス102だけが必要でフォワードインデックス201が不要であれば、オンメモリフォワードインデックス作成手段S710、部分フォワードインデックス書出手段S705及び部分フォワードインデックス統合手段S707の実行は、省略できる。また本明細書では、文書識別番号のみのリストからなる転置リストから構成される転置インデックス102と、索引語識別番号のみのリストから成るフォワードインデックス201について説明したが、各索引語103が各検索対象文書104に現れる回数や、各索引語103が検索対象文書104に出現する位置をインデックス中に追記してもよい。
【００３４】
本発明の方法を実装し、少ないメモリで巨大な転置インデックスを作成する実験を行なった。処理対象としたのは、2003年から2005年の公開特許公報約107万件のテキストデータであり、総量は28.2GBであった。索引語としてはフリーソフトウェアchasenで得られた形態素を使用した。使用した計算機は、メモリを4GB、HDDを250GB搭載しOSにLinuxを使用した、CPUがIntel社製Core2 Duo E6600のPCである。メモリ使用量が60MBを超えるごとに、オンメモリの転置インデックス606を部分転置インデックス301へ出力した。その結果、74個の部分転置インデックスが作成され、それらを統合することにより、最終的に1.30GBの転置インデックスが作成された。ピーク時のメモリ使用量は63.1MBであったため、メモリ使用量の約21倍の大きさの転置インデックスをハッシュ表とともに構築できたことになる。
【００３５】
また、本技術と非特許文献２の技術の処理時間を計測し比較した。10回計測し平均を取ったところ、本技術では平均1154秒、非特許文献２の技術では平均1183秒であった。この結果から、本技術は転置インデックスに加えハッシュ表の作成も可能なばかりでなく、処理時間も若干改善できることがわかった。
【００３６】
一方、同様の計算機条件で同じデータを用いて、転置インデックス及びフォワードインデックスの同時作成を行なった。オンメモリのインデックスを作成中に、メモリ使用量が60MBを超える度に、オンメモリの転置インデックスとフォワードインデックスを部分転置インデックス及び部分フォワードインデックスとして適宜、補助記憶装置に書き出し、計159個の部分インデックスが生成された。それらを統合し、最終的に作成されたインデックスの大きさは、転置インデックス及びフォワードインデックスの合計で3.24GBであった。ピーク時のメモリ使用量は61.1MBであったため、メモリ使用量を50倍以上上回るサイズの検索インデックスが作成可能だと確認できた。
【産業上の利用可能性】
【００３７】
本発明は、大規模な文書集合を対象に、計算機のメモリ容量を上回る巨大な転置インデックス及びフォワードインデックスを構築するための技術である。部分転置インデックスを出力する際に、検索時に用いるハッシュ表が生成できるだけでなく、処理速度においても従来技術と同等以上の性能を持つ。
【図面の簡単な説明】
【００３８】
【図１】検索対象となる文書集合と、それに基づき構築される転置インデックスの概略図。
【図２】検索対象となる文書集合と、それに基づき構築されるフォワードインデックスの概略図。
【図３】従来法における、部分転置インデックスを作成するステップの説明図。
【図４】従来法における、部分転置インデックスを統合して最終的な転置インデックスを作成するステップの説明図。
【図５】大規模な文書集合から巨大なフォワードインデックスを作る際の課題の説明図。
【図６】本発明を実施する装置の一形態を示す概略図。
【図７】本発明を実施する装置の一形態における、データ及び処理の流れの概略図。
【図８】本発明による転置インデックス構築処理の一形態を表すフローチャート。
【図９】本発明の方法における、部分転置インデックス書出手段の説明図。
【図１０】本発明の方法における、部分転置インデックス統合手段の説明図。
【図１１】本発明によるフォワードインデックス構築処理の一形態を表すフローチャート。
【図１２】部分フォワードインデックス書出手段の説明図。
【図１３】部分フォワードインデックスに格納されている仮の索引語識別番号を最終的な索引語識別番号に変換するために、部分転置インデックス統合手段において対応表を作成するステップの説明図。
【図１４】部分フォワードインデックス統合手段の説明図。
【図１５】本発明の方法における、ハッシュ表構築処理の説明図。
【符号の説明】
【００３９】
101: 検索対象文書の集合
102: 転置インデックス
103: 索引語
104: 検索対象文書
105: 文書識別番号
106: 転置リスト
201: フォワードインデックス
202: 全文書の集合に対応するフォワードインデックスにおける、索引語識別番号
301: 部分転置インデックス
501: 部分フォワードインデックス
502: 部分フォワードインデックスにおける仮の索引語識別番号
601: 中央演算装置(CPU)
602: メモリ(主記憶装置)
603: 補助記憶装置
604: ネットワーク
605: ユーザ端末
606: オンメモリ転置インデックス
607: オンメモリフォワードインデックス
708: ある検索対象文書に含まれる索引語の、オンメモリフォワードインデックス用索引語番号の集合
1001: 部分転置インデックス統合手段において、処理対象となっている索引語の例
1002: 検索対象文書集合の全索引語を含むハッシュ表
1003: 部分転置インデックス統合手段において、処理対象となっている転置リスト内の文書識別番号
1301: 部分転置インデックス統合手段において、処理中の索引語も含め、それまでに処理をした全ての索引語の数
1302: 部分転置インデックス統合手段において、処理中の索引語も含め、それまでに処理をした、対応する部分転置インデックス中の索引語の数
1303: 部分フォワードインデックス統合手段において、部分フォワードインデックスにおける仮の索引語識別番号を最終的な索引語識別番号に変換するための対応表
【図１】
0005207721.tif 000002
【図２】
0005207721.tif 000003
【図３】
0005207721.tif 000004
【図４】
0005207721.tif 000005
【図５】
0005207721.tif 000006
【図６】
0005207721.tif 000007
【図７】
0005207721.tif 000008
【図８】
0005207721.tif 000009
【図９】
0005207721.tif 000010
【図１０】
0005207721.tif 000011
【図１１】
0005207721.tif 000012
【図１２】
0005207721.tif 000013
【図１３】
0005207721.tif 000014
【図１４】
0005207721.tif 000015
【図１５】
0005207721.tif 000016