티스토리 뷰
1. 시작하며
용어의 혼란을 줄이기 위해서 먼저 정리하겠다.
단어로 구성된 짧은 문자열을 "단문" 혹은 "문자열"이라고 할 것이고,
여러단어로 구성된 긴문자열은 "텍스트"라고 하겠다.
텍스트를 색인하는 기술은 더 더양한 기술이 필요하다.
select * from 테이블 where body like '%맛집%' and body like '%종로%';
아래와 같은 문장이 있다고 치자. 그럼 어떻게 색인해야 할까?
우리는 일반적으로 단어를 검색어로 사용한다. 즉, 문장을 단어 위주로 색인을 해야한다는 말이다.
여기서부터는 2부2편에서 이야기 했던 여러가지 기술들이 복합적으로 쓰이기 시작한다.
아래와 같은 문장이 있다고 하면, 어떻게 색인어를 뽑아야 할까?
공백으로 단어 나누기 (문장을 단어로 만들기)
원본 |
This manual is under constant development. |
색인어 |
this <-- tip.대소문자 검색문제를 피하기위해서 색인어 변경(소문자로 변경) manual is under constant development |
문제를 하나 내겠다. 지금 7명중 현금을 가진건 홍길동뿐이다.
1만 2천원 짜리 피자를 나눠먹었을때 얼마씩 입금해야 할까?
(계산) 12000 / 7 = 1714.2857143원
친구들한테 "1714.2857143"원 입금해 달라고 하기보다는 1700원 입금해달라고 하는게 일반적이다.
친구들이 소숫점단위까지 외운다는건, 기적에 가깝기 때문에 자질구래한 단위는 버린다.
스태밍 방식의 아이디어도 비슷하다. 색인할때 의미가 중요하지 않은 어미부분을 잘라버리고 색인어를 뽑는 방법이다.
위에 말했던 아이디어를 사용해서 아래와 같이 색인어를 추출한다.보면 어미는 버리고 의미있는 어두의 내용만 추출된걸 알 수 있다. "importan" 이라는 같은 색인어를 가지기 때문에 색인어의 갯수가 줄어드는 장점도 가진다.
(=색인어가 적다는건, 인덱스 크기가 작아질 수 있다는걸 의미한다)
원본 |
색인어 (스태밍) |
importance |
importan |
important |
importan |
importantly |
importan |
주로 영어에 대해서 사용하지만, 극단적으로 "한글"에도 유사하게 사용이 가능하다.
우리나라는 조사가 있어서 -을 -로 -으로 -는 -와 같은것이 뒤에 붙는데 그런 단어를 빼고 색인어로 뽑는것이다.
하지만, 우리나라말에서 규칙은 예외가 많아서 스태밍 방식이 아닌 형태소분석이라는 기술을을 사용한다.
해결법
배가 고픈데 "짜파게티를 먹을까? 라면을 먹을까?" 고민이 되는경우가 있다.
그때 내친구가 해준말이 생각난다.
친구 : "왜 고민을 해? 둘 다 먹으면 되지"
그럼 여기선 어떻게 하면 해결될까? 왜 고민을해 다 만들면 되지...
NGRAM의 아이디어는 간단하다. 모든 경우의 색인어를 만들면 된다. .
참고로 Ngram 의 N 은 단어를 몇 글자로 쪼개는가 하는 값을 의미한다.
NGRAM 을 사용해보기
2gram(=Bigram)이라고 하면, 2개의 글자로 쪼개는걸 의미한다. (N의 크기는 어떤값이든 올 수 있지만 2~4정도)
예를 들어 "소니 MDR-V55" 라는 것을 bigram으로 색인한다고 해보자. 그러면 아래와 같이 색인어를 만든다.
"MDR-V" 라는 값을 찾는다고 할 때, 동일하게 bigram 처리하면 오른쪽과 같은 색인어를 만들수 있다.
그러면 두 색인어를 비교해서 본문의 색인어가 모두 존재하는 결과를 던져주면된다.
옛날과 다른건 색인어랑 1:1 매칭 개념이 아니라, 모두 포함되어 있느냐의 개념이다.
본문 |
검색어 |
다시 말하면 아래와 같이 부분집합인 녀석을 찾는것이다.
N-gram의 문제
ngram 의 가장큰 단점은 색인어 갯수가 많아진다는것이다.
색인어가 많아진다는건 그만큼 인덱스 크기가 커지고, 만드는데도 오래걸린다걸 의미한다.
그리고, N의 숫자가 낮을경우 텍스트 검색을 한다면 품질의 문제가 발생할수 있으니 주의하자.
예를 들어 "father" 라고 검색한다고 하자. bigram(N=2) 으로 검색한다면
전혀 매핑될만한 단어가 아닌데, bigram방식에는 오른쪽 결과가 나온다.
(이럴경우는 N 의 값을 올리는것도 도움이 된다)
검색어 |
본문 |
father | the fat player |
fa at th he er |
th he fa at pl la ay ye er |
5. 마무리
지금까지 배웠던 지식은 기계적으로 처리가 가능한 어떻게 보면 Rule 베이스로 뽑았다.
그래서, 그런 문제를 해결하기 위해 형태소 분석이라는 대단한 녀석(?)이 기다리고 있다.
'개발이야기 > 검색이야기' 카테고리의 다른 글
검색 그리고 프로젝트 이야기 -3부 1편. 재현률과 정확도- (0) | 2015.12.10 |
---|---|
검색 그리고 프로젝트 이야기 -2부 4편, 형태소분석 - (4) | 2015.12.10 |
검색 그리고 프로젝트 이야기 -2부 2편. 문자열 색인기법- (4) | 2015.12.10 |
검색 그리고 프로젝트 이야기 -2부 1편, 색인,인덱스 - (4) | 2015.12.10 |
검색 그리고 프로젝트 이야기 -1부 - (2) | 2015.12.10 |