説明

情報検索装置、情報検索方法

【課題】様々な時系列データに対して類似検索をすることができる情報検索装置を提供する。
【解決手段】擬似コード列生成部16は複数の実ベクトルそれぞれを複数の数字の組である擬似コードに変換し、それらを構成要素とする擬似コード列を生成する。比較部32は擬似コード列をパターンとして、擬似コード列であるテキストの先頭から順にパターンの構成要素の数と同数のテキストを部分テキストとしつつ、当該部分テキストとパターンとの比較をパターンの最後尾の擬似コードから先頭の擬似コードに向かって順に行う。スキップ関数生成部22は比較途中で結果が不一致となった場合に、現在の部分テキストの先頭から次の部分テキストの先頭までずらす量を出力する関数をスキップ関数として生成する。スキップ関数生成部22は、擬似コードとして取り得る値すべてについてずらす量を計算する。比較部32はスキップ関数に基づいてずらす量を決定する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は情報検索装置および情報検索方法に関する。
【背景技術】
【0002】
近年、ネットワーク上には大規模な情報が蓄積されており、その量は増加の一途をたどるばかりである。それに伴い、こうした情報の中から利用者が必要とする情報を効率よく取り出すための情報検索技術はますますその重要さを増している。テキストストリングに対する全文検索技術は、非常に高速なアルゴリズムとしてよく知られているBoyer−Moore法[1]をはじめとして多くの研究が行われている(非特許文献参照)。
【先行技術文献】
【特許文献】
【0003】
【非特許文献1】D. Gusfield, "Algorithms on Strings, Trees, and Sequence: Computer Science and Computational Biology," Cambridge University Press, 1997.
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかし、Boyer−Moore法はテキストストリングに対する全文検索技術であるため、一般の時系列データ、ベクトルデータに対しては適用することができない。
【0005】
本発明はこうした状況に鑑みてなされたものであり、その目的は、様々な時系列データに対して類似検索をすることができる情報検索装置を提供することにある。
【課題を解決するための手段】
【0006】
本発明のある態様は情報検索装置に関する。この装置は、複数の実ベクトルそれぞれを複数の数字の組である擬似コードに変換し、当該複数の擬似コードを構成要素とする擬似コード列を生成する擬似コード列生成部と、前記擬似コード列をパターンとして、擬似コード列であるテキストの先頭から順に前記パターンの構成要素の数と同数のテキストを部分テキストとしつつ、当該部分テキストと前記パターンとの比較を前記パターンの最後尾の擬似コードから先頭の擬似コードに向かって順に行う比較部と、比較途中で結果が不一致となった場合に、現在の部分テキストの先頭となっているテキストの位置から次の部分テキストの先頭となるテキストの位置までずらす量を、前記部分テキストの最後尾の擬似コードを入力として出力する関数をスキップ関数として生成するスキップ関数生成部とを含む。前記スキップ関数生成部は、擬似コードとして取り得る値すべてについて当該擬似コードが前記パターンの擬似コード列に含まれるか否かを特定し、含まれる場合には前記パターンの擬似コード列との位置関係から前記ずらす量を計算し、含まれない場合には前記パターンの擬似コード列の長さを前記ずらす量としてスキップ関数を生成する。前記比較部は、前記スキップ関数に基づいて現在の部分テキストの先頭から次の部分テキストの先頭までのずらす量を決定する。
【0007】
本発明のさらに別の態様は情報検索方法に関する。この方法は、複数の実ベクトルそれぞれを複数の数字の組である擬似コードに変換し、当該複数の擬似コードを構成要素とする擬似コード列を生成するステップと、前記擬似コード列をパターンとして、擬似コード列であるテキストから前記パターンを検索するに際し、ふたつの擬似コード列の比較は対応する擬似コード同士を比較することで行い、擬似コード同士の比較は疑似コードの構成要素である数字の組を順に比較していずれも不一致の場合のみ前記ふたつの擬似コードが不一致であるとして、Boyer−Moore法を適用することにより検索するステップとをプロセッサに実行させる。
【0008】
本発明のさらに別の態様は、情報を検索するためのプログラムに関する。このプログラムは、複数の実ベクトルそれぞれを複数の数字の組である擬似コードに変換し、当該複数の擬似コードを構成要素とする擬似コード列を生成する機能と、前記擬似コード列をパターンとして、擬似コード列であるテキストから前記パターンを検索するに際し、ふたつの擬似コード列の比較は対応する擬似コード同士を比較することで行い、擬似コード同士の比較は疑似コードの構成要素である数字の組を順に比較していずれも不一致の場合のみ前記ふたつの擬似コードが不一致であるとして、Boyer−Moore法を適用することにより検索する機能とをコンピュータに実現させる。
【0009】
なお、以上の構成要素の任意の組み合わせ、本発明の表現を方法、装置、サーバ、システム、コンピュータプログラム、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0010】
本発明によれば、様々な時系列データに対して類似検索をすることができる情報検索装置を提供することができる。
【図面の簡単な説明】
【0011】
【図1】LSPCの例を示す図である。
【図2】2つのベクトル間の距離と二項関係semiequivalentが満たされる確率との関係を示す図である。
【図3】BM法によるマッチングのプロセスを例示した図である。
【図4】図3の例におけるskip関数である。
【図5】LSPCにおけるskip関数の一例を示す図である。
【図6】LSPCにおけるskip関数の別の一例を示す図である。
【図7】新聞画像の一部を例示した図である。
【図8】新聞画像から切出された文字を例示した図である。
【図9】検索対象とした文字列の画像を例示した図である。
【図10】Recall優先の設定の場合の実験結果を示す図である。
【図11】Precision優先の設定の場合の実験結果を示す図である。
【図12】実施の形態にかかる情報検索装置の全体構成を模式的に示した図である。
【図13】実施の形態にかかる情報検索装置の処理の流れを説明するフローチャートである。
【図14】テキストに含まれるパターンを検索する処理の流れを説明するフローチャートである。
【発明を実施するための形態】
【0012】
以下本発明を好適な実施の形態をもとに説明する。まず、実施の形態の基礎となる理論を前提技術として述べ、その後、具体的な実施の形態を説明する。
【0013】
[前提技術]
[1] はじめに
本発明の実施の形態は、テキストストリングからキーワードを検索するアルゴリズムであるBoyer−Moore法[1](以下、「BM法」という。)の検索対象を、一般の実ベクトル系列に拡張したものである。実施の形態の基礎技術は、実ベクトルを擬似コード表現に変換し、その擬似コードの二項関係に基づいて探索ができるように、BM法を拡張したことである。
【0014】
ネットワーク上には大規模な情報が蓄積されており、その量は増加の一途をたどるばかりである。それに伴い、こうした情報の中から利用者が必要とする情報を効率よく取り出すための情報検索技術はますますその重要さを増している。テキストストリングに対する全文検索技術はそのうちの最も基本的なものであると言え、古くから多くの研究が行われている。中でも、BM法は非常に高速なアルゴリズムとしてよく知られている。文字列照合に基づくアルゴリズムであるBM法は、キーワードの末尾から照合を行うことで、テキストストリングのうちのいくつかの文字については1回もアクセスすることなく、すなわち、サブリニア時間で検索を行うことができる。
【0015】
実施の形態は、このBM法を拡張し、検索対象をテキストストリングから一般の実ベクトル系列に拡張する。これは、さまざまな時系列データ、あるいは擬似的に時系列と見なせるデータに対して高速な類似検索を提供するための基盤となりうる技術である。
【0016】
この拡張における主な要素技術は次の2点である。1つは実ベクトルを擬似コードとして離散化表現する技術であるLSPC[2](後述する)である。この擬似コードLSPCは、通常のベクトル量子化に比べて、もとの実ベクトルの記述力を極力損なわないままベクトルを離散化することができる。ただしこの擬似コードにおいて中心的な役割を果たす二項関係semiequivalent(後述する)は同値関係ではなく、推移律を満たさないものであるため、既存の文字検索アルゴリズムがそのまま適用できるわけではない。そこで第2の要素技術として、実施の形態では、既存の文字列検索アルゴリズムのうち最も有力なものの1つであるBM法について、これをLSPCに適用可能なようにアレンジする。これがExtended Boyer−Moore法である。
【0017】
アルゴリズムの詳述に先立ちあらかじめ本手法の限界点を述べると、LSPCによる疑似コードの変換は確率的アルゴリズムであるため、それに基づく検索アルゴリズムでは結果が確実に正確であることは保証されない。試行回数やその他のパラメタの設定によって正確な出力が得られる確率を高めることはできるものの、それは計算量とトレードオフである。この点は他の確率的アルゴリズムと同様である。
【0018】
[2] 擬似コードLSPC
[2.1] LSPCの概要
LSPC(Locality−Sensitive Pseude−Code)は、Terasawa and Tanaka[2]により提唱された、実ベクトルを擬似コード表現に変換する技術である。通常のベクトル量子化とは異なり、1つのベクトルに対して複数の整数を割り当てることで、通常のベクトル量子化よりも豊かな記述力を残したままベクトルを離散化する。
【0019】
図1はLSPCの例を図示したものである。図1中、黒丸がd次元の実空間(R空間)に分布しているベクトルを表し、黒丸に付けられた(8,1,4)などの数字の3つ組がそのベクトルを離散化した結果の擬似コードを表している。このように、1つのベクトルに複数の整数を割り当てることが擬似コードLSPCの特徴である。そして、LSPCのもう1つの特徴が、そこに導入される二項関係semiequivalentである。2つの擬似コードに割り当てられた複数の整数のうち、1つでも一致していればそれらのコード間で二項関係semiequivalentが満たされると定義する。
【0020】
以上をまとめると以下のようになる。
定義1(疑似コードLSPCの定義):d次元実ベクトルpに対し、擬似コードC(p)は、d’個の整数の組として与えられる。すなわち、
p∈R→C(p)=(c(p) c(p)・・・cd’(p))∈N
定義2(二項関係semiequivalentの定義):擬似コードLSPCにおいてC(p)={c(p)}とC(q)={c(q)}とが二項関係semiequivalentを満たすとは、c(p)=c(q)を満たすようなi∈{1,・・・,d’}が存在することである。
【0021】
LSPCでは、通常のベクトル量子化よりも多様な表現が可能である。例えば、通常のベクトル量子化においては、境界面付近では似たベクトルに別な符号が割り当てられてしまうケースがどうしても発生する。一方LSPCでは、図1に示すように、ある擬似コードとsemiequivalentな範囲と、別のあるコードとsemiequivalentな範囲とがオーバーラップすることが許されている。これにより、近いベクトル同士に割り当てられた擬似コードがsemiequivalentになる確率を極めて高くなるように擬似コードを割り振ることが可能となる。
【0022】
二項関係semiequivalentが満たされるか否かは、2つのベクトルの間の距離に依存している。図2は、2つのベクトル間の距離と二項関係semiequivalentが満たされる確率との関係を図示したものである。この性質を用いて、2つのベクトル間の距離が一定の閾値以上であるか否かを、擬似コードの二項関係だけから推定することができる。例えば図2における実線が表す曲線の例であれば、2つのベクトル間の距離が0.9以上であればそれらのベクトルに対応する擬似コード同士がsemiequivalentである確率は極めて小さく、一方で2つのベクトル間の距離が0.4以下であればそれらのベクトルに対応する擬似コード同士がsemiequivalentである確率は極めて大きい。この性質を用いることで、2つの擬似コードがsemiequivalentであるかどうかを調べるだけで、元々のベクトル間の距離が大きいのか小さいのかをおおよそ推測することができる。
【0023】
ここで重要な点は、擬似コードC(p)、C(q)が二項関係semiequivalentを満たすかどうかを照合するためのコストは、2つのベクトルp、q間の距離を計算するコストよりも小さいということである。この差は特にもとのベクトル空間が高次元である場合に顕著である。パターン認識で用いられる特徴ベクトルの空間は非常に高い次元数を持つ場合がしばしばあるので、LSPCを使用することによる計算コスト削減が大きな効果を持つことが期待できる。
【0024】
[2.2] LSPCの構成法
前節では、擬似コードLSPCの持っている性質について述べた。この節では、そのような性質を持つ擬似コードをいかにして構成することができるかについて述べる。
【0025】
擬似コードLSPCの各要素には、Locality Sensitive Hashing(LSH)[3]〜[5]のハッシュ関数のハッシュ値を利用する。LSHは、近似的最近傍探索問題の解法として非常に有力なものとして近年注目されているアルゴリズムである。以下、まずLSHの概略を述べる。
【0026】
LSHアルゴリズムにおいて中心的な役割を果たすのは、以下で定義されるLSH familyと呼ばれる関数族である。
定義3(LSH family):ベクトル空間Sから適当な離散空間Uへの関数族H={h:S→U}は、以下を満たすとき(r,r,p,p)−sensitiveであると呼ばれる。
任意のv、q∈Sについて、
d(v,q)≦rのときPr[h(q)=h(v)]≧p
d(v,q)≧rのときPr[h(q)=h(v)]≦p
ここでd(v,q)はベクトルv、q間の距離を表し、p>p、r<rとする。
【0027】
なお、このような関数族の存在はL空間において[3]、s∈(0,2]の任意のL空間において[4]、任意の次元の単位球上において[6]、それぞれ保証されている。
【0028】
関数族Hに属する関数は、ベクトルv∈Rを整数h(v)∈Nに写像するという意味で、ハッシュ関数であると言える。近傍探索問題の解法としてのLSHは、データ集合内の全ての点についてあらかじめハッシュ値を計算してハッシュ表を作成しておいて、クエリ点と同じハッシュ値を持つ点だけをハッシュ表から探し出して探索の対象にする。こうすることによって、クエリ点との距離を計算されるべき点の数を大きく削減する、というのがLSHの基本アイデアである。
【0029】
LSHにおける優れた工夫の一つは、ハッシュ関数を複数使うことによって、False positiveを減らしつつ、False negativeを減らすようにできることである。例えば、あるLSH familyがあって、その中の関数は図2の点線で示されるような衝突確率を持っていたとする。LSHは、この関数k個を組み合わせた関数をL個作ることで、その確率の差を増幅する。つまり、hijをLSH family Hからランダムに選ばれたハッシュ関数として、
(p)={hi1(p),hi2(p),・・・hik(p)} (1)
をg(p)からg(p)までL個作成することによって、実効的な衝突確率を図2の実線のように変換するのである。
【0030】
LSHの近傍探索問題の解き方は次のとおりである。まず、すべての点pに対するg(p),g(p),・・・g(p)をあらかじめ計算し、ハッシュ表に格納しておく。クエリ点qが入力されたら、g(q),g(q),・・・g(q)を計算し、∃i、g(p)=g(q)となるような点pだけをハッシュ表から見つけてきて、探索の対象とする。これにより、クエリ点から遠い点との距離計算を減らしつつ、クエリ点に近い点の取りこぼしを減らすということを実現している。
【0031】
擬似コードLSPCの基本アイデアは、このLSHのハッシュ値は擬似コードとして使えるのではないかという着想である。LSHは近傍探索問題を解くためのハッシュ表を作成するための手段としてハッシュ関数を使っていたが、LSPCではベクトル系列のマッチングのための擬似コード表現として同じハッシュ関数を用いるのである。すなわち、
定義4(疑似コードLSPCの構成法):p∈Rに対し、擬似コードLSPC C(p)を以下のように定義する。
C(p)={g(p),g(p),・・・g(p)} (2)
(p)={hi1(p),hi2(p),・・・hik(p)} (3)
ここでhijはLSH family Hからランダムに選ばれた関数である。
【0032】
上記の定義ではC(p)はkL個の整数から構成されるが、実用上これを次の方法でL個の整数として表すことにする。すなわち、hijの値域は有限の整数であるので、この上限をMとおく。このとき、g(p)=hi1(p)Mk−1+hi2(p)Mk−2+・・・hik(p)とすることで、g(p)は1つの整数で表すことができる。従って、C(p)はL個の整数として表せる。
【0033】
LSHにおける近傍探索は、クエリqに対して、ハッシュ表から∃i、g(p)=g(q)となるような点pをすべて拾ってくるのであった。それに対応する、擬似コードLSPCにおける二項関係が次に述べるsemiequivalentである。
定義5(二項関係semiequivalentの定義):LSPC C(p)={g(p)}とC(q)={g(q)}とがsemiequivalentであるとは、g(p)=g(q)となるようなiが存在することである。
【0034】
この二項関係が満たされているか否かは、前述の図2の実線に示すとおり、もとのベクトルp、qの間の距離に依存している。
【0035】
ここで改めてパラメータkとLの意味を考えてみる。p(c)が単一のハッシュ関数で、間の距離がcである2つの点が衝突する(同じハッシュ値を持つ)確率Psemieqがそれらの点に対応する擬似コードがsemiequivalentである確率を表すとする。LSPCでは、単一のハッシュ関数をk個組み合わせた物をL個作る、という操作で、Psemieq
semieq=1−(1−p(c) (4)
のように増幅している。kとLの値を設定することにより、図2における曲線の位置を変えることができる。kを増やせば曲線は左に移動し、Lを増やせば曲線は右に移動する。kとLをともに増やせば、およその位置を変えずに曲線の勾配を増すことができる。
【0036】
[3] Boyer−Moore法
この章では、Extended Boyer−Moore法の前提となる、BM法について述べる。BM法は文字列検索アルゴリズムとしては古典的でかつきわめて有力な方法であり、多くの解説書が出版されている。以下の説明では、Bad Character Ruleの名は文献[7]に、skip関数の名は文献[8]によった。
【0037】
なお、文献[7]で説明されているBoyer−Mooreアルゴリズムは、Good Suffix RuleとBad Character Ruleの2つの柱から構成されているが、このうちLSPCのような推移律を満たさないコードに適用可能なものは後者のみである。今日BM法と呼ばれるものには微妙なバリエーションがあるが、ちょうど文献[8]のBM法の説明がBad Character Ruleのみに焦点が置かれたものとなっており、Extended Boyer−Moore法の前提とするのに都合がよいので、ここでは文献[8]に従い、Boyer−MooreアルゴリズムのBad Character Ruleについて、その概要を述べる。
【0038】
まず、問題を正確に定式化する。String Matching問題とは、次のような問題である。
定義6(String Matching問題):長さnの文字列P(パターンあるいはキーワードと呼ぶ)と、長さm(≧n)の文字列T(テキストと呼ぶ)とが与えられたとき、テキスト中のキーワードの出現開始位置、すなわちP(ξ)=T(i+ξ−1)for all ξ=1,2,・・・,nとなるようなiをすべて見つけること。
【0039】
なお、文字列Pに対し、P(ξ)はPのξ番目の文字を表す。たとえば、T=abxabababxababx、P=ababの時、String Matching問題の解は{4,6,11}である。また、以下では文字列Sのi番目からj番目の文字(j≧i)までで構成される部分文字列をS[i:j]と書くことにする。
【0040】
String Matching問題の素朴な解法(naive method)は、パターンPに対し、まずTの部分文字列T[1:n]と照合を行い、次にT[2:n+1]、その次にT[3:n+2]・・・という具合に、Tの部分文字列の始点を1つずつずらしながらすべての部分文字列と照合を行う方法である。この方法の計算コスト(文字列照合回数)最小でmであり、最大でO(mn)である。
【0041】
ここからBM法について述べる。素朴な解法がTの部分文字列の始点を1つずつずらしながら文字列の照合を行っていくのに対し、BM法は始点を1つよりも大きくずらすことによって計算量を縮減する。
【0042】
なお、文献[7]によればBM法はBad Character RuleとGood Suffix Ruleからなっており、この両方を用いることで計算量がO(m)で抑えられることが保証される。一方で文献[8]では、上記2つのルールのうちBad Character Ruleのみを使ったものをBM法と呼んでおり、この場合はO(m)の計算量が保証されない(最悪の場合O(mn)になってしまう)。しかし、極端な場合の入力(例えばT=aaaaaaa、P=aaa)を考えなければ、通常の場合はこれだけでも十分に高速である。
【0043】
図3はBM法によるマッチングのプロセスを例示したものである。ここでは、例としてT=abcbaxabacabbc、P=abacという場合を考える。BM法も素朴な解法と同様に、まずPとT[1:4]とを照合する。ただしこの照合にあたって、BM法は文字の照合をPとT[1:4]の末尾(すなわちこの場合は4文字目)から順に開始するというところに特徴がある。今の例の場合、T[1:4]の4文字目はb、Pの4文字目はcであるから照合結果は「不一致」であり、Tの部分文字列の始点をずらして次の照合へ進む。
【0044】
さてここでポイントは、Tの部分文字列の始点を何文字ずらすかである。いま、T[1:4]の4文字目はbであることはすでに調べた。ということは、仮に1文字ずらした場合、次はT[2:5]の3文字目がbであることはわかっているので、これがPと一致しないことは調べるまでもなく明らかである。仮に2文字ずらすとすると、T[3:6]の2文字目であるbは、Pの2文字目と一致する。よってこれは調べる価値がある。従ってT[1:4]を不一致と判断した次に調べるべきTの文字列はT[3:6]であることがわかる。
【0045】
では次に、T[3:6]とPの照合を行う。T[3:6]の4文字目はx、Pの4文字目はcであるから照合結果は不一致であり、Tの部分文字列の始点をずらして次の照合へ進む。さて今の場合、T[3:6]の4文字目であるxはPの中に一度も出てこない。ということは、T(6)=xを含むようなTの部分文字列とPとは決して一致しないことはこの時点で明らかである。よって次に照合すべきTの部分文字列は、一気に4つ飛んでT[7:10]であるということになる。
【0046】
続いて、PとT[7:10]との照合を行う。ここも末尾から順に照合を行う。照合を4回行ったところで、PとT[7:10]の全体が一致していることが判明するので、始点位置“7”が出力される。そして、末尾のcに着目すると、T[7:10]を1文字ずらした場合も2文字ずらした場合も3文字ずらした場合もPとは一致しないことが明らかであるので、次に照合すべきTの部分文字列は、4つ飛んでT[11:14]となる。最後にT[11:14]とPの照合を行い、後ろから2番目の文字で不一致が判明して、アルゴリズムは終了する。図4は、図3の例におけるskip関数である。
【0047】
上記のBM法のアルゴリズムでポイントとなるのは、T[i:i+3]の4文字目が何であった場合に、次に照合するTの始点を何文字ずらせばよいか、ということである。ここではこの「何文字ずらせばよいか」の値を「skip関数」で表すことにする。すなわち、skip(x)は、T[i:i+3]の末尾の文字(4文字目)がxであった場合に照合の始点をずらすべき数として定義され、最小は1であり、最大はPの長さ(この場合は4)である。
【0048】
skip関数は次のように構成される。skip関数は、定義域として想定しているすべての文字(アルファベットΣと呼ぶ)、値域として1以上n以下の自然数を持つ関数である。まず、すべての文字x∈Σについて、skip(x)をnに初期化する。次に、Pの(n−i)文字目がxであったら、skip(x)をiに更新する。この手続をi=n−1,n−2,・・・,1の順に繰り返せば、所望のskip関数が得られる。
【0049】
BM法の特徴は、パターン文字列Pが長ければ長いほど、また、文字列中から適当に2つ選んだ文字が適合する確率が低いほど(すなわち文字種が多いほど)、効率が良くなるということである。
【0050】
[4] Extended Boyer−Moore法
定義6で述べた問題をLSPCに拡張した問題を次のように定義する。
定義7(LSPCに拡張されたString Matching問題):長さnの擬似コード列Pと、長さm(≧n)の擬似コード列Tとが与えられたとき、P(ξ)〜T(i+ξ−1)for all ξ=1,2,・・・,nとなるようなiをすべて見つけること。
【0051】
ここで、S(i)〜T(j)とは、S(i)とT(j)が二項関係semiequivalentを満たす関係にあることを意味する。
【0052】
Extended BM法のアルゴリズムは、基本的にはBM法と同じである。すなわち、
[Extended BM法のアルゴリズム]
まず、i=1として、PとT[i:i+n−1]が対応するか、すなわちP(ξ)〜T(i+ξ−1)for all ξ=1,2,・・・,nが成り立つかどうかを調べる。オリジナルのBM法と同じく、この照合は右から左の順、すなわちξ=n,n−1,n−2,・・・の順に行う。照合が失敗したらそこで照合を打ち切り照合がξ=1まで成功した場合は、キーワードを発見したとして出力する。次に、次のi位置に対して照合を行うため、iをskip(T(i+n−1))だけ動かす。i+n−1>mとなったら照合を終了する。
【0053】
Extended BM法のBM法との違いは、skip関数の構成法である。理論的には、skip関数は次の方法で構成される。すなわち、今回想定されるskip関数の定義域は、擬似コードの取り得るあらゆる値(文字列の例にならい、アルファベットΣと呼ぶことにする)であり、値域として1以上n以下の自然数を持つ関数である。まず、すべてのx∈Σにつて、skip(x)をnに初期化する。次に、擬似コードP(n−i)に対し、それとsemiequivalentになるようなすべての擬似コードx∈Σについて、skip(x)をiに更新する。この手続をi=n−1,n−2,・・・,1の順に繰り返せば、所望のskip関数が完成される。図5はLSPCにおけるskip関数の一例を図示したものである。
【0054】
理論上は上記で可能だが、現実的にはこのアルゴリズムは問題がある。この方法では、skip関数を格納するためにアルファベットΣのサイズに比例した配列サイズが必要だが、擬似コードLSPCはL個の整数を要素として持っている。各要素の値は1からNまでであるとすると、この場合必要な配列のサイズはNとなってしまい、実際にLの値として20程度から数百程度のものを用いようとすると、このサイズの配列を確保するのは現実的に不可能である。そこで次の定理が重要となる。
【0055】
定理1:疑似コードC(p)=(c(p) c(p) ・・・cd’(p))に対するskip関数は、次の形で表現できる。
skip(C(p))=min(skip(c(p)),skip(c(p)),・・・,skipd’(cd’(p)))
ここで、skip(c(p))は、通常のBM法におけるのと同じ方法で構成されるskip関数である。
【0056】
(証明)skip(C(p))とは、P(n−ξ)とC(p)がsemiequivalentになるような最小の整数ξ>0である。λ<mini=1,・・・,d’(skip(c(p)))のとき、P(n−λ)とC(p)はsemiequivalentにならない。なぜなら、P(n−λ)〜C(p)とすると、あるδ∈{1,・・・,d’}についてP(n−λ)の第δ要素C(p)の第δ要素が一致するはずであるが、これはλ<skipδ(Cδ(p))に反するからである。逆にλ=mini=1,・・・,d’(skip(c(p)))のとき、あるδについてλ=skipδ(Cδ(p))であり、これはP(n−λ)の第δ要素とC(p)の第δ要素が一致することに他ならないので、P(n−λ)とC(p)はsemiequivalentである。よって、skip(C(p))=mini=1,・・・,d’(skip(c(p)))である。(証明終)
【0057】
この工夫により、記憶容量はMからMLに削減され、実装が現実的に可能となる。図6はLSPCにおけるskip関数の別の一例を図示したものである。
【0058】
[5] 新聞画像による実験
Extended Boyer−Moore法の応用の一例として、OCRによるテキスト化が困難な古い新聞画像に対する全文探索実験を行い、従来法によるものと検索コストを比較する。
【0059】
[5.1] 実験の概要
明治期の「函館毎日新聞」を対象とする。新聞資料はマイクロフィルムによって保存されており、これをスキャナで取り込みデジタル化したデータを用いる。図7は、新聞画像の一部を例示したものである。解像度は1文字あたりおおむね70×70ピクセル程度である。
【0060】
なお、このような古い新聞画像に対する全文探索というのは決して容易なタスクではない。OCRによるテキスト化ができれば話は簡単だが、OCRは言語や書体に依存した技術であるため、現在とはフォントも語法も異なる明治期の画像に対してOCRをそのまま適用しても十分な精度は得られない。実際、新聞画像に対して、OCRによらず画像検索技術を用いて全文検索を行うための研究は他にも行われている[9]
【0061】
[5.2] 文字切出し
文字切出しは、段落の縦方向射影ヒストグラムによる行切出しと、段落の横方向射影ヒストグラムによる文字切出しとを組み合わせるという方法で行った。図8は、新聞画像から切出された文字を例示したものである。このような方法が採用可能なのは、本実験では新聞画像を対象としたため、段落画像における文字の配置がほぼ格子状になっているためである。
【0062】
ただし、単純な方法をそのまま適用しただけではさまざまな問題が発生する。1つは、段落の最後の行に2,3文字しかない場合に行切出しが失敗しやすいということと、もう1つは、振り仮名(ルビ)が漢字の右側に多く振られており、これは文字のマッチングには用いないため、除去する必要があるということである。
【0063】
そこで、自己相関関数を用いて本文の幅と振り仮名の幅を特定できるような形で行幅を推定し、上記2点の問題に対処することとした。
【0064】
[5.3] 特徴量ベクトルおよび擬似コードの構成
特徴量は、勾配分布特徴量[10]を用いた。文字切出しされた画像を4×4の小領域に分割し、あとはSIFT[11]と同じような方法で128次元の特徴量ベクトルを構成する。
【0065】
次いで、この各特徴量ベクトルを擬似コードLSPCに変換する。使用する関数族(LSH family)としては、今回使用する特徴量ベクトルはノルムが1に正規化されているものであるので、SLSH[6]のorthoplex法を用いた。今回使用する特徴量ベクトルはその要素がすべて非負であるという性質を持っているため、この場合1つのハッシュ関数の値域は1〜128となる。LSPC構成の際に設定するパラメタkおよびL(前述の2.2節参照)については、Recallを優先する設置とPrecisionを優先する設定ということで、(k,L)=(3,26)と(k,L)=(3,24)の2種類を試した。前者は特徴量ベクトルがやや離れていても擬似コードがsemiequivalentになりやすいかわりに拾い漏らしが少ない設定(すなわちRecall優先の設定)であり、後者はその逆(すなわちPrecision優先の設定)である。
【0066】
以上のような方法で、文字切出しされた各文字画像が128次元ベクトルに変換され、次いで擬似コードに変換されることにより、新聞画像が擬似コードに変換されたこととなる。これに対してExtended Boyer−Moore法を適用することで、新聞画像に対する全文探索を行うことができる。
【0067】
[5.4] 実験
今回実験で用いた新聞画像は、全755文字からなる。これに対し、手作業でテキスト化したデータを作成した後にn−gram解析にかけ、3回以上登場する文字列のうち最長の長さであった「のみならず」を実験対象に用いた。図9は検索対象とした文字列の画像を例示したものである。3箇所の「のみならず」に対し、それぞれをクリエとして残りの2つを探すという実験を行い、素朴な解法(naive method)と、Extended BM法の2つで、それぞれ文字照合回数を数え上げた。なおここでは比較を明確にするため、素朴な解法においても文字照合はパターンの末尾の文字から順に行った。
【0068】
[5.5] 実験結果
図10は、Recall優先の設定の場合の実験結果を示す図である。また、図11はPrecision優先の設定の場合の実験結果を示す図である。図10および図11中、Naiveは素朴な解法、Extended BM法(実施の形態)を表し、(#comp)は文字照合回数、(#skip)はExtended BM法におけるskip関数の評価回数を表している。また、Recallは再現率、Precisionは適合率であり、それぞれ以下の式で定義される。
【数1】

【0069】
なお、図10および図11に掲げた素朴な解法よりもさらに素朴な方法として、文字列の照合中に不一致が見つかっても照合を打ち切らないアルゴリズムというものが考えられる。この場合の計算コスト(文字照合回数)は、いずれをクエリに用いた場合においても751×5=3755である。
【0070】
図10および図11からわかるとおり、すべてのクエリに対してExtended BM法の文字列照合回数は、素朴な解法のものを下回っている。中でも、図10における1つめのデータと、図11におけるすべてのデータにおいては、文字列照合回数が全文字数(755文字)を下回っており、サブリニア時間での検索を達成している。
【0071】
ただし、Extended BM法においては、素朴な解法に対する追加コストとしてskip関数の評価回数を考えなければならない。文字パターン照合はL個の自然数の一致/不一致を判定する処理であり、skip関数評価はL個の自然数の最小値を取る処理であるため、これらの計算コストを完全に同一視することはできないが、仮に同じだとすると、Extended BM法のコストは(#comp)に(#skip)を加えたものとして評価できる。この場合も、表のすべての場合においてExtended BM法の計算コストは素朴な解法よりも削減できていることになる。
【0072】
[6] 参考文献
[1]R. S. Boyer and J. S. Moore, "A fast string searching alogorithm," Communications of the ACM, vol. 20, pp. 762-772, Oct. 1977.
[2]K. Terasawa and Y. Tanaka, "Locality Sensitive Pseudo-Code for Document Images," Proc. 9th Int. Conf. on Document Analysis and Recognition, ICDAR2007, vol. 1, pp. 73-77, 2007.
[3]A. Gionis, P. Indyk, R. Motwani, "Similarity Search in High Dimensions via Hashing," Proc. 25th Int. Conf. on Very Large Data Base, VLDB1999, pp. 518-529, 1999.
[4]M. Datar, P. Indyk, N. Immorlica, V. Mirrokni, "Locality-Sensitive Hashing Scheme Based on p-Stable Distributions," Proc. 20th ACM Symposium on Computational Geometry, SoCG2004, pp. 253-262, 2004.
[5]A. Andoni, P. Indyk, "Near-Optimal Hashing Algorithms for Approximate Nearest Neighbor in High Dimensions," Proc. Symposium on Foundations of Computer Science, FOCS'06, pp. 459-468, 2006.
[6]K. Terasawa and Y. Tanaka, "Sperical LSH for Approximate Nearest Neighbor Search on Unit Hypersphere," Proc. 10th Workshop on Algorithms and Data Structures, WADS2007, LNCS4619, pp. 27-38, 2007.
[7]D. Gusfield, "Algorithms on Strings, Trees, and Sequence: Computer Science and Computational Biology," Cambridge University Press, 1997.
[8]北研二、津田和彦、獅々堀正幹、“情報検索アルゴリズム、”共立出版株式会社、東京、2002年1月。
[9]Yue Lu and Chew Lim Tan, "Word spotting in Chinese Document images without layout analysis," Proc. 16th Int. Conf. on Pattern Recognition, ICPR2002, vol.3, pp.57-60, 2002.
[10]寺沢憲吾、長崎健、川嶋稔夫、“勾配分布特徴量による高精度手書き文字検索、”画像の認識・理解シンポジウム(MIRU)2006講演論文集、pp. 1325-1330, 2006.
[11]D. G. Lowe, "Distinctive image features from scale-invariant keypoints," International Journal of Computer Vision, vol. 60, no. 2, pp. 91-110, 2004.
【0073】
[具体例]
実施の形態
図12は実施の形態にかかる情報検索装置100の全体構成を模式的に示した図である。情報検索装置100は、パターン画像取得部10、画像変換部12、テキスト画像取得部26、パラメータ取得部18、パターン生成部20、および検索部28を含む。画像変換部12はさらに、特徴量計算部14と擬似コード列生成部16とを含む。
【0074】
パターン画像取得部10は、図示しないユーザインタフェースを介してユーザから検索により見つけ出したいパターン画像を取得する。以後、検索により見つけ出したい情報を「パターン」という。また、画像データとしてのパターンを「パターン画像」という。特徴量計算部14は、パターン画像取得部10からパターン画像を受け取り、パターン画像を実ベクトルである特徴量に変換する。これは前提技術[5.2]および前提技術[5.3]に記載のアルゴリズムに基づく。パラメータ取得部18は、図示しないユーザインタフェースを介してユーザからパラメータを取得する。このパラメータは、前提技術[2.2]に記載したkおよびLである。
【0075】
擬似コード列生成部16は、特徴量計算部14からパターンの実ベクトルを、パラメータ取得部18からパラメータをそれぞれ受け取り、パターンの擬似コード列を生成する。ここで「擬似コード」とは、一文字のパターン画像の特徴量である実ベクトルから前提技術[2.2]の定義4の記載に基づいて生成されるL個の数字の組である。また「擬似コード列」とは、文字列のパターン画像それぞれについて擬似コードを生成して並べたものであり、文字列を構成する文字の数と同数の擬似コードを構成要素に持つデータである。
【0076】
テキスト画像取得部26は、図示しないユーザインタフェースを介してユーザからパターンの検索の対象となるテキスト画像を取得する。以後、パターンの検索対象となる情報を「テキスト」という。また、画像データとしてのテキストを「テキスト画像」という。特徴量計算部14はテキスト画像取得部26からテキスト画像を受け取り、パターン画像の場合と同様に前提技術[5.2]および前提技術[5.3]に記載のアルゴリズムに基づいて、テキスト画像を実ベクトルである特徴量に変換する。擬似コード列生成部16は、特徴量計算部14からテキストの実ベクトルを、パラメータ取得部18からパラメータをそれぞれ受け取り、テキストの擬似コード列を生成する。
【0077】
パターン生成部20はさらに、スキップ関数生成部22とパターン格納部24とを含む。スキップ関数生成部22は、擬似コード列生成部16から擬似コード列を受け取ってスキップ関数を生成する。スキップ関数は前提技術[4]に記載のアルゴリズムに基づいて生成される。パターン格納部24は、擬似コード列生成部16が生成したパターンの擬似コードとスキップ関数生成部22が生成したスキップ関数とを格納する。
【0078】
検索部28はさらに、テキスト格納部30と比較部32とを含む。テキスト格納部30は、擬似コード列生成部16が生成したテキストの擬似コード列を格納する。比較部32は、テキスト格納部30からテキストの擬似コード列を、パターン格納部24からパターンの擬似コード列とスキップ関数とを取得し、テキストに含まれるパターンを検索し、結果を図示しないモニタ等の出力装置に出力する。
【0079】
ここで比較部は、前提技術[3]および[4]に記載のアルゴリズムに基づいて、テキストに含まれるパターンを検索する。すなわち、テキストの擬似コード列の先頭から最後尾に向かってパターンの擬似コード列を順に重ね合わせ、パターンの擬似コードとテキストの擬似コードとをパターンの最後尾から先頭に向かって順番に比較する。比較の途中で不一致が見つかった場合には、テキストに重ね合わせるパターンの開始位置を所定量だけずらしつつ検索する。ここで所定量とは、不一致が見つかったときのテキストの擬似コードであって、パターンの擬似コード列の最後尾に対応する擬似コードに基づいて定まる量であり、具体的には前提技術[4]に記載のskip関数により定まる。スキップ関数生成部22が生成するスキップ関数とは、前提技術[4]に記載のskip関数である。
【0080】
情報検索装置100の構成は、ハードウェア的には、任意のプロセッサ、メモリ、その他のLSIで実現でき、ソフトウェア的にはメモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは、当業者には理解されるところである。
【0081】
図13は実施の形態にかかる情報検索装置100の処理の流れを説明するフローチャートである。本フローチャートにおける処理は、例えばユーザが情報検索装置100を起動したときに開始する。
【0082】
パターン画像取得部10はパターンである文字列の画像を取得する(S10)。特徴量計算部14は前提技術[5.3]の記載に基づいてパターン画像を実ベクトルに変換し、擬似コード列生成部16は特徴量計算部14が出力した実ベクトルとパラメータ取得部18から取得したパラメータとに基づいてパターンの擬似コード列を生成する(S12)。スキップ関数生成部22は前提技術[4]の記載にしたがって擬似コード列生成部16が生成したパターンの擬似コード列に基づいてスキップ関数を生成する(S14)。パターン格納部24は擬似コード列生成部16が生成したパターンの擬似コード列とスキップ関数生成部22が生成したスキップ関数とを格納する(S16)。
【0083】
テキスト画像取得部26はテキストである文字列の画像を取得する(S18)。特徴量計算部14はテキスト画像を実ベクトルに変換し、擬似コード列生成部16は特徴量計算部14が出力した実ベクトルとパラメータ取得部18から取得したパラメータとに基づいてテキストの擬似コード列を生成する(S20)。テキスト格納部30は擬似コード列生成部16が生成したテキストの擬似コード列を格納する(S22)。比較部32はテキスト格納部30からテキストの擬似コード列を、パターン格納部24からパターンの擬似コード列とスキップ関数とを取得し、テキストに含まれるパターンを検索する(S24)。比較部32がパターンの検索を終了すると、本フローチャートにおける処理は終了する。
【0084】
図14は、テキストに含まれるパターンを検索する処理の流れを説明するフローチャートであり、図13において比較部32が行うステップS24を詳細に説明するものである。本フローチャートにおける処理は、比較部32がテキスト格納部30からテキストの擬似コード列を、パターン格納部24からパターンの擬似コード列とスキップ関数とを取得したときに開始する。
【0085】
比較部32は図示しない内部メモリにテキストの長さTlenを設定する(S26)。テキストの長さとは、テキストの擬似コード列を構成する擬似コードの数である。続いて、パターンの長さPlenを設定する(S28)。第1のループ変数iを1に初期化する(S30)。第1のループ変数iは、テキストの擬似コード列の先頭から最後尾に向かってパターンの擬似コード列を順に重ね合わせるために用いられる変数である。
【0086】
第1のループ変数iがTlen−Plen+1以下である場合には(S32Y)、テキストT中の長さPlenの部分文字列T[i:i+Plen−1]をText[x]として取り出す(S34)。ここで部分文字列Tは、前提技術[3]に記載のものである。また、Text[x]=T[i:i+Plen−1]としたとき、Text(j)は部分文字列Tのj番目の擬似コードを表すものとする。さらに、P(x)をパターンのx番目の擬似コードを表すものとする。
【0087】
第2のループ変数jをPlenで初期化する(S36)。第2のループ変数jは、パターンと部分文字列Tとをパターの最後尾P(Plen)から先頭P(1)に向かって順番に比較するために用いられる変数である。Text(j)とP(j)とが一致する場合には(S38Y)、ループ変数jをj−1で更新する(S40)。これにより、パターンと部分文字列Tとはパターンの最後尾から先頭に向かって順番に比較される。ここで、Text(j)とP(j)とが一致する場合とは、Text(j)とP(j)とが前提技術[2]の定義2に記載の二項関係semiequivalentを満たす場合のことをいう。
【0088】
jが0より大きい場合には(S42Y)、パターンと部分文字列Tとの比較が終了していないので、ステップS38に戻って比較を継続する。jが0以下の場合には(S42N)、パターンと部分文字列Tとが一致したことになるため、iを一致したものとして記録する(S44)。その後スキップ関数を用いて第1のループ変数iを更新することにより部分文字列Tの開始点をずらす(S46)。また、jが0より大きい間にText(j)とP(j)とが一致しないときは(S38N)、パターンと部分文字列Tとが一致しないことになるため、スキップ関数を用いて第1のループ変数iを更新することにより部分文字列Tの開始点をずらす(S46)。第1のループ変数iを更新した結果、iがTlen−Plen+1よりも大きくなった場合には(S32N)、テキストから部分文字列Tを取り出せないため、本フローチャートにおける処理を終了する。
【0089】
以上のように、BM法における文字列の代わりに擬似コード列を採用し、あるふたつの擬似コードが前提技術[2]の定義2に記載の二項関係semiequivalentを満たす場合にそれらの擬似コードが一致するものとして、BM法を擬似コード列の比較に拡張したものがExtended BM法である。
【0090】
以上の構成による動作は以下のとおりである。ユーザは、検索したいパターンの画像と、パターンの検索対象となる文字列の画像を用意する。これらの画像を実施の形態にかかる情報検索装置100に入力すると、情報検索装置100は図13の手続を経てテキスト画像の中からパターン画像と一致する画像を出力する。
【0091】
以上説明したように実施の形態によれば、文字列データではなく、文字列の画像データを対象として、高速な文字列検索を実行することができる。これにより、例えば古い時代の新聞画像のように、情報が文字列データではなくマイクロフィルム等の画像データとして保存されている場合でも、高速な文字列検索が可能となる。
【0092】
以上、本発明を実施の形態をもとに説明した。これらの実施の形態は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【0093】
上記実施の形態では、擬似コード列生成部16が擬似コード列に変換する実ベクトルは文字列画像から生成される場合につて説明したが、文字列画像から生成される場合に限られず、例えば音声データなど、任意の実ベクトルを入力とすることができる。
【0094】
上記実施の形態では、検索の度にパターン画像を取得してパターンの擬似コード列およびスキップ関数を生成する場合について説明したが、パターン格納部24に既に格納されているパターンの擬似コード列およびスキップ関数が流用できる場合には、パターン格納部24から読み出してもよい。パターンの擬似コード列およびスキップ関数の生成を省略できるので計算コストの点で有利である。
【符号の説明】
【0095】
10 パターン画像取得部、 12 画像変換部、 14 特徴量計算部、 16 擬似コード列生成部、 18 パラメータ取得部、 20 パターン生成部、 22 スキップ関数生成部、 24 パターン格納部、 26 テキスト画像取得部、 28 検索部、 30 テキスト格納部、 32 比較部、 100 情報検索装置。

【特許請求の範囲】
【請求項1】
複数の実ベクトルそれぞれを複数の数字の組である擬似コードに変換し、当該複数の擬似コードを構成要素とする擬似コード列を生成する擬似コード列生成部と、
前記擬似コード列をパターンとして、擬似コード列であるテキストの先頭から順に前記パターンの構成要素の数と同数のテキストを部分テキストとしつつ、当該部分テキストと前記パターンとの比較を前記パターンの最後尾の擬似コードから先頭の擬似コードに向かって順に行う比較部と、
比較途中で結果が不一致となった場合に、現在の部分テキストの先頭となっているテキストの位置から次の部分テキストの先頭となるテキストの位置までずらす量を、前記部分テキストの最後尾の擬似コードを入力として出力する関数をスキップ関数として生成するスキップ関数生成部とを含み、
前記スキップ関数生成部は、擬似コードとして取り得る値すべてについて当該擬似コードが前記パターンの擬似コード列に含まれるか否かを特定し、含まれる場合には前記パターンの擬似コード列との位置関係から前記ずらす量を計算し、含まれない場合には前記パターンの擬似コード列の長さを前記ずらす量としてスキップ関数を生成し、
前記比較部は、前記スキップ関数に基づいて現在の部分テキストの先頭から次の部分テキストの先頭までのずらす量を決定することを特徴とする情報検索装置。
【請求項2】
前記比較部は、ふたつの擬似コードを比較するに際しては、それぞれの疑似コードの構成要素である数字の組を順に比較していずれも不一致の場合のみ前記ふたつの擬似コードが不一致であるとすることを特徴とする請求項1に記載の情報検索装置。
【請求項3】
前記スキップ関数生成部は、疑似コードである数字の組の構成要素それぞれを入力とする、当該構成要素の数と同数の部分スキップ関数を生成し、疑似コードが入力されたときに当該擬似コードの構成要素それぞれを入力とした場合の対応する前記部分スキップ関数の出力値の最小値を出力値とする関数を前記スキップ関数として生成することを特徴とする請求項1または2に記載の情報検索装置。
【請求項4】
前記擬似コード列生成部は、任意のふたつの実ベクトル間の距離が近いほどそれらが同一の数字に変換される確率が高くなる複数の異なる関数を用いて実ベクトルを擬似コードに変換することを特徴とする請求項1から3のいずれかに記載の情報検索装置。
【請求項5】
複数の実ベクトルそれぞれを複数の数字の組である擬似コードに変換し、当該複数の擬似コードを構成要素とする擬似コード列を生成するステップと、
前記擬似コード列をパターンとして、擬似コード列であるテキストから前記パターンを検索するに際し、ふたつの擬似コード列の比較は対応する擬似コード同士を比較することで行い、擬似コード同士の比較は疑似コードの構成要素である数字の組を順に比較していずれも不一致の場合のみ前記ふたつの擬似コードが不一致であるとして、Boyer−Moore法を適用することにより検索するステップとをプロセッサに実行させることを特徴とする情報検索方法。
【請求項6】
複数の実ベクトルそれぞれを複数の数字の組である擬似コードに変換し、当該複数の擬似コードを構成要素とする擬似コード列を生成する機能と、
前記擬似コード列をパターンとして、擬似コード列であるテキストから前記パターンを検索するに際し、ふたつの擬似コード列の比較は対応する擬似コード同士を比較することで行い、擬似コード同士の比較は疑似コードの構成要素である数字の組を順に比較していずれも不一致の場合のみ前記ふたつの擬似コードが不一致であるとして、Boyer−Moore法を適用することにより検索する機能とをコンピュータに実現させることを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2011−150404(P2011−150404A)
【公開日】平成23年8月4日(2011.8.4)
【国際特許分類】
【出願番号】特願2010−9068(P2010−9068)
【出願日】平成22年1月19日(2010.1.19)
【新規性喪失の例外の表示】特許法第30条第1項適用申請有り MIRU2009第12回 画像の認識・理解シンポジウム論文集
【出願人】(508236240)公立大学法人公立はこだて未来大学 (16)
【Fターム(参考)】