(57)【特許請求の範囲】
【請求項１】
複数の対象ベクトルを取得する対象ベクトル取得手段と、
前記複数の対象ベクトルのそれぞれについて推定される計算量であって、前記複数の対象ベクトルのそれぞれとクエリベクトルとの類似度を計算する場合に推定される計算量に基づいて、前記複数の対象ベクトルをクラスタリングするクラスタリング手段と、
を含む類似度算出システム。
【請求項２】
請求項１に記載の類似度算出システムにおいて、
前記クラスタリング手段は、複数のクラスタのそれぞれについて推定される総計算量であって、当該クラスタに属する複数の対象ベクトルのそれぞれについて推定される計算量に基づいて推定される総計算量の差を小さくするよう、前記複数の対象ベクトルをクラスタリングする、
類似度算出システム。
【請求項３】
請求項１または２に記載の類似度算出システムにおいて、
前記各対象ベクトルについて、当該対象ベクトルとクエリベクトルとの類似度を計算する場合に推定される計算量を算出する推定計算量算出手段をさらに含み、
前記クラスタリング手段は、前記各クラスタに属する全ての前記対象ベクトルについての前記算出された計算量の総和の差を小さくするよう、前記複数の対象ベクトルをクラスタリングする、
類似度算出システム。 
【請求項４】
請求項３に記載の類似度算出システムにおいて、
前記推定計算量算出手段は、前記各対象ベクトルの零でない要素の数を、前記推定される計算量として算出する、
類似度算出システム。
【請求項５】
請求項１から４のいずれかに記載の類似度算出システムにおいて、
クエリベクトルを取得するクエリベクトル取得手段と、
前記複数のクラスタのいずれかに属する複数の前記対象ベクトルとクエリベクトルとの類似度を算出する類似度算出手段と、
をさらに含む類似度算出システム。
【請求項６】
請求項５に記載の類似度算出システムにおいて、
前記クラスタリング手段は、前記複数の対象ベクトルのそれぞれに対応し当該対象ベクトルについて推定される計算量を重みとする複数の第１のノードと、前記対象ベクトルの要素の種類に対応する複数の第２のノードと、前記第１のノードのそれぞれと前記第２のノードのいずれかとを接続する複数のエッジとを含むグラフを生成し、前記第１のノードの重みに基づいて前記生成されたグラフを分割することにより前記複数の対象ベクトルをクラスタリングする、
類似度算出システム。
【請求項７】
請求項６に記載の類似度算出システムにおいて、
前記複数のエッジのそれぞれは、当該エッジに対応する対象ベクトルの要素の値に応じたコストを有し、
前記クラスタリング手段は、前記エッジのコストにさらに基づいて前記生成されたグラフを分割することにより前記複数の対象ベクトルをクラスタリングする、
類似度算出システム。
【請求項８】
請求項６又は７に記載の類似度算出システムにおいて、
前記クラスタリング手段により前記複数のクラスタに分類された前記第２のノードに対応する要素の種類と、複数の要素を含む前記クエリベクトルとに基づいて、当該クエリベクトルと複数の対象ベクトルとの類似度が計算されるクラスタを選択するクラスタ選択手段をさらに含み、
前記類似度算出手段は、前記クラスタ選択手段により選択されたクラスタに属する複数の前記対象ベクトルとクエリベクトルとの類似度を算出する、
類似度算出システム。
【請求項９】
対象ベクトル取得手段が、複数の対象ベクトルを取得するステップと、
クラスタリング手段が、前記複数の対象ベクトルのそれぞれについて推定される計算量であって、前記複数の対象ベクトルのそれぞれとクエリベクトルとの類似度を計算する場合に推定される計算量に基づいて、前記複数の対象ベクトルをクラスタリングするステップと、
を含むことを特徴とする類似度算出方法。
【請求項１０】
複数の対象ベクトルを取得し、
前記複数の対象ベクトルのそれぞれについて推定される計算量であって、前記複数の対象ベクトルのそれぞれとクエリベクトルとの類似度を計算する場合に推定される計算量に基づいて、前記複数の対象ベクトルをクラスタリングする、
処理をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は類似度算出システム、類似度算出方法およびプログラムに関する。
【背景技術】
【０００２】
所与のクエリベクトルが複数の対象ベクトルのいずれと類似しているかを算出する類似度算出システムがある。こうしたシステムは、例えば、各ベクトルがユーザの嗜好を示すようにして、類似した嗜好を有するユーザを検索するのに用いられたり、各ベクトルが文書の特徴を示すようにして、類似した文書を検索するのに用いられる。【０００３】
ここで、対象ベクトルの数が膨大となると、クエリベクトルに最も類似する対象ベクトルを判断するのに時間が掛かってしまう。この問題を解決するため、下記特許文献１には、対象ベクトルをクラスタリングするとともに、クラスタ毎に代表ベクトルを算出しておく方法が開示されている。この方法によれば、クエリベクトルが与えられると、該クエリベクトルと各代表ベクトルとの類似度を計算し、計算結果に基づいて最も類似するクラスタを選択する。そして、選択されたクラスタに属する対象ベクトルと、クエリベクトルと、の各類似度を計算することにより、クエリベクトルに最も類似する対象ベクトルを判断する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−６５１４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の先行技術によれば、クラスタが選択された後、該選択されたクラスタに属する全ての対象ベクトルについて、クエリベクトルとの類似度を計算し、類似度が最大となる対象ベクトルを選択する。しかし、その推定総計算コストはクラスタ毎に大きく変わる可能性がある。このため、クエリベクトルの内容により、該クエリベクトルに最も類似する対象ベクトルを判断するまでの時間が大きく変わる可能性がある。【０００６】
本発明は上記課題に鑑みてなされたものであって、その目的は、クエリベクトルに類似する対象ベクトルを選ぶための処理時間を平準化できる類似度算出システム、方法およびプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明にかかる類似度算出システムは、複数の対象ベクトルを取得する対象ベクトル取得手段と、前記複数の対象ベクトルのそれぞれについて推定される計算量であって、前記複数の対象ベクトルのそれぞれとクエリベクトルとの類似度を計算する場合に推定される計算量に基づいて、前記複数の対象ベクトルをクラスタリングするクラスタリング手段と、を含む。【０００８】
また、本発明にかかる類似度算出方法は、複数の対象ベクトルを取得するステップと、前記複数の対象ベクトルのそれぞれについて推定される計算量であって、前記複数の対象ベクトルのそれぞれとクエリベクトルとの類似度を計算する場合に推定される計算量に基づいて、前記複数の対象ベクトルをクラスタリングするステップと、を含む。【０００９】
また、本発明にかかるプログラムは、複数の対象ベクトルを取得し、前記複数の対象ベクトルのそれぞれについて推定される計算量であって、前記複数の対象ベクトルのそれぞれとクエリベクトルとの類似度を計算する場合に推定される計算量に基づいて、前記複数の対象ベクトルをクラスタリングする、処理をコンピュータに実行させる。【００１０】
本発明の一態様では、前記クラスタリング手段は、複数のクラスタのそれぞれについて推定される総計算量であって、当該クラスタに属する複数の対象ベクトルのそれぞれについて推定される計算量に基づいて推定される総計算量の差を小さくするよう、前記複数の対象ベクトルをクラスタリングしてもよい。【００１１】
本発明によれば、複数の対象ベクトルを複数のクラスタに分類し、いずれかのクラスタについてクエリベクトルに類似する対象ベクトルを選ぶ場合に、対象べクトルとクエリベクトルとの類似度を計算する時間を平準化することができる。【００１２】
本発明の一態様では、類似度算出システムは、前記各対象ベクトルについて、前記各対象ベクトルについて、当該対象ベクトルとクエリベクトルとの類似度を計算する場合に推定される計算量を算出する推定計算量算出手段を更に含み、前記クラスタリング手段は、前記各クラスタに属する全ての前記対象ベクトルについての前記算出された計算量の総和の差を小さくするよう、前記複数の対象ベクトルをクラスタリングしてもよい。【００１３】
本発明の一態様では、類似度算出システムは、前記推定計算量算出手段は、前記各対象ベクトルの零でない要素の数を、前記推定される計算量として算出してもよい。【００１４】
本発明の一態様では、類似度算出システムは、クエリベクトルを取得するクエリベクトル取得手段と、前記複数のクラスタのいずれかに属する複数の前記対象ベクトルとクエリベクトルとの類似度を算出する類似度算出手段と、をさらに含んでもよい。【００１５】
本発明の一態様では、前記クラスタリング手段は、前記複数の対象ベクトルのそれぞれに対応し当該対象ベクトルについて推定される計算量を重みとする複数の第１のノードと、前記対象ベクトルの要素の種類に対応する複数の第２のノードと、前記第１のノードのそれぞれと前記第２のノードのいずれかとを接続する複数のエッジとを含むグラフを生成し、前記第１のノードの重みに基づいて前記生成されたグラフを分割することにより前記複数の対象ベクトルをクラスタリングしてもよい。【００１６】
本発明の一態様では、前記複数のエッジのそれぞれは、当該エッジに対応する対象ベクトルの要素の値に応じたコストを有し、前記クラスタリング手段は、前記エッジのコストにさらに基づいて前記生成されたグラフを分割することにより前記複数の対象ベクトルをクラスタリングしてもよい。【００１７】
本発明の一態様では、類似度算出システムは、前記クラスタリング手段により前記複数のクラスタに分類された前記第２のノードに対応する要素の種類と、複数の要素を含む前記クエリベクトルとに基づいて、当該クエリベクトルと複数の対象ベクトルとの類似度が計算されるクラスタを選択するクラスタ選択手段をさらに含み、前記類似度算出手段は、前記クラスタ選択手段により選択されたクラスタに属する複数の前記対象ベクトルとクエリベクトルとの類似度を算出してもよい。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施形態にかかる類似検索サーバのハードウェア構成の一例を示す図である。
【図２】類似検索サーバが実現する機能を示すブロック図である。
【図３】対象ベクトルを複数のクラスタに分類しインデックスを作成する処理の一例を示すフロー図である。
【図４】複数の対象ベクトルを示すデータの一例を示す図である。
【図５】クラスタ分類部の処理の一例を示すフロー図である。
【図６】生成された２部グラフの一例を示す図である。
【図７】複数のノードの重みの一例を示す図である。
【図８】エッジのコストの一例を示す図である。
【図９】クラスタに分類された複数のノードの一例を示す図である。
【図１０】特徴ベクトルが属するクラスタの情報の一例を示す図である。
【図１１】転置インデックスの一例を示す図である。
【図１２】要素の種類が属するクラスタの情報の一例を示す図である。
【図１３】クエリベクトルに類似する対象ベクトルを検索する処理のフローの一例を示す図である。
【発明を実施するための形態】
【００１９】
以下では、本発明の実施形態について図面に基づいて説明する。出現する構成要素のうち同一機能を有するものには同じ符号を付し、その説明を省略する。
【００２０】
本発明の実施形態にかかる類似検索システムは、類似検索サーバを含む。類似検索サーバはサーバコンピュータである。類似検索サーバは、ネットワークを介して類似検索の開始を指示するパーソナルコンピュータやスマートフォン等と接続されていてもよい。
【００２１】
図１は、類似検索サーバのハードウェア構成の一例を示す図である。類似検索サーバは、プロセッサ１１、記憶部１２、通信部１３、入出力部１４を含む。
【００２２】
プロセッサ１１は、記憶部１２に格納されているプログラムに従って動作する。またプロセッサ１１は通信部１３、入出力部１４を制御する。なお、上記プログラムは、インターネット等を介して提供されるものであってもよいし、フラッシュメモリやＤＶＤ−ＲＯＭ等のコンピュータで読み取り可能な記憶媒体に格納されて提供されるものであってもよい。
【００２３】
記憶部１２は、ＲＡＭやフラッシュメモリ等のメモリ素子やハードディスクドライブによって構成されている。記憶部１２は、上記プログラムを格納する。また、記憶部１２は、各部から入力される情報や演算結果を格納する。
【００２４】
通信部１３は、他の装置と通信する機能を実現するものであり、例えば有線ＬＡＮの集積回路やコネクタ端子などにより構成されている。通信部１３は、プロセッサ１１の制御に基づいて、他の装置から受信した情報をプロセッサ１１や記憶部１２に入力し、他の装置に情報を送信する。
【００２５】
入出力部１４は、表示出力手段をコントロールするビデオコントローラや、入力デバイスからのデータを取得するコントローラなどにより構成される。入力デバイスとしては、キーボード、マウス、タッチパネルなどがある。入出力部１４は、プロセッサ１１の制御に基づいて、表示出力デバイスに表示データを出力し、入力デバイスをユーザが操作することにより入力されるデータを取得する。表示出力デバイスは例えば外部に接続されるディスプレイ装置である。
【００２６】
図２は、類似検索サーバが実現する機能を示すブロック図である。類似検索サーバは、機能的に、対象ベクトル取得部５１と、ベクトル寄与量算出部５２と、クラスタ分類部５３と、インデックス生成部５４と、クエリベクトル取得部５５と、クラスタ選択部５６と、類似度算出部５７と、を含む。これらの機能は、プロセッサ１１が記憶部１２に格納されたプログラムを実行し、通信部１３や入出力部１４を制御することで実現される。また、類似検索サーバは対象情報格納部７１とベクトル格納部７２とインデックス格納部７３とを含む。
【００２７】
対象情報格納部７１は類似検索の対象となる文書またはユーザなどの情報を格納し、ベクトル格納部７２は、複数の対象ベクトルを格納する。インデックス格納部７３は、検索条件となるクエリベクトルを用いて対象ベクトルを検索する際のインデックスとなる情報を格納する。ここで、対象ベクトルのそれぞれは、対応する文書またはユーザなどの情報から生成される特徴ベクトルである。対象情報格納部７１、ベクトル格納部７２およびインデックス格納部７３は、主に記憶部１２により構成されているが、他のサーバの記憶部などにより構成され、格納される情報を、類似検索サーバ内の各機能とネットワークを介してやりとりしてもよい。
【００２８】
本実施形態は、クエリベクトルに類似する対象ベクトルを検索する処理と、その検索のために対象ベクトルをクラスタに分類し、検索用のインデックスを作成する処理とが行われる。前者の処理は、クエリベクトル取得部５５と、クラスタ選択部５６と、類似度算出部５７とにより行われる。後者の処理は、対象ベクトル取得部５１と、ベクトル寄与量算出部５２と、クラスタ分類部５３と、インデックス生成部５４とにより行われる。
【００２９】
図３は、対象ベクトルを複数のクラスタに分類しインデックスを作成する処理の一例を示すフロー図である。以下では対象ベクトル取得部５１と、ベクトル寄与量算出部５２と、クラスタ分類部５３と、インデックス生成部５４についてこの処理フローと共に説明する。
【００３０】
対象ベクトル取得部５１は、プロセッサ１１および記憶部１２を中心として実現される。対象ベクトル取得部５１は、複数の対象ベクトルを取得する。より具体的には、対象情報格納部７１に格納される文書やユーザなどの情報から、その文書等の特徴を示す対象ベクトルを生成する（ステップＳ１０１）。また、対象ベクトル取得部５１は生成された対象ベクトルをベクトル格納部７２に格納する。例えば、対象ベクトルが電子的な文書から生成される場合には、対象ベクトルは文書に対応し、その対象ベクトルに含まれる複数の要素のそれぞれは単語に対応する。なお対象ベクトルの次元数は対象ベクトルの要素の数となる。また対象ベクトルの要素の値は、対応する文書における単語の出現頻度を示すスコア（例えばＴＦやＴＦ−ＩＤＦ）である。
【００３１】
ＴＦ（Term Frequency）は、単語の出現頻度であり、ＩＤＦ（Inverse Document Frequency）は単語が出現する文書が多いほど小さくなる値である。ある文書におけるある単語に対するＴＦ−ＩＤＦの値は、文書中にその単語が出現しない場合は０となり、単語が出現してもそれが多くの文書で表れる一般的な語と思われる単語である場合はそうでない単語の場合より小さな値となる。また、複数のユーザ情報のそれぞれから対象ベクトルを生成してもよい。この場合、対象ベクトルの要素がユーザ情報の属性（ユーザの属性を示す情報）に対応してもよいし、その属性が複数の値を取りうる場合には、その属性の値ごとに対応する要素が存在してよい。文書やユーザ属性から対象ベクトルを生成する具体的な方法は公知であるので詳細の記載は省略する。
【００３２】
図４は、複数の対象ベクトルを示すデータの一例を示す図である。図４に示される表に含まれる複数の行が対象ベクトルｒ１〜ｒ６であり、列は対象ベクトルの要素（成分）ｃ１〜ｃ１０である。ここでは対象ベクトルの数は６であり、各対象ベクトルの成分の数は１０であるが、実際にはこれらの数はこれより大きくてよい。また図４に示す対象ベクトルの要素にはＴＦの値が設定されている。ｒ１行ｃ１列のセルに１と記載されているのは、対象ベクトルｒ１の要素ｃ１の値が１であることを示し、ｒ１行ｃ２列のセルに何も記載されていないのは、対象ベクトルｒ１の要素ｃ１の値が０であることを示している。図４に示す対象ベクトルを用いる場合には、クラスタ分類部５３が対象ベクトルをクラスタに分類する処理と、類似度算出部５７が対象ベクトルを検索する処理とにおいて、ＴＦから算出されるＴＦ−ＩＤＦスコアを用いてよい。なお、対象ベクトルの要素の値がはじめからＴＦ−ＩＤＦスコアであれば、ＴＦからＴＦ−ＩＤＦスコアを算出する必要はない。
【００３３】
ベクトル寄与量算出部５２は、プロセッサ１１および記憶部１２を中心として実現される。ベクトル寄与量算出部５２は、生成された複数の対象ベクトルのそれぞれについて、類似度算出部５７があるクラスタについてクエリベクトルに類似する対象ベクトルを検索する場合の推定される計算量（クラスタ計算量と記載する）に対してその対象ベクトルが寄与すると推定される計算量であるベクトル寄与量を算出する（ステップＳ１０２）。ベクトル寄与量は複数の対象ベクトルのそれぞれについて推定される計算量であり、複数の対象ベクトルのそれぞれとクエリベクトルとの類似度を計算する場合に推定される計算量である。各クラスタのクラスタ計算量は、そのクラスタに属する複数の対象ベクトルのベクトル寄与量の和である。
【００３４】
類似度算出部５７がいわゆる転置インデクスを用いてクエリベクトルと対象ベクトルとの類似度を算出する場合には、ベクトル寄与量算出部５２は、例えば、対象ベクトルに含まれる０でない要素の数を、その対象ベクトルのベクトル寄与量として算出してよい。また、ベクトル寄与量算出部５２は、対象ベクトルに含まれる０でない要素に対応する基準クエリベクトルの要素の値の和をその対象ベクトルの推定されたベクトル寄与量として算出してよい。ここで、基準クエリベクトルの各要素には１が設定されていてもよいし、基準クエリベクトルの各要素に、クエリベクトルの要素に０でない値が出現する確率に応じた値が設定されてもよい。０でない要素の数をベクトル寄与量とすることは、基準クエリベクトルの各要素に１を設定して対象ベクトルと基準クエリベクトルとの類似度計算をする場合のベクトル寄与量を計算することに相当する。
【００３５】
なお、類似度算出部５７が対象ベクトルごとに、対象ベクトルとクエリベクトルとの内積を計算することで類似度を求める場合は、ベクトル寄与量算出部５２は、対象ベクトルにかかわらず一定の値をベクトル寄与量として取得してよい。
【００３６】
クラスタ分類部５３は、プロセッサ１１および記憶部１２を中心として実現される。クラスタ分類部５３は、クエリベクトルに類似する対象ベクトルが検索される際の複数の対象ベクトルのそれぞれについての類似度の計算量（ベクトル寄与量に相当する）に基づいて、複数の対象ベクトルをクラスタに分類する。さらにいえば、クラスタ分類部５３はベクトル寄与量に基づいて、複数のクラスタのそれぞれに対するクエリベクトルに類似する対象ベクトルを検索する際の推定される計算量（クラスタ計算量）のクラスタ間における差を小さくするように、前記複数の対象ベクトルを複数のクラスタに分類する（ステップＳ１０３）。
【００３７】
クラスタ間におけるクラスタ計算量の差を小さくすることは、例えば、分類された複数のクラスタについてのクラスタ計算量のばらつき（分散など）が上限より小さいことであってよい。さらに、クラスタ間におけるクラスタ計算量の差を小さくすることが、単に全てのクラスタのクラスタ計算量が許容範囲内にあることであってもよい。ここで許容範囲は、例えば複数のベクトルにおけるベクトル寄与量の和に応じて定まるものであってよい。ここで、クラスタ計算量のばらつきが上限より小さいことやクラスタ計算量が許容範囲内にあることを以下では「ばらつき条件を満たす」と記載する。また、クラスタ間におけるクラスタ計算量の差を小さくすることは、最終的に分類されたクラスタにおけるクラスタ計算量の最小値と最大値との差が、初期条件として複数のベクトルが分類されるクラスタにおける差よりも小さいことであってもよい。
【００３８】
図５は、クラスタ分類部５３の処理の一例を示すフロー図である。図５に示す処理では、クラスタ分類部５３は複数の特徴ベクトルを示すグラフを生成し、グラフを複数のクラスタに分割する。クラスタに含まれるノードがそのクラスタに含まれる特徴ベクトルを示す。以下ではこの処理の詳細を説明する。
【００３９】
はじめに、クラスタ分類部５３は、複数の対象ベクトルを示す複数のノードと、複数の要素の種類を示す複数のノードと、複数のエッジと、を含むグラフを示すデータを生成する（ステップＳ２０１）。ここでクラスタ分類部５３が生成するグラフは２部グラフ（Bipartite Graph）である。この２部グラフでは、対象ベクトルと対象ベクトルを示すノードとは１対１で対応し、対象ベクトルの要素の種類と要素の種類を示すノードとは１対１に対応する。また、対象ベクトルを示す複数のノードのそれぞれの重みは、対応する対象ベクトルのベクトル寄与量であり、要素の種類を示す複数のノードの重みは０である。
【００４０】
また、複数の対象ベクトルのそれぞれに対応するノードと、その対象ベクトルに含まれる０でない要素の種類に対応するノードとの間にエッジが設けられる。エッジの数は、生成された複数の対象ベクトルに含まれる０でない要素の数の和である。エッジに接続される対象ベクトルのノードをベクトルノード、そのエッジに接続される要素の種類のノードを要素ノードとすると、ベクトルノードに対応する対象ベクトルにおける要素ノードに対応する要素の値に応じた値がエッジのコストとなる。例えば、その対象ベクトルの要素の値がＴＦであればその要素の値に基づいて計算されたＴＦ−ＩＤＦスコアをそのエッジのコストとしてよいし、対象ベクトルの要素の値がＴＦ−ＩＤＦの値であればその要素の値自体をエッジのコストとしてよい。
【００４１】
図６は、生成された２部グラフの一例を示す図である。図６は、図４に示す複数の対象ベクトルに基づいて生成される２部グラフである。この２部グラフは、それぞれ対象ベクトルｒ１〜ｒ６に対応する６個のノードと、それぞれ要素の種類ｃ１〜ｃ１０に対応する１０個のノードｃ１〜ｃ１０とを含む。例えば、対象ベクトルｒ１に対応するノードは、対象ベクトルｒ１に含まれる要素のうち０でない要素ｃ１，ｃ４とエッジにより接続される。クラスタ分類部５３が生成する２部グラフは、対象ベクトルに対応するノード同士、あるいは要素の種類に対応するノード同士を接続するエッジがない。
【００４２】
図７は、複数のノードの重みの一例を示す図である。図７は、図４に示す対象ベクトルから求められるノードの重みの例であり、またベクトル寄与量を対象ベクトルが含む０でない要素の数とした場合の例である。対象ベクトルｒ１の重みは、対象ベクトルｒ１が含む０でない要素の数である２であり、他の対象ベクトルの重みも、その対象ベクトルが含む０でない要素の数となっている。一方、要素の種類ｃ１〜ｃ１０の重みは０である。
【００４３】
図８は、エッジのコストの一例を示す図である。図８は、図４に示す対象ベクトルから求められるエッジのコストを示す。ここでは、対象ベクトルｒ１に対応するノードと要素の種類ｃ１に対応するノードとの間のエッジのコストは、対象ベクトルｒ１の要素ｃ１のＴＦの値である１に、要素の種類ｃ１のＩＤＦスコアの値をかけた値となっている。他のエッジのコストについても同様にそのエッジに対応する対象ベクトルの要素の値に応じて定まる。
【００４４】
なお、クラスタ分類部５３は２部グラフの代わりに、対象ベクトルに対応する２つのノードを接続するエッジのあるグラフを生成してもよい。この場合、エッジの重みはエッジが接続する２つの対象ベクトルの距離であってよいし、要素の種類に対応するノードが存在しなくてよい。
【００４５】
クラスタ分類部５３は、グラフが生成されると、ノードを複数のクラスタに仮に配置する（ステップＳ２０２）。ここで、クラスタ分類部５３は、ノードが仮に配置されたクラスタに含まれる複数のノードの重みの和のばらつきが、ばらつき条件を満たすように複数のノードをクラスタに配置する。クラスタの数は２であってもよいし、３以上であってもよい。クラスタ分類部５３は、ノードを重みの大きさで順位付けし、１からｋ番目のクラスタに１からｋ番目のノードを配置し、あとは最も重みの和の小さいクラスタに順にノードを配置することを繰り返すことでばらつき条件を満たすようにノードをクラスタに配置してもよいし、ばらつき条件を満たすまでノードを複数のクラスタにランダムに配置することを繰返すことでノードをクラスタに配置してもよい。
【００４６】
ノードがクラスタに仮に配置されると、クラスタ分類部５３はKernighan-Linアルゴリズムを用いて反復的にノードの配置を修正することで最終的に分割されたグラフを求める。最終的に分割されたグラフのクラスタは、対象ベクトルが分類されたクラスタに相当する。
【００４７】
具体的には、まずクラスタ分類部５３は、複数のクラスタを複数の仮クラスタにコピーする（ステップＳ２０３）。これにより、複数の仮クラスタに属するノードは対応するクラスタに属するノードと同じになる。次に、クラスタ分類部５３は互いに異なる仮クラスタに属するノード間にあるエッジのコストの和を初期コストとして計算する（ステップＳ２０４）。以下では互いに異なる仮クラスタに属するノード間にあるエッジのコストの和を単に「コストの和」と記載する。
【００４８】
そして、クラスタ分類部５３は、２つのノードの組合せを選択し、そのノードを交換する（ステップＳ２０５）。ここで、選択されるノードの組合せは、互いに異なるクラスタに属する２つのノードの組合せであり、その２つのノードを交換した場合に最もコストの和を小さくしかつばらつき条件を満たすノードの組合せである。クラスタ分類部５３は、ノードが交換された後のコストの和を記憶する（ステップＳ２０６）。また交換されたノードを、ステップＳ２０５でノードの組合せを選択する対象となるノードから除外する（ステップＳ２０７）。そして、複数の仮クラスタに選択対象となるノードの組合せが存在すれば（ステップＳ２０８のＹ）ステップＳ２０５から処理を繰返す。ノードの組合せが存在しなくなれば（ステップＳ２０８のＮ）、今回のステップＳ２０５からステップＳ２０８のループで記憶されたコストのうちの最小値が初期コストより低いか判定する（ステップＳ２０９）。最小値が初期コストより低ければ（ステップＳ２０９のＹ）、仮クラスタでない複数のクラスタに含まれるノードのうち、その最小値に対応する組合せと、その組合せを選択する前にステップＳ２０５からステップＳ２０８により選択された組合せとに対応する複数のノードを交換する（ステップＳ２１０）。一方、最小値が初期コスト以上なら（ステップＳ２０９のＮ）、クラスタに分類する処理を終了する。処理の終了時点におけるクラスタが、ノードが分類されたクラスタとなる。
【００４９】
図９は、クラスタに分類された複数のノードの一例を示す図である。図９は、図６から８に示すグラフのノードが２つのクラスタＰ１，Ｐ２に分類された場合の例である。クラスタＰ１には対象ベクトルｒ１〜ｒ３、要素の種類ｃ１〜ｃ４に対応するノードが分類され、クラスタＰ２には対象ベクトルｒ４〜ｒ６、要素の種類ｃ５からｃ１０に対応するノードが分類されている。図９のグラフは、クラスタＰ１には対象ベクトルｒ１からｒ３が、クラスタＰ２には対象ベクトルｒ４からｒ６が分類されていることに相当する。
【００５０】
なお、グラフを分割する手法は上記のものに限られない。クラスタ分類部５３は、公知の他の手法を用いて、ばらつきの条件を満たしかつエッジのコストの和を最小にするようにグラフを分割し、対象ベクトルをクラスタに分類してよい。エッジのコストの和を最小にすることにより、複数のクラスタの間の依存が減り、それぞれのクラスタに属するノードは互いに関連が強くなる。したがって、あるクラスタに属する対象ベクトルは、互いに類似する対象ベクトルとなる蓋然性が高くなる。
【００５１】
クラスタにノードが分類されると、クラスタ分類部５３は、各クラスタに属する対象ベクトルの情報をベクトル格納部７２に格納する（ステップＳ１０４）。
【００５２】
図１０は、ベクトル格納部７２に格納される、特徴ベクトルが属するクラスタの情報の一例を示す図である。特徴ベクトルが属するクラスタの情報は、特徴ベクトルとその特徴ベクトルが属するクラスタとを関連づける情報である。図１０は図９に対応しており、特徴ベクトルは対応するノードが分類されるクラスタに分類されている。
【００５３】
インデックス生成部５４は、プロセッサ１１と記憶部１２とを中心として実現される。インデックス生成部５４は、クエリベクトルから対象ベクトルを検索するためのインデックスを生成し、インデックス格納部７３に格納させる。
【００５４】
インデックス生成部５４は、インデックスとして、複数のクラスタのそれぞれについてそのクラスタに属する対象ベクトルから転置インデックスを生成し、インデックス格納部７３に格納する（ステップＳ１０５）。インデックス格納部７３は、複数のクラスタのそれぞれについて、そのクラスタに属する全ての対象ベクトルに基づいて算出される転置インデクスを記憶する。
【００５５】
図１１は、転置インデックスの一例を示す図である。図１１は、図４に示す対象ベクトルが図１０に示すクラスタＰ１，Ｐ２に分類された場合のクラスタＰ１，Ｐ２の転置インデックスを示す図である。転置インデックスは、要素の種類をキーとして対象ベクトルを検索する際に用いるインデックスである。従って、転置インデックスは、キー項目としてクラスタの識別情報と要素の種類とを含み、またそのクラスタおよび要素の種類について値を有する対象ベクトルのそれぞれについての識別情報と要素の値との組を含む。
【００５６】
また、インデックス生成部５４は、インデックスとして、クラスタの選択に用いるための各クラスタの特徴を示す情報をインデックス格納部７３に格納する（ステップＳ１０６）。クラスタの特徴を示す情報は、例えば、インデックス生成部５４は、クラスタ分類部５３がステップＳ２０１〜Ｓ２１０により分類された各クラスタに属する要素の種類のノードに基づいて、そのノードに対応する要素の種類をクラスタに関連づけてインデックス格納部７３に格納してもよい。また、インデックス生成部５４は、クラスタに属する対象ベクトルの重心のようなクラスタの中心を、クラスタの特徴を示す情報として生成し、各クラスタの中心をインデックス格納部７３に格納してもよい。
【００５７】
図１２は、インデックス格納部７３に格納される、要素の種類が属するクラスタの情報の一例を示す図である。要素の種類が属するクラスタの情報は、クラスタとそのクラスタに属する要素の種類とを関連づける情報である。図１２は図９に対応しており、要素の種類は対応するノードが分類されるクラスタに分類されている。なお、転置インデックスを作成する処理は公知であるので、その詳細の説明は省略する。
【００５８】
図１３は、クエリベクトルに類似する対象ベクトルを検索する処理の一例を示す図である。以下ではクエリベクトル取得部５５と、クラスタ選択部５６と、類似度算出部５７とについてこの処理フローと共に説明する。
【００５９】
クエリベクトル取得部５５は、プロセッサ１１、記憶部１２および通信部１３等を中心として実現される。クエリベクトル取得部５５は、クエリベクトルを生成することでユーザが指示する検索条件を示すクエリベクトルを取得する（ステップＳ３０１）。クエリベクトル取得部５５は、例えばネットワークを介して接続されるユーザ端末等からユーザの指定する電子的な文書やユーザ情報などを取得し、その電子的な文書やユーザ情報などからクエリベクトルを生成する。クエリベクトル取得部５５がクエリベクトルを生成する方法は、対象ベクトル取得部５１が電子的な文書やユーザ情報などから対象ベクトルを生成する方法と同じである。なお、クエリベクトル取得部５５は、他のコンピュータが生成したクエリベクトルを受信することでクエリベクトルを取得してもよい。
【００６０】
クラスタ選択部５６は、プロセッサ１１および記憶部１２を中心として実現される。クラスタ選択部５６は、インデックス生成部５４が生成し、インデックス格納部７３に格納したクラスタの特徴を示す情報と、クエリベクトルとに基づいて、複数のクラスタからクエリベクトルに類似する対象ベクトルを含むクラスタを選択する（ステップＳ３０２）。
【００６１】
クラスタ選択部５６は、クラスタの特徴を示す情報として図１２に示すような、クラスタに関連づけられた要素の種類の情報が格納されている場合には、クエリベクトルのうち、クラスタに関連づけられた要素の種類における要素の値の和をクラスタのスコアとして算出する。例えば、図１２の例ではクラスタＰ１についてはクエリベクトルのうちｃ１，ｃ２，ｃ３，ｃ４の４つの要素の値の和をクラスタＰ１のスコアとし、クラスタＰ２についてはクエリベクトルのｃ５からｃ１０の要素の値の和をクラスタＰ２のスコアとする。そして、クラスタ選択部５６は、スコアが最も大きいクラスタを選択する。なお、クラスタの特徴を示す情報としてクラスタの中心を示す情報が格納されている場合には、クラスタ選択部５６はクラスタの中心とクエリベクトルとの距離を計算し、その距離が最も小さいクラスタを選択する。前者の場合には、クラスタに強く関連づけられる要素の種類の情報を用いてクラスタを選択することで、クラスタの選択に必要な計算量を削減することができる。また、図５に示すような２部グラフを用いたグラフ分割を用いてクラスタに分類する場合には、インデックスの作成も容易になる。
【００６２】
類似度算出部５７は、プロセッサ１１および記憶部１２を中心として実現される。類似度算出部５７は、選択されたクラスタに属する全ての対象ベクトルのそれぞれと、クエリベクトルとの類似度を算出する（ステップＳ３０３）。本実施形態では、類似度算出部５７はインデックス格納部７３に格納された、選択されたクラスタの転置インデックスに基づいて、そのクラスタに属する対象ベクトルとクエリベクトルとの類似度を算出する。具体的には、はじめに類似度算出部５７はそのクラスタに属する複数の対象ベクトルのそれぞれについて類似度の値を示す積算変数を初期化する。次に類似度算出部５７はクエリベクトルのうち値の設定されている複数の要素のそれぞれについて、転置インデックスを用いてその要素に対応する（要素の値が０でない）対象ベクトルと対象ベクトルのその要素の値とを取得し、対象ベクトルのその要素の値がＴＦである場合にはその要素の値からＴＦ−ＩＤＦの値を計算し、クエリベクトルのその要素の値とＴＦ−ＩＤＦの値または要素の値との積をその対象ベクトルの積算変数に加算する。この処理がなされると、各対象ベクトルの積算変数（クエリベクトルと対象ベクトルとの内積に相当）が類似度の値となる。なお、類似度算出部５７のより算出される類似度は、クエリベクトルと、選出されたクラスタに属する各対象ベクトルとのコサイン類似度であってよい。対象ベクトルやクエリベクトルとして予め正規化されたベクトルを用いると、上述の転置インデクスを用いた積算変数の値はコサイン類似度の値に相当するものになる。
【００６３】
ここで、転置インデックスを用いて対象ベクトルを検索する際に類似度の計算に必要な計算量（クラスタ計算量に対応する）は、クエリベクトルのうち値の設定されている複数の要素における、その要素の値が０でない対象ベクトルの数に依存している。クエリベクトルとしてどのようなものが設定されるかわからないと考え、基準クエリベクトルの要素の値がどれも同じであるとすると、クラスタ計算量は複数の対象ベクトルについての値が０でない要素の数に依存すると考えられる。これを対象ベクトルの視点で見ると、対象ベクトルが含む値が０でない要素の数は、その対象ベクトルがクラスタに属する際のクラスタ計算量に寄与する推定量であり、またこの推定量は、対象ベクトルと基準クエリベクトルとの類似度を計算する場合の計算量の推定量に相当する。ベクトル寄与量算出部５２は、この推定量を計算する。なお、クエリベクトルとして要素ごとに出現確率が異なると予想される場合には、クラスタ計算量は、クエリベクトルの要素ごとに、要素の値が０でない対象ベクトルの数に要素の出現確率を掛けた値の和に依存すると考えられる。したがって、ベクトル寄与量算出部５２は、基準クエリベクトルの各要素にその出現確率が設定されているとして、推定量を計算してもよい。
【００６４】
対象ベクトルとクエリベクトルとの類似度が計算されると、類似度算出部５７は、算出された類似度が最も大きい対象ベクトルを特定し、その特定された対象ベクトルに関する情報を出力する（ステップＳ３０４）。対象ベクトルに関する情報は、対象ベクトルそのものの情報でもよいし、対象ベクトルが生成される元となる文書などの情報でもよい。また類似度算出部５７は類似検索サーバに接続される表示出力手段に向けてその文書等の情報を出力してもよいし、ネットワークを介してユーザ端末等にその文書等の情報を送信してもよい。
【００６５】
ここで、クラスタ分類部５３がクラスタ間におけるクラスタ計算量の差を小さくしつつ複数の対象ベクトルをクラスタに分割する方法は、必ずしもグラフ分割手法でなくてもよい。
【００６６】
例えば、クラスタ分類部５３は、クラスタ計算量の分散とクラスタ中心間の平均距離の逆数に係数を掛けた値との和からなる評価値に基づいて対象ベクトルを複数のクラスタに分類してもよい。より具体的には、k-means法で対象ベクトルをクラスタに分割した後に、互いに異なるクラスタに属する２つの対象ベクトルを交換した場合の評価値を算出し、算出された評価値が交換前の評価値より小さければ実際に２つの対象ベクトルを交換することを繰り返すとよい。また、対象ベクトルを交換するだけでなく、クラスタ計算量の大きいクラスタから小さいクラスタに対象ベクトルを移動した場合の評価値も算出し、この評価値が前の評価値より小さければ実際の対象ベクトルを移動させてもよい。
【００６７】
また、k-means法で対象ベクトルをクラスタに分割した後に、クラスタ計算量が予め定められた上限を超える第１のクラスタと、第１のクラスタに隣接する第２のクラスタとがある場合に、第１のクラスタ中心からの距離と、第２クラスタの中心からの距離の差が最も小さい対象ベクトルを第１のクラスタから第２のクラスタに移動することを繰り返してもよい。このようにしても、クラスタ分類部５３がクラスタ間におけるクラスタ計算量の差を小さくしつつ複数の対象ベクトルをクラスタに分割することができる。
【符号の説明】
【００６８】
１１  プロセッサ、１２  記憶部、１３  通信部、１４  入出力部、５１  対象ベクトル取得部、５２  ベクトル寄与量算出部、５３  クラスタ分類部、５４  インデックス生成部、５５  クエリベクトル取得部、５６  クラスタ選択部、５７  類似度算出部、７１  対象情報格納部、７２  ベクトル格納部、７３  インデックス格納部、ｒ１，ｒ２，ｒ３，ｒ４，ｒ５，ｒ６  対象ベクトル、ｃ１，ｃ２，ｃ３，ｃ４，ｃ５，ｃ６，ｃ７，ｃ８，ｃ９，ｃ１０  要素、Ｐ１，Ｐ２  クラスタ。
【要約】
対象べクトルとクエリベクトルとの類似度を計算する時間を平準化すること。
類似度算出システムは、複数の対象ベクトルを取得する対象ベクトル取得手段と、前記複数の対象ベクトルのそれぞれについて推定される計算量であって、前記複数の対象ベクトルのそれぞれと所定の基準クエリベクトルとの類似度を計算する場合に推定される計算量に基づいて、複数のクラスタのそれぞれに属する全ての前記対象ベクトルと、前記所定の基準クエリベクトルと、の総類似度計算量の差を小さくするように前記複数の対象ベクトルをクラスタリングするクラスタリング手段と、を含む。【図１】
0005755822.tif 000002
【図２】
0005755822.tif 000003
【図３】
0005755822.tif 000004
【図４】
0005755822.tif 000005
【図５】
0005755822.tif 000006
【図６】
0005755822.tif 000007
【図７】
0005755822.tif 000008
【図８】
0005755822.tif 000009
【図９】
0005755822.tif 000010
【図１０】
0005755822.tif 000011
【図１１】
0005755822.tif 000012
【図１２】
0005755822.tif 000013
【図１３】
0005755822.tif 000014