Upgrade to Pro — share decks privately, control downloads, hide ads and more …

名古屋検索勉強会#2

 名古屋検索勉強会#2

2019/4/10に名古屋で行われた名古屋検索勉強会#2(https://search-nagoya.connpass.com/event/126660/)での発表資料です

検索技術の基礎(原著名:Introduction to Information Retrieval)、第2章 用語語彙とポスティングリスト、を解説しています。

80e7227bd2b0e7bf07694b39f7346358?s=128

INOUE Takahiro

April 10, 2019
Tweet

More Decks by INOUE Takahiro

Other Decks in Technology

Transcript

  1. 名古屋検索勉勉強会 #2 ⽤用語語彙とポスティングリスト 2019/4/10 Takahiro Inoue (@takinou0)

  2. 2.1 ⽂文書輪輪郭と ⽂文字列列解読

  3. ⽂文字列列の獲得 • ⽂文字列列に区切る処理理 → (⽇日本語で⾔言うと)形態素に分割する処理理の話 • まずは、バイト列列→⽂文字列列に変換 • ⽂文字コードが複数あるので、⽂文字コード種類類を判別しなくてはなら ない。(ヒューリスティクス、ユーザ選択、メタデータで対処) •

    そもそもzip圧縮されてることもあるので、それも判定しないとい けない。 • XMLのこともある。(“&” →”&”に変換などしてあげないと、正 しい⽂文字列列として認識もできない)
  4. ⽂文書単位 (⽂文書の区切り⽅方) • どの単位で1⽂文書としてインデックスを付けるか決める。
 (メールならpst単位? or eml単位?)
 (圧縮ファイルならzip単位? or zip内のファイル単位?)


    (書籍だったら、1冊単位? or 1章単位?)
  5. 2.2 語彙の決定

  6. トークン化 • Input: “Friends, Romans, Countrymen, lend me your ears;”

    
 これは簡単。
 
 Output: Friends | Romans | Countrymen | lend | me | your | ears • Input: “Mr. O’Neil thinks that…” 
 この場合は悩ましい。
 
 Output:
 nail?、onaill?、o’neill?、o’とneill? 、oとnaill? • Input: “aren’t”の場合は?
 
 Output: aren’t?、arent?、areとn’t?、arenとt?
  7. トークン化 2 • “M*A*S*H”は、”M*A*S*H”として認識したい。
 (https://www.amazon.com/Season-One-Collectors-Alan-Alda/dp/ B00005QVVC) • “C++”や“C#”が、”C”として認識されるのは、その、なんだ、困る。 • 空⽩白やハイフンで区切るのが楽だが、例例外も多い。


    “San Francisco”が、”San”と”Francisco”になる • 複数種類類を検索⽤用トークンとして扱えるようにしてしまおう。
 “over-eager”って⼊入⼒力力されたら、”over-eager”と”over eager”と”overeager” の3種類類のインデックスで検索すれば対処できるだろう。
 →”overeager”って検索されたらどうしようか? 分割位置を考えるのは⾄至 難。
  8. トークン化 3 • ドイツ語はやばい • 複合名詞(熟語みたい?)は空⽩白なしで書く
 計算computer + ⾔言語学linguistik =

    computerlinguistik • 中国語はやばい • 単語間に空⽩白がないので、英語と同じ⽅方法での分離ができな い。 • 中国語の1字は英語の1単語ぐらいの意味があるので、⽂文字列列に 区切らなくてもいいんじゃないの? という⽴立場もある。
  9. ストップワード • あんまり意味のない、頻出する単語は検索対象から取り除いてし まおう。 • a, an, and, by, for,

    the, that, was 等 • 取り除いて問題ないことが⼤大半だが、フレーズだとたまに問題に なる。 • “As we may think”という論⽂文などは”think”だけになってしまうの で、検索できなくなる。
  10. 正規化 • 等価な単語のクラスを作る • anti-discriminatoryから”-“を抜いてantidiscriminatoryにする • 同義語の表を作る • carとautomobieなど 


    1. 複数の要素のクエリー表を維持する?
 2.インデックスを2つつける。
 (carが出てきたら、”car”と”automobile”にインデックスする) • どちらの⽅方法もより多くのストレージと処理理時間がかかる
 →最近のストレージ等のコストから考えると、悪くない選択
  11. 特別な⽤用語は? • やりすぎると問題が起こるのでやめよう。 • U.S.A.→USAは良いけれど、C.A.T.→catはなんか違う。 クエリー⽤用語 合致すべき⽂文書中の⽤用語 Windows Windows windows

    Windows, windows, window window windows, window
  12. 有効なのは、⼤大⽂文字⼩小⽂文字平準化 • Autobobile, AUTOMOBILE→automobileにする • 予期しない場合を避けるヒューリスティック
 1.頭⽂文字だけ⼤大⽂文字の単語だけ、⼩小⽂文字にする。
 2.題名・章名ぐらいだけ、⼩小⽂文字にする(⼤大⽂文字で書かれること多 いので) •

    でも⾯面倒くさいことが⾊色々ある。(ユーザーが規則を無視して書い たり)
 →細かいことを考えず、全部⼩小⽂文字にしちゃう⽅方が無難。
  13. ⽇日本語の正規化 • ⽇日本語もやばい。 • 複数種類類の⽂文字を混在させている為、難しい⾔言語。ひらがなカタ カナ、漢漢字、数字、アルファベットetc • 1番⽬目、⼀一番⽬目、いちばんめ、イチバンメ、と書ける。
 →この為、検索者はひらがなで「いちばんめ」と書くことが多 い。(教科書にはそう書いてあるけど、ほんと?)

  14. ステミングとレンマで単語を原型 に戻そう • ステミング :いらない末尾を切り落とす
 dogs(複数形)→dog(単数系) • Porterのアルゴリズムが、
 ステミングとしては良い。 • レンマ :変形


    saw(動詞過去形)→see(動詞現在形) ルール 例例 xxxsses → xxxss caresses → caress xxxies → xxxi ponies → poni xxxss → xxxss caress → caress xxxs → xxx cats → cat • Porterのアルゴリズム
  15. 2.3 スキップポイン ターによる操作

  16. スキップポインター • スキップリスト
 検索結果に出てこない項⽬目を⾶飛ばせるようにする。
 逆インデックスのリストを線形で探索するより早い。 • “Brutus” and “Caesar”で検索 •

    Caesar = 41と⼤大きい状態なので、
 Brutus 16→28とスキップで遷移しても⼤大丈 夫。 • しかし残念ながら、AND検索にしか使⽤用できない。
  17. スキップポインターの配置 • スキップ間隔を短くして、スキップポインターを多く配置する と、スキップはしやすくなるが⽐比較も多くなり、メモリーも⻝⾷食 う。
 スキップ間隔を⻑⾧長くして少なく配置すると、スキップがされにく くなる。 • ⻑⾧長さPなら、sqrt(P)の⻑⾧長さのスキップポインターを均等配置すると 効果的。

    • インデックスが頻繁に更更新されるリストにはあまり向かない。
  18. • 昔
 CPUが遅かったため、⾼高度圧縮すると復復元に時間がかかるのでよく なかった。 • 今
 CPUが早くなったため、⾼高度圧縮してポスティングサイズを削減す るのが主流。 • とはいえ


    全てをメモリーに格納する検索エンジンの場合は、また話は変わ る。
 →詳細は、4章、5章
  19. 2.4 位置ポスティングと フレーズクエリー

  20. フレーズクエリー • 複合語の検索(フレーズクエリー)では、””で囲うことで実現する。
 
 (ex) ”stanford university”
 The inventor Stanford

    Ovshinsky never went to university. のよう な⽂文章を検索してしまうことを、””を使うことで防ぐ。 • 個⼈人名など、“”を使わないけど、フレーズクエリーなこともあ る。
  21. 2語インデックス • 連続する2単語は全てフレーズクエリーとして扱う。
 (ex) “Friends, Romans, Countrymen”という⽂文があったら、
 “friend roman”と”roman countrymen”という2つのフレーズクエリーと

    して扱う。 • 4単語をフレーズクエリーとして扱いたい場合は、複数のフレーズクエ リーのANDをとる
 (ex) “stanford university” and “university palo” and “palo alto” • 冠詞(a, the)や、前置詞(of, to)が⼊入っている場合は、それらを1語とカウ ントしないで、連続する2単語を取得する。
 つまり “renegotiation of the constitution”で、2語インデックスとする。
 (拡張2語インデックス)
  22. フレーズインデックス • 1語の検索では、1語インデックスも必要。
 2語インデックスも必要。
 複数語のインデックスがある→フレーズインデックスという考え ⽅方で⼀一般化する。(理理解あってます?) • 問題
 フレーズインデックスを使うと語彙サイズが膨⼤大になる可能性が ある。


    (N種類類の単語があるとして、2語インデックスなら、N×(N-1)のイ ン デックスが必要になる)
  23. 位置インデックス • 2語インデックスでは実⽤用上難しいので、位置インデックスを使 う。 • 転置インデックスを使う場合の検索にはΘ(N)時間かかったが、
 位置インデックスを使うと、検索したい⽂文書内のトークン数Tとす ると、Θ(T)時間かかってしまう。 •

  24. 2語インデックス・位置インデックス 組み合わせ • 特定の語は2語インデックスを使ってやると効率良くなる。
 “The who” (スタンドかな?) • 基本的に位置インデックスを使い、特定の場合だけ2語インデック ス・フレーズインデックスを使うと良い。

  25. 2.5 参考⽂文献

  26. 参考⽂文献 • http://naoya.dyndns.org/~naoya/iir/ppt/iir_02_1.ppt • http://naoya.dyndns.org/~naoya/iir/ppt/iir_02_2.ppt • https://chalow.net/clsearch.cgi?from=25&cat=IIR