アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » 検索エンジンはいかにして動くのか? » 第4回 転置索引の詳細

検索エンジンはいかにして動くのか?

第4回 転置索引の詳細

前回は転置索引の概要を説明しました。今回は転置索引をもう少し詳しく見ていきます。

転置索引=辞書+転置リスト

転置索引は大きく分けて2つの部分から構成されています。文書に出現する単語のリストである「辞書」と,その辞書にある各単語がどの文書に出現するかを表したポスティングリストの集合の「転置リスト」からなります(図1)。ポスティングリストやポスティングに関しては前回簡単に説明しましたが,図を見て再度確認してください(※1)。

図1 転置索引の構成

図1 転置索引の構成

辞書は単語だけでなく,その単語に対応するポスティングリストの位置情報を含んでいます。よって,辞書を探索することで,該当する単語のポスティングリストを取り出すことが可能となります。

一方,ポスティングリストは,どの文書に出現するかを表すのに最低でも文書のID(数値)が必要となります。書籍の場合は,文書はページなのでページ番号が文書IDとなります。(書籍の索引は,単語とページ番号のリストの対応付けを行う)

文書にどうやってIDを付与するかは,現段階では出現した順に1から振っていくことにしましょう。前回作成した転置索引(第3回の表4)を見ると,文書1をD1と表現していました。これは文書IDが1であるということを示しています。これら辞書と転置リストを実際どのようなデータ構造で格納し,どう表現するかは,次回に説明したいと思います。

リスト1 転置索引の例(第3回の表4の後の例を再掲)

engine: D1
Google: D2
I: D1,D2
in: D2
keywords: D2
like: D1
search: D1,D2
※1)
本によっては,ポスティングやポスティングリスト,転置リストなどの使い方が異なるかもしれませんが,本連載では多くの論文や書籍での使い方に習って図1のように呼ぶことにします。

ブーリアン検索

前回作成した転置索引(リスト1)を見ると,「search」というキーワードが文書1(D1)と文書2(D2)に含まれていることがわかります。また,同様に「engine」というキーワードは文書1(D1)に含まれていることもわかります。よって,「search」と「engine」の両方のキーワードが含まれる文書は文書1(D1)であるということになります。

このように検索する方法を,「ブーリアン検索(Boolean Retrieval)」といいます。「ブーリアン」と付くのは,以下のように論理演算子(ブーリアンオペレータ)のAND,OR,NOTを使って適合する文書を探し出すからです。

  • AND:両方とも含む(論理積)
  • OR:どちらか一方を含む(論理和)
  • NOT:含まない(否定)

上の例では,両方とも含む場合を検索してるので "search AND "engine" を検索したことになります(「search」か「engine」の少なくともどちらか一方を含む文書がほしい場合は,"search OR engine" となります)。

"search AND engine" に該当する文書を探し出すためには,"search" に対応するポスティングリストと,"engine" に対応するポスティングリストの両方を取り出し,各ポスティングリストの共通部分を探すことにより可能となります。

現在の主流となる検索エンジンは,このような検索方法がベースとなっています(※2)。また,どう検索を行うかという仕組みのことを検索モデルと呼び,ブーリアン検索を行う仕組みはブーリアンモデルと呼ばれます。

※2)
検索エンジンでは,ブーリアン検索により検索を行い,その結果を何らかの基準(スコア,日付など)で並び換え,その結果をユーザに提示することが多いと思います。

文書レベルと単語レベルのポスティングリスト

今まで見てきたリスト1のようなポスティングリストは,文書に単語が出現したか否かという情報しか持っていませんでした。このようなポスティングリストを,文書レベルのポスティングリスト(Document-level inverted list)といいます。

文書レベルの情報に加えて,単語が文書中のどこに出現するか(先頭から何単語目か)という情報を含んだポスティングリストのことを,単語レベルのポスティングリスト(Word-level inverted list)といい,各ポスティングをDocID:offset1,offset2... のように表現します。

たとえば,前回の例で使用した2つの文章の場合,

文書1(D1): I like search engines.
文書2(D2): I search keywords in Google.

単語"search"に対応するポスティングリストは,

search: D1:3,D2:2

のようになります(文書1(D1)の先頭から3つ目と,文書2(D2)の先頭から2つ目に出現するため)。よって,各キーワードにおける単語レベルのポスティングリストはリスト2のようになります。

リスト2 単語レベルで作成したポスティングリスト

engine: D1:4
Google: D2:5
I: D1:1,D2:1
in: D2:4
keywords: D2:3
like: D1:2
search: D1:3,D2:2

このような単語の位置情報は,次に紹介するフレーズ検索や,スコアの要因としての単語間の距離の算出に使われるなど,さまざまな所で利用されます。

フレーズ検索

文書レベルの転置リストでは"search"と"engine"が同じ文書にあるということしかわかりませんでした。これだと,結果の文書が「検索エンジン」(search engine)に関して言及しているかは確かではありません。たとえば,"I search for gas station because the car engine doesn't start." という文書も,"search AND engine" でマッチしてしまいます。

そこで単語レベルの転置リストを使うことで,"search engine" というフレーズが検索可能となります。(※3)文書レベルでの場合と同様に"search"と"engine"で辞書を検索し,それぞれのポスティングリストを取得します。そして,それらに対して,"search"と"engine"が隣り合って出現しているかをチェックすることによりフレーズの存在の有無を確認します。上の例だと,"search"と"engine"は両方とも文書1に出現していて,"search"が3単語目,"engine"が4単語目に出現しているので,"search engine"というフレーズが文書1に出現していることがわかります。(※4

※3)
文書レベルの転置リストであっても,各単語を検索した後に,"search engine"というフレーズを元文書から探索すれば,フレーズを検索することは可能となります。しかし,この方法は通常は効率的ではありません。
※4)
念のためですが,フレーズ検索とブーリアン検索は同列ではありませんのご注意ください。ブーリアンモデルにおけるひとつの検索方法にフレーズ検索があるということで,たとえば,"search engine" AND "google"のようなブーリアン検索では"search engine"はフレーズ検索する必要であるということです。

まとめ

転置索引の構成と転置リストの内部構成について見てきました。これらの知識は今後も読み進める上でも非常に重要となるので,ぜひ覚えてください。次回は,転置索引の実装について説明していきます。

参考文献
[1] Inverted files for text search engines, Justin Zobel, Alistair Moffat,ACM Computing Surveys (CSUR), 2006
[2] Introduction to Information Retrieval, C. D. Manning, P. Raghavan, H. Schutze , Cambridge University Press, 2008

著者プロフィール

山田浩之(やまだひろゆき)

日本IBM株式会社を経て,ヤフー株式会社等で検索エンジンの開発に従事。現在は大学院でデータベース・情報検索の研究を行う。また,オープンソースで全文検索エンジンLuxやデータベースマネージャLux IOの開発を行っている。

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

読むウェブ ~本とインタラクション

ディスプレイで読む活字とそのインタラクション(interaction:相互作用)について,最新Webを紹介しながら読み解いていく。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

ここは知っておくべき!Windows Server 2008技術TIPS

5年ぶりのサーバOSとなったWindows Server 2008が出荷されて早2年。2009年にはR2が出荷され,再び注目を集めています。発売前から実施したトレーニングによって感じた,インフラエンジニアの方々に知っておいていただきたい機能を中心にご紹介します。

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス