(57)【要約】【課題】より効率よく類似データを抽出することができるデータ抽出装置、データ抽出方法、及びプログラムを提供すること。【解決手段】データ抽出装置は、入力データを、距離を定義することが可能であり且つ距離の公理を満たす符号に変換する変換部と、前記符号を照合可能なデータ構造である空間インデックスを用いて、着目データから変換された符号に空間的に近い符号を抽出し、前記抽出した符号の変換元のデータを、前記着目データに類似するデータとして抽出する抽出部と、を備える。【選択図】図１
2019219945.tif 000002
【特許請求の範囲】
【請求項１】
入力データを、距離を定義することが可能であり且つ距離の公理を満たす符号に変換する変換部と、
前記符号を照合可能なデータ構造である空間インデックスを用いて、着目データから変換された符号に空間的に近い符号を抽出し、前記抽出した符号の変換元のデータを、前記着目データに類似するデータとして抽出する抽出部と、
を備えるデータ抽出装置。
【請求項２】
前記変換部は、前記着目データのｐＨａｓｈを前記符号として算出する、
請求項１に記載のデータ抽出装置。
【請求項３】
前記空間インデックスは、階層構造を有し、各階層において近傍関係にある要素がグループ化されている、
請求項１又は請求項２に記載のデータ抽出装置。
【請求項４】
前記空間インデックスは、前記階層構造における上位の階層のラベルを参照することで、前記符号の属するグループが認識可能なデータ構造である、
請求項３に記載のデータ抽出装置。
【請求項５】
前記空間インデックスには、近似ｋ最近傍グラフが含まれ、
前記符号は、前記近似ｋ最近傍グラフにおける頂点である、
請求項１から請求項４のいずれか一項に記載のデータ抽出装置。
【請求項６】
コンピュータが、
入力データを、距離を定義することが可能であり且つ距離の公理を満たす符号に変換し、
前記符号を照合可能なデータ構造である空間インデックスを用いて、着目データから変換された符号に空間的に近い符号を抽出し、
前記抽出した符号の変換元のデータを、前記着目データに類似するデータとして抽出する、
データ抽出方法。
【請求項７】
コンピュータに、
入力データを、距離を定義することが可能であり且つ距離の公理を満たす符号に変換させ、
前記符号を照合可能なデータ構造である空間インデックスを用いて、着目データから変換された符号に空間的に近い符号を抽出させ、
前記抽出した符号の変換元のデータを、前記着目データに類似するデータとして抽出させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ抽出装置、データ抽出方法、及びプログラムに関する。
【背景技術】
【０００２】
近年、ＥＣ（electronic commerce）サイトの一般化に伴い、ユーザによる商品の出品行為が浸透しつつある。出品者であるユーザは、自身が出品する商品の写真やネットワークを介して取得された当該商品の販促写真を用いてＥＣサイトに出品し、購入者であるユーザは、出品された商品の写真を確認して購入する。これに関連し、ＥＣサイトにおいてある商品の画像を元に、類似する商品を検索する技術が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１７−２２００１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＥＣサイトにおいて、商品の紹介画面には販促写真などの画像が提示される。出品者の立場では、他の出品者が出品している商品の画像と同じまたは類似する画像を提示したくない。また、ＥＣサイトの運営者の立場でも、販売促進やＥＣサイトの魅力維持の観点から、種々の出品者が同じ画像を使用して出品することは避けたいといった事情がある。例えば、類似画像の重複選択を避ければ、そのような事態も回避できるため、類似画像を抽出するニーズは高い。
【０００５】
しかしながら、上記特許文献１では、画像に対応付けられたクエリに基づいて類似する画像を特定することができても、クエリが対応付けられていない画像に類似する画像を特定することまでは困難である。また、画像のみを処理対象として、類似する画像を抽出する場合、処理負荷が膨大になる場合があった。
【０００６】
本発明は、このような事情を考慮してなされたものであり、より効率よく類似データを抽出することができるデータ抽出装置、データ抽出方法、及びプログラムを提供することを目的の一つとする。
【課題を解決するための手段】
【０００７】
本発明の一態様は、入力データを、距離を定義することが可能であり且つ距離の公理を満たす符号に変換する変換部と、前記符号を照合可能なデータ構造である空間インデックスを用いて、着目データから変換された符号に空間的に近い符号を抽出し、前記抽出した符号の変換元のデータを、前記着目データに類似するデータとして抽出する抽出部と、を備えるデータ抽出装置である。
【発明の効果】
【０００８】
本発明の一態様によれば、より効率よく類似データを抽出することができる。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係るデータ抽出装置１００を利用したデータ抽出システム１の構成の一例を示す図である。
【図２】ハッシュ算出部１２４によるｐＨａｓｈの算出手法を概念的に示す図である。
【図３】近似ｋ最近傍グラフＧによる類似画像グループの生成処理の一例を示すフローチャートである。
【図４】近似ｋ最近傍検索処理の一例を示すフローチャートである。
【図５】最近傍ノード特定処理の一例を示すフローチャートである。
【図６】追加ノードｑの近傍探索処理の一例を示すフローチャートである。
【図７】近似ｋ最近傍グラフＧを模式的に示す図である。
【図８】ｄｖｐ−Ｔｒｅｅの生成処理の一例を示すフローチャートである。
【図９】リーフノードラベルｎｄＬの分割処理の一例を示すフローチャートである。
【図１０】分割球によって分割された近似ｋ最近傍グラフＧの一例を示す図である。
【図１１】近似ｋ最近傍グラフＧに対応付けられたｄｖｐ−Ｔｒｅｅの一例を示す図である。
【図１２】空間インデックスを用いた類似画像グループの検索処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、図面を参照し、本発明のデータ抽出装置、データ抽出方法、及びプログラムの実施形態について説明する。
【００１１】
データ抽出装置は、一以上のプロセッサにより実現される。データ抽出装置は、入力データを、距離を定義することが可能であり且つ距離の公理を満たす符号に変換する。また、データ抽出装置は、符号を照合可能なデータ構造である空間インデックスを用いて、着目データから変換された符号に空間的に近い符号を抽出し、抽出した符号の変換元のデータを、着目データに類似するデータとして抽出する。
【００１２】
対象データは、例えば画像データである（以下、単に画像と称する）。この場合、データ抽出装置は、例えば、画像に基づいてｐＨａｓｈ（perception Hashing）を求める（変換することの一例）。空間インデックスは、ｐＨａｓｈの位置が照合可能な下位階層のデータ構造と、これに対して上位階層に展開されるデータ構造とを含む階層構造のデータ構造である。下位階層のデータ構造は、例えば、ＡＮＮＧ（Approximate k-Nearest Neighbor Graph）で表現される。上位階層に展開されるデータ構造は、下位階層のデータ構造におけるノードをリーフとして、ノードラベルが上位階層に展開される木構造型インデックス（例えば、ｄｖｐ−Ｔｒｅｅ（dynamic vantage point Tree）である。データ抽出装置は、着目画像（着目データの一例）から算出されたｐＨａｓｈに空間的に近いｐＨａｓｈを空間インデックスから抽出する。そして、抽出したｐＨａｓｈの変換元の画像を、着目画像に類似する画像として抽出する。
【００１３】
［実施形態］
図１は、実施形態に係るデータ抽出装置１００の構成および使用環境の一例を示す図である。データ抽出システム１には、例えば、データ抽出装置１００と、一以上の端末装置２００と、サービスサーバ３００とが含まれる。
【００１４】
これらの装置等は、ネットワークＮＷを介して互いに通信する。ネットワークＮＷは、例えば、ＷＡＮ（Wide Area Network）やＬＡＮ（Local Area Network）、インターネット、専用回線、無線基地局、プロバイダなどを含む。
【００１５】
端末装置２００は、例えば、スマートフォンなどの携帯電話、タブレット端末、各種パーソナルコンピュータなどの、入力装置、表示装置、通信装置、記憶装置、および演算装置を備える端末装置である。通信装置は、ＮＩＣ（Network Interface Card）などのネットワークカード、無線通信モジュールなどを含む。端末装置２００では、ウェブブラウザやアプリケーションプログラムなどのＵＡ（User Agent）が起動し、ユーザの入力に応じたリクエストを端末装置２００に送信する。また、ＵＡが起動された端末装置２００は、サービスサーバ３００から取得した情報に基づいて、表示装置に各種画像を表示させる。
【００１６】
サービスサーバ３００は、例えば、ＵＡとして起動されたウェブブラウザからのリクエストに応じてウェブページを端末装置２００に提供するウェブサーバである。ウェブページは、例えば、インターネット上において商品を販売するショッピングサイトやオークションサイト、フリーマーケットサイト等の電子商取引に関するウェブサイトを構成する。また、サービスサーバ３００は、ＵＡとして起動されたアプリケーションからのリクエストに応じてコンテンツを端末装置２００に提供することで、ウェブサーバと同様のサービスを提供するアプリケーションサーバであってもよい。
【００１７】
端末装置２００のユーザは、サービスサーバ３００によって提供されるウェブページを用いて、商品またはサービスの販売や購入等を行う。サービスサーバ３００によって提供されるウェブページを用いて商品の販売を行う場合、ユーザ（出品者）は、例えば、販売する商品に関する情報と、当該商品を示す画像とをネットワークＮＷを介してサービスサーバ３００に送信する。
【００１８】
サービスサーバ３００は、端末装置２００によって送信された商品に関する情報と、当該商品を示す画像とを対応付けて、データベース３１０に保存する。サービスサーバ３００は、データベース３１０に保存された情報に基づいて、ショッピングサイトやオークションサイト、フリーマーケットサイト等のウェブサイトを構成するウェブページを生成する。なお、データベース３１０を格納する記憶装置は、サービスサーバ３００に付随するものであってもよく、サービスサーバ３００と別体であり、サービスサーバ３００とネットワークＮＷによって通信可能な記憶装置であってもよい。
【００１９】
ウェブサイトにおいて、商品の紹介画面には販促写真などの画像が提示される。出品者の立場では、他の出品者が出品している商品の画像と同じまたは類似する画像を提示したくない。また、ウェブサイトの運営者の立場でも、販売促進やウェブサイトの魅力維持の観点から、種々の出品者が同じ画像を使用して出品することは避けたい。例えば、類似画像の重複選択を避ければ、そのような事態も回避できため、類似画像を抽出するニーズは高い。しかながら、データベース３１０に保存されている画像を１つ１つ確認し、類似する画像を削除する処理には、膨大な手間が生じる。データ抽出装置１００は、画像の集合の中から、類似した画像を抽出する負荷を低減する処理を行う。
【００２０】
［データ抽出装置１００の構成について］
データ抽出装置１００は、例えば、通信部１１０と、制御部１２０と、記憶部１３０とを備える。通信部１１０は、ＮＩＣなどのネットワークカード、無線通信モジュールなどを含む。
【００２１】
制御部１２０は、例えば、取得部１２２と、ハッシュ算出部１２４と、抽出部１２６と、出力部１２８とを備える。制御部１２０は、例えば、ＣＰＵ等のハードウェアプロセッサが、記憶部１３０に記憶されたプログラムを実行することにより実現される。また、これらの機能部は、ＬＳＩ（Large Scale Integration）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field-Programmable Gate Array）、ＧＰＵ（Graphics Processing Unit）等のハードウェア（回路部；circuitry）によって実現されてもよいし、ソフトウェアとハードウェアの協働によって実現されてもよい。また、上記のプログラムは、予め記憶部１３０に格納されていてもよいし、ＤＶＤやＣＤ−ＲＯＭなどの着脱可能な記憶媒体に格納されており、記憶媒体がデータ抽出装置１００のドライブ装置に装着されることで記憶部１３０にインストールされてもよい。
【００２２】
記憶部１３０は、例えば、ＲＯＭ（Read Only Memory）、フラッシュメモリ、ＳＤカード、ＲＡＭ（Random Access Memory）等によって実現される。記憶部１３０には、例えば、空間インデックス情報１３２が記憶されている。空間インデックス情報１３２の詳細については、後述する。
【００２３】
取得部１２２は、通信部１１０を介して、類似する画像を抽出する対象の画像（着目画像）を取得する。着目画像は、例えば、直近の所定期間（例えば、数日程度）に新たにデータベース３１０に追加された一以上の画像である。
【００２４】
ハッシュ算出部１２４は、取得部１２２によって取得された着目画像に基づいて、着目画像のｐＨａｓｈを算出する。ｐＨａｓｈは、「距離を定義することが可能であり且つ距離の公理を満たす符号」の一例である。
【００２５】
図２は、ハッシュ算出部１２４によるｐＨａｓｈの算出手法を概念的に示す図である。図２に示す一例において、ハッシュ算出部１２４は、取得部１２２によって取得されたスマートフォンを示す画像を、所定の大きさの画像（図示する加工画像ｐｐ１）に縮小している。所定の大きさとは、例えば、縦が８×ｎ画素であり、横が９×ｍ画素の画像である。ｎと、ｍとは、それぞれ自然数である。縮小の手法に関しては種々の手法が知られており、説明を省略する。次に、ハッシュ算出部１２４は、加工画像ｐｐ１を、グレースケールの画像（図示する加工画像ｐｐ２）に加工する。
【００２６】
次に、ハッシュ算出部１２４は、加工画像ｐｐ２を７２個（つまり、縦８分割、横９分割）の領域に分割し、各領域を離散コサイン変換(Discrete Cosine Transform)することにより、各領域の疎密度合いを周波数で表した値を各領域（画素）に対応付けた画像（図示する加工画像ｐｐ３）に加工する。次に、ハッシュ算出部１２４は、算出された各領域の周波数に基づいて、着目領域の周波数と、着目領域の右側に隣接する領域の周波数を比較し、比較結果に基づいて「０」、又は「１」を着目領域に対応付ける処理を、７２個の領域毎に行う。
【００２７】
次に、ハッシュ算出部１２４は、着目領域の周波数が、着目領域の右側に隣接する領域の周波数よりも高い場合（つまり、着目領域の方が画素の変化が大きい領域である場合）、比較対象の領域に「１」（黒色）を付し、その逆である場合（つまり、着目領域の方が画素の変化が小さい領域である場合）、比較対象の領域に「０」（白色）を付した画像（図示する加工画像ｐｐ４）を生成する。そして、ハッシュ算出部１２４は、加工画像ｐｐ４のうち、最も左側に位置する８つの領域を除いた６４個（つまり、縦８個、横８個）の領域の左上の領域から、ビッグエンディアンの順序で、「０」または「１」のデータが並べられた６４［ｂｉｔ］のデータをｐＨａｓｈとして算出する。
【００２８】
なお、ハッシュ算出部１２４は、ｐＨａｓｈに代えて、ｄＨａｓｈ（difference Hashing）値を算出してもよい。ｄＨａｓｈ値は、「距離を定義することが可能であり且つ距離の公理を満たす符号」の他の一例である。この他にも、上記の性質を有するものであれば、如何なる符号を生成してもよい。
【００２９】
図１に戻り、抽出部１２６は、ハッシュ算出部１２４によって算出された着目画像のｐＨａｓｈと、空間インデックス情報１３２とに基づいて、着目画像と類似する画像の集合（以下、類似画像グループ）を抽出する。
【００３０】
空間インデックス情報１３２は、例えば、ｐＨａｓｈの位置が照合可能な下位階層のデータ構造と、これに対して上位階層に展開されるデータ構造とを含む階層構造のデータ構造である。下位階層のデータ構造は、例えば、ｐＨａｓｈをノードとして有し、ハミング距離などの距離が近い順に第ｋ位までのノードを結んだ近似ｋ最近傍グラフＧ（Approximate k-Nearest Neighbor Graph；ANNG）で表現される。ｋの値（以下、ｋ値）は、自然数であり、所定の値（例えば、３）が予め定められる。上位階層に展開されるデータ構造は、下位階層のデータ構造におけるノードの各近傍集合をリーフとして、ノードラベルが上位階層に展開される木構造型インデックス（例えば、ｄｖｐ−Ｔｒｅｅ（dynamic vantage point Tree）である。
【００３１】
［近似ｋ最近傍グラフＧについて］
一般に、ユーグリッド空間において、グラフが以下の条件１を満たす場合、エッジで結合された近傍ノードを検索する（局所検索する）ことによって最近傍検索が可能であるとされている。
【００３２】
条件１：
グラフＺのノード（以下、ノードＹ）と、グラフＺにおけるノードＹの近傍ノードの集合（以下、集合Ｗ（Ｚ，Ｙ））に属する任意のノードＸと、検索対象のノード（以下、
ノードＶ）との間において、「ノードＶとノードＹとの間の距離」＜「ノードＶとノードＸとの間の距離」が成り立つならば、グラフＺに属する任意のノードＸに対して「ノードＶとノードＹとの間の距離」＜「ノードＶとノードＸとの間の距離」が成り立つ。
【００３３】
ここで、ｐＨａｓｈは、算出方法の特性上、サイズの違い画像や色調が加工された画像等、全く同一の画像ではない場合であっても、同一の値になる場合がある。このため、ｐＨａｓｈをノードとするグラフは、条件１が成立しない。したがって、ｐＨａｓｈをノードとするグラフであり、ｋ最近傍グラフと同様の生成方法によって生成されたグラフは、ｋ最近傍グラフに近似するグラフ（つまり、近似ｋ最近傍グラフＧ）である。近似ｋ最近傍グラフＧの生成処理と、近似ｋ最近傍グラフＧに対応付けられたｄｖｐ−Ｔｒｅｅの生成処理とについては、後述する。
【００３４】
抽出部１２６は、例えば、ハッシュ算出部１２４によって算出されたｐＨａｓｈに基づいて、着目画像として取得部１２２によって取得された複数の画像の中から、当該複数の着目画像同士で類似する画像を、類似画像グループとして抽出する（以下、抽出態様（１））。抽出部１２６が抽出態様（１）によって類似画像グループを抽出する場合に用いられる空間インデックス情報１３２は、例えば、新たにデータベース３１０に追加された複数の着目画像に基づいて生成されたものである。抽出部１２６は、生成された空間インデックスの同じリーフに追加されたノードの画像を類似画像として抽出する。抽出態様（１）において、着目画像は、「入力データ」、及び「着目データ」の一例である。
【００３５】
抽出部１２６は、例えば、ハッシュ算出部１２４によって算出されたｐＨａｓｈに基づいて、データベース３１０に追加されている画像の中から、着目画像として取得部１２２によって取得された画像と類似する画像を、類似画像グループとして抽出してもよい（以下、抽出態様（２））。抽出部１２６が抽出態様（２）によって類似画像グループを抽出する場合に用いられる空間インデックス情報１３２は、例えば、既にデータベース３１０に追加（後述）されている画像に基づいて生成されたものである。抽出部１２６は、生成された空間インデックスを用いて着目画像の画像の類似画像グループを検索する。抽出部１２６による空間インデックスを用いた類似画像グループの検索処理については、後述する。抽出態様（２）において、データベース３１０に追加されている画像は、「入力データ」の一例であり、着目画像は、「着目データ」の一例である。
【００３６】
出力部１２８は、例えば、ネットワークＮＷを介して、類似画像グループに含まれる画像を、サービスサーバ３００によって提供されるウェブページの管理者が使用する端末装置（不図示）に送信する。ウェブページの管理者は、データ抽出装置１００によって出力された類似画像グループを確認し、着目画像の画像に含まれる重複画像を確認（削除）することができ、データベース３１０に重複画像が登録されることを抑制することができる。
【００３７】
以下、ｐＨａｓｈをノードとする近似ｋ最近傍グラフＧの生成処理と、生成された近似ｋ最近傍グラフＧによって示される近傍集合（つまり、類似画像グループに含まれる画像のｐＨａｓｈの集合）をリーフとする空間インデックスの生成処理と、生成されたｄｖｐ−Ｔｒｅｅによって類似画像グループを検索する検索処理との詳細について説明する。
【００３８】
［ｐＨａｓｈをノードとする近似ｋ最近傍グラフＧの生成処理について］
図３は、近似ｋ最近傍グラフＧの生成処理の流れの一例を示すフローチャートである。図３に示される処理は、データ抽出装置１００によって行われてもよく、サービスサーバ３００によって行われてもよく、他の装置によって行われてもよい。以下では、図３に示される処理を、データ抽出装置１００の制御部１２０が備える空間インデックス生成部（不図示）が実行し、生成した空間インデックス情報１３２を記憶部１３０に記憶させるものとする。
【００３９】
なお、以降の説明において、ｐＨａｓｈに対応するノードであり、近似ｋ最近傍グラフＧに順次追加されるノードを追加ノードｑと称し、追加ノードｑの集合を追加ノード集合Ｑと称す。追加ノードｑは、抽出態様（１）の場合、着目画像のｐＨａｓｈであり、追加ノード集合Ｑは、複数の着目画像のそれぞれに対応するｐＨａｓｈに対応するノードの集合である。また、追加ノードｑは、抽出態様（２）の場合、既にデータベース３１０に追加されている画像のｐＨａｓｈであり、追加ノード集合Ｑは、既にデータベース３１０に追加されている画像のそれぞれに対応するｐＨａｓｈに対応するノードの集合である。また、追加ノードｑには、追加ノードｑの元となる着目画像、又は既にデータベース３１０に追加されている画像を識別可能な情報（以下、ノードＩＤ）が対応付けられる。
【００４０】
まず、空間インデックス生成部は、追加ノード集合Ｑに属する追加ノードｑの中から、任意の追加ノードｑを選択する（ステップＳ１００）。次に、空間インデックス生成部は、近似ｋ最近傍グラフＧが空集合であるか否かを判定する（ステップＳ１０２）。近似ｋ最近傍グラフＧが空集合であると判定した場合、空間インデックス生成部は、追加ノードｑを近似ｋ最近傍グラフＧのノードとして追加し（ステップＳ１０４）、処理をステップＳ１１６に進める。ここで、近似ｋ最近傍グラフＧが空集合である場合は、追加ノード集合Ｑに属する追加ノードｑに対して、１つも処理が行われていない（つまり、初期状態の）場合である。
【００４１】
近似ｋ最近傍グラフＧが空集合ではないと判定した場合、空間インデックス生成部は、近似ｋ最近傍グラフＧと、追加ノードｑと、ｋ値とに基づいて、近似ｋ最近傍検索処理を実行する（ステップＳ１０６）。近似ｋ最近傍検索処理の詳細については、後述する。空間インデックス生成部は、近似ｋ最近傍検索処理によって、（Ａ）近似ｋ最近傍グラフＧに属するノードの中から、追加ノードｑからハミング距離が近い順に第ｋ位までのノードを検索した検索結果の集合（以下、結果集合Ｒ）と、（Ｂ）当該結果集合Ｒに属するノードの中から、最も遠いノードまでの距離（以下、検索半径ｒ）と、（Ｃ）結果集合Ｒに属するノードのノードＩＤとを取得する。
【００４２】
次に、空間インデックス生成部は、近似ｋ最近傍グラフＧに追加ノードｑを追加したグラフを近似ｋ最近傍グラフＧとして再定義（更新）する（ステップＳ１０８）。次に、空間インデックス生成部は、結果集合Ｒに属するノードを、追加ノードｑの近傍集合（以下、追加ノード近傍集合Ｎｑ）に属するノードとして定義する（ステップＳ１１０）。次に、空間インデックス生成部は、結果集合Ｒに属するノード（結果ノードｐ）の中から、ある結果ノードｐを選択し、当該結果ノードｐの近傍ノード集合（以下、結果ノード近傍集合Ｎｐ）に追加ノードｑを追加した集合を、結果ノード近傍集合Ｎｐとして再定義（更新）する（ステップＳ１１２）。このステップＳ１０８、及びステップＳ１１２の処理により、近似ｋ最近傍グラフＧうち、近傍に存在するノード同士は、無向エッジにより互いに対応付けられる。
【００４３】
次に、空間インデックス生成部は、結果集合Ｒに属するすべての結果ノードｐに対してステップＳ１１２の処理が行われたか否かを判定する（ステップＳ１１４）。結果集合Ｒに属するすべての結果ノードｐに対してステップＳ１１２の処理が行われていないと判定される場合、空間インデックス生成部は、結果集合Ｒに属する結果ノードｐの中から、結果ノード近傍集合Ｎｐに追加ノードｑが追加されていない結果ノードｐを選択し（ステップＳ１１５）、処理をステップＳ１１２に進める。ステップＳ１１２〜Ｓ１１５の処理を繰り返すことにより、結果ノード近傍集合Ｎｐは、１ノードずつ追加ノードｑを追加することができる。次に、空間インデックス生成部は、結果集合Ｒに属するすべての結果ノードｐに対してステップＳ１１２の処理が行われた場合、処理をステップＳ１１６に進める。
【００４４】
空間インデックス生成部は、追加ノード集合Ｑに属するすべての追加ノードｑに対して、ステップＳ１０２〜Ｓ１１５の処理が行われたか否かを判定する（ステップＳ１１６）。空間インデックス生成部は、追加ノード集合Ｑに属するすべての追加ノードｑに対してステップＳ１０２〜Ｓ１１５の処理が行われていない場合、追加ノード集合Ｑの中から、まだ結果集合Ｒが取得されていない追加ノードｑを選択し（ステップＳ１１８）、処理をステップＳ１０２に進める。空間インデックス生成部は、追加ノード集合Ｑに属するすべての追加ノードｑに対して、ステップＳ１０２〜Ｓ１１５の処理が行われた場合、処理を終了する。
【００４５】
上述した処理により、複数の着目画像の画像、或いは既にデータベース３１０に登録された画像を、近似ｋ最近傍グラフＧとして示し、ある画像を追加ノードｑとする追加ノード近傍集合Ｎｑによって当該画像の類似画像グループをクラスタリングすることができる。
【００４６】
［近似ｋ最近傍検索処理について］
図４は、近似ｋ最近傍検索処理の流れの一例を示すフローチャートである。図４に示されるフローチャートは、図３に示されるステップＳ１０６の処理を詳細に示すフローチャートである。まず、空間インデックス生成部は、近似ｋ最近傍グラフＧに属する複数のノードの中から、追加ノードｑの追加ノード近傍集合Ｎｑの検索起点となる追加ノードｑ（以下、検索起点ノードｓ）をランダムに１つ決定する（ステップＳ２０２）。次に、空間インデックス生成部は、近似ｋ最近傍グラフＧと、追加ノードｑと、検索起点ノードｓとに基づいて、最近傍ノード特定処理を実行する（ステップＳ２０４）。最近傍ノード特定処理の詳細については、後述する。空間インデックス生成部は、最近傍ノード特定処理によって、近似ｋ最近傍グラフＧに属する複数のノードの中から、追加ノードｑから最も距離が近いノードである最近傍ノードｑ＊を特定する。
【００４７】
次に、空間インデックス生成部は、追加ノードｑを中心とする超球の検索半径ｒの初期値を、無限大に設定する（ステップＳ２０６）。超球とは、中心点から所定の距離（この一例では、検索半径ｒ）にあるｎ次元ユーグリット空間における点の集合である。上述したように、ｐＨａｓｈは、６４［ｂｉｔ］の情報であるため、追加ノードｑを中心とする超球は、６４次元ユーグリット空間における範囲である。追加ノードｑを中心とする検索半径ｒの超球によって示される範囲は、追加ノード近傍集合Ｎｑの検索を開始する範囲である。
【００４８】
次に、空間インデックス生成部は、結果集合Ｒと、結果集合Ｒの検索に用いられる検索用集合Ｃとの初期状態を空集合に設定する（ステップＳ２０８）。次に、空間インデックス生成部は、近似ｋ最近傍グラフＧと、追加ノードｑと、最近傍ノードｑ＊と、検索半径ｒと、ｋ値と、検索用集合Ｃとに基づいて、追加ノードｑの近傍検索処理を行い、結果集合Ｒを追加ノード近傍集合Ｎｑとして取得する（ステップＳ２１０）。追加ノードｑの近傍検索処理の詳細については、後述する。
【００４９】
上述した処理により、空間インデックス生成部は、（Ａ）近似ｋ最近傍グラフＧに属するノードのうち追加ノードｑからハミング距離が近い順に第ｋ位までのノードの集合（つまり、追加ノード近傍集合Ｎｑ）と、（Ｂ）追加ノード近傍集合Ｎｑに属するノードのうち、中心ノードから最遠ノードまでの距離（つまり、検索半径ｒ）と、（Ｃ）追加ノード近傍集合Ｎｑに属するそれぞれのノードのノードＩＤとを、追加ノードｑ毎に取得することができる。
【００５０】
［最近傍ノードｑ＊の探索方法について］
図５は、最近傍ノード特定処理の流れの一例を示すフローチャートである。図５に示されるフローチャートは、図４に示されるステップＳ２０４の処理を詳細に示すフローチャートである。まず、空間インデックス生成部は、近似ｋ最近傍グラフＧに属するノードの中から、検索起点ノードｓの近傍のノードの集合である検索起点ノード近傍集合Ｎｓを抽出する（ステップＳ３０２）。次に、空間インデックス生成部は、検索起点ノード近傍集合Ｎｓに属するノードの中から、検索起点ノードｓを除くノードであり、検索起点ノードｓとの距離が最も短いノードである検索起点最近傍ノードｓ＊を特定する（ステップＳ３０４）。
【００５１】
次に、空間インデックス生成部は、検索起点最近傍ノードｓ＊と追加ノードｑとの間の距離が、検索起点ノードｓと追加ノードｑとの間の距離よりも短いか否かを判定する（ステップＳ３０６）。空間インデックス生成部は、検索起点最近傍ノードｓ＊と追加ノードｑとの間の距離が、検索起点ノードｓと追加ノードｑとの間の距離よりも短い場合、検索起点最近傍ノードｓ＊を検索起点ノードｓとして再定義（更新）し（ステップＳ３０８）、処理をステップＳ３０２に進める。ステップＳ３０２〜Ｓ３０８の処理を繰り返し実行することにより、追加ノードｑまでの距離が短い検索起点ノードｓを検索起点最近傍ノードｓ＊に更新し、より追加ノードｑに近い検索起点最近傍ノードｓ＊を抽出することができる。
【００５２】
次に、空間インデックス生成部は、検索起点最近傍ノードｓ＊と追加ノードｑとの間の距離が、検索起点ノードｓと追加ノードｑとの間の距離よりも短くない場合、現在の検索起点ノードｓが追加ノードｑの最近傍ノード（つまり、最近傍ノードｑ＊）であると特定する（ステップＳ３１０）。
【００５３】
上述した処理により、空間インデックス生成部は、追加ノードｑの最近傍ノードを取得することができる。
【００５４】
［追加ノードｑの近傍検索処理について］
図６は、追加ノードｑの近傍探索処理の一例を示すフローチャートである。図６に示されるフローチャートは、図４に示されるステップＳ２１０の処理を詳細に示すフローチャートである。まず、空間インデックス生成部は、近似ｋ最近傍グラフＧに属するノードの中から、最近傍ノードｑ＊の近傍ノードの集合（以下、最近傍ノード近傍集合Ｎｑ＊）に属する任意のノード（以下、近傍ノードｑｃ）を選択する（ステップＳ４０２）。
【００５５】
ここで、近傍ノードｑｃは、抽出態様（１）においては、追加ノードｑ（のｐＨａｓｈ）の元データである着目画像以外の、着目画像の画像のｐＨａｓｈに対応するノードであり、抽出態様（２）においては、データベース３１０に追加されている画像のｐＨａｓｈに対応するノードである。
【００５６】
次に、空間インデックス生成部は、検索用集合Ｃに近傍ノードｑｃが属しているか否かを判定する（ステップＳ４０４）。空間インデックス生成部は、検索用集合Ｃに近傍ノードｑｃが属していない場合、処理をステップＳ４０８に進める。空間インデックス生成部は、検索用集合Ｃに近傍ノードｑｃが属していない場合、検索用集合Ｃに近傍ノードｑｃを追加した集合を、検索用集合Ｃとして再定義（更新）する（ステップＳ４０６）。
【００５７】
次に、空間インデックス生成部は、近傍ノードｑｃと追加ノードｑとの間の距離が、検索半径ｒ以下であるか否かを判定する（ステップＳ４０８）。空間インデックス生成部は、近傍ノードｑｃと追加ノードｑとの間の距離が、検索半径ｒ以下ではない場合、処理をステップＳ４１６に進める。空間インデックス生成部は、近傍ノードｑｃと追加ノードｑとの間の距離が、検索半径ｒ以下である場合、結果集合Ｒに近傍ノードｑｃを追加した集合を、結果集合Ｒとして再定義（更新）する（ステップＳ４１０）。
【００５８】
次に、空間インデックス生成部は、結果集合Ｒに属するノードの数が、ｋ値より多いか否かを判定する（ステップＳ４１２）。空間インデックス生成部は、結果集合Ｒに属するノードの数が、ｋ値より多くない場合、処理をステップＳ４１６に進める。空間インデックス生成部は、結果集合Ｒに属するノードの数が、ｋ値より多い場合、結果集合Ｒに属するノードのうち、追加ノードｑから最遠ノードを結果集合Ｒから除いた集合を結果集合Ｒとして再定義（更新）する（ステップＳ４１４）。
【００５９】
次に、空間インデックス生成部は、結果集合Ｒに属するノードの数が、ｋ値と一致するか否かを判定する（ステップＳ４１６）。空間インデックス生成部は、結果集合Ｒに属するノードの数が、ｋ値と一致しない場合、処理をステップＳ４２０に進める。空間インデックス生成部は、結果集合Ｒに属するノードの数が、ｋ値と一致する場合、結果集合Ｒに属するノードのうち、追加ノードｑから最も遠いノードまでの距離を検索半径ｒとして再定義（更新）する（ステップＳ４１７）。次に、空間インデックス生成部は、再定義された検索半径ｒに基づいて、探索半径ｒｓを算出する（ステップＳ４１８）。
【００６０】
ここで、グラフが上述した条件１を満たす場合には、検索半径ｒの周辺を検索すれば、追加ノードｑの近傍ノードを見つけることが可能であるが、上述したように、近似ｋ最近傍グラフＧは、条件１を満足しないため、検索半径ｒとする範囲内に近傍ノードが存在しない場合がある。このため、検索半径ｒを有する検索範囲より広い範囲を探索することが好ましい。したがって、空間インデックス生成部は、検索半径ｒに基づいて、検索半径ｒを有する検索範囲より広い範囲ある探索範囲（超球）の探索半径ｒｓを式（１）のように決定する。
【００６１】
ｒｓ＝（１＋ε）ｒ…（１）
ε：探索係数
【００６２】
次に、空間インデックス生成部は、追加ノードｑと、近傍ノードｑｃとの間の距離が、探索半径ｒｓ以下であるか否かを判定する（ステップＳ４２０）。空間インデックス生成部は、追加ノードｑと近傍ノードｑｃとの間の距離が、探索半径ｒｓ以下である場合、近傍ノードｑｃを最近傍ノードｑ＊として定義し（ステップＳ４２２）、処理をステップＳ４０２に進める。空間インデックス生成部は、追加ノードｑと、近傍ノードｑｃとの間の距離が、探索半径ｒｓ以下ではなくなるまでの間、ステップＳ４０２〜Ｓ４２２までの処理を繰り返すことにより、追加ノードｑにより近いノードの集合の第ｋ位までを結果集合Ｒとして更新する。
【００６３】
次に、空間インデックス生成部は、追加ノードｑと近傍ノードｑｃとの間の距離が、探索半径ｒｓ以下ではない場合、最近傍ノード近傍集合Ｎｑ＊に属するすべての近傍ノードｑｃに対してステップＳ４０２〜ステップＳ４２０までの処理が行われたか否かを判定する（ステップＳ４２４）。空間インデックス生成部は、最近傍ノード近傍集合Ｎｑ＊に属するすべての近傍ノードｑｃに対してステップＳ４０２〜ステップＳ４２２までの処理が行われていない場合、最近傍ノード近傍集合Ｎｑ＊の中から、まだ処理が行われていない近傍ノードｑｃを選択し（ステップＳ４２６）、処理をステップＳ４０２に進める。
【００６４】
上述した処理により、空間インデックス生成部は、（Ａ）追加ノード近傍集合Ｎｑと、（Ｂ）検索半径ｒと、（Ｃ）追加ノード近傍集合Ｎｑに属するノードののノードＩＤとを追加ノードｑ毎に取得することができる。
【００６５】
［生成された近似ｋ最近傍グラフＧについて］
図７は、近似ｋ最近傍グラフＧを模式的に示す図である。図７に示される一例において、着目画像は、全部で１２［個］であり、それぞれのノード（図示する追加ノードｑ１〜ｑ１２）は、無向エッジにより互いに対応付けられる。図７に示される通り、近似ｋ最近傍グラフＧでは、ステップＳ１０８、及びステップＳ１１２の処理により、１ノードずつ無向エッジにより順次対応付けられるため、ｋ値を定めた場合であっても、ｋ本以上のエッジがノードに対応付けられる場合がある。このため、近似ｋ最近傍グラフＧは、ｋ最近傍グラフの場合とグラフの形状は異なるが、各ノードの対応付けが十分に行われているため、条件１を満たさないことに伴う検索漏れを許容するインデックスとして十分な検索制度を実現することができる。
【００６６】
［ｄｖｐ−Ｔｒｅｅの生成処理について］
空間インデックス生成部は、上述した処理により生成された近似ｋ最近傍グラフＧにｄｖｐ−Ｔｒｅｅを対応付けた空間インデックスを示す空間インデックス情報１３２を生成する。ｄｖｐ−Ｔｒｅｅは、木構造型インデックスの最上位のノードであるルートノードラベルｎｄＲと、最下位のリーフノードラベルｎｄＬとルートノードラベルｎｄＲとリーフノードラベルｎｄＬとの間に位置するインターナルノードラベルｎｄＩとの、３つのノードラベルｎｄから構成される。リーフノードラベルｎｄＬには、少なくとも１つ以上、且つ最大でｋ［個］の追加ノードｑが対応付けられる。
【００６７】
図８は、ｄｖｐ−Ｔｒｅｅの生成処理の一例を示すフローチャートである。図８は、図３のフローチャートが実行された後に実行される。まず、空間インデックス生成部は、近似ｋ最近傍グラフＧのノードの中から、ｄｖｐ−Ｔｒｅｅの１つ目のノードとする追加ノード近傍集合Ｎｑをランダムに決定する（ステップＳ５０２）。ここで、ｄｖｐ−Ｔｒｅｅの１つ目のノードラベルｎｄは、ルートノードラベルｎｄＲであるが、他のノードラベルｎｄが存在しないため、リーフノードラベルｎｄＬでもある。次に、空間インデックス生成部は、近似ｋ最近傍グラフＧに属するノードの中から、ｄｖｐ−Ｔｒｅｅに挿入する追加ノードｑであり、ステップＳ５０２において決定された追加ノード近傍集合Ｎｑに属さない追加ノードｑ（以下、挿入追加ノードｑｉ）を選択する（ステップＳ５０４）。次に、空間インデックス生成部は、ｄｖｐ−ＴｒｅｅのカレントノードラベルＮの初期値を、ルートノードラベルｎｄＲに設定する（ステップＳ５０６）。カレントノードラベルＮは、ｄｖｐ−Ｔｒｅｅにおける現在のノードラベルｎｄである。
【００６８】
次に、空間インデックス生成部は、カレントノードラベルＮがリーフノードラベルｎｄＬであるか否かを判定する（ステップＳ５０８）。空間インデックス生成部は、カレントノードラベルＮがリーフノードラベルｎｄＬである場合、処理をステップＳ５１６に進める。
【００６９】
空間インデックス生成部は、カレントノードラベルＮがリーフノードラベルｎｄＬではない場合、カレントノードラベルＮの中心の追加ノードｑと、挿入追加ノードｑｉとの間の距離が、カレントノードラベルＮの検索半径ｒ以下であるか否かを判定する（ステップＳ５１０）。空間インデックス生成部は、カレントノードラベルＮの中心の追加ノードｑと、挿入追加ノードｑｉとの間の距離が検索半径ｒ以下である場合、カレントノードラベルＮの内部のノードラベルｎｄをカレントノードラベルＮとして再定義（更新）する（ステップＳ５１２）。空間インデックス生成部は、カレントノードラベルＮの中心の追加ノードｑと、挿入追加ノードｑｉとの間の距離が検索半径ｒより長い場合、カレントノードラベルＮの外部のノードラベルｎｄをカレントノードラベルＮとして再定義（更新）する（ステップＳ５１４）。空間インデックス生成部は、ステップＳ５０８〜Ｓ４１４の処理を繰り返すことにより、挿入追加ノードｑｉとハミング距離が近い追加ノードｑが属するノードラベルｎｄを特定することができる。
【００７０】
次に、空間インデックス生成部は、カレントノードラベルＮであるリーフノードラベルｎｄＬに空きがあり（つまり、リーフノードラベルｎｄＬに登録されている追加ノードｑの数がｋ［個］未満であり）、挿入追加ノードｑｉを追加することが可能であるか否かを判定する（ステップＳ５１６）。空間インデックス生成部は、カレントノードラベルＮであるリーフノードラベルｎｄＬに空きがあり、追加ノードｑを追加することができる場合、カレントノードラベルＮであるリーフノードラベルｎｄＬに追加ノードｑを追加する（ステップＳ５１８）。空間インデックス生成部は、カレントノードラベルＮであるリーフノードラベルｎｄＬに空きがなく、追加ノードｑを追加することができない場合、カレントノードラベルＮであるリーフノードラベルｎｄＬを分割する処理を行う（ステップＳ５２０）。
【００７１】
リーフノードラベルｎｄＬは、種々の方法によって分割することが可能であるが、空間インデックス生成部は、例えば、以下の方法によってリーフノードラベルｎｄＬを分割する。図９は、リーフノードラベルｎｄＬの分割処理の一例を示すフローチャートである。図９に示されるフローチャートは、図８に示されるステップＳ５２０の処理を詳細に示すフローチャートである。空間インデックス生成部は、カレントノードラベルＮであるリーフノードラベルｎｄＬに属する追加ノードｑの中から、任意の追加ノードｑを選択する（ステップＳ６０２）。リーフノードラベルｎｄＬから分割されるノードラベルｎｄ（以下、被分割ノードラベルｎｄｅ）の中心の追加ノードｑとして定義する（ステップＳ６０４）。
【００７２】
次に、空間インデックス生成部は、被分割ノードラベルｎｄｅの中心の追加ノードｑからカレントノードラベルＮであるリーフノードラベルｎｄＬに属する追加ノードｑまでの距離をそれぞれ算出する（ステップＳ６０６）。次に、空間インデックス生成部は、算出された距離の中から、リーフノードラベルｎｄＬの中心の追加ノードｑと、被分割ノードラベルｎｄｅの中心の追加ノードｑとの中間に近い距離に位置する追加ノードｑ（以下、分割点追加ノードｑｓ）を特定する（ステップＳ６０８）。
【００７３】
次に、空間インデックス生成部は、リーフノードラベルｎｄＬを、リーフノードラベルｎｄＬの中心の追加ノードｑから分割点追加ノードｑｓまでの長さの検索半径ｒを有する分割球のリーフノードラベルｎｄＬと、被分割ノードラベルｎｄｅの中心の追加ノードｑから分割点追加ノードｑｓまでの長さの検索半径ｒを有する分割球の被分割ノードラベルｎｄｅとに分割する（ステップＳ６１０）。次に、空間インデックス生成部は、分割されたリーフノードラベルｎｄＬと、被分割ノードラベルｎｄｅとの各種情報を更新、或いは生成する（ステップＳ６２０）。各種情報は、例えば、リーフノードラベルｎｄＬ、及び被分割ノードラベルｎｄｅのノードＩＤ、ノード種別（ルートノードラベルｎｄＲ、インターナルノードラベルｎｄＩ、或いはリーフノードラベルｎｄＬ）、ノードラベルｎｄに属する追加ノードｑのノードＩＤリスト、ノードラベルｎｄの中心の追加ノードｑ、ノードラベルｎｄの検索半径ｒ又は分割球の検索半径ｒ、ノードラベルｎｄの中心の追加ノードｑからノードラベルｎｄに属する各追加ノードｑまでの距離リスト等である。
【００７４】
上述した処理により、空間インデックス生成部は、近似ｋ最近傍グラフＧにｄｖｐ−Ｔｒｅｅを対応付けた空間インデックスを示す空間インデックス情報１３２を生成する。
【００７５】
［空間インデックスについて］
図１０は、分割球によって分割された近似ｋ最近傍グラフＧの一例を示す図である。また、図１１は、近似ｋ最近傍グラフＧに対応付けられたｄｖｐ−Ｔｒｅｅの一例を示す図である。図１０〜１１に示される通り、上述した処理によって図７に示される追加ノードｑ１〜ｑ１２は、５つのリーフノードラベルｎｄＬ（図示するリーフノードラベルｎｄＬ１〜ｎｄＬ５）の分割球に分割される。また、リーフノードラベルｎｄＬ１〜ｎｄＬ５は、３つのインターナルノードラベルｎｄＩ（図示するインターナルノードラベルｎｄＩ１〜ｎｄＩ３）の分割球に分割される。また、インターナルノードラベルｎｄＩ１〜ｎｄＩ３は、ルートノードラベルｎｄＲに対応付けられる。
【００７６】
［空間インデックスを用いた類似画像グループの検索処理について］
抽出部１２６は、上述した処理によって生成された空間インデックスを示す空間インデックス情報１３２に基づいて、類似画像グループを抽出する。抽出部１２６は、例えば、抽出態様（１）の場合、同一のノードラベルｎｄに分割された追加ノードｑの元データである着目画像の画像を類似画像として抽出する。また、抽出部１２６は、例えば、抽出態様（２）の場合、上述した処理によって生成された空間インデックスを用いて、着目画像の類似画像グループであるノードラベルｎｄを検索し、特定する。
【００７７】
図１２は、空間インデックスを用いた類似画像グループの検索処理の一例を示すフローチャートである。図１２に示されるフローチャートは、所定の時間間隔によって繰り返し実行される、或いは、ウェブページの管理者の指示によって実行される。まず、抽出部１２６は、空間インデックスのカレントノードラベルＮをルートノードラベルｎｄＲに設定する（ステップＳ７０２）。次に、抽出部１２６は、ハッシュ算出部１２４によって算出されたｐＨａｓｈ（以下、検索対象ノードｑ＃）を取得する（ステップＳ７０４）。次に、抽出部１２６は、類似画像として特定された追加ノードｑのノードＩＤが追加されるリスト（以下、検索結果リストＬ）を初期化する（ステップＳ７０６）。
【００７８】
次に、抽出部１２６は、カレントノードラベルＮがリーフノードラベルｎｄＬであるか否かを判定する（ステップＳ７０８）。抽出部１２６は、カレントノードラベルＮがリーフノードラベルｎｄＬである場合、処理をステップＳ７１６に進める。抽出部１２６は、カレントノードラベルＮがリーフノードラベルｎｄＬではない場合、カレントノードラベルＮの中心の追加ノードｑと検索対象ノードｑ＃との間の距離が、カレントノードラベルＮの検索半径ｒと検索距離ｒｑとの和によって示される距離以下であるか否かを判定する（ステップＳ７１０）。検索距離ｒｑは、データ抽出装置１００のユーザによって予め定められる値である。
【００７９】
抽出部１２６は、カレントノードラベルＮの中心の追加ノードｑと検索対象ノードｑ＃との間の距離が、カレントノードラベルＮの検索半径ｒと検索距離ｒｑとの和によって示される距離以下である場合、カレントノードラベルＮの内部のノードラベルｎｄをカレントノードラベルＮとして再定義（更新）する（ステップＳ７１２）。抽出部１２６は、カレントノードラベルＮの中心の追加ノードｑと検索対象ノードｑ＃との間の距離が、カレントノードラベルＮの検索半径ｒと検索距離ｒｑとの和によって示される距離より長い場合、カレントノードラベルＮの外部のノードラベルｎｄをカレントノードラベルＮとして再定義（更新）する（ステップＳ７１４）。抽出部１２６は、ステップＳ６０８〜Ｓ６１４の処理を繰り返すことにより、検索対象ノードｑ＃とハミング距離が近い類似画像グループが属するノードラベルｎｄを特定することができる。
【００８０】
次に、抽出部１２６は、カレントノードラベルＮであるリーフノードラベルｎｄＬに属する追加ノードｑの中から、検索対象ノードｑ＃とハミング距離が比較される対象の追加ノードｑ（以下、比較対象ノードｑｐ）を選択する（ステップＳ７１６）。次に、抽出部１２６は、カレントノードラベルＮの中心の追加ノードｑと比較対象ノードｑｐとの間の距離（以下、ノード距離ＣＤ１）と、カレントノードラベルＮの中心の追加ノードｑと検索対象ノードｑ＃との間の距離（以下、ノード距離ＣＤ２）との差の絶対値が、検索距離ｒｑ以下であるか否かを判定する（ステップＳ７１８）。
【００８１】
抽出部１２６は、ノード距離ＣＤ１とノード距離ＣＤ２との差の絶対値が、検索距離ｒｑ以下ではない場合、処理をステップＳ７２４に進める。抽出部１２６は、ノード距離ＣＤ１とノード距離ＣＤ２との差の絶対値が、検索距離ｒｑ以下である場合、比較対象ノードｑｐと検索対象ノードｑ＃との間の距離が、検索距離ｒｑ以下であるか否かを判定する（ステップＳ７２０）。抽出部１２６は、比較対象ノードｑｐと検索対象ノードｑ＃との間の距離が、検索距離ｒｑ以下ではない場合、処理をステップＳ７２４に進める。抽出部１２６は、比較対象ノードｑｐと検索対象ノードｑ＃との間の距離が、検索距離ｒｑ以下である場合、比較対象ノードｑｐのノードＩＤを検索結果リストＬに追加する（ステップＳ７２２）。
【００８２】
次に、抽出部１２６は、カレントノードラベルＮに属するすべての追加ノードｑに対して、ステップＳ７１８〜Ｓ６２２の処理が行われたか否かを判定する（ステップＳ７２４）。抽出部１２６は、カレントノードラベルＮに属するすべての追加ノードｑに対して、ステップＳ７１８〜Ｓ６２２の処理が行われた場合、処理を終了する。カレントノードラベルＮに属するすべての追加ノードｑに対して、ステップＳ７１８〜Ｓ６２２の処理が行われていない場合、カレントノードラベルＮに属する追加ノードｑの中に、まだ処理が行われていない（つまり、比較対象ノードｑｐとして選択されていない）追加ノードｑが存在する場合、当該追加ノードｑを比較対象ノードｑｐとして選択し（ステップＳ７２６）、処理をステップＳ７１８に進める。
【００８３】
上述した処理により、抽出部１２６は、着目画像の類似画像グループのリストとして検索結果リストＬを生成し、類似画像グループを抽出することができる。
【００８４】
［実施形態のまとめ］
以上説明したように、本実施形態のデータ抽出装置１００は、対象データ（この一例では、着目画像）を、距離を定義することが可能であり且つ距離の公理を満たす符号（この一例では、ｐＨａｓｈ）に変換する変換部（ハッシュ算出部１２４）と、ｐＨａｓｈを照合可能な空間インデックス（この一例ででは、近似ｋ最近傍グラフＧに対応付けられたｄｖｐ−Ｔｒｅｅ）を用いて、ｐＨａｓｈに空間的に近い順にインデックスが対応付けられた対象データ（この一例では、類似画像）を抽出する抽出部１２６と、を備え、より効率よく類似データを抽出することができる。
【００８５】
＜空間インデックスを用いた類似画像グループの検索処理の他の例について＞
なお、上述では、抽出部１２６が、抽出態様（１）においては、着目画像と同じリーフノードラベルｎｄＬに属する追加ノードｑに対応する類似画像を抽出する場合について説明したが、これに限られない。ここで、データ抽出装置１００のユーザは、類似画像グループとして所定の数（例えば、１００件）の類似画像を取得したい場合がある。この場合に、リーフノードラベルｎｄＬに、所定の数の追加ノードｑが属していないと、ユーザは、所定の数の類似画像を取得することが困難である場合がある。したがって、抽出部１２６は、リーフノードラベルｎｄＬに所定の数の追加ノードｑが属していない場合、更に上位のノードラベルｎｄに属する追加ノードｑに対応する類似画像を抽出してもよい。また、抽出部１２６は、抽出態様（２）において、所定の数の類似画像が抽出できるまでの間、検索距離ｒｑをより長い値に設定し、ステップＳ７０２〜Ｓ７２６までの処理を繰り返し実行してもよい。
【００８６】
なお、上述では、ウェブページの管理者が、データ抽出装置１００によって出力された類似画像グループと、着目画像の画像とを比較し、着目画像の画像に含まれる重複画像を確認（削除）する場合について説明したが、これに限られず、データ抽出装置１００は、他の用途に用いられてもよい。
【００８７】
以上、本発明を実施するための形態について実施形態を用いて説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【符号の説明】
【００８８】
１…データ抽出システム、１００…データ抽出装置、１１０…通信部、１２０…制御部、１２２…取得部、１２４…ハッシュ算出部、１２６…抽出部、１２８…出力部、１３０…記憶部、１３２…空間インデックス情報、２００…端末装置、３００…サービスサーバ、３１０…データベース、Ｇ…近似ｋ最近傍グラフ、Ｎ…カレントノードラベル、ｎｄ…ノードラベル、ｎｄｅ…被分割ノードラベル、ｎｄＩ、ｎｄＩ１、ｎｄＩ２、ｎｄＩ３…インターナルノードラベル、ｎｄＬ、ｎｄＬ１、ｎｄＬ２、ｎｄＬ３、ｎｄＬ４、ｎｄＬ５…リーフノードラベル、ｎｄＲ…ルートノードラベル、Ｎｐ…結果ノード近傍集合、Ｎｑ…追加ノード近傍集合、Ｎｑ＊…最近傍ノード近傍集合、Ｎｓ…検索起点ノード近傍集合、Ｑ…追加ノード集合、ｑ、ｑ１、ｑ２、ｑ３、ｑ４、ｑ５、ｑ６、ｑ７、ｑ８、ｑ９、ｑ１０、ｑ１１、ｑ１２…追加ノード、ｑｃ…近傍ノード、ｑｉ…挿入追加ノード、ｑｐ…比較対象ノード、ｑｓ…分割点追加ノード、ｑ＊…最近傍ノード、ｑ＃…検索対象ノード、ｒ…検索半径、Ｒ…結果集合、ｒｑ…検索距離、ｒｓ…探索半径、ｓ…検索起点ノード、ｓ＊…検索起点最近傍ノード
【図１】
2019219945.tif 000003
【図２】
2019219945.tif 000004
【図３】
2019219945.tif 000005
【図４】
2019219945.tif 000006
【図５】
2019219945.tif 000007
【図６】
2019219945.tif 000008
【図７】
2019219945.tif 000009
【図８】
2019219945.tif 000010
【図９】
2019219945.tif 000011
【図１０】
2019219945.tif 000012
【図１１】
2019219945.tif 000013
【図１２】
2019219945.tif 000014