(57)【特許請求の範囲】
【請求項１】
複数の第１対象ベクトルを取得する第１対象ベクトル取得手段と、
前記複数の第１対象ベクトルよりも次元数が小さな複数の第２対象ベクトルを所定の処理を前記各第１対象ベクトルに施すことにより生成する第２対象ベクトル生成手段と、
前記複数の第２対象ベクトルに基づいて、前記各第１対象ベクトル及びそれに対応する前記第２対象ベクトルが属する複数のクラスタを取得するクラスタリング手段と、
前記第１対象ベクトルと次元数が等しい所与のクエリベクトルに前記所定の処理を施すことにより、前記クエリベクトルよりも次元数が小さな第２クエリベクトルを生成する第２クエリベクトル生成手段と、
前記第２クエリベクトルに基づいて１又は複数の前記クラスタを選出するクラスタ選出手段と、
前記選出される１又は複数の前記クラスタに属する前記各第１対象ベクトルと、前記クエリベクトルと、の各類似度を算出する類似度算出手段と、
を含む類似度算出システム。
【請求項２】
請求項１に記載の類似度算出システムにおいて、
前記各クラスタについて、該クラスタに属する前記各第１対象ベクトルに基づいて転置インデックスを生成する転置インデックス生成手段をさらに含み、
前記類似度算出手段は、生成される前記転置インデックスに基づいて前記各類似度を算出する、
類似度算出システム。
【請求項３】
請求項１または２に記載の類似度算出システムにおいて、
前記第２対象ベクトル生成手段は、前記各第１対象ベクトルと、それぞれベクトル要素がランダムに決定され、前記第１対象ベクトルの次元数よりも少数であって前記第１対象ベクトルと次元数が等しい変換ベクトルと、の各内積を算出することにより、前記各第２対象ベクトルの各ベクトル要素を算出する、
類似度算出システム。
【請求項４】
請求項１乃至３のいずれかに記載の類似度算出システムにおいて、
前記第２対象ベクトル生成手段は、前記第１対象ベクトルが追加される場合に、追加される前記第１対象ベクトルに応じた前記第２対象ベクトルを前記所定の処理を前記追加される前記第１対象ベクトルに施すことにより生成し、
前記クラスタリング手段は、新たに生成される前記第２対象ベクトルに基づいて、前記追加される前記第１対象ベクトルが属する前記クラスタを選出する、
類似度算出システム。
【請求項５】
請求項３に記載の類似度算出システムにおいて、
前記第２対象ベクトル生成手段は、
前記第１対象ベクトルに対して次元数が追加された次元追加対象ベクトルが追加される場合に、追加された次元数と同数だけ前記変換ベクトルの次元数を増加する手段を含み、
該次元数が増加された前記変換ベクトルに基づき、前記次元追加対象ベクトルに応じた前記第２対象ベクトルを新たに生成し、
前記クラスタリング手段は、新たに生成される前記第２対象ベクトルに基づいて、前記追加される前記次元追加対象ベクトルが属するクラスタを選出する、
類似度算出システム。
【請求項６】
第１対象ベクトル取得手段が、複数の第１対象ベクトルを取得する対象ベクトル取得ステップと、
第２対象ベクトル生成手段が、前記複数の第１対象ベクトルよりも次元数が小さな複数の第２対象ベクトルを所定の処理を前記各第１対象ベクトルに施すことにより生成する第２対象ベクトル生成ステップと、
クラスタリング手段が、前記複数の第２対象ベクトルに基づいて、前記各第１対象ベクトル及びそれに対応する前記第２対象ベクトルが属するクラスタを取得するクラスタリングステップと、
第２クエリベクトル生成手段が、前記第１対象ベクトルと次元数が等しい所与のクエリベクトルに前記所定の処理を施すことにより、前記クエリベクトルよりも次元数が小さな第２クエリベクトルを生成する第２クエリベクトル生成ステップと、
クラスタ選出手段が、前記第２クエリベクトルに基づいて１又は複数の前記クラスタを選出するクラスタ選出ステップと、
類似度算出手段が、前記選出される１又は複数の前記クラスタに属する前記各第１対象ベクトルと、前記クエリベクトルと、の各類似度を算出する類似度算出ステップと、
を含む類似度算出方法。
【請求項７】
複数の第１対象ベクトルを取得する対象ベクトル取得手段、
前記複数の第１対象ベクトルよりも次元数が小さな複数の第２対象ベクトルを所定の処理を前記各第１対象ベクトルに施すことにより生成する第２対象ベクトル生成手段、
前記複数の第２対象ベクトルに基づいて、前記各第１対象ベクトル及びそれに対応する前記第２対象ベクトルが属するクラスタを取得するクラスタリング手段、
前記第１対象ベクトルと次元数が等しい所与のクエリベクトルに前記所定の処理を施すことにより、前記クエリベクトルよりも次元数が小さな第２クエリベクトルを生成する第２クエリベクトル生成手段、
前記第２クエリベクトルに基づいて１又は複数の前記クラスタを選出するクラスタ選出手段、及び
前記選出される１又は複数の前記クラスタに属する前記第１対象ベクトルと、前記クエリベクトルと、の各類似度を算出する類似度算出手段、
としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は類似度算出システム、類似度算出方法およびプログラムに関する。
【背景技術】
【０００２】
所与のクエリベクトルが複数の対象ベクトルのいずれと類似しているかを算出する類似度算出システムがある。こうしたシステムは、例えば、各ベクトルがユーザの嗜好を示すようにして、類似した嗜好を有するユーザを検索するのに用いられたり、各ベクトルが文書の特徴を示すようにして、類似した文書を検索するのに用いられたりする。【０００３】
ここで、対象ベクトルの数が膨大となると、クエリベクトルに最も類似する対象ベクトルを判断するのに時間が掛かってしまう。この問題を解決するため、下記特許文献１には、対象ベクトルをクラスタリングするとともに、クラスタ毎に代表ベクトルを算出しておく方法が開示されている。この方法によれば、クエリベクトルが与えられると、該クエリベクトルと各代表ベクトルとの類似度を計算し、計算結果に基づいて最も類似するクラスタを選択する。そして、選択されたクラスタに属する対象ベクトルと、クエリベクトルと、の各類似度を計算することにより、クエリベクトルに最も類似する対象ベクトルを判断する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−６５１４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の先行技術によれば、類似度計算の回数を削減でき、クエリベクトルに最も類似する対象ベクトルを判断する時間を短縮できる。しかし、対象ベクトルの次元数が大きいと、それらをクラスタリングするのに時間が掛かってしまう。【０００６】
本発明は上記課題に鑑みてなされたものであって、その目的は、対象ベクトルの次元数が大きくても、クエリベクトルとの類似度を高速に計算することができる類似度算出システム、方法およびプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明にかかる類似度算出システムは、複数の第１対象ベクトルを取得する第１対象ベクトル取得手段と、前記複数の第１対象ベクトルよりも次元数が小さな複数の第２対象ベクトルを所定の処理を前記各第１対象ベクトルに施すことにより生成する第２対象ベクトル生成手段と、前記複数の第２対象ベクトルに基づいて、前記各第１対象ベクトル及びそれに対応する前記第２対象ベクトルが属する複数のクラスタを取得するクラスタリング手段と、前記第１対象ベクトルと次元数が等しい所与のクエリベクトルに基づいて選択される１又は複数の前記クラスタに属する前記各第１対象ベクトルと、前記クエリベクトルと、の各類似度を算出する類似度算出手段と、を含む。【０００８】
また、本発明にかかるプログラムは、複数の第１対象ベクトルを取得する対象ベクトル取得手段、前記複数の第１対象ベクトルよりも次元数が小さな複数の第２対象ベクトルを所定の処理を前記各第１対象ベクトルに施すことにより生成する第２対象ベクトル生成手段、前記複数の第２対象ベクトルに基づいて、前記各第１対象ベクトル及びそれに対応する前記第２対象ベクトルが属するクラスタを取得するクラスタリング手段、及び、前記第１対象ベクトルと次元数が等しい所与のクエリベクトルに基づいて選択される１又は複数の前記クラスタに属する前記第１対象ベクトルと、前記クエリベクトルと、の各類似度を算出する類似度算出手段、としてコンピュータを機能させる。【０００９】
また、本発明にかかる類似度算出方法は、複数の第１対象ベクトルを取得する対象ベクトル取得ステップと、前記複数の第１対象ベクトルよりも次元数が小さな複数の第２対象ベクトルを所定の処理を前記各第１対象ベクトルに施すことにより生成する第２対象ベクトル生成ステップと、前記複数の第２対象ベクトルに基づいて、前記各第１対象ベクトル及びそれに対応する前記第２対象ベクトルが属するクラスタを取得するクラスタリングステップと、前記第１対象ベクトルと次元数が等しい所与のクエリベクトルに基づいて選択される１又は複数の前記クラスタに属する前記各第１対象ベクトルと、前記クエリベクトルと、の各類似度を算出する類似度算出ステップと、を含む。【００１０】
本発明によれば、第１対象ベクトルの次元数が大きい場合でも、クエリベクトルとの類似度を高速に計算することができる。【００１１】
本発明の一態様では、類似度算出システムは、前記クエリベクトルよりも次元数が小さな第２クエリベクトルを前記所定の処理を前記クエリベクトルに施すことにより生成する第２クエリベクトル生成手段と、前記第２クエリベクトルに基づいて１又は複数の前記クラスタを選出するクラスタ選出手段と、をさらに含んでもよい。【００１２】
本発明の一態様では、類似度算出システムは、前記各クラスタについて、該クラスタに属する前記各第１対象ベクトルに基づいて転置インデックスを生成する転置インデックス生成手段をさらに含み、前記類似度算出手段は、生成される前記転置インデックスに基づいて前記各類似度を算出してもよい。【００１３】
本発明の一態様では、前記第２対象ベクトル生成手段は、前記各第１対象ベクトルと、それぞれベクトル要素がランダムに決定され、前記第１対象ベクトルの次元数よりも少数であって前記第１対象ベクトルと次元数が等しい変換ベクトルと、の各内積を算出することにより、前記各第２対象ベクトルの各ベクトル要素を算出してもよい。【００１４】
本発明の一態様では、前記第２対象ベクトル生成手段は、前記第１対象ベクトルが追加される場合に、追加される前記第１対象ベクトルに応じた前記第２対象ベクトルを前記所定の処理を前記追加される前記第１対象ベクトルに施すことにより生成し、前記クラスタリング手段は、新たに生成される前記第２対象ベクトルに基づいて、前記追加される前記第１対象ベクトルが属する前記クラスタを選出してもよい。【００１５】
本発明の一態様では、前記第２対象ベクトル生成手段は、前記第１対象ベクトルに対して次元数が追加された次元追加対象ベクトルが追加される場合に、追加された次元数と同数だけ前記変換ベクトルの次元数を増加する手段を含み、該次元数が増加された前記変換ベクトルに基づき、前記次元追加対象ベクトルに応じた前記第２対象ベクトルを新たに生成し、前記クラスタリング手段は、新たに生成される前記第２対象ベクトルに基づいて、前記追加される前記次元追加対象ベクトルが属するクラスタを選出してもよい。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態にかかる類似検索サーバのハードウェア構成の一例を示す図である。
【図２】類似検索サーバが実現する機能を示すブロック図である。
【図３】対象ベクトルを複数のクラスタに分類しインデックスを作成する処理の一例を示すフロー図である。
【図４】対象ベクトルを変換する処理の一例を説明する図である。
【図５】対象ベクトルを変換する計算の一例を示す図である。
【図６】変換行列の各要素の値の一例を示す図である。
【図７】複数の対象ベクトルを変換する処理の一例を説明する図である。
【図８】ベクトル格納部に格納される対象ベクトル等の情報の一例を示す図である。
【図９】転置インデクスの一例を示す図である。
【図１０】クエリベクトルを用いて類似の対象ベクトルを探す処理のフローの一例を示す図である。
【図１１】追加の対象ベクトルをクラスタに分類しインデックスを作成する処理の一例を示す図である。
【発明を実施するための形態】
【００１７】
以下では、本発明の実施形態について図面に基づいて説明する。出現する構成要素のうち同一機能を有するものには同じ符号を付し、その説明を省略する。
【００１８】
本発明の実施形態にかかる類似検索システムは、類似検索サーバ１を含む。類似検索サーバ１はサーバコンピュータである。類似検索サーバ１は、ネットワークを介して類似検索の開始を指示するパーソナルコンピュータやスマートフォン等と接続されていてもよい。
【００１９】
図１は、類似検索サーバ１のハードウェア構成の一例を示す図である。類似検索サーバ１は、プロセッサ１１、記憶部１２、通信部１３、入出力部１４を含む。
【００２０】
プロセッサ１１は、記憶部１２に格納されているプログラムに従って動作する。またプロセッサ１１は通信部１３、入出力部１４を制御する。なお、上記プログラムは、インターネット等を介して提供されるものであってもよいし、フラッシュメモリやＤＶＤ−ＲＯＭ等のコンピュータで読み取り可能な記憶媒体に格納されて提供されるものであってもよい。
【００２１】
記憶部１２は、ＲＡＭやフラッシュメモリ等のメモリ素子やハードディスクドライブによって構成されている。記憶部１２は、上記プログラムを格納する。また、記憶部１２は、各部から入力される情報や演算結果を格納する。
【００２２】
通信部１３は、他の装置と通信する機能を実現するものであり、例えば有線ＬＡＮの集積回路やコネクタ端子などにより構成されている。通信部１３は、プロセッサ１１の制御に基づいて、他の装置から受信した情報をプロセッサ１１や記憶部１２に入力し、他の装置に情報を送信する。
【００２３】
入出力部１４は、表示出力手段をコントロールするビデオコントローラや、入力デバイスからのデータを取得するコントローラなどにより構成される。入力デバイスとしては、キーボード、マウス、タッチパネルなどがある。入出力部１４は、プロセッサ１１の制御に基づいて、表示出力デバイスに表示データを出力し、入力デバイスをユーザが操作することにより入力されるデータを取得する。表示出力デバイスは例えば外部に接続されるディスプレイ装置である。
【００２４】
図２は、類似検索サーバ１が実現する機能を示すブロック図である。類似検索サーバ１は、機能的に、対象ベクトル取得部５１と、縮小対象ベクトル生成部５２と、クラスタ分類部５３と、インデックス生成部５４と、クエリベクトル取得部５７と、縮小クエリベクトル生成部５８と、クラスタ選出部５９と、類似度算出部６０と、を含む。これらの機能は、プロセッサ１１が記憶部１２に格納されたプログラムを実行し、通信部１３や入出力部１４を制御することで実現される。縮小対象ベクトル生成部５２は、機能的に変換行列取得部５５と、変換部５６とを含んでいる。また、類似検索サーバ１は対象情報格納部７１とベクトル格納部７２とを含む。対象情報格納部７１は類似検索の対象となる文書またはユーザなどの情報を格納し、ベクトル格納部７２は、複数の対象ベクトルを格納する。ここで、対象ベクトルのそれぞれは、対応する文書またはユーザなどの情報から生成される特徴ベクトルである。対象情報格納部７１およびベクトル格納部７２は、主に記憶部１２により構成されているが、他のサーバの記憶部などにより構成され、格納される情報を、類似検索サーバ１内の各機能とネットワークを介してやりとりしてもよい。
【００２５】
本実施形態では、大きく分けて３種類の処理が行われる。１種類目の処理は、クエリベクトルに類似する対象ベクトルを検索する処理である。２種類目の処理は、その検索をする準備として、対象ベクトルが分類されるクラスタやインデックスを作成する処理である。３種類目の処理は、対象ベクトルが追加される場合（以下では追加される対象ベクトルを追加対象ベクトルと記載する）にその追加対象ベクトルをいずれかのクラスタに分類しインデックスを修正する処理である。１種類目の処理はクエリベクトル取得部５７、縮小クエリベクトル生成部５８、クラスタ選出部５９、類似度算出部６０により行われる。２種類目および３種類目の処理は、対象ベクトル取得部５１、縮小対象ベクトル生成部５２、クラスタ分類部５３、インデックス生成部５４により行われる。
【００２６】
はじめに、対象ベクトルが分類されるクラスタやインデックスを作成する処理から説明する。図３は、対象ベクトルを複数のクラスタに分類しインデックスを作成する処理の一例を示すフロー図である。以下ではこの処理フローとともに各機能について説明する。
【００２７】
対象ベクトル取得部５１は、プロセッサ１１および記憶部１２を中心として実現される。対象ベクトル取得部５１は、複数の対象ベクトルを取得する。より具体的には、対象情報格納部７１に格納される文書やユーザなどの情報から対象ベクトルを生成する（ステップＳ１０１）。また、対象ベクトル取得部５１は生成された対象ベクトルをベクトル格納部７２に格納する。例えば、対象ベクトルが電子的な文書から生成される場合には、対象ベクトルは文書に対応し、その対象ベクトルに含まれる複数の要素のそれぞれは単語に対応する。なお対象ベクトルの次元数は対象ベクトルの要素の数となる。また対象ベクトルの要素の値は、対応する文書における単語の出現頻度を示すスコア（例えばＴＦ−ＩＤＦの値）である。ある文書におけるある単語に対するＴＦ−ＩＤＦの値は、文書中にその単語が出現しない場合は０となり、単語が出現してもそれが多くの文書で表れる一般的な語と思われる単語である場合はそうでない単語の場合より小さな値となる。また、複数のユーザ情報のそれぞれから対象ベクトルを生成してもよい。この場合、対象ベクトルの要素がユーザ情報の属性（ユーザの属性を示す情報）に対応してもよいし、その属性が複数の値を取りうる場合には、その属性の値ごとに対応する要素が存在してよい。文書やユーザ属性から対象ベクトルを生成する具体的な方法は公知であるので詳細の記載は省略する。
【００２８】
縮小対象ベクトル生成部５２は、プロセッサ１１および記憶部１２を中心として実現される。縮小対象ベクトル生成部５２に含まれる変換行列取得部５５は、対象ベクトルのそれぞれを対象ベクトルより次元数の小さい縮小対象ベクトルに変換するための変換行列Ｒを取得する（ステップＳ１０２）。そして、縮小対象ベクトル生成部５２に含まれる変換部５６は、対象ベクトルのそれぞれを対象ベクトルより次元数の小さい縮小対象ベクトルに変換し（ステップＳ１０３）、変換された縮小対象ベクトルをベクトル格納部７２に格納させる。
【００２９】
図４は、対象ベクトルを変換する処理の一例を説明する図である。図４は一つの対象ベクトルｘ（ｗ１，…，ｗｍ）が変換行列Ｒにより縮小対象ベクトルｙ（ｓ１，…，ｓｎ）に変換されることを示している。ここで、対象ベクトルの次元数はｍ、縮小対象ベクトルの次元数はｎであり、ｎはｍに比べて十分に小さい（例えばｍの４分の１未満）とする。図５は、対象ベクトルを変換する計算を示す図である。本図からわかるように、縮小対象ベクトルｙのｔ番目（ｔは１以上ｎ以下の整数とする）の要素を計算する処理は、対象ベクトルｘの１番目からｍ番目の要素の値と、変換行列Ｒのｔ列の１行目からｍ行目までの要素の値とをそれぞれ掛け、さらにその掛けられた値を積算することで求められる。これは、変換行列Ｒの各列をｍ次元の変換ベクトルと考えると、縮小対象ベクトルｙのｔ番目の要素の値が、対象ベクトルと変換ベクトルの内積の値であるともいえる。ここで、ｕ番目（ｕは１以上ｎ以下の整数）の変換ベクトルは、（ｒｕ，１，ｒｕ，２，…，ｒｕ，ｍ）となる。
【００３０】
なお、対象ベクトルを縮小対象ベクトルに変換する処理において、縮小対象ベクトル生成部５２は、対象ベクトルの要素のうち値が０でない要素とその要素に対応する変換行列Ｒの要素との積を積算することで縮小対象ベクトルの要素の値を取得してもよい。この場合、変換行列Ｒの各行のうち、対象ベクトルの複数の要素のうち値が０でない要素に対応する行のみがこの計算に用いられる。
【００３１】
図６は、変換行列Ｒの各要素の値の一例を示す図である。変換行列Ｒの各要素の値は、乱数を用いてランダムに決定される。図６の例では、要素の値として取りうる値は｛−１，０，１｝の３つであり、そのそれぞれの値が出現する位置はランダムとなる。ここで、これらの３つの値のうち１と−１の値の出現する数は等しい。例えば変換行列の要素の数の１／６の値が１、また１／６の値が−１、残りの２／３の値が０である。さらにいえば、変換行列取得部５５は、変換行列Ｒの各列の要素について、予め定められた数の１および−１をランダムに配置し、残りの要素に０を配置することで変換行列Ｒを生成する。変換行列Ｒで値が０となる要素の数と全体の要素の数との比は０から２／３程度にすると精度の上では好適であるが、その比を２／３より大きくしてもよい。
【００３２】
図７は、複数の対象ベクトルを変換する処理の一例を説明する図である。複数の対象ベクトルから複数の縮小対象ベクトルに変換する処理は、行列演算で表すことができる。具体的には、行のそれぞれが対象ベクトルとなる対象行列Ｘと変換行列Ｒの積を求めることにより、行のそれぞれが縮小対象ベクトルとなる縮小対象行列Ｙが求められる。変換部５６はこの行列演算の処理を実行することにより、複数の縮小対象ベクトルを取得する。
【００３３】
なお、本実施形態ではランダムな変換行列Ｒを用いて縮小対象ベクトルを生成しているが、他の方法を用いて生成してもよい。例えば縮小対象ベクトル生成部５２はＰＣＡ（Principal components analysis）法を用いて対象ベクトルからより次元数の小さい縮小対象ベクトルに変換してもよい。
【００３４】
クラスタ分類部５３は、プロセッサ１１および記憶部１２を中心として実現される。クラスタ分類部５３は、縮小対象ベクトルに基づいて、対象ベクトルおよびそれに対応する縮小対象ベクトルが属する複数のクラスタを取得する。より具体的には、縮小対象ベクトルが生成されると、はじめにクラスタ分類部５３はその複数の縮小対象ベクトルをクラスタリングすることにより、その複数の縮小対象ベクトルを複数のクラスタに分類する（ステップＳ１０４）。クラスタ分類部５３はｋ−ｍｅａｎｓ法などの公知のクラスタリング手法を用いてクラスタに分類してよい。
【００３５】
次に、クラスタ分類部５３は各クラスタにそのクラスタに属する縮小対象ベクトルに対応する対象ベクトルを所属させる（ステップＳ１０５）。ここで、縮小対象ベクトルに対応する対象ベクトルは、縮小対象ベクトルの変換元である対象ベクトルのことである。これにより、各クラスタに縮小対象ベクトルと対象ベクトルとが属するようになる。
【００３６】
図８は、ベクトル格納部７２に格納される対象ベクトル等の情報の一例を示す図である。図８に示す情報の１レコードは、対象ベクトルおよび縮小対象ベクトルを特定するベクトル番号と、対象ベクトルと縮小対象ベクトルと、そのそれぞれが属するクラスタを示す情報であるクラスタ番号とを含む。対象ベクトルと縮小対象ベクトルとは１対１に対応し、１つの対象ベクトルと、それに対応する縮小対象ベクトルとは同じクラスタに属する。よって１つのレコードには１つのクラスタ番号のみ存在している。図８に示すベクトル格納部７２のデータ構造の場合、ステップＳ１０５に示す処理は具体的には縮小対象ベクトルについて一時的なメモリに格納されているクラスタ番号をベクトル格納部７２の各レコードに反映させる処理となる。なお、縮小対象ベクトルを対象ベクトルと別に管理してもよい。例えば、ベクトル番号と縮小対象ベクトルとクラスタ番号とを含むレコードの組により縮小対象ベクトルを管理し、対象ベクトルと縮小対象ベクトルとをベクトル番号により関連づけてもよい。なお、図８には対象ベクトルの要素の値や縮小対象ベクトルの要素の値として整数以外の値が記載されていないが、実際には整数以外の値が存在しても構わない。
【００３７】
各ベクトルは、他のベクトルに対する相対的な類似度が対象ベクトルを変換する処理の前と後で維持されている。対象ベクトルの次元数を縮小する変換のアルゴリズムは、このような性質を有するものを用いる。それゆえ、縮小対象ベクトルのクラスタは、元の対象ベクトルのクラスタとしても利用可能である。
【００３８】
そして、クラスタ分類部５３は各クラスタに含まれる縮小対象ベクトルに基づいて、各クラスタの代表ベクトルを生成する（ステップＳ１０６）。クラスタの代表ベクトルは、その対象ベクトルの特徴を示し縮小対象ベクトルと同じ次元数を有する特徴ベクトルであり、例えばそのクラスタに含まれる複数の縮小対象ベクトルの重心や、その重心に最も近い縮小対象ベクトルである。代表ベクトルは、クエリベクトルに類似するクラスタを選択するために用いられ、クラスタ分類部５３は代表ベクトルを記憶部１２に格納する。
【００３９】
クラスタリングに対象ベクトルではなく縮小対象ベクトルを用いると次元数が減るため、クラスタリングにかかる処理時間が短縮される。またランダムな変換行列Ｒにより変換された縮小対象ベクトル間の距離は、対応する対象ベクトル間の距離と概ね整合する値になる傾向があるので、縮小対象ベクトル間の距離を用いることによる精度の低下も抑えられる。
【００４０】
インデックス生成部５４は、プロセッサ１１および記憶部１２を中心として実現される。インデックス生成部５４は、対象ベクトルがクラスタに分類されると、各クラスタについて、そのクラスタに属する対象ベクトルから転置インデックスを生成する（ステップＳ１０７）。
【００４１】
図９は、転置インデクスの一例を示す図である。転置インデックスはクラスタと要素の組ごとに設けられるレコードを含み、各レコードはキー属性となる要素を特定する情報である要素番号と、要素を含む対象ベクトルおよびその対象ベクトルにおけるその要素の値の組のリストとを含む。図９において、クラスタ番号１の要素番号１のレコードにおける対象ベクトルと要素の値の組（ｘ１，１）のうちｘ１はベクトル番号が１の対象ベクトルを示し、１はその対象ベクトルにおける１番目の要素の値を示す。
【００４２】
転置インデックスは、クラスタ内の対象ベクトルとクエリベクトルとの類似度を計算する際の処理を効率化するためのインデックスであり、このインデックスを用いることでクエリベクトルのうち値をもつ要素について、その要素に値を有する対象ベクトルによる類似度への寄与を高速に計算することが可能になる。転置インデックスの作成手法は公知なので詳細の説明は省略する。
【００４３】
次に、クエリベクトルに類似する対象ベクトルを検索する処理について説明する。図１０は、クエリベクトルを用いて類似の対象ベクトルを探す処理のフローの一例を示す図である。以下ではこの処理フローとともに各機能について説明する。
【００４４】
クエリベクトル取得部５７は、プロセッサ１１、記憶部１２および通信部１３を中心として実現される。クエリベクトル取得部５７は、クエリベクトルを生成することでクエリベクトルを取得する（ステップＳ２０１）。クエリベクトル取得部５７は、例えばネットワークを介して接続されるユーザ端末等から電子的な文書やユーザ情報などを取得し、その電子的な文書やユーザ情報などからクエリベクトルを生成する。クエリベクトル取得部５７がクエリベクトルを生成する方法は、対象ベクトル取得部５１が電子的な文書やユーザ情報などから対象ベクトルを生成する方法と同じである。
【００４５】
縮小クエリベクトル生成部５８は、プロセッサ１１および記憶部１２を中心として実現される。縮小クエリベクトル生成部５８は、クエリベクトルに対応する縮小クエリベクトルを生成する（ステップＳ２０２）。縮小クエリベクトル生成部５８が縮小クエリベクトルを生成する方法は、縮小対象ベクトル生成部５２が対象ベクトルから縮小対象ベクトルを生成する方法と同じである。
【００４６】
クラスタ選出部５９は、プロセッサ１１および記憶部１２を中心として実現される。クラスタ選出部５９は生成された縮小クエリベクトルに基づいてクラスタを選出する。クラスタ選出部５９は、より具体的には、縮小クエリベクトルと複数のクラスタのそれぞれを代表する代表ベクトルとに基づいてクラスタを選出する。この際、クラスタ選出部５９は縮小クエリベクトルと代表ベクトルとの距離を計算し、縮小クエリベクトルに対して最も距離が小さい代表ベクトルに対応するクラスタを選出する。なお、クラスタ選出部５９は距離が小さいものからいくつか複数の代表ベクトルに対応するクラスタを選出してもよい。
【００４７】
類似度算出部６０は、プロセッサ１１および記憶部１２を中心として実現される。類似度算出部６０は、選出されたクラスタに属する複数の対象ベクトルのそれぞれと、変換前のクエリベクトルとの類似度を算出する（ステップＳ２０４）。本実施形態では、類似度算出部６０はインデックス生成部５４が生成した転置インデックスを用いてクエリベクトルと対象ベクトルとの類似度を算出する。具体的には、はじめに類似度算出部６０はそのクラスタに属する複数の対象ベクトルのそれぞれについて類似度の値を示す積算変数を初期化する。次に類似度算出部６０はクエリベクトルのうち値の設定されている複数の要素のそれぞれについて、転置インデックスを用いてその要素に対応する（要素の値が０でない）対象ベクトルと対象ベクトルのその要素の値とを取得し、クエリベクトルのその要素の値と対象ベクトルのその要素の値との積をその対象ベクトルの積算変数に加算する。この処理がなされると、各対象ベクトルの積算変数（クエリベクトルと対象ベクトルとの内積に相当）が類似度の値となる。なお、類似度算出部６０のより算出される類似度は、クエリベクトルと、選出されたクラスタに属する各対象ベクトルとのコサイン類似度であってよい。対象ベクトルやクエリベクトルとして予め正規化されたベクトルを用いると、上述の転置インデクスを用いた積算変数の値はコサイン類似度の値に相当するものになる。
【００４８】
また、類似度算出部６０は、最も類似度の高い対象ベクトルを選択し、最も類似度の高い対象ベクトルに関する情報を出力する（ステップＳ２０５）。対象ベクトルに関する情報は、対象ベクトルそのものの情報でもよいし、対象ベクトルが生成される元となる文書などの情報でもよい。また類似度算出部６０は類似検索サーバ１に接続される表示出力手段に向けてその文書等の情報を出力してもよいし、ネットワークを介してユーザ端末等にその文書等の情報を送信してもよい。
【００４９】
一度対象ベクトルを縮小対象ベクトルに変換すると、文書等の類似の順位を決めるために、通常は縮小対象ベクトルを用いて類似度を算出することを考える。しかしながら、クラスタ内を検索する場合、情報量が少なくなった縮小対象ベクトルを用いると精度の低下が生じ、最もクエリベクトルに類似する対象ベクトルを見つけられない恐れがある。本実施形態ではクラスタリングに縮小対象ベクトルを用い、クラスタ内の類似度の計算に変換前の対象ベクトルを用いることで、クラスタリングにかかる時間の低減と、クラスタを用いた検索の精度の向上とを両立させることができる。また、縮小対象ベクトルをクラスタ選択に用い、対象ベクトルを選択後の類似度の計算に用いることで、クラスタの特性を考慮した精度の高い計算と、処理の高速化とを両立させることもできる。
【００５０】
次に、追加対象ベクトルが与えられる場合にその追加対象ベクトルをいずれかのクラスタに分類しインデックスを修正する処理について説明する。図１１は追加の対象ベクトルをクラスタに分類しインデックスを作成する処理の一例を示す図である。
【００５１】
はじめに、対象ベクトル取得部５１は、追加対象ベクトルを取得する（ステップＳ３０１）。対象ベクトル取得部５１は、追加対象ベクトルの元となる文書等の情報が与えられる場合はステップＳ１０１と同じ手法で追加対象ベクトルを取得する。
【００５２】
ここで、追加対象ベクトルの元となる文書に新たな単語が出現した場合に、追加対象ベクトルの次元数が既にクラスタに分類されている対象ベクトルの次元数より大きくなる場合が考えられる。その対応について以下に説明する。
【００５３】
追加対象ベクトルの次元数が既にクラスタに分類されている対象ベクトルの次元数以下である場合には（ステップＳ３０２のＮ）ステップＳ３０３の処理を行わない。一方、追加対象ベクトルの次元数が既にクラスタに分類されている対象ベクトルの次元数より大きい場合には（ステップＳ３０２のＹ）、縮小対象ベクトル生成部５２に含まれる変換行列取得部５５は、増加した次元にあわせて変換行列Ｒを修正する（ステップＳ３０３）。より具体的には、変換行列取得部５５は、追加対象ベクトルではじめて追加された要素の位置（例えば最終列）に対応する行（例えば最終行）をその変換行列Ｒに挿入する。その行は、複数の変換ベクトルの要素のうち、追加対象ベクトルの追加された要素との積を取る要素からなる。変換行列Ｒに挿入される行の要素には、元の変換行列Ｒの要素の値を決定する方法と同じように、同じ数の−１と１とがランダムに配置される。
【００５４】
そして、縮小対象ベクトル生成部５２の変換部５６は、追加対象ベクトルを変換し、縮小追加対象ベクトルを生成する（ステップＳ３０４）。変換部５６が縮小追加対象ベクトルを生成する方法はステップＳ１０３で対象ベクトルから縮小対象ベクトルを生成する方法と同じである。
【００５５】
次に、クラスタ分類部５３は、各クラスタの代表ベクトルと、縮小追加対象ベクトルとに基づいて、追加対象ベクトルが属するクラスタを選出する（ステップＳ３０５）。より具体的には、クラスタ分類部５３は縮小対象ベクトルから生成された各クラスタの代表ベクトルと、縮小追加対象ベクトルとの距離を計算し、最も距離の短い代表ベクトルに対応するクラスタを、縮小追加対象ベクトルが属するクラスタとして選出する。また、クラスタ分類部５３は選出されたクラスタに追加対象ベクトルを関連づけて記憶させる（ステップＳ３０６）。より具体的にはクラスタ分類部５３は、対象ベクトル番号の欄、対象ベクトルの欄、クラスタ番号の欄、縮小対象ベクトルの欄のそれぞれに、追加対象ベクトルの番号、追加対象ベクトルの要素、その追加対象ベクトルに対応づけられたクラスタの番号、縮小対象ベクトルの要素、の情報を含むレコードを追加する。このようにすることで、クラスタリングを始めからやり直さなくても追加対象ベクトルをクラスタに分類することができる。
【００５６】
また、変換行列Ｒの要素の値がランダムに生成されるため、新たな単語が出たなどの理由により追加対象ベクトルの要素の数が増えても、変換行列Ｒの行を追加することにより縮小追加対象ベクトルを生成することができる。さらに、仮に、追加前の対象ベクトルにその新たな単語に対応する要素が追加され、行が追加された変換行列Ｒを用いて縮小対象ベクトルが計算されたとすると、その縮小対象ベクトルは、要素を追加する前に計算された縮小対象ベクトルと同じものになる。なぜなら、既存の対象ベクトルの元となる文書等にはその要素に対応する単語等が存在しないなどの理由により、既存の対象ベクトルに追加される要素の値が０になるので、追加された要素の値に変換行列Ｒの要素の値をかけた値（つまり０）によっては対応する縮小対象ベクトルの要素の値は変化しないからである。したがって、既存の対象ベクトルについて縮小対象ベクトルを再計算したり、クラスタリングをやり直す必要がない。
【００５７】
インデックス生成部５４は、追加対象ベクトルがクラスタに関連づけられると、追加対象ベクトルに基づいて選出されたクラスタの転置インデックスを修正する（ステップＳ３０７）。より具体的には、インデックス生成部５４は、追加対象ベクトルの要素のうち０以外の値を有する要素をキーとするレコードの対象ベクトルの要素の値の組のリストに、追加対象ベクトルと、その要素の値との組を追加する。また新たな要素が追加されている場合には、そのレコードを追加する。
【００５８】
このように転置インデックスを修正すれば、一から転置インデックスを再作成しなくてもクエリベクトルとクラスタのいずれかに属する対象ベクトルとの類似度を計算することが可能になる。
【００５９】
ここで、既存の対象ベクトルの元となる文書等が更新された場合に、それに応じて更新された対象ベクトルが属するクラスタの転置インデックスの更新等が行われてもよい。例えば、追加対象ベクトルをクラスタに分類しインデックスを作成する処理に類似する以下の処理を行う。はじめに対象ベクトル取得部５１は、対象ベクトルの元となる文書等が更新された場合に、その文書等から更新された対象ベクトルを生成する。変換行列取得部５５は対象ベクトルの要素の数が増加した場合には変換行列Ｒを修正し、そうでない場合には既に生成された変換行列Ｒを取得する。次に変換部５６は、更新された対象ベクトルを縮小対象ベクトルに再び変換する。そして、クラスタ分類部５３は各クラスタの代表ベクトルと、更新された対象ベクトルに対応する縮小対象ベクトルとに基づいて、その対象ベクトルが属するクラスタを選出し、インデックス生成部５４はその更新された対象ベクトルに基づいて、選出されたクラスタの転置インデックスを更新する。具体的には、インデックス生成部５４は、転置インデックスのレコードの対象ベクトルと要素の値との組の値から更新前の対象ベクトルを含む組を削除し、更新された対象ベクトルの要素のうち０以外の値を有する要素をキーとするレコードの対象ベクトルの要素の値の組のリストに、対象ベクトルと、その要素の値との組を追加する。
【００６０】
ここで、文書等の更新された箇所が部分的であることが期待される場合には、更新前の対象ベクトルが属するクラスタに更新された対象ベクトルが属するとして、クラスタ分類部５３の処理をスキップしてもよい。また、クラスタ分類部５３は、更新された対象ベクトルに対応する縮小対象ベクトルに基づいて、代表ベクトルを再生成してもよい。なお、追加対象ベクトルをいずれかのクラスタに分類しインデックスを修正する処理においても、クラスタ分類部５３は追加対象ベクトルが属するクラスタを選出したあとに、代表ベクトルを再生成してよい。
【００６１】
また、クエリベクトルに類似する対象ベクトルを検索する処理において、クエリベクトルを縮小クエリベクトルに変換せずにクラスタ選出に用いてよい。予め、代表ベクトルが対象ベクトルから生成され、代表ベクトルの次元数が対象ベクトルの次元数と同じであれば、クラスタ選出部５９はクエリベクトルと代表ベクトルとに基づいてクラスタを選出することができる。この場合、対象ベクトルが分類されるクラスタやインデックスを作成する処理において、クラスタ分類部５３は各クラスタに含まれる対象ベクトルに基づいて、各クラスタの代表ベクトルを生成する。ただし、縮小対象ベクトルを用いてクラスタリングしているので、代表ベクトルも縮小対象ベクトルとする方が好適である。
【００６２】
なお、対象ベクトル取得部５１、縮小対象ベクトル生成部５２、クラスタ分類部５３、インデックス生成部５４の機能が、類似検索サーバ１と異なるサーバに含まれるプロセッサ等により実現されてもよい。クラスタの分類や、転置インデックスの作成は、クエリベクトルに類似する対象ベクトルを検索する動作と並行して行うことも可能である。類似検索サーバは複数存在してもよく、各類似検索サーバは１又は複数のクラスタに対応する転置インデックスを保持してもよい。各類似検索サーバが保持する転置インデックスに対応するクラスタは、クラスタリングされた複数のクラスタの一部であってよい。その場合、ディスパッチャを含むサーバが変換行列Ｒと代表ベクトル（クエリベクトルを変換しない場合は代表ベクトルのみ）を保持し、ディスパッチャがクエリベクトルに基づいてクラスタを選出し、対応する転置インデックスを保持する類似検索サーバにクエリベクトルを含むクエリをディスパッチすればよい。
【符号の説明】
【００６３】
１  類似検索サーバ、１１  プロセッサ、１２  記憶部、１３  通信部、１４  入出力部、５１  対象ベクトル取得部、５２  縮小対象ベクトル生成部、５３  クラスタ分類部、５４  インデックス生成部、５５  変換行列取得部、５６  変換部、５７  クエリベクトル取得部、５８  縮小クエリベクトル生成部、５９  クラスタ選出部、６０  類似度算出部、７１  対象情報格納部、７２  ベクトル格納部、Ｒ  変換行列、ｘ  対象ベクトル、ｙ  縮小対象ベクトル、Ｘ  対象行列、Ｙ  縮小対象行列。
【要約】
対象ベクトルの次元数が大きくても、クエリベクトルとの類似度を高速に計算すること。
類似度算出システムは、複数の第１対象ベクトルを取得し、前記複数の第１対象ベクトルよりも次元数が小さな複数の第２対象ベクトルを所定の処理を前記各第１対象ベクトルに施すことにより生成し、前記複数の第２対象ベクトルに基づいて、前記各第１対象ベクトル及びそれに対応する前記第２対象ベクトルが属する複数のクラスタを取得し、前記第１対象ベクトルと次元数が等しい所与のクエリベクトルに基づいて選択される１又は複数の前記クラスタに属する前記各第１対象ベクトルと、前記クエリベクトルと、の各類似度を算出する。【図１】
0005755823.tif 000002
【図２】
0005755823.tif 000003
【図３】
0005755823.tif 000004
【図４】
0005755823.tif 000005
【図５】
0005755823.tif 000006
【図６】
0005755823.tif 000007
【図７】
0005755823.tif 000008
【図８】
0005755823.tif 000009
【図９】
0005755823.tif 000010
【図１０】
0005755823.tif 000011
【図１１】
0005755823.tif 000012