以下、実施形態について、図面を参照しながら詳細に説明する。具体的には、まず図1〜8を参照して第1実施形態について説明する。その後、図9を参照して第2〜第4実施形態の共通点について説明し、図10〜12を参照して第2実施形態について説明し、図13〜15を参照して第3実施形態について説明し、図16〜19を参照して第4実施形態について説明する。さらに、図20〜21を参照して第5実施形態について説明し、最後にその他の実施形態についても説明する。
図1は、第1実施形態のシステム構成図である。文書検索システム100は、検索のための事前処理を行うサーバ110と、検索クエリの入力を受け付けて検索結果を表示する携帯電話130を含む。
サーバ110は、形態素解析を行うのに十分な処理能力を有するプロセッサと形態素解析を行うのに十分な容量のメモリを有する情報処理装置の一例である。具体的には、サーバ110は、例えばハードディスク装置などの不揮発性記憶装置により実現される記憶部111を有し、記憶部111は、文書集合112と辞書113と接続表114を格納する。サーバ110はさらに、形態素解析部115と文書語句抽出部116と語句リスト生成部117とインデックス生成部118を備える。
携帯電話130も情報処理装置の一例であるが、携帯電話130のプロセッサの処理能力はサーバ110より低くてもよく、携帯電話130のメモリ容量はサーバ110よりも少なくてもよい。また、携帯電話130も、ハードディスク装置やフラッシュメモリなどの不揮発性記憶装置により実現される記憶部131を有し、記憶部131は、文書集合112と同じ文書集合132と、語句リスト133と、インデックス134を格納する。携帯電話130はさらに、入力部135、部分文字列処理部136、語句一致判定部137、クエリ語句抽出部138、ベクトル化処理部139、類似度算出部140、文書ソート部141、表示部142、および文書選択部143を備える。
第1実施形態における検索対象の文書集合は、文書集合112および文書集合132として、記憶部111および記憶部131にそれぞれ格納される。上記のとおり、文書集合112と文書集合132は同内容である。
検索対象である文書集合112と文書集合132は、具体的には、携帯電話130に関するマニュアル、ヘルプ、FAQ(Frequently Asked Questions)など(以下これらを総称して「マニュアル類」という)を含む。なお、マニュアル類は一般に多岐のトピックに渡って書かれているが、以下では、1つのトピックに対応する1つのセクションのことを1つの「文書」という。
また、各文書には、文書集合112内で一意な(したがって文書集合132内でも一意な)識別情報が予め割り当てられている。以下では各文書の識別情報を「文書ID(identifier)」といい、例えば文書IDが「D」の文書を「文書D」のように参照する。
第1実施形態では、「マニュアル類は内容が常時動的に変更されるものではなく、基本的には静的に固定された文書である」という性質を利用して、サーバ110が事前に処理を行う。例えば、マニュアル類が作成された時点でサーバ110は事前処理を行うことができる。
すると、詳しくは後述するが、携帯電話130は、サーバ110による事前処理の結果を利用することで、形態素解析を行うことなく、簡易な処理を行うだけで、擬似的な形態素解析を実現することができる。したがって、携帯電話130は、擬似的な形態素解析を使って、分かち書きをしない自然言語(例えば日本語や中国語など)による検索クエリにしたがって文書集合132から文書を検索し、検索結果をユーザに提示することができる。
携帯電話130の高機能化にともない、ユーザが携帯電話130の機能を把握しきれないことも想定されるが、第1実施形態によれば、携帯電話130での擬似的な形態素解析とその擬似的な形態素解析の結果を用いた文書集合132の検索が可能となる。したがって、第1実施形態によれば、たとえ形態素解析には不十分なプロセッサとメモリしか携帯電話130に搭載されていなくても、携帯電話130において自然言語による文書集合132の検索が可能となる。したがって、第1実施形態には、ユーザの利便性を向上させる効果がある。
具体的なサーバ110と携帯電話130の動作は次のとおりである。
まず、形態素解析部115が、辞書113と接続表114を用いて文書集合112内の各文書に対して形態素解析を行う。形態素解析のアルゴリズムは任意である。一例として、図1には接続表114を用いたアルゴリズムの場合を例示してある。
ここで、辞書113は、個々の形態素をそれぞれ品詞と対応付けるデータである。辞書113は、例えば数十万語にも及ぶ形態素についてのエントリを含むこともあり、辞書113のデータ量は、約十MB(メガバイト)になることもあり、時には数十MBに達することもある。なお、辞書113で使われる品詞の体系は実施形態に応じて任意である。例えば、「動詞」のような品詞が使われることもあり、「か行5段活用動詞語幹」のように細分化された品詞が使われることもある。
接続表114は、品詞間が接続可能であるか否かを示すデータである。接続表114は、例えば、「名詞の直後に助詞が接続することは可能である」、「名詞の直後に助動詞が接続することはない」などの規則を表す。
形態素解析部115は、任意の形態素解析アルゴリズムにしたがい、辞書113と接続表114を用いて文書集合112内の各文書を形態素解析し、形態素解析の結果を文書語句抽出部116に出力する。形態素解析の結果の形式は任意であるが、例えば、文書の先頭から順に、解析の結果として得られた形態素と当該形態素の品詞とを対応付けて並べた形式でもよい。
文書語句抽出部116は、形態素解析部115から入力された形態素解析の結果から語句のみを抽出し、語句リスト生成部117とインデックス生成部118に出力する。なお、以下の説明において「語句」とは、形態素解析の結果として得られた形態素のことである。
語句リスト生成部117は、文書語句抽出部116から受け取った語句から、語句リスト133を作成する。なお、語句リスト133は、完成した後に携帯電話130の記憶部131に格納されるが、語句リスト生成部117は、生成した語句リスト133を一時的に記憶部111に出力して格納しておいてもよい。
語句リスト133は、文書集合112中に出現する語句の集合を表すデータである。すなわち、各文書から抽出された形態素の集合を出現形態素集合として生成する第1の生成手段は、第1実施形態においては、文書語句抽出部116と語句リスト生成部117により実現される。
なお、詳しくは図5とともに後述するが、語句リスト133を実現するための具体的なデータ構造は任意である。「語句リスト」という名称は、データ構造をリスト構造に限定する意図ではない。
文書集合112の内容にもよるが、例えば文書集合112が携帯電話130に関するマニュアル類である場合、語句リスト133に含まれる語句は、数千語程度のこともあり、語句リスト133のデータ量は数百KB(キロバイト)程度に収まることもある。つまり、未知語を減らして解析精度を上げるために辞書113には非常に多くの形態素が登録されているのが通例だが、特定の文書集合112に出現する形態素はそのうちのごく一部に過ぎない。
そのため、語句リスト133の容量は辞書113に比べて遥かに小さい(例えば数百分の一程度になることもある)。よって、たとえ携帯電話130の記憶部131が、辞書113を格納するには困難な小容量のものであったとしても、少量化された語句リスト133ならば記憶部131でも十分に格納可能である。
さて、上記のようにして語句リスト生成部117が語句リスト133を生成する一方で、インデックス生成部118は、文書語句抽出部116から受け取った語句からインデックス134を生成する。なお、インデックス134は、完成した後に携帯電話130の記憶部131に格納されるが、インデックス生成部118は、生成したインデックス134を一時的に記憶部111に出力して格納しておいてもよい。
第1実施形態では、自然言語による検索としてベクトル検索が行われ、インデックス134は文書集合112内の各文書に対応するベクトルを表すデータである。なお、自然言語を利用した検索アルゴリズムには様々なものがあるが、ベクトル検索は、文書内の語句とユーザから入力された検索クエリ内の語句の重要度を数値化して重み付けを行うことで、スコアに基づき検索結果を順位付けることが可能なアルゴリズムである。
詳しくは図6とともに後述するが、インデックス生成部118は、文書語句抽出部116からの出力にしたがって、文書集合112内の各文書について、当該文書内での個々の語句の出現頻度を数える。そして、インデックス生成部118は、数えた出現頻度に基づいて、例えばTF(Term Frequency)・IDF(Inverse Document Frequency)法などの所定のアルゴリズムにより、文書集合112内の各文書の特徴を示すベクトルを算出する。インデックス生成部118は、各文書の文書IDと当該文書に対応して算出したベクトルとを対応付けたデータを、インデックス134として生成する。
すなわち、インデックス134は、文書集合に含まれる文書と出現形態素集合に含まれる形態素との間の関係を示す検索インデックス情報の一例である。そして、第1実施形態では、検索インデックス情報を生成する第2の生成手段が、文書語句抽出部116とインデックス生成部118により実現される。
以上のようにしてサーバ110により生成された語句リスト133とインデックス134は、携帯電話130の記憶部131に格納される。また、記憶部131には文書集合112と同じ文書集合132も格納される。そして、検索時の携帯電話130の動作は次のとおりである。
入力部135は、例えば携帯電話130のボタンやタッチスクリーンを含んでもよいし、接続インタフェースと当該接続インタフェースを介して携帯電話130に接続されたキーボードやマウス等を含んでもよい。入力部135は、ユーザから検索クエリの文字列の入力を受け付け、部分文字列処理部136に出力する。
検索クエリは、例えば、「カメラで写真を撮影してメールで送る」のような自然言語文である。部分文字列処理部136は、検索クエリの文字列から部分文字列を抽出し、語句一致判定部137に出力する。例えば、上記の検索クエリの例の場合、部分文字列処理部136は、「カメ」や「カメラ」などの部分文字列を抽出して語句一致判定部137に出力する。
語句一致判定部137は、部分文字列処理部136から受け取った部分文字列が語句リスト133中の語句と一致するか否かを判断し、判断結果をクエリ語句抽出部138に通知する。つまり、検索クエリに含まれる1つ以上の部分文字列を形態素候補として抽出し、各形態素候補について出現形態素集合に含まれる形態素と一致するか否かを判断する判断手段が、第1実施形態では部分文字列処理部136と語句一致判定部137により実現される。
クエリ語句抽出部138は、「語句リスト133中の語句と一致する」と判定された部分文字列を、検索クエリ中に出現する形態素(以下「クエリ語句」という)として抽出する。クエリ語句抽出部138は、検索クエリから抽出した各クエリ語句を、当該クエリ語句の頻度とともにベクトル化処理部139に出力する。
ベクトル化処理部139は、クエリ語句抽出部138からの出力に基づいて、検索クエリを特徴づけるベクトルを算出し、算出結果を類似度算出部140に出力する。詳しくは図6とともに後述するが、インデックス生成部118と同様にベクトル化処理部139も、例えばTF・IDF法によりベクトルを算出する。
類似度算出部140は、インデックス134を読み出し、ベクトル化処理部139から出力されたベクトルと、文書集合132中の各文書のベクトルとに基づいて、検索クエリと各文書との類似度を算出する。以上のように第1実施形態では、文書集合132に含まれる各文書と検索クエリとの類似度を算出する類似度算出手段が、クエリ語句抽出部138とベクトル化処理部139と類似度算出部140によって実現される。
また、類似度算出部140は、各文書の文書IDと、当該文書と検索クエリとの類似度を対応付けて、文書ソート部141に出力する。すると、文書ソート部141は、類似度の降順に文書集合132内の文書をソートし、ソート結果を表示するよう表示部142に命令する。表示部142は、例えば、携帯電話130が備える液晶ディスプレイである。
例えば、文書集合132中の各文書にタイトルが付けられている場合、文書ソート部141は、類似度の降順に文書のタイトルを表示部142に表示させてもよい。文書ソート部141は、さらに各文書について類似度の値を表示部142に表示させてもよい。
以上のように、第1実施形態では、文書ソート部141と表示部142により、類似度に基づいて検索クエリと類似する文書を提示する提示手段が実現される。換言すれば、ソートされた順序によって、検索クエリとの類似度の高さが提示される。
なお、文書ソート部141は、類似度の高い一部の文書のみを選択して、選択した文書に関する情報(例えば文書のタイトル)のみを類似度の降順に表示部142に表示させてもよい。例えば、閾値A、B、またはCを利用して、文書ソート部141は、類似度が上位A%の文書のみ、類似度が上位B位までの文書のみ、または類似度が閾値C以上の文書のみを選択してもよい。閾値A〜Cは、所定の値であってもよく、類似度の分布に基づいて文書ソート部141が動的に決定する値であってもよい。
いずれにせよ、携帯電話130のユーザは、表示部142に表示された内容を見て、所望の文書を選択するための入力を行うことができる。入力部135はその入力を受け付けて、入力内容を文書選択部143に通知する。
すると、文書選択部143は、入力部135を介した入力で指定された文書の文書IDを認識して当該文書を文書集合132の中から選択し、選択した当該文書を表示部142に表示させる。
例えば、上記のように類似度の降順に文書のタイトルを表示部142が表示している場合、ボタン操作により1つのタイトルが選択されると、文書選択部143は選択されたタイトルに対応する文書IDをキーにして文書集合132から文書を読み出す。そして、文書選択部143は、読み出した文書を表示部142に表示させる。
このように、携帯電話130では形態素解析が行われない。しかし、例えば「カメラで写真を撮影してメールで送る」のような自然言語文が検索クエリとして入力部135から入力された場合、「カメラ」、「写真」、「撮影」、「メール」などの部分文字列がクエリ語句として抽出される。したがって、形態素解析を行うのに十分な能力のプロセッサを携帯電話130が備えていなくても、擬似的な形態素解析が実現され、その結果、検索クエリと類似する文書がユーザに対して提示される。
ところで、図1のサーバ110と携帯電話130はいずれも、図2にハードウェア構成を例示する情報処理装置200の一例である。
情報処理装置200は、入力装置201と出力装置202と記憶装置203とCPU(Central Processing Unit)204とメモリ205を有し、これら各部はバス206により互いに接続されている。
入力装置201は、例えば、ボタン、キーボード、マウスやタッチパッドなどのポインティングデバイスなどである。出力装置202は、例えばディスプレイである。記憶装置203は、例えばハードディスク装置やフラッシュメモリなどの不揮発性記憶装置であり、各種データやプログラムを格納する。メモリ205は、RAM(Random Access Memory)などの書き換え可能なメモリである。
情報処理装置200がサーバ110である場合、図1の記憶部111は記憶装置203により実現される。また、形態素解析部115、文書語句抽出部116、語句リスト生成部117、およびインデックス生成部118の各部は、CPU204により実現される。すなわち、これら各部は、CPU204が、記憶装置203からプログラムをメモリ205にロードし、メモリ205をワークエリアとして利用しながらプログラムを実行することにより実現される。
情報処理装置200が携帯電話130である場合、図1の記憶部131は記憶装置203により実現され、入力部135は入力装置201により実現され、表示部142は出力装置202により実現される。また、部分文字列処理部136、語句一致判定部137、クエリ語句抽出部138、ベクトル化処理部139、類似度算出部140、文書ソート部141、および文書選択部143の各部は、CPU204により実現される。すなわち、これら各部は、CPU204が、記憶装置203からプログラムをメモリ205にロードし、メモリ205をワークエリアとして利用しながらプログラムを実行することにより実現される。
なお、サーバ110と携帯電話130に関して上述したプログラムは、予め記憶装置203に記憶されていてもよいし、情報処理装置200が備える不図示の通信インタフェースを介してネットワークからダウンロードされ、記憶装置203に格納されてもよい。
あるいは、プログラムは、コンピュータ読み取り可能な記憶媒体に格納されて提供され、サーバ110または携帯電話130としての情報処理装置200にインストールされてもよい。記憶媒体としては、CD(Compact Disc)やDVD(Digital Versatile Disk)などの光ディスク、光磁気ディスク、磁気ディスク、フラッシュメモリなどの半導体メモリなどが利用可能である。
なお、実施形態によっては、サーバ110または携帯電話130において、CPU204がプログラムを実行することで実現可能な上記各部は、その一部または全部が専用のハードウェア回路により実現されてもよい。
続いて、以上に概要を説明した第1実施形態の利点の理解を助けるため、比較例について説明する。図3は、比較例について説明する図である。図3の比較例は、検索時にも形態素解析が行われる例である。
図1を参照して説明したように、第1実施形態では、検索時には形態素解析は行われず、より簡便な処理により擬似的な形態素解析が実現される。したがって、第1実施形態によれば、検索を行う携帯電話130が搭載している図2の記憶装置203およびメモリ205の容量とCPU204の処理能力は、形態素解析を行うのには不十分なレベルであってもよい。それに対し、図3の比較例では、検索を行う機器が、形態素解析を行うのに十分な容量の記憶装置およびメモリを備えるとともに、十分な処理能力を持ったCPUを備える必要がある。
具体的には、図3の比較例では、検索対象文書集合301に対して辞書302を用いた形態素解析が事前処理として行われ、形態素解析結果303から、検索対象文書集合301中の各文書を特徴づけるベクトルのデータが生成される。なお、図3に示した形態素解析結果303は、「文書D1は、形態素T1、T3、T5、T10、……が順に並んでいる文書である」といったことを示している。
そして、実際の検索時には、例えば「カメラで写真を撮影してメールで送る」のような自然言語文が検索クエリ304として与えられると、同じ辞書302を用いた形態素解析が行われる。その結果、例えば「カメラ/で/写真/を/撮影/し/て/メール/で/送/る」のように区切られた形態素列が、形態素解析結果305として得られる。そして、形態素解析結果305からベクトルが計算され、形態素解析結果303から得られた各ベクトルとの間で類似度が計算される。
このように、図3の比較例では、検索時にも形態素解析が行われる。よって、比較例では、検索を行う機器(例えば携帯電話や家電製品など)が、大容量の辞書302を格納するのに十分な記憶装置と、形態素解析を行うのに十分な処理能力のCPUと、形態素解析を行うのに十分な容量のメモリを備える必要がある。
以上のとおり、第1実施形態は、自然言語文の検索クエリを受け付ける検索の実現において、検索を行う機器のハードウェア構成に対する制約が比較例よりも緩い。したがって、第1実施形態は、比較例よりも多くの機器において、自然言語文の検索クエリを受け付ける検索を可能とするものであり、各種機器のユーザの利便性向上に役立つ。
続いて、図4〜8を参照して、第1実施形態についてさらに詳細に説明する。
図4は、第1実施形態における語句リスト生成処理のフローチャートである。
ステップS101で形態素解析部115は、文書集合112内の1番目の文書のテキストを取得する。
そして、ステップS102で形態素解析部115は、ステップS101(または後述のステップS109)で取得したテキストの形態素解析を、辞書113と接続表114を用いて行い、形態素解析の結果を文書語句抽出部116に出力する。ステップS102ではさらに、文書語句抽出部116が、例えば品詞に関する情報も含んでいる形態素解析の結果から語句のみを抽出する。
そして、文書語句抽出部116は、抽出した語句を語句リスト生成部117とインデックス生成部118に出力する。なお、その後のインデックス生成部118の動作の説明は図4では割愛し、図6とともに後述する。
続くステップS103で語句リスト生成部117は、ステップS102で文書語句抽出部116から受け取った一群の語句のうち、1番目の語句を取得する。例えば、ステップS102で形態素解析された文書が100個の形態素からなる場合、ステップS103では100個のうちの1番目の語句が取得される。
そして、ステップS104で語句リスト生成部117は、ステップS103(または後述のステップS107)で取得した語句が、語句リスト133に未登録の語句であるか否かを判断する。
なお、第1実施形態では、語句リスト生成部117が語句リスト133の生成にあたって、生成途中の語句リスト133のデータをメモリ205上に一時的に記憶する。また、図4の語句リスト生成処理の開始時に、語句リスト生成部117は語句リスト133を空に初期化するものとする。
したがって、ステップS104における判断は、具体的には語句リスト生成部117が、ステップS103(またはステップS107)で取得した語句を検索キーとして、メモリ205上に記憶された生成途中の語句リスト133を検索する処理を含む。検索の結果、当該語句が語句リスト133中に見つからなければ、語句リスト生成部117は、当該語句を、語句リスト133に未登録の語句であると判断し、処理はステップS105に移行する。他方、当該語句が語句リスト133中に見つかれば、語句リスト生成部117は、当該語句は語句リスト133に登録済みであると判断し、処理はステップS106に移行する。
ステップS105で語句リスト生成部117は、未登録であると判断した語句を語句リスト133に追加する。そして処理はステップS106に移行する。
ステップS106で語句リスト生成部117は、ステップS102で文書語句抽出部116から受け取った語句のうち最後の語句までステップS104〜S105の処理が済んだのか、それとも未処理の語句が残っているのかを判断する。未処理の語句が残っている場合、処理はステップS107に移行する。逆に、ステップS102で受け取ったすべての語句について処理済みの場合は、処理はステップS108に移行する。
ステップS107で語句リスト生成部117は、未処理の語句のうち次の語句を選択し、取得する。そして処理はステップS104に戻る。
また、ステップS102で受け取ったすべての語句について語句リスト生成部117によるステップS104〜S105の処理が済むと、続くステップS108で形態素解析部115は、文書集合112中の最後の文書まで形態素解析を終えたか否かを判断する。最後の文書まで形態素解析が終了していれば、図4の語句リスト生成処理も終了する。他方、まだ形態素解析を行っていない文書が文書集合112中に残っていれば、処理はステップS109に移行する。
そして、ステップS109で形態素解析部115は、まだ形態素解析を行っていない、文書集合112中の次の文書を選択し、選択した文書のテキストを取得する。そして、処理はステップS102に戻る。
以上の語句リスト生成処理によれば、文書集合112中に出現するすべての形態素が語句リスト133に登録され、かつ、文書集合112中に出現しない形態素は語句リスト133に登録されない。したがって、辞書113と比べて大幅に容量を削減しつつも、文書集合112の検索に有効な語句は漏れなく登録した、効率的な語句リスト133が生成される。
図5は、第1実施形態の語句リストの例を説明する図である。図5に例示する語句リスト133は、文書集合112内の文書から形態素解析により抽出された語句T1、T2、T3、T4、T5、……を含む。
なお、図5では説明の便宜上、語句リスト133をテーブル形式で図示しているが、語句リスト133を実装するための具体的なデータ構造は、実施形態に応じて任意である。
例えば、語句リスト133は、改行コードやカンマなどの特定の区切り文字によって各語句の間を区切って単に各語句を並べただけのテキストファイルとして実装されてもよい。語句リスト133中の各語句は、例えば文字コードによる辞書式順序など、所定のソート順でソートされていてもよいし、ソートされていなくてもよい。
あるいは、語句リスト133は、所定のハッシュ関数hを使って語句Tjから得られるハッシュ値Hj=h(Tj)に対応するエントリに語句Tjを登録したハッシュテーブルによって実装されていてもよい。ハッシュ関数hの具体的定義は、任意に定めることができる。
または、語句リスト133は、平衡2分探索木、トライ(trie)、パトリシア木などの木構造を用いて実装されてもよいし、その他のデータ構造を用いて実装されていてもよい。語句リスト133の具体的なデータ構造に応じて、図4のステップS104における具体的な検索アルゴリズムおよびステップS105における具体的な追加操作も異なる。
図6は、ベクトルデータの例を説明する図である。第1実施形態ではベクトル検索が行われ、各文書と検索クエリはベクトルにより特徴づけられる。なお、各ベクトルの次数をNとすると、Nは語句リスト133に登録されている語句の数に一致する。
図6では模式的に各ベクトルをテーブルの1行として表現している。図6の例では、インデックス134に含まれる各ベクトルは次のとおりである。すなわち、文書D1のベクトルは(0.23,0,0.56,0,……)であり、文書D2のベクトルは(0,0.41,0.49,0,……)であり、文書D3のベクトルは(0,0,0.78,0.21,……)である。また、検索クエリを特徴づけるベクトル144は(0.29,0,0.67,0.32,……)である。
インデックス生成部118はインデックス134を生成するために、文書集合112中の各文書Di(1≦i≦M、Mは文書集合112の文書数)について、例えば次のような処理を行う。
すなわち、インデックス生成部118は、文書Diを形態素解析部115が形態素解析した結果から文書語句抽出部116が抽出した一群の語句を受け取り、語句ごとに文書Di中の出現回数を数える。また、インデックス生成部118は、語句ごとに、当該語句が出現した文書数を数える。
ここで、ある文書Diと語句Tjの組に対して定義されるTFを「TF(Di,Tj)」と表記することにすると、TF(Di,Tj)は、文書Diに語句Tjが出現した回数(または、その回数に基づいて正規化などの操作により算出される値)である。TF(Di,Tj)は、値が大きいほど、文書Diに語句Tjが頻出することを示し、文書Diにとって語句Tjが重要であることを示唆する。なお、正規化の例は、文書Diに出現する語句の総数(延べ数)による除算や、対数をとることである。
また、ある語句Tjに対して定義されるIDFを「IDF(Tj)」と表記することにすると、IDF(Tj)は、語句Tjが出現する文書の数の逆数(または、その数に基づいて正規化などの操作により算出される値)である。IDF(Tj)は、値が大きいほど、語句Tjが特殊であり、文書の特徴づけにとって重要な役割を果たすことを示す。なお、上記の正規化は、文書集合中の文書数Mによる正規化でもよいし、対数をとる操作を含んでもよい。
よって、文書Diと語句Tjの組に関して、TF(Di,Tj)・IDF(Tj)が大きいほど、語句Tjが文書Diにとって重要であることを示す。
インデックス生成部118は、各文書Diと語句Tjの組に対して定義されるTF(Di,Tj)および各語句Tjに対して定義されるIDF(Tj)を、上記のようにして数えた結果から算出する。
そして、インデックス生成部118は、算出したTF(Di,Tj)とIDF(Tj)を使って、文書DiのベクトルViを算出する。すなわち、インデックス生成部118は、各1≦j≦NについてベクトルViの第j成分(換言すれば文書Diに関する語句Tjの重み)としてTF(Di,Tj)・IDF(Tj)を算出することで、ベクトルViを算出する。さらに、第1実施形態では、インデックス生成部118は、算出したベクトルViを、大きさが1になるように正規化する。
インデックス生成部118は以上のようにして、文書集合112の各文書Di(1≦i≦M)について当該文書DiのベクトルViを算出することで、ベクトルViの集合体であるインデックス134を生成する。
また、以下では説明の便宜上、入力部135から入力された検索クエリを「Q」と表記することにすると、ベクトル化処理部139もインデックス生成部118と同様の方法でベクトル144を算出する。
すなわち、ベクトル化処理部139は、クエリ語句抽出部138からの出力にしたがって、検索クエリQと語句Tjの組に対して定義されるTF(Q,Tj)を算出する。具体的には、TF(Q,Tj)は、検索クエリQが入力部135から入力されたときにクエリ語句抽出部138が語句Tjをクエリ語句として抽出した回数(または、その回数に基づいて正規化などの操作により算出される値)である。
また、第1実施形態では、図示は省略したが、文書集合112に対応して予め計算された各語句Tj(1≦j≦N)のIDF(Tj)の値を含むデータが、ベクトル化処理部139用の内部データとして、例えば記憶部131に予め記憶されている。例えば、図5の語句リスト133が、各語句TjにIDF(Tj)の値を対応付けた形式であってもよい。
したがって、ベクトル化処理部139は、算出したTF(Q,Tj)の値と予め記憶されているIDF(Tj)の値の積を、検索クエリQのベクトル144の第j成分として算出することができる。第1実施形態ではその後さらに、ベクトル化処理部139は、大きさが1になるようにベクトル144を正規化する。
さて、続いて図7と図8を参照して、携帯電話130における処理の詳細について説明する。
図7は、第1実施形態におけるクエリ語句抽出処理のフローチャートである。クエリ語句抽出処理は、入力部135が検索クエリの入力を受けたことを契機として開始される。
ステップS201で部分文字列処理部136は、入力部135から検索クエリを取得する。
次のステップS202で部分文字列処理部136は、切り出し文字数に初期値を設定する。なお、初期値は1以上の任意の値でよい。また、初期値は予め設定された値だが、固定の定数でもよいし、入力部135などのユーザインタフェースを介して可変的に設定可能な値でもよい。例えば、初期値が2のとき、切り出し文字数として2が設定される。
続いて、ステップS203で部分文字列処理部136は、切り出し位置を検索クエリの1番目の文字に設定する。
そして、ステップS204で部分文字列処理部136は、ステップS203(または後述のステップS208)で設定した切り出し位置から、ステップS202(または後述のステップS210)で設定した切り出し文字数の分だけ文字列を切り出して取得する。そして、部分文字列処理部136は、切り出した文字列を形態素候補として語句一致判定部137に出力する。
例えば、ステップS201で取得した検索クエリが「カメラで写真を撮影してメールで送る」の場合、切り出し文字数が2で切り出し位置が1なら「カメ」という文字列が、切り出し文字数が2で切り出し位置が2なら「メラ」という文字列が、切り出される。また、切り出し文字数が3で切り出し位置が1なら「カメラ」という文字列が切り出される。
続くステップS205で語句一致判定部137は、部分文字列処理部136がステップS204で切り出した文字列と語句リスト133内の語句が一致するか否かを判断する。すなわち、語句一致判定部137は、ステップS204で切り出された文字列を検索キーとして語句リスト133を検索し、切り出された文字列と完全に一致する語句が語句リスト133中にあるか否かを判断し、判断結果をクエリ語句抽出部138に通知する。
もし、切り出された文字列と一致する語句が語句リスト133中にあれば、処理はステップS206に移行する。逆に、切り出された文字列と一致する語句が語句リスト133中になければ、処理はステップS207に移行する。
ステップS206でクエリ語句抽出部138は、語句一致判定部137からの通知にしたがい、語句リスト133中に一致する語句があると判断された文字列をクエリ語句として抽出する。
例えば、語句リスト133中に「カメ」や「メラ」という語句がなく、「カメラ」という語句があるとする。すると、ステップS204で「カメ」または「メラ」が切り出された場合には、ステップS206は行われない。逆に、ステップS204で「カメラ」が切り出された場合には、ステップS206でクエリ語句抽出部138が「カメラ」をクエリ語句として抽出する。
ステップS207で部分文字列処理部136は、ステップS204で切り出した文字列の末尾が検索クエリの末尾であるか否かを判断する。切り出した文字列の末尾が検索クエリの末尾のとき、現在の切り出し文字数での切り出し方は既に網羅されたということなので、処理はステップS209に移行する。逆に、切り出した文字列の末尾が検索クエリの末尾ではないとき、現在の切り出し文字数での切り出し方はまだ網羅されていないので、処理はステップS208に移行する。
ステップS208で部分文字列処理部136は、切り出し位置を1文字後方へ移動する。そして、処理はステップS204に戻る。
また、ステップS209で部分文字列処理部136は、現在の切り出し文字数が設定最大値と等しいか否かを判断する。なお、設定最大値は実施形態に応じて任意である。また、設定最大値は予め設定された値だが、固定の定数でもよいし、入力部135などのユーザインタフェースを介して可変的に設定可能な値でもよい。
現在の切り出し文字数が設定最大値と等しいとき、初期値と設定最大値で規定される範囲内での部分文字列の切り出し方は既に網羅されたということなので、図7のクエリ語句抽出処理は終了する。他方、現在の切り出し文字数が設定最大値より小さいとき、他の切り出し方を試すため、処理はステップS210に移行する。
ステップS210で部分文字列処理部136は、切り出し文字数を1文字増加させる。そして、処理はステップS203に戻る。
例えば、ステップS201で取得した検索クエリが「カメラで写真を撮影してメールで送る」で、初期値が2で、設定最大値が5とする。そして、語句リスト133には「カメラ」、「写真」、「撮影」、「メール」などの語句が登録されているとする。すると、図7のクエリ語句抽出処理の結果として、少なくとも「カメラ」、「写真」、「撮影」、「メール」という4つの語句がクエリ語句として抽出される。また、この例では、これら4つの語句の検索クエリ中の出現回数はいずれも1である。
もちろん、語句リスト133の内容によっては、上記に例示した4つの語句以外の語句がクエリ語句として抽出されることもあるが、いずれにせよ、高負荷な形態素解析よりも遥かに単純なクエリ語句抽出処理により、擬似的な形態素解析が実現される。すなわち、検索クエリを形態素解析した場合と同じ(または、ほぼ同じ)結果が、クエリ語句として得られる。さらに、クエリ語句抽出処理は単純な処理なので、ハードウェアリソースが限られている(例えばCPU204の処理能力が低かったり、記憶装置203やメモリ205の容量が小さかったりする)場合にも、現実的な時間で実行可能である。
なお、図7の例では、切り出し文字数に関するループの中に切り出し位置に関するループが含まれているが、実施形態によっては、逆に、切り出し位置に関するループの中に切り出し文字数に関するループが含まれていてもよい。つまり、初期値と設定最大値で規定される範囲内での部分文字列の切り出し方が網羅されれば、ステップの順序は図7と異なっていてもよい。
図8は、検索結果を表示する処理のフローチャートである。図8の処理は、ベクトル化処理部139が、図7の処理の結果を使って、図6に関して説明したようにしてベクトル144を求めた後に、開始される。
ステップS301で類似度算出部140は、ベクトル化処理部139から検索クエリのベクトル144を取得する。
次に、ステップS302で類似度算出部140は、インデックス134の中から、文書集合132中の1番目の文書のベクトルを取得する。
そして、ステップS303で類似度算出部140は、検索クエリのベクトル144と、ステップS302(または後述のステップS305)で取得した文書のベクトルから、検索クエリと当該文書の類似度を算出する。類似度算出部140は、算出した類似度を当該文書の文書IDと対応付けてメモリ205上に記憶する。
なお、第1実施形態では、ベクトルの大きさが1に正規化されているので、ベクトルの内積が類似度として利用される。実施形態によっては、ベクトル同士がなす角度などが類似度として利用されてもよい。
また、類似度の定義から明らかに、文書集合112中(すなわち文書集合132中)に出現しない語句は、類似度の算出において無視しても構わないものであり、検索に不要である。だからこそ、擬似的な形態素解析のための適切な語句集合として、大規模な辞書113に出現するすべての語句の集合ではなく、そこから絞り込まれた語句リスト133が利用可能なのである。
さて、次のステップS304で類似度算出部140は、文書集合132中の最後の文書まで(つまり、インデックス134中のすべてのベクトルについて)類似度の算出を終えたか否かを判断する。まだ類似度を算出していない文書が残っている場合、処理はステップS305に移行し、最後の文書まで類似度を算出済みの場合、処理はステップS306に移行する。
ステップS305で類似度算出部140は、次の文書を選択して当該文書のベクトルをインデックス134の中から取得する。そして処理はステップS303に戻る。
ステップS306で文書ソート部141は、類似度の高い文書から順に適合文書として検索結果を表示部142に表示させる。すなわち、文書ソート部141は、ステップS303でメモリ205に記憶された文書IDと類似度の組を、類似度をソートキーにして降順にソートし、ソートした結果の順序にしたがって、1つまたは複数の文書に関する情報を表示部142に表示させる。
具体的には、文書ソート部141は、文書の全部を表示部142に表示させてもよいし、タイトルや冒頭部分など文書の一部のみを表示部142に表示させてもよい。また、文書ソート部141は、例えば、類似度が閾値以上の文書のみを選択したり、あるいは類似度順に上位から所定の件数の文書のみを選択したりして、選択により絞り込んだ文書のみを表示部142に表示させてもよい。
以上説明した第1実施形態によれば、たとえ形態素解析を行うには携帯電話130のリソースが貧弱であったとしても、携帯電話130において簡素な処理により擬似的な形態素解析が実現される。したがって、携帯電話130において所定の文書集合132に対する自然言語による検索が可能となり、例えば文書集合132がマニュアル類の文書集合であれば、ユーザの利便性が向上する。
なお、図1には1台の携帯電話130しか図示していないが、サーバ110が語句リスト133とインデックス134を1回生成するだけで、任意の台数の携帯電話130において、自然言語による検索が可能となる。例えば、サーバ110が生成した語句リスト133とインデックス134は、一旦サーバ110内に格納され、携帯電話130の生産工場において各携帯電話130の記憶部131にコピーされてもよい。
また、マニュアル類は、常時動的に内容が変更されるものではないが、時には訂正や追加のために内容が変更される可能性もある。第1実施形態は、文書集合112(つまり文書集合132)の内容が変更される場合にも対応可能である。
すなわち、サーバ110は、変更後の文書集合112から再度語句リスト133とインデックス134を生成しなおせばよい。そして、携帯電話130は、変更後の文書集合132と、新たに生成された語句リスト133とインデックス134を、サーバ110からダウンロードして記憶部131に格納すればよい。すると、内容が変更された文書集合132に対しても、携帯電話130において自然言語による検索が可能となる。
続いて、他のいくつかの実施形態について、第1実施形態との違いを中心に説明する。
図9は、第2〜第4実施形態に共通するシステム構成図である。図9の文書検索システム100aは、サーバ110aと携帯電話130を含む。携帯電話130の構成は図1に示した第1実施形態と同様なので説明を省略する。
サーバ110aは、語句リスト生成部117の代わりに語句リスト生成部117aを有し、容量設定部119が追加されている点において、図1のサーバ110と異なる。
容量設定部119は、語句リスト133の容量の上限を語句リスト生成部117aに対して指定する。なお、上限は、例えば第5実施形態ではバイト数で表現されるが、語句の数で表現されてもよい。
また、例えば、容量設定部119は、所定の定数を語句リスト133の容量の上限として語句リスト生成部117aに通知してもよい。あるいは、キーボードやマウス等の入力装置を容量設定部119が備え、入力装置から入力された値を容量設定部119が語句リスト133の容量の上限として語句リスト生成部117aに通知してもよい。
語句リスト生成部117aは、語句リスト生成部117と類似の方法で語句リスト133を生成するが、その際に、容量設定部119により設定された上限以下になるように語句リスト133の容量を抑える。
なお、第2および第3実施形態における文書語句抽出部116は第1実施形態と同様だが、第4実施形態では文書語句抽出部116の動作が第1実施形態と多少異なる。また、第2実施形態では、インデックス生成部118から語句リスト生成部117aへの出力がある。第2〜第4実施形態の間でのこれらの差異の詳細は後述する。
以下、第2〜第4実施形態について、具体的に説明してゆく。
図10は、第2実施形態における語句リスト生成処理のフローチャートである。
ステップS401において、形態素解析部115、文書語句抽出部116、語句リスト生成部117aが協働して、図4の語句リスト生成処理と類似の処理により文書集合112から語句を抽出する。ステップS401は図4の語句リスト生成処理と類似の処理だが、次の(a1)〜(a4)の点で図4の語句リスト生成処理とは異なる。
(a1)第2実施形態では、ステップS401の結果として得られるデータは、語句リスト133aそのものとしてではなく、語句リスト133aを作るための暫定的なデータ(以下、「一次語句リスト」という)として使われる。したがって、図4に関する説明中の語句リスト133は、ステップS401の処理中では、一次語句リスト120aに置き換えられる。
(a2)図4に関する説明中の語句リスト生成部117は、ステップS401の処理中では、語句リスト生成部117aに置き換えられる。
(a3)一次語句リスト120aの形式は、図5に示した第1実施形態の語句リスト133の形式とは異なる。すなわち、図11に例示するように一次語句リスト120aは、語句とDF値(すなわち当該語句が出現する文書の数)を対応付けて記憶するデータである。図11では、例えば、語句T1〜T5のDF値がそれぞれ、21、18、13、8、5であることが示されている。
(a4)このような形式の一次語句リスト120aを生成するために、第2実施形態では語句リスト生成部117aとインデックス生成部118が協調して動作する。
具体的には、インデックス生成部118は、各語句Tjに関するIDF(Tj)を算出するための準備として、語句Tjが出現する文書の数であるDF(Tj)を計数している。そこで、インデックス生成部118は、例えば語句リスト生成部117aが図11の一次語句リスト120aに図4と同様にして各語句を登録し終わった後に、次のように動作してもよい。すなわち、インデックス生成部118は、DF(Tj)を計数した各語句Tjについて、図11の一次語句リスト120aにおいて当該語句Tjを検索キーにしてエントリを検索し、見つかったエントリのDF値として、算出済みのDF(Tj)の値を設定してもよい。
または、実施形態によっては、インデックス生成部118は、語句リスト生成部117aによる一次語句リスト120aの生成と並行しながら、一次語句リスト120a中のDF値を設定してもよい。
例えば、語句リスト生成部117aは、図4のステップS105で語句リストに新たな語句のエントリを追加する際には、当該エントリのDF値を0に初期化する。そして、語句リスト生成部117aが図4のステップS103〜S107を実行するのと並行して、インデックス生成部118は、現在処理中の文書中に出現する語句を、重なりを除いて、RAMなどに記憶していく。インデックス生成部118は、文書の最後の語句まで処理し終えたら、現在処理中の文書中に出現する各語句について、図11の一次語句リスト120a中の当該語句のエントリにおけるDF値を、1だけインクリメントする。
さて、上記のようにしてステップS401で一次語句リスト120aが作成されると、次のステップS402で語句リスト生成部117aは、語句優先度処理として、DF値の降順に一次語句リスト120aをソートする処理を行う。図11の一次語句リスト120aは、正確には、こうしてソートされた後の状態を示している。
続くステップS403で語句リスト生成部117aは、容量設定部119から容量設定値121の入力を受け、語句削減処理を行う。すなわち、語句リスト生成部117aは、一次語句リスト120aの容量が容量設定値121以下になるまで、DF値が高い順に一次語句リスト120aからエントリを削除していく。語句削減処理の結果得られたデータが、第2実施形態における語句リスト133aである。語句リスト133aが得られると図10の語句リスト生成処理も終了する。
図12は、第2実施形態の語句リストの例を説明する図である。図11と図12の例は、DF値が2番目に高い語句T2のエントリまでを削除したところで語句リスト133aが容量設定値121以下の容量になった例を示している。
なお、第2実施形態についての理解の助けとするために、図12にはDF値も示してあるが、携帯電話130は検索時にDF値そのものは利用しないので、語句リスト133aはDF値のフィールドを含まなくてよい。
すなわち、図10のステップS403において語句リスト生成部117aは、語句のフィールドのみの容量を計算して容量設定値121以下になるまで一次語句リスト120aから順次エントリを削除してもよい。そして、語句のフィールドのみの容量が容量設定値121以下になったら、語句リスト生成部117aは、DF値のフィールドを一次語句リスト120aから削除することで最終的な語句リスト133aを得ることができる。
第2実施形態によれば、文書集合112中に出現する語句の中で相対的にDF値の高い語句(換言すればIDFの値が小さい語句)は一次語句リスト120aから削除され、語句リスト133aに含まれない。つまり、文書集合112に現れる語句のうち、ありふれていて文書の特徴にはなり難い語句から順に、一次語句リスト120aから削除される。
したがって、語句リスト133aは、容量設定値121による制限のもとで、文書の特徴づけに役立つ度合の高い重要な語句(換言すれば、相対的にDF値の低い語句)を効率的に登録したデータである。容量設定値121は携帯電話130の記憶部131の容量に応じて適宜定めることができるので、第2実施形態によれば、サーバ110は、検索に有効な語句を、記憶部131の容量に合わせて効率的に、語句リスト133aとして生成することができる。
続いて、図13〜15を参照して第3実施形態について説明する。
図13は、第3実施形態における語句リスト生成処理のフローチャートである。
ステップS501において、形態素解析部115、文書語句抽出部116、語句リスト生成部117aが協働して、図4の語句リスト生成処理と類似の処理により文書集合112から語句を抽出する。ステップS501は図4の語句リスト生成処理と類似の処理だが、次の(b1)〜(b4)の点で図4の語句リスト生成処理とは異なる。
(b1)第3実施形態では、ステップS501の結果として得られるデータは、語句リスト133bそのものとしてではなく、語句リスト133bを作るための一次語句リスト120bとして使われる。したがって、図4に関する説明中の語句リスト133は、ステップS501の処理中では、一次語句リスト120bに置き換えられる。
(b2)図4に関する説明中の語句リスト生成部117は、ステップS501の処理中では、語句リスト生成部117aに置き換えられる。
(b3)一次語句リスト120bの形式は、図5に示した第1実施形態の語句リスト133の形式とは異なる。すなわち、図14に例示するように一次語句リスト120bは、語句と当該語句の文字列長を対応付けて記憶するデータである。図14では、例えば、語句T1〜T5の文字列長が、それぞれ13、12、10、5、3であることが示されている。
(b4)このような形式の一次語句リスト120bを生成するために、第3実施形態では図4のステップS105が次のように変形される。すなわち、語句リスト生成部117aは、ステップS105で、未登録の語句の文字列長を求め、当該語句と求めた文字列長とを対応付けて一次語句リスト120bに登録する。
さて、上記のようにしてステップS501で一次語句リスト120bが作成されると、次のステップS502で語句リスト生成部117aは、語句優先度処理として、文字列長の降順に一次語句リスト120bをソートする処理を行う。図14の一次語句リスト120bは、正確には、こうしてソートされた後の状態を示している。
続くステップS503で語句リスト生成部117aは、容量設定部119から容量設定値121の入力を受け、語句削減処理を行う。すなわち、語句リスト生成部117aは、一次語句リスト120aの容量が容量設定値121以下になるまで、文字列長が長い順に一次語句リスト120bからエントリを削除していく。語句削減処理の結果得られたデータが、第3実施形態における語句リスト133bである。語句リスト133bが得られると図13の語句リスト生成処理も終了する。
図15は、第3実施形態の語句リストの例を説明する図である。図14と図15の例は、文字列長が2番目に長い語句T2のエントリまでを削除したところで語句リスト133bが容量設定値121以下の容量になった例を示している。
なお、第3実施形態についての理解の助けとするために、図15には文字列長も示してあるが、携帯電話130は検索時に文字列長を利用しないので、語句リスト133bは文字列長のフィールドを含まなくてよい。
すなわち、図13のステップS503において語句リスト生成部117aは、語句のフィールドのみの容量を計算して容量設定値121以下になるまで一次語句リスト120bから順次エントリを削除してもよい。そして、語句のフィールドのみの容量が容量設定値121以下になったら、語句リスト生成部117aは、文字列長のフィールドを一次語句リスト120bから削除することで最終的な語句リスト133bを得ることができる。
第3実施形態では、容量設定値121以下になるまで一次語句リスト120bから何らかの順でエントリを順次削除していく場合に、最終的に残るエントリの数をなるべく多くする方法で削除が行われる。すなわち、単純化した例を用いて説明すれば、10文字の語句を1つ記憶するよりも2文字の語句を5つ記憶する方が、語句リスト133bは同じ容量設定値121の範囲内でより多くの語句を記憶することができるということである。したがって、第3実施形態によれば、同じ容量設定値121の範囲内で、携帯電話130が、なるべく多様な検索キーワードに対処することができる。
もちろん、語句リスト133bを実装するデータ構造の違いによって、必ずしも1つの語句の文字列長は、語句リスト133b中で当該語句のために使われる容量に厳密に比例するとは限らない。しかし、語句の文字列長が長いほど、当該語句のために使われる容量も多くなることに変わりはないので、上記の議論は同様に成り立つ。つまり、第3実施形態によれば、語句リスト133bを実装するデータ構造の違いによらず、同じ容量設定値121の範囲内で、より多くのエントリを語句リスト133bに残すことができる。
続いて、図16〜19を参照して第4実施形態について説明する。
図16は、第4実施形態における語句リスト生成処理のフローチャートである。
ステップS601において、形態素解析部115、文書語句抽出部116、語句リスト生成部117aが協働して、図4の語句リスト生成処理と類似の処理により文書集合112から語句を抽出する。ステップS601は図4の語句リスト生成処理と類似の処理だが、次の(c1)〜(c4)の点で図4の語句リスト生成処理とは異なる。
(c1)第4実施形態では、ステップS601の結果として得られるデータは、語句リスト133cそのものとしてではなく、語句リスト133cを作るための一次語句リスト120cとして使われる。したがって、図4に関する説明中の語句リスト133は、ステップS601の処理中では、一次語句リスト120cに置き換えられる。
(c2)図4に関する説明中の語句リスト生成部117は、ステップS601の処理中では、語句リスト生成部117aに置き換えられる。
(c3)一次語句リスト120cの形式は、図5に示した第1実施形態の語句リスト133の形式とは異なる。すなわち、図17に例示するように一次語句リスト120cは、語句と当該語句の品詞を対応付けて記憶するデータである。図17では、例えば、語句T1〜T5の品詞が、それぞれ名詞、形容詞、接続詞、動詞、助動詞であることが示されている。
(c4)このような形式の一次語句リスト120cを生成するために、第4実施形態では図4のステップS102〜S107が次のように変形される。
すなわち、ステップS102において文書語句抽出部116は、形態素解析部115による形態素解析の結果から語句と当該語句の品詞の組を得て語句リスト生成部117aに出力するとともに、語句のみを抽出してインデックス生成部118に出力する。また、図4のステップS103〜S107に関する説明中の「語句」は、第4実施形態では「語句と品詞の組」に置き換えられる。すなわち、第4実施形態では、同形異品詞の語句は別のエントリとして一次語句リスト120cに登録される。
さて、上記のようにしてステップS601で一次語句リスト120cが作成されると、次のステップS602で語句リスト生成部117aは、語句優先度処理として、品詞優先度情報122により規定される優先度の順に一次語句リスト120cをソートする処理を行う。品詞優先度情報122は、図9では省略されているが、例えば記憶部111に格納されている。
図18は、第4実施形態で使われる品詞優先度情報の例を説明する図である。品詞優先度情報122は、優先度と品詞を対応付けて記憶するデータである。例えば、図18の例では、1〜6という数値で表された優先度に、それぞれ名詞、動詞、形容詞、副詞、接続詞、助動詞が対応付けられている。なお、品詞優先度情報122の品詞のフィールドに指定されるのは、辞書113が利用する品詞体系で使われる品詞である。
なお、第4実施形態では数値が小さいほど優先度が高い。また、図18に例示するように、内容語の優先度を相対的に高くし、機能語の優先度を相対的に低くすることが好ましい。なぜなら、内容語は文書の特徴を表しやすく、機能語は文書の特徴を表しにくいことが経験的に分かっているからである。もちろん、実施形態に応じて、優先度は任意に設定可能である。
さて、図16の説明に戻ると、続くステップS603で語句リスト生成部117aは、容量設定部119から容量設定値121の入力を受け、語句削減処理を行う。すなわち、語句リスト生成部117aは、一次語句リスト120cの容量が容量設定値121以下になるまで、品詞優先度情報122で規定される優先度が低いものから順に、一次語句リスト120cからエントリを削除していく。語句削減処理の結果得られたデータが、第4実施形態における語句リスト133cである。語句リスト133cが得られると図16の語句リスト生成処理も終了する。
図19は、第4実施形態の語句リストの例を説明する図である。例えば、語句T1は、図18の品詞優先度情報122によれば1番優先度の高い名詞であるから語句リスト133cに残っている。同様に、動詞である語句T4と形容詞である語句T2も語句リスト133cに残っている。しかし、例えば、優先度が低い助動詞である語句T5は、一次語句リスト120cから削除され、語句リスト133cには含まれない。
なお、第4実施形態についての理解の助けとするために、図19には品詞も示してあるが、携帯電話130は検索時に品詞を利用しないので、語句リスト133cは品詞のフィールドを含まなくてよい。
すなわち、図16のステップS603において語句リスト生成部117aは、語句のフィールドのみの容量を計算して容量設定値121以下になるまで一次語句リスト120cから順次エントリを削除してもよい。そして、語句のフィールドのみの容量が容量設定値121以下になったら、語句リスト生成部117aは、品詞のフィールドを一次語句リスト120cから削除することで最終的な語句リスト133cを得ることができる。
第4実施形態では、適切に設定された品詞優先度情報122を利用することで、文書の特徴を表しにくい語句を一次語句リスト120cから取り除くことが可能となる。換言すれば、第4実施形態では、検索にとってより有用な品詞の語句を効率的に語句リスト133cに登録することが可能となる。したがって、第4実施形態は、携帯電話130における検索精度の向上という効果を奏する。
なお、以上説明した第2〜第4実施形態に関して、一次語句リスト120a〜120cおよび語句リスト133a〜133cを実装する具体的なデータ構造は任意である。
続いて、図20〜21を参照して第5実施形態について説明する。第5実施形態では、第1実施形態に関して図7を参照して説明したクエリ語句抽出処理が高速化され、具体的には図21のように変形される。そのため、第5実施形態では、図5の語句リスト133の代わりに図20の語句リスト133dが利用される。
図20は、第5実施形態の語句リストの例を説明する図である。第5実施形態における語句リスト133dは、文書集合112から抽出された語句の集合を示すだけでなく、文書集合112から抽出された語句の文字列長の集合を示すデータである。なお、以下では説明の便宜上、文書集合112からは語句T1〜T13のみが抽出されたものとする。
語句リスト133dを実装するデータ構造は任意だが、図20では、第5実施形態の理解を助けるために語句と当該語句の文字列長を対応付けたエントリを含むテーブル形式で語句リスト133dを示している。
図20の例では、語句リスト133dが、語句T1〜T13に対応するエントリを含む。そして、語句T1〜T3の文字列長は2、語句T4〜T5の文字列長は3、語句T6〜T9の文字列長は5、語句T10の文字列長は7、語句T11〜T12の文字列長は8、語句T13の文字列長は10である。また、図20に示すように、語句リスト133dは文字列長の昇順にソートされている。
しかし、上記のとおり、語句リスト133dを実装するデータ構造は任意である。例えば、図20と逆順に語句リスト133dがソートされていてもよいし、テーブル以外のデータ構造が利用されてもよい。
例えば、語句リスト133dは、1つのテキストファイルとして実装され、テキストファイルの1行につき図20の1つのエントリが記録されていてもよい。
あるいは、語句リスト133dを実装するデータ構造によっては、図20のように個々の語句がそれぞれ文字列長と対応付けられていなくてもよい。例えば、語句リスト133dは、文字列長ごとに分けられた複数のテキストファイルと、文書集合112から抽出された語句の文字列長の集合を示す別のファイルにより実装されてもよい。つまり、語句リスト133dは以下の(d1)〜(d7)のファイル群によって実装されてもよい。
(d1)語句T1〜T3を含み、文字列長2に対応するテキストファイル
(d2)語句T4〜T5を含み、文字列長3に対応するテキストファイル
(d3)語句T6〜T9を含み、文字列長5に対応するテキストファイル
(d4)語句T10を含み、文字列長7に対応するテキストファイル
(d5)語句T11〜T12を含み、文字列長8に対応するテキストファイル
(d6)語句T13を含み、文字列長10に対応するテキストファイル
(d7)文書集合112から抽出された語句の文字列長の集合が{2,3,5,7,8,10}であることを示すファイル
あるいは、語句リスト133dは、上記(d7)のファイルと以下の(d8)のファイルにより実装されてもよい。
(d8)文書集合112から抽出された語句の集合{T1,……,T13}を、ハッシュテーブル、平衡2分探索木、トライ、パトリシア木などの適宜のデータ構造で表すためのファイル(例えば、これらのデータ構造がRAM上に展開されるときのメモリイメージをダンプしたバイナリファイルや、データ構造をシリアル化して出力したテキストファイルなど)
また、語句リスト133dは、文字列長を明示するデータを持たなくても、文書集合112から抽出された語句の文字列長の集合を暗黙的に示すことができる。例えば、語句が文字列長の昇順にソートされて区切り文字で区切られて並べられたテキストファイルは、文字列長の集合を暗黙的に示す。
つまり、このテキストファイルを先頭から順に部分文字列処理部136が読み込んだとき、部分文字列処理部136は、語句T1から文字列長2を得ることができ、隣り合う語句T3とT4の間で文字列長が変化することから次の文字列長3を得ることもできる。以下同様にして部分文字列処理部136は、文書集合112から抽出された語句の文字列長としては5、7、8、10があることを認識することができる。
以上のように、語句リスト133dを実装するデータ構造やファイル構成は任意であるが、いずれにしろ、語句リスト133dは、文書集合112から抽出された語句の集合と、文書集合112から抽出された語句の文字列長の集合を表すデータである。換言すれば、語句リスト133dは、出現形態素集合に含まれる各形態素に当該形態素の文字列長を関連付けるデータである。このような語句リスト133dを生成するために、第5実施形態では、第1実施形態に関して図4を参照して説明したステップS105が次のように変形される。
すなわち、ステップS105で語句リスト生成部117は、生成途中の語句リスト133dに未登録の語句を追加するだけでなく、当該語句の文字列長を求め、求めた文字列長の情報も語句リスト133dの一部として記録する。
例えば、図20のようなテーブル形式で語句リスト133dが実現される場合は、語句リスト生成部117は、未登録の語句を文字列長と対応付けたエントリをテーブルに追加することで、文字列長の情報を語句リスト133dの一部として記録する。あるいは、語句リスト生成部117は、求めた文字列長が上記(d7)のファイルに登録済みか否かを調べ、未登録であれば、求めた文字列長を(d7)のファイルに追加することで、文字列長の情報を語句リスト133dの一部として記録してもよい。
また、語句リスト133dの実装に応じて(例えば、図20のようなテーブル形式で語句リスト133dが実現される場合などに)語句リスト生成部117は、図4の処理の終了後、文字列長の降順に語句リスト133dをソートしてもよい。
図21は、第5実施形態におけるクエリ語句抽出処理のフローチャートである。
ステップS701で部分文字列処理部136は、入力部135から検索クエリを取得する。
次のステップS702で部分文字列処理部136は、語句リスト133dを参照し、最初の切り出し文字数を取得する。例えば、図20の例では、最初の切り出し文字数は2である。
続いて、ステップS703で部分文字列処理部136は、切り出し位置を検索クエリの1番目の文字に設定する。
そして、ステップS704で部分文字列処理部136は、ステップS703(または後述のステップS709)で設定した切り出し位置から、ステップS702(または後述のステップS711)で取得した切り出し文字数の分だけ文字列を切り出して取得する。そして、部分文字列処理部136は、切り出した文字列を語句一致判定部137に出力する。
続くステップS705で語句一致判定部137は、語句リスト133dを参照し、ステップS702(または後述のステップS711)で取得した切り出し文字数と同じ長さの語句が含まれる範囲を探索範囲として取得する。例えば、切り出し文字数が2のとき、図20の語句リスト133dの1つ目から3つ目のエントリの範囲を、語句一致判定部137は探索範囲として取得する。
そして、ステップS706で語句一致判定部137は、部分文字列処理部136がステップS704で切り出した文字列と、探索範囲の語句リスト133d内の語句が一致するか否かを判断する。すなわち、語句一致判定部137は、ステップS704で切り出された文字列を検索キーとして、ステップS705で取得した探索範囲に範囲を絞って語句リスト133を検索する。そして、語句一致判定部137は、切り出された文字列と完全に一致する語句が探索範囲内にあるか否かを判断し、判断結果をクエリ語句抽出部138に通知する。
もし、切り出された文字列と一致する語句が探索範囲内で見つかれば、処理はステップS707に移行する。逆に、切り出された文字列と一致する語句が探索範囲内になければ、処理はステップS708に移行する。
ステップS707でクエリ語句抽出部138は、語句一致判定部137からの通知にしたがい、探索範囲内において一致する語句があると判断された文字列をクエリ語句として抽出する。
ステップS708で部分文字列処理部136は、ステップS704で切り出した文字列の末尾が検索クエリの末尾であるか否かを判断する。切り出した文字列の末尾が検索クエリの末尾のとき、現在の切り出し文字数での切り出し方は既に網羅されたということなので、処理はステップS710に移行する。逆に、切り出した文字列の末尾が検索クエリの末尾ではないとき、現在の切り出し文字数での切り出し方はまだ網羅されていないので、処理はステップS709に移行する。
ステップS709で部分文字列処理部136は、切り出し位置を1文字後方へ移動する。そして、処理はステップS704に戻る。
また、ステップS710で部分文字列処理部136は、現在の切り出し文字数が語句リスト133dに登録されている語句の文字列長の最大値と等しいか否かを判断する。例えば、図20の例では、語句リスト133dに登録されている語句の文字列長の最大値は10である。
現在の切り出し文字数が語句リスト133dに登録されている語句の文字列長の最大値と等しいとき、文書集合112から抽出された語句に一致する可能性のある文字列の切り出し方は既に網羅されたということなので、図21のクエリ語句抽出処理は終了する。他方、現在の切り出し文字数が語句リスト133dに登録されている語句の文字列長の最大値より小さいとき、他の切り出し方を試すため、処理はステップS711に移行する。
ステップS711で部分文字列処理部136は、語句リスト133dを参照し、次の切り出し文字数を取得する。例えば、現在の切り出し文字数が3の場合、部分文字列処理部136は、図20の語句リスト133dを参照して、3の次の文字列長である5を切り出し文字数として取得する。そして、処理はステップS703に戻る。
第5実施形態によれば、携帯電話130において以上のようにしてクエリ語句抽出処理が行われるため、「文書集合112から抽出された語句と一致する可能性がまったくない」ということが明らかな切り出し方での部分文字列の切り出しは省略される。
例えば、図20の語句リスト133dは、文字列長が4、6および9の語句が文書集合112からは抽出されなかったことを示している。よって、切り出し文字数として4、6または9を設定したとしても、検索クエリから切り出される文字列が語句リスト133d中の語句と一致する可能性はまったくない。そのため、第5実施形態ではこのような無駄な文字列の切り出しを省略して処理量を削減することで、クエリ語句抽出処理の高速化を実現している。
なお、図21のクエリ語句抽出処理は、適宜変形可能である。例えば、ステップS705は、ステップS702またはステップS711の実行後、かつステップS703の実行前に行ってもよい。また、語句リスト133dを実装するデータ構造によっては、ステップS705は省略することもできる。
例えば、語句リスト133dが、語句のみを管理するハッシュテーブルと、語句の文字列長の集合を管理する上記(d7)のファイルにより実現される場合、ステップS705は省略可能である。そして、この場合において語句一致判定部137は、ステップS706で、探索範囲について何ら考慮することなく、単に切り出された文字のハッシュ値を算出してハッシュテーブルを検索すればよい。
また、図20のように文字列長によってソートされたテーブルにより語句リスト133dが実装されている場合、例えば、ステップS705で語句一致判定部137は、探索範囲の開始位置のみを取得してもよい。その場合、語句一致判定部137はステップS706で、取得した開始位置から順に語句リスト133dのエントリを、エントリ内の語句と切り出された文字列が一致するか、またはエントリ内の語句と切り出された文字列の長さが不一致になるまで、調べていく。切り出された文字列と一致する語句が見つかる前に、エントリ内の語句と切り出された文字列の長さが不一致になるか語句リスト133dの末尾に達した場合は、語句一致判定部137は、切り出された文字列に一致する語句がないと判断することができる。
いずれにせよ、第5実施形態またはその変形例によれば、明らかに無効な切り出し方による無駄な探索が防止されるので、処理が高速化される。
なお、本発明は上記の実施形態に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
文書集合112の内容(すなわち文書集合132の内容)は、実施形態に応じて任意であり、マニュアル類でなくてもよい。
また、上記の説明においてはサーバ110による前処理と携帯電話130による検索の例を示したが、サーバ110と携帯電話130の各々は、図2に示すような任意の情報処理装置200に置き換え可能である。例えば、録画機器などの各種情報家電製品や、音楽プレーヤ、ゲーム機、通信端末などを含む各種携帯端末機は、図2の情報処理装置200の一種であるから、携帯電話130の代わりとして上記実施形態の適用対象となりうる。
また、上記実施形態に関しては、ベクトル検索の具体例として、ベクトルの各要素の算出にTF・IDF法を用いる場合を例示した。しかし、インデックス生成部118とベクトル化処理部139は、実施形態に応じて、形態素解析を利用した検索のためのその他の任意のアルゴリズムにより、ベクトルの各要素を算出してもよい。
そして、上記の各実施形態の説明でもいくつか例示したが、語句リスト133(133a〜133dを含む)、インデックス134、品詞優先度情報122など各種情報の形式や構造は任意であり、各図に示したようなテーブル形式には限定されない。
上記の第2〜第4実施形態は、容量設定値121によって語句リスト133の容量を制限する点で共通しているが、上記の第2〜第4実施形態は組み合わせ可能である。
例えば、語句リスト生成部117aは、一次語句リストに含まれる各語句について、DF値と文字列長と品詞に基づく点数を算出してもよい。そして、語句リスト生成部117aは、点数順に、容量設定値121以下になるまで、一次語句リストから語句を削除することで、最終的な語句リストを得てもよい。
すなわち、第2〜第4実施形態およびそれらを任意に組み合わせた実施形態においては、所定の評価基準による評価のための評価用情報が、出現形態素集合に含まれる各形態素に対応付けられ、評価用情報に基づいて評価の低い方から形態素が削除される。評価用情報は、第2実施形態のようにDF値を用いたものでもよいし、第3実施形態のように文字列長を用いたものでもよいし、第4実施形態のように品詞を含んでいてもよい。
例えば、語句リスト生成部117aは、DF値が大きいほど点数の値が大きく、かつ、文字列長が長いほど点数の値が大きく、かつ、品詞の優先度が低いほど点数の値が大きくなるように定義された点数を評価用情報として利用してもよい。具体的には、DF値と文字列長と品詞の優先度の重み付け和などが利用可能である。
もちろん、第2〜第4実施形態の組み合わせに限らず、上記の各種実施形態およびその変形例は、適宜組み合わせ可能である。また、語句リスト生成部117aは、予め決められたストップワードを一次語句リストから削除し、その後で第2〜第4実施形態のいずれか(またはその組み合わせ)による語句削減処理を行ってもよい。
上記のいずれの実施形態においても、製造コストや製品サイズなどの種々の制約のために形態素解析用の大規模な辞書を格納することが不可能(あるいは困難)な情報処理装置が、自然言語による検索クエリを擬似的に形態素解析することが可能となる。したがって、情報処理装置のコンピューティングリソースが比較的貧弱であっても、静的な文書集合に対しては自然言語による検索が可能となる。
また、上記各種実施形態には、検索のために通信を必要としないという利点もある。この利点は、検索のために通信を行う次のような比較例と比べると明らかである。
すなわち、比較例として、携帯電話などの情報処理装置に検索クエリが入力されるたびに、当該情報処理装置が検索クエリをサーバなどの外部の情報処理装置に送信し、外部の情報処理装置が形態素解析を行って解析結果を返信することも考えられる。
しかし、この比較例は検索のために通信が必要であり、換言すれば、次の(e1)〜(e3)のような欠点を有する。
(e1)この比較例は、携帯電話のようにネットワークを介して外部の情報処理装置にアクセスする通信機能を備えた情報処理装置にしか適用することができない。
(e2)この比較例では、検索のたびに通信コスト(通信費用という意味とネットワークリソースの消費という意味を含む)と通信時間がかかってしまう。
(e3)この比較例では、任意の時点で生じうる検索に対応するために、サーバなどの外部の情報処理装置を常時稼働させることが求められる。
他方、上記の各種実施形態は、検索のために通信を必要としないので、検索クエリが入力される情報処理装置が通信機能を備えていなくても適用可能であるし、通信コストや通信時間もかからないし、外部の情報処理装置を常時稼働させる運用コストもかからない。したがって、上記の各種実施形態は比較例と比べて優れている。