1 / 25

Chap 3 Dictionaries and tolerant retrieval

Chap 3 Dictionaries and tolerant retrieval. 2009. 9. 7. 최 성 빈. 이 장의 개요. 이번 장에서는 타이핑 에러 , alternative spelling 에도 tolerant 한 기법을 개발해 본다 . 3.1 inverted index 의 vocabulary 에서 term 검색을 도와주는 자료 구조 3.2 와일드카드 쿼리 (ex> automat* -> automatic, automation, etc.)

chassidy
Download Presentation

Chap 3 Dictionaries and tolerant retrieval

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chap 3 Dictionaries and tolerant retrieval 2009. 9. 7. 최 성 빈

  2. 이 장의 개요 • 이번 장에서는 타이핑 에러, alternative spelling 에도 tolerant한 기법을 개발해 본다. • 3.1 inverted index의 vocabulary에서 term 검색을 도와주는 자료 구조 • 3.2 와일드카드 쿼리 (ex> automat* -> automatic, automation, etc.) • 3.3 스펠링 에러와 같은 부정확한 쿼리를 수정하는 방법 • 3.4 쿼리 term과 발음이 유사한 vocabulary term을 찾는 방법

  3. 3.1 Search structures for dictionaries • inverted index와 query가 주어질 때 , query term이 vocabulary에 존재하는지를 찾아보고, 존재할 경우 postings list의 포인터를 확인하게 된다 • 이 vocabulary 검색 작업은 dictionary자료 구조를 사용한다. dictionary는 두 가지 종류의 구현 방법이 있다 – hashing, 검색트리

  4. 3.1 Search structures for dictionaries • Hashing 각 vocabulary 단어는 충돌이 일어나지 않을 정도로 넓은 공간에 정수로 hashing된다. 쿼리가 들어오면, 쿼리 term 각각을 해시하여 해당하는 posting의 포인터를 얻는다. 각 단어 별로 서로 다른 정수로 해시되므로, query term의 minor variant를 찾거나 (ex> accented and unaccented version of resume), 같은 prefix로 시작하는 단어(ex> automat* ) 를 찾기 어렵다. 웹에서와 같이 vocabulary의 크기가 증가하는 경우, 현재 수요에 맞춘 해시 함수는 수 년 뒤 충분치 않을 수 있다.

  5. 3.1 Search structures for dictionaries • 검색 트리: 위의 두 가지 문제점을 해결할 수 있다. 가장 잘 알려진 것은 binary tree로 부모 노드가2개의 자식 노드를 가진다. 검색은 tree의 루트에서 시작된다. 모든 내부 노드는binary test를 의미한다. • balanced tree에서 효율적인 검색이 이루어질 때 비교 연산은 O( log M) 이다. 한 노드의 두 개의 subtree의 term개수는 같거나 하나가 차이 난다. • term이 새로 삽입되거나 기존 term이 삭제될 때 rebalancing이 이루어지는데, 이때 balance가 얼마나 잘 이루어지는지가 주요 이슈

  6. 3.1 Search structures for dictionaries • rebalancing을 쉽게 하기 위해 내부 노드의 subtree개수를 정해진 interval[a,b] 이내에서 변하게 할 수 있다 - B-tree • collapsing : binary tree의 여러 level을 하나로 함 collapsing은 연산을 앞둔 binary test를 prefetching하는 기능을 수행한다. dictionary의 일부가 디스크에 있는 경우 유용하다.

  7. 3.1 Search structures for dictionaries • 해싱과 달리 검색 트리는document collection에 사용되는 문자는 사전에 정해진 순서가 있어야 한다. • 예를 들어 영어 알파벳은 A-Z는 특정 순서로 리스트 될 수 있다.

  8. 3.2 Wildcardqueries 이런 경우에 wildcard쿼리가 쓰일 수 있다 1. 스펠링을 정확히 모르는 경우 • Sydney vs Sidney -> S*dney 2. 스펠링이 여러 가지 존재하는 경우 • color vscolour 3. 단어의 여러 형태를 검색하고자 하지만, 검색엔진이 stemming을 지원하는지 불확실한 경우 • judicial vs judiciary -> judicia* 4. 외래어의정확한 번역이 불확실한 경우 • Universit* Stuttgart

  9. 3.2 Wildcardqueries • trailing wildcard query – *가 단어의 맨 끝에 한번만 등장한다 ex> mon* 검색 트리로 구현하기 편리하다.m, o, n 아래의 subtree를 열거하면 된다. • leadingwildcard query ex> *mon reverse B-tree를사용할 수 있다 ex> lemon -> root-n-o-m-e-l • wildcard가 중간에 위치한 경우 two B-tree ex> se*mon 접두어se로 이루어지는 단어를 B-tree로 검색하고 접미어mon으로 이루어지는 단어를 reverse B-tree로 검색한다. 그리고 두 결과 집합의 교집합을 열거함

  10. 3.2.1 General wildcard queries General wildcard query를 처리하는 두 가지 방법 • Permuterm indexes

  11. 3.2.1 General wildcard queries Permuterm index를 이용한 예 • m*n -> n$m* -> man , moron • fi*mo*er -> er $fi* -> 검색 결과를열거해서, mo를 포함하는지 하나하나 체크해서 filter out 한다 -> (O) fishmonger (X) filibuster

  12. 3.2.2 k-Gram indexes for wildcard queries • k-Gram : k개의 문자로 이루어진 문자열 ex > castle의 3-gram 표현법 - $ca, cas, ast, stl, tle, le$

  13. 3.2.2 k-Gram indexes for wildcard queries k-Gram index의 예 • red* -> ‘$re AND RED’로 k-Gram index검색 예외 > retired -> postfiltering step (개별적으로 체크)

  14. 3.3 Spelling correction

  15. 3.3.1 Implementing spelling correction spelling correction algorithm 의 두 가지 원칙 • 1. 철자가 틀린 쿼리를 바꿀 때, 여러 가능한 후보 중에 가장 가까운 단어로 고른다. - 쿼리 간 근접성의 개념이 있어야 한다. • 2. 두 쿼리가 경합할 때, 보다 많이 쓰이는(collection에 더 많이 등장하는 혹은 사용자들의 쿼리에 더 많이 등장하는) 단어를 선택한다. 예> grnt -> grunt, grant

  16. 3.3.2 Forms of spelling correction Spelling correction • isolated correction ‘carot’ -> carrot, tarot • context-sensitive correction ‘flew form Heathrow’ -> flew from Heathrow

  17. 3.3.3 Edit distance • s1,s2 간의 distance ( Levenshtein distance) : s1을 s2로 변환하기 위해 필요한 editoperation의 최소 숫자 • edit operation : 삽입, 삭제, 교환 s1:cat s2:dog edit distance:3 • edit operation간에 가중치를 주는 방법을 고려할 수 있다. s -> a s->p

  18. 3.3.3 Edit distance • O(|s1| x |s2|)

  19. 3.3.3 Edit distance • vocabulary의 단어 각각에 대해 쿼리 단어와 edit distance를 계산하는 것은비싼 연산일 수 있다. 몇 가지 방법 • query와 첫 번째 알파벳이 같은 단어들만 검색한다 – 대개의 경우 첫 번째 문자에서는 스펠링 에러가 잘 일어나지 않는다. • permuterm index를 활용한다($는 생략). 쿼리의 각 rotation별로, 그 rotation으로 시작하는 모든 단어를 검색한다. 단 단어의 끝에서 문자 몇 개를 삭제하고 검색한다. q = mase r = mase -> mare, mane r = sema -> semantic, semaphore q = ma r = mase

  20. 3.3.4k-gram indexes for spelling correction • vocabulary 단어의 k-gram단어와 query와 공통된 k-gram단어가 threshold 이상인 단어들만 edit distance를 계산

  21. 3.3.4k-gram indexes for spelling correction Jaccard coefficient(|A ∩ B| / |A ∪ B|)를 이용해서 겹치는 부분이 일정 threshold 이상인 단어들만 edit distance를 검색 예> • bord와 boardroom의 Jaccard coefficient • -> 2 / (8+3 -2) = 2/9

  22. 3.3.5 Context-sensitive spelling correction • 쿼리로 주어진 문구에서 검색된 문서가 몇 없는 경우, 검색엔진이 이것을 수정된 쿼리로 바꾸어 제공할 수 있다. • 가장 간단한 방법은,(각 단어의철자가 맞더라도) 이 세 쿼리 단어 각각의 correction을 나열하고, 각각의 교환을 시도하는 것이다. flew form Heathrow -> fled form Heathrow, flew fore Heathrow, flew from Heathrow • 각 교환한 경우마다 검색 엔진이 쿼리를 실행하고, 검색된 문서의 숫자를 판별한다. • 이것은 교환할 수 있는 조합이 많은 경우, 매우 값비싼 연산이 될 수 있다. -> collection이나 query log에서 가장 빈도수가 높은 조합만을 검색한다.

  23. 3.4 Phonetic Correction • 의도한 용어와 비슷한 발음을 가지는 단어를 잘못 입력하는 경우 ex> 사람 이름의 경우 국가 간 발음이 다르다 • phonetic hash : 비슷한 발음을 가진 단어를 같은 값으로 해싱함 soundex algorithm 1. 모든 용어를 4글자의 축소된 형태로 인덱싱한다. 축소된 형태에서 원래 단어를 찾을 수 있도록 inverted index를 구축한다 – 이것을 sound index 라 한다. 2. query term에 대해서 같은 과정을 수행한다. 3. 요청이 들어오면, soundex index를 찾는다.

  24. 3.4 Phonetic Correction • 4글자로 축소하는 알고리즘 1. Retain the first letter of the term. 2. Change all occurrences of the following letters to ’0’ (zero): ’A’, E’, ’I’, ’O’,’U’, ’H’, ’W’, ’Y’. 3. Change letters to digits as follows: B, F, P, V to 1. C, G, J, K, Q, S, X, Z to 2. D,T to 3. L to 4. M, N to 5. R to 6. 4. Repeatedly remove one out of each pair of consecutive identical digits. 5. Remove all zeros from the resulting string. Pad the resulting string with trailing zeros and return the first

  25. 3.4 Phonetic Correction 예시 • Hermann-> H655 • query : herman -> H655 위 알고리즘은 두 가지 가정에 기반한다. • 모음은 교환가능하다. • 같은 음을 내는 자음은 같은 클래스로 분류한다.

More Related