본문 바로가기

IT/Search

N-gram 알고리즘 기초 두번째

N-GRAM  


지금까지 위에 다룬 기술들은 사실 like 검색의 결과를 모두 커버하지 못한다.
예를 들어, 상품코드명을 찾는다고 하자. 이런경우는 영어사전에 있는 단어가 아니다.
MDR V시리즈를 찾는다고 하면  DB 에서는 이런 쿼리를 사용할것이다.
물론, Full scan을 하겠지만  우리가 원하는 결과를 찾을 수는 있을것이다.

select * from product where 제품명 like '%MDR-V%';

그런데 우리가 배웠던 기술들로는 인덱스를 쓰는 방법이 안떠오른다.





해결법

배가 고픈데 "짜파게티를 먹을까? 라면을 먹을까?" 고민이 되는경우가 있다.

그때 내친구가 해준말이 생각난다.         


친구 : "왜 고민을 해? 둘 다 먹으면 되지" 


그럼 여기선 어떻게 하면 해결될까? 왜 고민을해 다 만들면 되지...

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



'IT > Search' 카테고리의 다른 글

N-gram 알고리즘 기초  (0) 2014.10.21
한국어.........  (0) 2014.07.29
구글 검색엔진에 관해  (0) 2014.07.25
크롤링과 색인(Crawling and Indexing)  (0) 2014.07.25
웹 크롤러란?  (0) 2014.07.25