Rabbit Slide Show

全文検索の基本的なしくみ

2015-06-14

Description

全文検索の基本的なしくみ(ノーマライズ、トークナイズ、転置インデックス)について

Text

Page: 1

全文検索の
基本的なしくみ
@myokoym
全文検索エンジン Groonga 勉強会@札幌
2015-06-14
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 2

全文検索の流れ
文書を登録
キーワードで検索
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 3

登録の流れ
ノーマライズ
トークナイズ
トークンをキーとして文書IDを
インデックスに登録
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 4

検索の流れ
ノーマライズ
トークナイズ
トークンでインデックスを検索
文書IDを取得
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 5

用語
ノーマライズ
トークナイズ
トークン
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 6

ノーマライズ
正規化
大文字小文字、全角半角などを揃え
る
ノーマライザーによって挙動が変わ
る
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 7

トークナイズ
文書やキーワードをトークンに
分割する
トークナイザーによって分け方
が異なる
大きく分けるとN-gramと形態素解析
の2種類
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 8

N-gram
文字数で分割する
bi-gramは2文字ごと
tri-gramは3文字ごと
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 9

形態素解析
品詞を判別して分割する
別途辞書が必要
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 10

トークン
インデックスのキー
Groongaで採用している転置
インデックス方式では、トーク
ンごとに文書リストが作成され
る
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 11

トークナイズの例
東京都府中市
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 12

bi-gram
東京/京都/都府/府中/中市/市
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 13

tri-gram
東京都/京都府/都府中/府中市/中
市/市
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 14

形態素解析
東京/都/府中/市
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 15

全文検索の流れ
文書を登録
キーワードで検索
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 16

全文検索の流れ
文書を登録
キーワードで検索
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 17

登録の流れ
ノーマライズ
トークナイズ
トークンをキーとして文書IDを
インデックスに登録
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 18

サンプル文書
文書ID
全文検索の基本的なしくみ
内容
1 カレー食べた
2 カレ-食べたい
3 カレー好き
Powered by Rabbit 2.1.7

Page: 19

ノーマライズ
1. カレー食べた
2. カレー食べたい
3. カレー好き
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 20

トークナイズ
MeCabの例
1. カレー/食べ/た
2. カレー/食べ/たい
3. カレー/好き
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 21

インデックスに登録
キー
カレー
食べ
た
たい
好き
全文検索の基本的なしくみ
文書IDリスト
[1 2 3]
[1 2]
[1]
[2]
[3]
Powered by Rabbit 2.1.7

Page: 22

全文検索の流れ
文書を登録
キーワードで検索
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 23

検索の流れ
ノーマライズ
トークナイズ
トークンでインデックスを検索
文書IDを取得
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 24

サンプルキーワード
食べた
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 25

ノーマライズ
食べた
ノーマライズ対象なし
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 26

トークナイズ
食べ/た
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 27

インデックス(再掲)
キー
カレー
食べ
た
たい
好き
全文検索の基本的なしくみ
文書IDリスト
[1 2 3]
[1 2]
[1]
[2]
[3]
Powered by Rabbit 2.1.7

Page: 28

トークンでインデックスを検
索
食べ -> [1 2]
た -> [1]
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 29

文書IDを取得
[1]
両方含まれるもの
設定によって出現位置も調べる
隣り合っているかどうかなど
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 30

ヒット1件
カレー食べた
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 31

ポイント
登録と検索で同じノーマライザ
ーとトークナイザーを使う必要
がある
それはなぜか?
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Page: 32

参考
Groongaの可変型Ngramトー
クナイザーについて - Naoya
Murakami - Rabbit Slide
Show
http://slide.rabbit-shocker.org/authors/naoa/
groonga-tokenizer-talks-naoa/
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7

Other slides