情報検索の基礎
レトリバセミナー 2017/04/26 岩田 英一郎
© 2017 Retrieva, Inc.
自己紹介
• 名前
• 岩田 英一郎 (@eiichiroi)
• 略歴
• 2008〜2010年 埼玉大学 大学院理工学研究科 修士 (工学)
• ICPC 2009世界大会出場
• 2010〜2016年 Preferred Infrastructure (PFI)
• 検索エンジンやビッグデータ分析基盤の開発
• 2016年〜現在 レトリバ (PFIからスピンアウト)
• コールセンター向けの回答支援ソリューションの開発
• 趣味
• コーヒー (ドリップ)
• ゲーム (Splatoon, カタン, 将棋, …)
• 電子工作
© 2017 Retrieva, Inc. 2
本日のお品書き
• 情報検索の基礎
• 情報検索とは
• 転置インデックスによる検索
• 様々なインデックス方式
• 様々な情報検索のモデル
© 2017 Retrieva, Inc. 3
なぜ情報検索について話すのか?
• 会社名レトリバ(Retriva)の由来
• Information Retrieval (情報検索)
• Retrieve Value (顧客に価値を届ける)
• いま一度、原点の技術についておさらい
• 最近加わったメンバー、これから加わるメンバーのため
• ※あまり細部に入り込まない、基礎的な説明になります
• 気になるところがあったら質問してください :D
• 厳密には間違っているけど、分かりやすさを優先した記述を含みます
© 2017 Retrieva, Inc. 4
情報検索とは(1/3)
• 情報検索(Information Retrieval, IR)は、たくさんの文書の中か
ら、必要な情報を含むものを見つけることである
• 検索したいもの
• テキスト
• (数値, 音声, 画像, 動画)
• 検索システムの分類
• Web検索 (Web上のコンテンツ)
• エンタープライズ検索 (企業内文書検索、ECサイトの商品検索)
• デスクトップ検索 (PC上のファイル検索)
© 2017 Retrieva, Inc. 5
情報検索とは(2/3)
© 2017 Retrieva, Inc. 6
検索アプリケーション
検索エンジン
文書
?
探したいものに関する情報を入れると、関連している順に文書が返ってくる
キーワード 検索結果
情報検索とは(3/3)
© 2017 Retrieva, Inc. 7
検索アプリケーション
検索エンジン
文書
サ
ー
チ
ャ
ー
イ
ン
デ
ク
サ
ー
ク
ロ
ー
ラ
ー
インデックス
文書
クローラー 文書を集めてくる
インデクサー 文書からインデックスを作成する
サーチャー 作成したインデックスと文書を参照して検索する
情報検索方式その1 - 逐次検索
• 検索したい文字列を、検索対象の文書すべてを順番に(逐次的
に)走査して探す
• 特徴
• ○ 少数の文書の検索に向いている
• ✖️ 文書の数に線形に比例して検索時間が増加する
• 各クエリに対してテキストの線形走査を避けたい
• 文書を前処理してインデックス(索引)を作っておけば良い
© 2017 Retrieva, Inc. 8
.
.
.
全部探す
情報検索方式その2 - 索引検索
• あらかじめ検索対象の文書すべてを走査して索引データを作成
しておき、検索時にはインデックス(索引)を参照して検索する
• 特徴
• ○ 多数の文書の検索に向いている(ユーザが多い場合にも)
• ✖️ 索引データ分のメモリやディスクを消費する
• 検索エンジンは索引検索を使っていることが多い
© 2017 Retrieva, Inc. 9
.
.
.関連する
文書だけ探す
索引
情報検索のインデックス
• 検索エンジンは使うインデックスの種類によって特性が決まる
• 検索速度
• インデックスの作成速度
• インデックスの容量(メモリ/ディスク)
• 辞書&単語分割の有無
• ...
• まずは一番シンプルなインデックスで検索をざっくり説明
• インデックスや情報検索モデルのバリエーションは後から
© 2017 Retrieva, Inc. 10
.
.
.
索引
単語文書行列
• 各文書に各単語を含むかどうかを行列で表現したもの
© 2017 Retrieva, Inc. 11
𝑑1 𝑑2 … 𝑑 𝑀
𝐷 =
𝑡1
𝑡2
⋮
𝑡 𝑉
0 1 … 1
1 0 … 1
⋮ ⋮ ⋱ ⋮
1 0 … 1
文書dMが単語tVを含めば1、そうでなければ0
文書ベクトルV(d2)
単語t2を含む文書
クエリ: 単語t1とt2を含む文書は?
t1 AND t2 = 01...1 AND 10...1
= 00...1
行ベクトルの要素ごとにAND(論理積)
論理検索モデル(Boolean Retrieval Model)
• 論理検索モデルは、単語の論理式の形で質問することができる
• 論理式で使える演算子
• AND
• OR
• NOT
• 例
• ゴールデンレトリバー OR ラブラドールレトリバー
• レトリバ AND NOT 犬
• フレーズクエリなどの単語間の近さを条件にする拡張も多い
• “This is it.”, “Hong Kong”など
• 論理検索モデルをサポートできるインデックス方式は色々ある
© 2017 Retrieva, Inc. 12
転置インデックス(Inverted Index)
• 単語文書行列の問題点
• 0が多く疎な行列である(メモリやストレージ効率が悪い)
• →単語ごとに出現した文書の番号だけ記憶しよう
• 転置インデックス
• 単語集合である辞書(dictionary)
• ポスティングリストの集合である転置リスト(inverted list)
© 2017 Retrieva, Inc. 13
レトリバ
レトリバー
レトルト
1
辞書(メモリ上) 転置リスト(ディスク上)
4
1 2 4 8 11 31
3 7 11 17 31
8
⋮ ⋮
...
ポスティングリスト
=ポスティングの配列
ポスティング
= 単語の出現の記録
= 文書ID
※出現位置や出現頻度も一緒に
記録することもある
※論理検索を高速に計算するために
ポスティングリストは昇順にソート
しておくことが多い
転置インデックスの作成と検索方法
• インデックスの作成
• 文書IDの小さな文書から単語分割(後述)して辞書に登録する
• 各単語のポスティングリストの末尾に文書IDを追加する
• インデックスを使って検索
• クエリに含まれる単語に対応するポスティングリストを返すだけ
© 2017 Retrieva, Inc. 14
レトリバ
レトリバー
レトルト
1
辞書(メモリ上) 転置リスト(ディスク上)
4
1 2 4 8 11 31
3 7 11 17 31
8
⋮ ⋮
...
ポスティングリスト
=ポスティングの配列
ポスティング
= 単語の出現の記録
= 文書ID
※出現位置や出現頻度も一緒に
記録することもある
※論理検索を高速に計算するために
ポスティングリストは昇順にソート
しておくことが多い
テキスト(クエリ)の単語分割
• 英語の場合はスペースで区切られているので分割は容易
• I have a pen
• I / have / a / pen
• 日本語は分かち書きされていないので特別な処理が必要
• 中国語や韓国語なども同様
• ここで質問です(I have a question)
• 「東京都に住む」という文を単語分割してください
© 2017 Retrieva, Inc. 15
形態素解析による単語分割
• 形態素解析
• テキストを形態素(意味を持つ最小単位)に分割し、それぞれの形態素
の品詞を判別する処理
• 辞書やコーパスから学習したモデルが必要になる
• 例: 東京都に住む
• 東京(名詞) / 都(名詞) / に(助詞) / 住む(動詞)
• 東 / 京都 / に / 住む という分割もありうる...?
• 本質的に解釈が曖昧なケースがある。文脈や周辺知識が必要。
• 転置インデックスでは形態素を単語として考えて使ってしまう
• 「東京都に住む」で検索すると「東京 AND 都 AND に AND 住む」
• 乱暴だけれど、一貫性のある分割であれば検索では問題ない
© 2017 Retrieva, Inc. 16
ここまでのまとめ
• 日本語でも形態素解析を使えば転置インデックスを作って検索
することができる!
• 疑問
• この検索結果はどのくらい正しいのか?
• ユーザが欲しい文書と検索結果はどのくらい一致するのか?
© 2017 Retrieva, Inc. 17
レトリバ
レトリバー
レトルト
1
辞書 転置リスト
4
1 2 4 8 11 31
3 7 11 17 31
8
⋮ ⋮
...
ポスティングリスト
=ポスティングの配列
ポスティング
= 単語の出現の記録
= 文書ID
※出現位置や出現頻度も一緒に
記録することもある
※論理検索を高速に計算するために
ポスティングリストは昇順にソート
しておくことが多い
検索結果の評価
• 適合率(precision)
• 検索結果のうちユーザが欲しい文書の割合
• = 検索ノイズの少なさ
• = B / C
• 再現率(recall)
• 欲しい文書が検索結果に含まれる割合
• = 検索漏れの少なさ
• = B / A
• 適合率と再現率はトレードオフの関係にある
• 全文書を検索結果として返すと再現率は1になるが、精度は下がる
© 2017 Retrieva, Inc. 18
ユーザが欲しい文書 検索結果
正しく
ヒットA C
B
文書集合全体
検索結果のスコアリング(1/2)
• 関連しているものから順に結果をみたい
• スコア(関連度)を計算して降順に表示する
• 単語の出現頻度tfによるスコアリング
• 気持ち: クエリの単語がたくさん含まれている文書の方が関連している
• 文書𝑑における単語tの出現頻度: 𝑡𝑓𝑡,𝑑
• クエリqに対する文書dのスコア: 𝑆𝑐𝑜𝑟𝑒 𝑞, 𝑑 = 𝑡∈𝑞 𝑡𝑓𝑡,𝑑
• 文書の全ての単語は同じように重要か?
• 「です」「ます」や「the」のようなストップワードは重要じゃない
• →頻出する単語の重みを小さくする
© 2017 Retrieva, Inc. 19
検索結果のスコアリング(2/2)
• IDF
• 気持ち: レアな単語だと大きくなり、ストップワードだと小さくなる
• 文書数: N
• 単語tを含む文書数: 𝑑𝑓𝑡
• 逆文書頻度(IDF; Inverse document frequency): 𝑖𝑑𝑓𝑡 = log
𝑁
𝑑𝑓𝑡
• TF-IDFによるスコアリング
• 気持ち: レアな単語がたくさん入っている文書の方が関連している
• 文書𝑑における単語tの出現頻度: 𝑡𝑓𝑡,𝑑
• クエリqに対する文書dのスコア: 𝑆𝑐𝑜𝑟𝑒 𝑞, 𝑑 = 𝑡∈𝑞 𝑡𝑓𝑡,𝑑 × 𝑖𝑑𝑓𝑡
© 2017 Retrieva, Inc. 20
様々なインデックス方式
• 転置インデックス(ここまでの話)
• N-gram
• 接尾辞配列
• (検索モデルを実現するインデックス方式は一つではない)
© 2017 Retrieva, Inc. 21
N-gram
• 文字単位で分解し、連続するN文字のポスティングを全て記録
• データ構造は転置インデックスと同じ
• 検索時には出現位置の整合性をチェックする必要あり
• 例: 東京都に住む(N=2)
• 東京, 京都, 都に, に住, 住む
• 特徴
• ○辞書が不要
• ✖️インデックスサイズが大きい
• ○検索漏れが少ない
• ✖️N文字未満の単語の検索ができない
© 2017 Retrieva, Inc. 22
接尾辞配列(Suffix Array)
• 文字列の接尾辞の開始位置を辞書順にソートした配列
• 二分探索で効率よく検索できる
• 例: abracadabraという文書からdabraという文字列を検索
© 2017 Retrieva, Inc. 23
abracadabra$
11 $
10 a$
7 abra$
0 abracadabra$
3 acadabra$
5 adabra$
8 bra$
1 bracadabra$
4 cadabra$
6 dabra$
0 abracadabra$
1 bracadabra$
2 racadabra$
3 acadabra$
4 cadabra$
5 adabra$
6 dabra$
7 abra$
・・・
dabra = dabra$
辞書順
ソート
開始位置
候補が半分ずつ減っていく
接尾辞配列(Suffix Array)
• 文字列の接尾辞の開始位置を辞書順にソートした配列
• 二分探索で効率よく検索できる
• 特徴
• ○検索漏れがない
• ✖️インデックスの構築に時間がかかる
• ✖️検索ノイズが混じることがある(注: n-gramでも同様)
• カレーで検索するとエスカレーターを含む文書がヒットする問題
• 形態素境界に一致しないヒット位置はスコアを下げるなどの工夫が必要
© 2017 Retrieva, Inc. 24
様々なインデックス方式のまとめ
転置インデックス N-gram 接尾辞配列
辞書 必要 不要 不要
検索もれ ✖️ ○ ○
検索ノイズ ○ ✖️ △
検索速度 ○ △ ○
インデックス速度 △ ○ △
インデックスサイズ ○ ✖️ ✖️
© 2017 Retrieva, Inc. 25
様々な情報検索のモデル
• 論理検索モデル(ここまでの話)
• ベクトル空間モデル
• 確率的検索モデル
© 2017 Retrieva, Inc. 26
ベクトル空間モデル(1/2)
• ベクトル空間モデル(vector space model)では、クエリや文書
をベクトルで表現するモデル
© 2017 Retrieva, Inc. 27
1
1O
V(d1)
V(d2)
V(q)
θ
t1
t2
𝑑1 𝑑2 … 𝑑 𝑀
𝐷 =
𝑡1
𝑡2
⋮
𝑡 𝑉
0 1 … 1
1 0 … 1
⋮ ⋮ ⋱ ⋮
1 0 … 1
文書dMが単語tVを含めば1、そうでなければ0
V(d1)V(d2)
視覚的なイメージ(2次元版)単位文書行列の列が文書ベクトル
ベクトル空間モデル(2/2)
• ベクトル空間モデル(vector space model)では、クエリや文書
をベクトルで表現するモデル
• ベクトルの各次元は単語に対応
• ベクトルの各成分の値は0/1(もしくはTF-IDF)
• スコアはベクトルのコサイン類似度で定義
• = 2つのベクトルが単位円上でなす角度θ
• Score d, q = Sim d1, d2 =
𝑉 𝑑1
・ 𝑉(𝑑2
)
𝑉 𝑑1
|𝑉 𝑑2
|
= cos 𝜃
• 何が嬉しいのか?
• クエリの単語が入っていない文書もふわっと探せる
• ある文書に類似した文書を探せる!
• 内積の大きな文書を見つける問題に帰着する
© 2017 Retrieva, Inc. 28
1
1O
V(d1)
V(d2)
V(q)
θ
t1
t2
視覚的なイメージ(2次元版)
確率的検索モデル(1/3)
• クエリqに対して文書dが関連しているかどうかの確率変数Rd,q
を考える
• 関連しているなら、Rd,q = 1
• 関連していないなら、Rd,q = 0
• 確率ランキング原理
• 関連性の推定確率P(R = 1|d, q)の降順でランク付けする
• = 関連している確率が高い文書が検索結果の上位にする
• ベイズ最適決定規則
• 非関連よりも、関連する確率が高い文書を返すにはどうすれば良い?
• クエリqに対して文書dが関連する  P(R=1|d,q) > P(R=0|d,q)
© 2017 Retrieva, Inc. 29
確率的検索モデル(2/3)
• 関連性の確率P(R = 1|d, q)を推定するにはどうするのか?
• 簡単のため、いくつか仮定を置く
• 1. 単語は独立して文書で発生する
• 2. 各文書の関連性は他の文書の関連性から独立している
• 3. クエリに入ってない単語は結果に影響を及ぼさない
• 4. クエリに関連する文書は文書集合のうちごく少数である
• 必ずしも正しい仮定ではないが、概ねうまくいく
• 「とんこつ」と「ラーメン」は共起しやすい
• ほぼ同じ文書が検索結果に含まれる場合、2個目以降は冗長に(関連度
が低く)感じる
© 2017 Retrieva, Inc. 30
確率的検索モデル(3/3)
• 関連性の確率P(R = 1|d, q)を推定するにはどうするのか?
• 頑張って式変形すると...
• P 𝑅 = 1 𝑑, 𝑞 ≈ 𝑡∈𝑑,𝑡∈𝑞 log
𝑁
𝑑𝑓𝑡
• クエリと文書両方に含まれる全単語のIDFの和を計算すれば良い
• ヒューリスティックスだったIDFによるスコアリングに対して、確率理
論的正当性が与えられた(tfを0か1と考えると同じ式)
• 詳しい式変形は情報検索の基礎の11章を参照
© 2017 Retrieva, Inc. 31
様々な情報検索のモデルのまとめ
• 論理検索モデル
• 単語の論理式の形でクエリを記述するシンプルな検索モデル
• スコアはTF-IDF
• ベクトル空間モデル
• クエリと文書をベクトルと考えるモデル
• スコアはベクトル間のコサイン類似度
• 確率的検索モデル
• クエリと文書が関連する確率を考えるモデル
• スコアはクエリと文書が関連する確率
• ポイント
• 全く別々の見方をしているが、実はほとんど同じスコアを計算している
• 同じくらいの強さの仮定を置いているから(?)
• bag of words(クエリや文書は単語の集合であり、順序には意味がない)
• 単語の生起確率が独立
© 2017 Retrieva, Inc. 32
まとめ
• 情報検索の基礎
• 情報検索とは
• 転置インデックスによる検索
• 様々なインデックス方式
• 様々な情報検索のモデル
• 話せなかったその他のトピック
• テキストの細かな前処理(ストップワード、正規化、ステミングなど)
• インデックスの差分更新や圧縮
• 適合フィードバック(ユーザのフィードバックを元に検索結果を改善)
• ランキング学習
• 同義語によるクエリー拡張
• 言語モデル(翻訳モデル)にもとづく情報検索
© 2017 Retrieva, Inc. 33
参考文献
• 情報検索の基礎
• 理論や研究の話題が一通り書かれている
• 研究者や開発者向け
• 検索エンジン自作入門
• 自分で実装して理解を深めたい人にオススメ
• 開発者向け
• 検索エンジンはなぜ見つけるのか
• 検索エンジンの仕組みを分かりやすい言葉と図で説明(数式なし)
• 文系の人にオススメ
© 2017 Retrieva, Inc. 34
© 2017 Retrieva, Inc.

情報検索の基礎

  • 1.
  • 2.
    自己紹介 • 名前 • 岩田英一郎 (@eiichiroi) • 略歴 • 2008〜2010年 埼玉大学 大学院理工学研究科 修士 (工学) • ICPC 2009世界大会出場 • 2010〜2016年 Preferred Infrastructure (PFI) • 検索エンジンやビッグデータ分析基盤の開発 • 2016年〜現在 レトリバ (PFIからスピンアウト) • コールセンター向けの回答支援ソリューションの開発 • 趣味 • コーヒー (ドリップ) • ゲーム (Splatoon, カタン, 将棋, …) • 電子工作 © 2017 Retrieva, Inc. 2
  • 3.
    本日のお品書き • 情報検索の基礎 • 情報検索とは •転置インデックスによる検索 • 様々なインデックス方式 • 様々な情報検索のモデル © 2017 Retrieva, Inc. 3
  • 4.
    なぜ情報検索について話すのか? • 会社名レトリバ(Retriva)の由来 • InformationRetrieval (情報検索) • Retrieve Value (顧客に価値を届ける) • いま一度、原点の技術についておさらい • 最近加わったメンバー、これから加わるメンバーのため • ※あまり細部に入り込まない、基礎的な説明になります • 気になるところがあったら質問してください :D • 厳密には間違っているけど、分かりやすさを優先した記述を含みます © 2017 Retrieva, Inc. 4
  • 5.
    情報検索とは(1/3) • 情報検索(Information Retrieval,IR)は、たくさんの文書の中か ら、必要な情報を含むものを見つけることである • 検索したいもの • テキスト • (数値, 音声, 画像, 動画) • 検索システムの分類 • Web検索 (Web上のコンテンツ) • エンタープライズ検索 (企業内文書検索、ECサイトの商品検索) • デスクトップ検索 (PC上のファイル検索) © 2017 Retrieva, Inc. 5
  • 6.
    情報検索とは(2/3) © 2017 Retrieva,Inc. 6 検索アプリケーション 検索エンジン 文書 ? 探したいものに関する情報を入れると、関連している順に文書が返ってくる キーワード 検索結果
  • 7.
    情報検索とは(3/3) © 2017 Retrieva,Inc. 7 検索アプリケーション 検索エンジン 文書 サ ー チ ャ ー イ ン デ ク サ ー ク ロ ー ラ ー インデックス 文書 クローラー 文書を集めてくる インデクサー 文書からインデックスを作成する サーチャー 作成したインデックスと文書を参照して検索する
  • 8.
    情報検索方式その1 - 逐次検索 •検索したい文字列を、検索対象の文書すべてを順番に(逐次的 に)走査して探す • 特徴 • ○ 少数の文書の検索に向いている • ✖️ 文書の数に線形に比例して検索時間が増加する • 各クエリに対してテキストの線形走査を避けたい • 文書を前処理してインデックス(索引)を作っておけば良い © 2017 Retrieva, Inc. 8 . . . 全部探す
  • 9.
    情報検索方式その2 - 索引検索 •あらかじめ検索対象の文書すべてを走査して索引データを作成 しておき、検索時にはインデックス(索引)を参照して検索する • 特徴 • ○ 多数の文書の検索に向いている(ユーザが多い場合にも) • ✖️ 索引データ分のメモリやディスクを消費する • 検索エンジンは索引検索を使っていることが多い © 2017 Retrieva, Inc. 9 . . .関連する 文書だけ探す 索引
  • 10.
    情報検索のインデックス • 検索エンジンは使うインデックスの種類によって特性が決まる • 検索速度 •インデックスの作成速度 • インデックスの容量(メモリ/ディスク) • 辞書&単語分割の有無 • ... • まずは一番シンプルなインデックスで検索をざっくり説明 • インデックスや情報検索モデルのバリエーションは後から © 2017 Retrieva, Inc. 10 . . . 索引
  • 11.
    単語文書行列 • 各文書に各単語を含むかどうかを行列で表現したもの © 2017Retrieva, Inc. 11 𝑑1 𝑑2 … 𝑑 𝑀 𝐷 = 𝑡1 𝑡2 ⋮ 𝑡 𝑉 0 1 … 1 1 0 … 1 ⋮ ⋮ ⋱ ⋮ 1 0 … 1 文書dMが単語tVを含めば1、そうでなければ0 文書ベクトルV(d2) 単語t2を含む文書 クエリ: 単語t1とt2を含む文書は? t1 AND t2 = 01...1 AND 10...1 = 00...1 行ベクトルの要素ごとにAND(論理積)
  • 12.
    論理検索モデル(Boolean Retrieval Model) •論理検索モデルは、単語の論理式の形で質問することができる • 論理式で使える演算子 • AND • OR • NOT • 例 • ゴールデンレトリバー OR ラブラドールレトリバー • レトリバ AND NOT 犬 • フレーズクエリなどの単語間の近さを条件にする拡張も多い • “This is it.”, “Hong Kong”など • 論理検索モデルをサポートできるインデックス方式は色々ある © 2017 Retrieva, Inc. 12
  • 13.
    転置インデックス(Inverted Index) • 単語文書行列の問題点 •0が多く疎な行列である(メモリやストレージ効率が悪い) • →単語ごとに出現した文書の番号だけ記憶しよう • 転置インデックス • 単語集合である辞書(dictionary) • ポスティングリストの集合である転置リスト(inverted list) © 2017 Retrieva, Inc. 13 レトリバ レトリバー レトルト 1 辞書(メモリ上) 転置リスト(ディスク上) 4 1 2 4 8 11 31 3 7 11 17 31 8 ⋮ ⋮ ... ポスティングリスト =ポスティングの配列 ポスティング = 単語の出現の記録 = 文書ID ※出現位置や出現頻度も一緒に 記録することもある ※論理検索を高速に計算するために ポスティングリストは昇順にソート しておくことが多い
  • 14.
    転置インデックスの作成と検索方法 • インデックスの作成 • 文書IDの小さな文書から単語分割(後述)して辞書に登録する •各単語のポスティングリストの末尾に文書IDを追加する • インデックスを使って検索 • クエリに含まれる単語に対応するポスティングリストを返すだけ © 2017 Retrieva, Inc. 14 レトリバ レトリバー レトルト 1 辞書(メモリ上) 転置リスト(ディスク上) 4 1 2 4 8 11 31 3 7 11 17 31 8 ⋮ ⋮ ... ポスティングリスト =ポスティングの配列 ポスティング = 単語の出現の記録 = 文書ID ※出現位置や出現頻度も一緒に 記録することもある ※論理検索を高速に計算するために ポスティングリストは昇順にソート しておくことが多い
  • 15.
    テキスト(クエリ)の単語分割 • 英語の場合はスペースで区切られているので分割は容易 • Ihave a pen • I / have / a / pen • 日本語は分かち書きされていないので特別な処理が必要 • 中国語や韓国語なども同様 • ここで質問です(I have a question) • 「東京都に住む」という文を単語分割してください © 2017 Retrieva, Inc. 15
  • 16.
    形態素解析による単語分割 • 形態素解析 • テキストを形態素(意味を持つ最小単位)に分割し、それぞれの形態素 の品詞を判別する処理 •辞書やコーパスから学習したモデルが必要になる • 例: 東京都に住む • 東京(名詞) / 都(名詞) / に(助詞) / 住む(動詞) • 東 / 京都 / に / 住む という分割もありうる...? • 本質的に解釈が曖昧なケースがある。文脈や周辺知識が必要。 • 転置インデックスでは形態素を単語として考えて使ってしまう • 「東京都に住む」で検索すると「東京 AND 都 AND に AND 住む」 • 乱暴だけれど、一貫性のある分割であれば検索では問題ない © 2017 Retrieva, Inc. 16
  • 17.
    ここまでのまとめ • 日本語でも形態素解析を使えば転置インデックスを作って検索 することができる! • 疑問 •この検索結果はどのくらい正しいのか? • ユーザが欲しい文書と検索結果はどのくらい一致するのか? © 2017 Retrieva, Inc. 17 レトリバ レトリバー レトルト 1 辞書 転置リスト 4 1 2 4 8 11 31 3 7 11 17 31 8 ⋮ ⋮ ... ポスティングリスト =ポスティングの配列 ポスティング = 単語の出現の記録 = 文書ID ※出現位置や出現頻度も一緒に 記録することもある ※論理検索を高速に計算するために ポスティングリストは昇順にソート しておくことが多い
  • 18.
    検索結果の評価 • 適合率(precision) • 検索結果のうちユーザが欲しい文書の割合 •= 検索ノイズの少なさ • = B / C • 再現率(recall) • 欲しい文書が検索結果に含まれる割合 • = 検索漏れの少なさ • = B / A • 適合率と再現率はトレードオフの関係にある • 全文書を検索結果として返すと再現率は1になるが、精度は下がる © 2017 Retrieva, Inc. 18 ユーザが欲しい文書 検索結果 正しく ヒットA C B 文書集合全体
  • 19.
    検索結果のスコアリング(1/2) • 関連しているものから順に結果をみたい • スコア(関連度)を計算して降順に表示する •単語の出現頻度tfによるスコアリング • 気持ち: クエリの単語がたくさん含まれている文書の方が関連している • 文書𝑑における単語tの出現頻度: 𝑡𝑓𝑡,𝑑 • クエリqに対する文書dのスコア: 𝑆𝑐𝑜𝑟𝑒 𝑞, 𝑑 = 𝑡∈𝑞 𝑡𝑓𝑡,𝑑 • 文書の全ての単語は同じように重要か? • 「です」「ます」や「the」のようなストップワードは重要じゃない • →頻出する単語の重みを小さくする © 2017 Retrieva, Inc. 19
  • 20.
    検索結果のスコアリング(2/2) • IDF • 気持ち:レアな単語だと大きくなり、ストップワードだと小さくなる • 文書数: N • 単語tを含む文書数: 𝑑𝑓𝑡 • 逆文書頻度(IDF; Inverse document frequency): 𝑖𝑑𝑓𝑡 = log 𝑁 𝑑𝑓𝑡 • TF-IDFによるスコアリング • 気持ち: レアな単語がたくさん入っている文書の方が関連している • 文書𝑑における単語tの出現頻度: 𝑡𝑓𝑡,𝑑 • クエリqに対する文書dのスコア: 𝑆𝑐𝑜𝑟𝑒 𝑞, 𝑑 = 𝑡∈𝑞 𝑡𝑓𝑡,𝑑 × 𝑖𝑑𝑓𝑡 © 2017 Retrieva, Inc. 20
  • 21.
    様々なインデックス方式 • 転置インデックス(ここまでの話) • N-gram •接尾辞配列 • (検索モデルを実現するインデックス方式は一つではない) © 2017 Retrieva, Inc. 21
  • 22.
    N-gram • 文字単位で分解し、連続するN文字のポスティングを全て記録 • データ構造は転置インデックスと同じ •検索時には出現位置の整合性をチェックする必要あり • 例: 東京都に住む(N=2) • 東京, 京都, 都に, に住, 住む • 特徴 • ○辞書が不要 • ✖️インデックスサイズが大きい • ○検索漏れが少ない • ✖️N文字未満の単語の検索ができない © 2017 Retrieva, Inc. 22
  • 23.
    接尾辞配列(Suffix Array) • 文字列の接尾辞の開始位置を辞書順にソートした配列 •二分探索で効率よく検索できる • 例: abracadabraという文書からdabraという文字列を検索 © 2017 Retrieva, Inc. 23 abracadabra$ 11 $ 10 a$ 7 abra$ 0 abracadabra$ 3 acadabra$ 5 adabra$ 8 bra$ 1 bracadabra$ 4 cadabra$ 6 dabra$ 0 abracadabra$ 1 bracadabra$ 2 racadabra$ 3 acadabra$ 4 cadabra$ 5 adabra$ 6 dabra$ 7 abra$ ・・・ dabra = dabra$ 辞書順 ソート 開始位置 候補が半分ずつ減っていく
  • 24.
    接尾辞配列(Suffix Array) • 文字列の接尾辞の開始位置を辞書順にソートした配列 •二分探索で効率よく検索できる • 特徴 • ○検索漏れがない • ✖️インデックスの構築に時間がかかる • ✖️検索ノイズが混じることがある(注: n-gramでも同様) • カレーで検索するとエスカレーターを含む文書がヒットする問題 • 形態素境界に一致しないヒット位置はスコアを下げるなどの工夫が必要 © 2017 Retrieva, Inc. 24
  • 25.
    様々なインデックス方式のまとめ 転置インデックス N-gram 接尾辞配列 辞書必要 不要 不要 検索もれ ✖️ ○ ○ 検索ノイズ ○ ✖️ △ 検索速度 ○ △ ○ インデックス速度 △ ○ △ インデックスサイズ ○ ✖️ ✖️ © 2017 Retrieva, Inc. 25
  • 26.
  • 27.
    ベクトル空間モデル(1/2) • ベクトル空間モデル(vector spacemodel)では、クエリや文書 をベクトルで表現するモデル © 2017 Retrieva, Inc. 27 1 1O V(d1) V(d2) V(q) θ t1 t2 𝑑1 𝑑2 … 𝑑 𝑀 𝐷 = 𝑡1 𝑡2 ⋮ 𝑡 𝑉 0 1 … 1 1 0 … 1 ⋮ ⋮ ⋱ ⋮ 1 0 … 1 文書dMが単語tVを含めば1、そうでなければ0 V(d1)V(d2) 視覚的なイメージ(2次元版)単位文書行列の列が文書ベクトル
  • 28.
    ベクトル空間モデル(2/2) • ベクトル空間モデル(vector spacemodel)では、クエリや文書 をベクトルで表現するモデル • ベクトルの各次元は単語に対応 • ベクトルの各成分の値は0/1(もしくはTF-IDF) • スコアはベクトルのコサイン類似度で定義 • = 2つのベクトルが単位円上でなす角度θ • Score d, q = Sim d1, d2 = 𝑉 𝑑1 ・ 𝑉(𝑑2 ) 𝑉 𝑑1 |𝑉 𝑑2 | = cos 𝜃 • 何が嬉しいのか? • クエリの単語が入っていない文書もふわっと探せる • ある文書に類似した文書を探せる! • 内積の大きな文書を見つける問題に帰着する © 2017 Retrieva, Inc. 28 1 1O V(d1) V(d2) V(q) θ t1 t2 視覚的なイメージ(2次元版)
  • 29.
    確率的検索モデル(1/3) • クエリqに対して文書dが関連しているかどうかの確率変数Rd,q を考える • 関連しているなら、Rd,q= 1 • 関連していないなら、Rd,q = 0 • 確率ランキング原理 • 関連性の推定確率P(R = 1|d, q)の降順でランク付けする • = 関連している確率が高い文書が検索結果の上位にする • ベイズ最適決定規則 • 非関連よりも、関連する確率が高い文書を返すにはどうすれば良い? • クエリqに対して文書dが関連する  P(R=1|d,q) > P(R=0|d,q) © 2017 Retrieva, Inc. 29
  • 30.
    確率的検索モデル(2/3) • 関連性の確率P(R =1|d, q)を推定するにはどうするのか? • 簡単のため、いくつか仮定を置く • 1. 単語は独立して文書で発生する • 2. 各文書の関連性は他の文書の関連性から独立している • 3. クエリに入ってない単語は結果に影響を及ぼさない • 4. クエリに関連する文書は文書集合のうちごく少数である • 必ずしも正しい仮定ではないが、概ねうまくいく • 「とんこつ」と「ラーメン」は共起しやすい • ほぼ同じ文書が検索結果に含まれる場合、2個目以降は冗長に(関連度 が低く)感じる © 2017 Retrieva, Inc. 30
  • 31.
    確率的検索モデル(3/3) • 関連性の確率P(R =1|d, q)を推定するにはどうするのか? • 頑張って式変形すると... • P 𝑅 = 1 𝑑, 𝑞 ≈ 𝑡∈𝑑,𝑡∈𝑞 log 𝑁 𝑑𝑓𝑡 • クエリと文書両方に含まれる全単語のIDFの和を計算すれば良い • ヒューリスティックスだったIDFによるスコアリングに対して、確率理 論的正当性が与えられた(tfを0か1と考えると同じ式) • 詳しい式変形は情報検索の基礎の11章を参照 © 2017 Retrieva, Inc. 31
  • 32.
    様々な情報検索のモデルのまとめ • 論理検索モデル • 単語の論理式の形でクエリを記述するシンプルな検索モデル •スコアはTF-IDF • ベクトル空間モデル • クエリと文書をベクトルと考えるモデル • スコアはベクトル間のコサイン類似度 • 確率的検索モデル • クエリと文書が関連する確率を考えるモデル • スコアはクエリと文書が関連する確率 • ポイント • 全く別々の見方をしているが、実はほとんど同じスコアを計算している • 同じくらいの強さの仮定を置いているから(?) • bag of words(クエリや文書は単語の集合であり、順序には意味がない) • 単語の生起確率が独立 © 2017 Retrieva, Inc. 32
  • 33.
    まとめ • 情報検索の基礎 • 情報検索とは •転置インデックスによる検索 • 様々なインデックス方式 • 様々な情報検索のモデル • 話せなかったその他のトピック • テキストの細かな前処理(ストップワード、正規化、ステミングなど) • インデックスの差分更新や圧縮 • 適合フィードバック(ユーザのフィードバックを元に検索結果を改善) • ランキング学習 • 同義語によるクエリー拡張 • 言語モデル(翻訳モデル)にもとづく情報検索 © 2017 Retrieva, Inc. 33
  • 34.
    参考文献 • 情報検索の基礎 • 理論や研究の話題が一通り書かれている •研究者や開発者向け • 検索エンジン自作入門 • 自分で実装して理解を深めたい人にオススメ • 開発者向け • 検索エンジンはなぜ見つけるのか • 検索エンジンの仕組みを分かりやすい言葉と図で説明(数式なし) • 文系の人にオススメ © 2017 Retrieva, Inc. 34
  • 35.