일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 컴파일러
- 객체지향설계
- 소프트웨어공학
- 클래스
- 웹소프트웨어
- React
- Agile
- 836
- C언어
- OS
- Linear Algebra
- 프로세스
- 데이터베이스
- NLP
- 운영체제
- 컴파일
- 자연어처리
- css
- 랩실일기
- 파싱
- 스케줄러
- 데이터분석
- 가상메모리
- 벡터
- 정보검색
- 오픈소스웹소프트웨어
- 애자일
- DB
- 파싱테이블
- 언어모델
- Today
- Total
observe_db
[정보검색] 3. Dictionaries and tolerant retrieval 본문
2. Dictionaries
dictionary는 term vocabulary를 저장하는 자료 구조
(term voca. = data, dictionary = data structure)
대표적인 자료구조 클래스-hash와 tree(정보검색도 둘다 사용.)
Hashes
- 각 vocabulary term은 배열의 행번호인 정수로 해싱됨.
- 쿼리 시간: 고정길이 array에 위치
- 장점: 빠르다.(상수 시간)
- 단점: 마이너한 용어 찾기 어려움/prefix 찾을 수 없음/voca.가 커지면 모든걸 rehash
Trees
- prefix 문제 해결
- 가장 간단한 트리는 이진 트리
- O(log M)이라 느리긴 함(M이 voca.의 크기)
- 그러나 최적상태는 B-tree(Balanced tree)로만 가능.
- Rebalancing 문제도 완화 가능.
- 정의는 알아서 찾아.
3. Wildcard queries.
Q. 이게 뭔데요?
A. *.zip으로 zip파일 전부 찾거나 하는거 있잖어. '*' 이런거.
Q1. mon*이라는 쿼리에 대해
A1. 트리에서 mon<=t<moo를 만족하는 t를 찾으면 됨.
근데 반대로라면?
Q2. *mon을 찾으려면?
A2. 반대로 찾자(nom*를 찾기)-단, 그 거꾸로 된 애들도 다 dictionary에 넣어줘야 함.(=크기 2배)
그렇다면 중간은 어떨까?
Q3. m*nchen을 찾으려면?
A3. m*와 *nchen을 각각 해서 intersect한다.
당연히 오래 걸림.(찾고+찾고+합치고)
그래서 <Permuterm index>를 이용
(핵심 아이디어) 쿼리를 돌려서 *가 마지막에 나오게 한다.
단어는 저장할 때에 마지막에 $기호를 넣는다.=>글자수+1만큼의 단어가 저장됨.
(보통 4~5배가 저장된다고.)
여튼 hello라는 단어는
hello$, ello$h, llo$he, lo$hel, o$hell, $hello
위와 같이 저장된다.
쿼리 예시
X: X$를 검색
X*: $X*를 검색
*X: X$*를 검색
*X*: X*를 검색
X*Y: Y$X*를 검색
+permuterm index를 permuterm tree라고도 부름.
k-gram index
- permuterm index보다 좀더 공간효율적
- 용어에서 발생하는 모든 문자 k-gram들을 열거.
- 2-gram은 bigram이라 부름.
- $는 경계를 나타내는 심볼.
- inverted index의 두가지 다른 유형.
- k-gram은 k-gram들로 이루어진 쿼리에 기반하여 term을 찾는다.
bigram에서 wildcard를 하려면?
Q. mon*
- $m AND mo AND on을 검색하면 된다.
- 그러나 false positive 발생(moon은?)
- 이런건 postfilter가 필요.
k-gram과 permuterm index를 비교하면
k-gram은 공간, permuterm은 시간 면에서 장점을 가진다.
4. Edit distance
tolerant한 검색을 위해
글자간 차이(distance)를 계산하는 것.
주요 연산은 Insert/Delete/Replace. (여기에 Damerau-Levenshtein방법은 swap-transpostion까지 들어가기도)
즉 '몇번 바꿔서 해당 단어가 되는지'
이런 표를 채우는데, 칸 4개가
왼쪽 위(대각선)에서 copy/replace를 하는 경우 (0 또는 1) |
위쪽에서 delete(+1) |
왼쪽에서 insert(+1) |
다른 3개 칸의 값들 중 최소 값 |
다음과 같은 규칙으로 채워진다.
그리고 마지막까지 완성하고, 수가 늘어난 규칙이 무엇인지 찾아내면 끝.
6. Soundex
음성적인(phonetic) 대안을 찾는 것에 기반
알고리즘
- 4-character reduced form으로 모든 token을 인덱싱
- query terms와 동일
- reduced form에서 build&인덱스 탐색
Not very..useful (in I.R.), "high recall" task에서는 Ok.
'학교 공부 > 정보검색(4-2)' 카테고리의 다른 글
[정보 검색] 6. Scoring, Term Weighting, The Vector Space Model (1) | 2024.11.01 |
---|---|
[정보 검색] 5. Index Compression (2) | 2024.10.18 |
[정보검색]4. Index Construction (3) | 2024.10.18 |
[정보검색] 2. The term vocabulary and postings lists (0) | 2024.10.06 |
1. Boolean Retrieval (0) | 2024.10.03 |