1. 들어가기전 3부 1편에 다뤘던내용에서 오타교정 편에 대해서 추가 견해를 남기고 싶어졌다.왜냐고 묻는다면, 작성한지 4달이나 지났고, 추가적으로 sada9라는 특가모음서비스를 운영하다보니 몇마디 더 하고 싶었다고 해야할까? 설명의 이해를 돕기위해 잠깐, 우리 부모님 이야기를 하겠다. 우리 부모님은 부르는 호칭이 다양하다. 1) 시골에서 친구들이 부르던 별명 2) 호적상 존재하는 이름 3) 주민등록에 있는 이름 물론, 금융거래나 대부분의 업무는 주민등록상있는 이름을 사용한다. (=당연하지만)즉, 아무리 별칭(alias)가 많더라도 대표되는 하나가 존재하기 마련이다. 텍스트 데이터 분석에서, 이렇게 다양한 "별칭"을 대표되는 하나의 단어로 통일해야 품질이 높아진다.이런 데이터 정제 입장에서 본다면 오타교..
근 1년만에 다시 약속했던(?) 글을 이어가려고 한다.원래는 싸다구 서버쪽 개발스택에 대한 이야기를 쓰려고 접속한건데... 왜 이걸 쓰고 있는지는 잘 모르겠다. ㄱ-) 1. 들어가기전 잡담 재현률과 정확도를 간단히 설명하자면 재현률은 얼마나 검색결과가 많이 나오게 하느냐이고, 정확도는 얼마나 정확하게 나오느냐고 할수 있다. 정확하다는건 다르게 말해 검색결과가 적게 나오므로 재현률은 떨어진다고 말할수 있다.복잡하게 생각하지말고 검색결과에 영향을 주는 개념이라고 생각하고 일단 넘어가자. 재현률과 정확도는 상반되는 개념이지만, 또 전혀 상관없다고 보기도 뭐한 모호한 개념이다. 뭔 알수없는 소리냐고 할텐데, 이해를 돕고자 비유하자면 "섹시하면서 귀여운여자"와 같은 느낌이다. (??!!) 사족으로 '귀여우면서도 ..
1. 형태소 분석이 왜 필요한데? 지금까지 우리가 아는 기법인 like 검색이나 N-gram을 사용한다고 가정하자. 지금 안군은 배가 너무 고프기도 하고, 오랫만에 친구들을 만나는것에 너무 들떠있다.역시 남자라면 "고기" 아니겠어? 하고 검색을 했다.그런데 검색 결과는 아래와 같았다. (연두색 칠한 단어 참고) "..." "참외를 먹으면 참 외롭고, 태연은 벌에 쏘여도 태연함" 이런 말장난 같은 검색결과가 실제라면 문제가 있다.하지만, 우리가 알고있는 색인기법에는 실제로 저런 결과가 나올수 있는 한계점을 가졌다. 그럼 어떻하지?? 2. 형태소 분석 2.1 형태소분석은 뭐임? 형태소란? "뜻은 가진 가장 작은 말의 단위" 말한다. 이제 약간의 국문학 지식이 필요한 시점이다 ㅠ형태소라고 하는것도 사실 여러가..
1. 시작하며 용어의 혼란을 줄이기 위해서 먼저 정리하겠다.단어로 구성된 짧은 문자열을 "단문" 혹은 "문자열"이라고 할 것이고, 여러단어로 구성된 긴문자열은 "텍스트"라고 하겠다. 텍스트를 색인하는 기술은 더 더양한 기술이 필요하다.사실 단문 검색을 위한 색인은 정규화와 인덱스를 통해 DB로도 처리가능한 수준이다.하지만, 텍스트의 경우는 검색엔진이 아니면 처리할 수 없는 속도와 품질의 격차가 생긴다. 그 이유는 쿼리로 만든다면 아래와 같은데, 좌절단 검색이기 때문에 인덱스를 쓸수가 없다. *2부 1편 3. 인덱스를 사용하지 못하는 문제(full scan)에서 이미 언급한 이야기* select * from 테이블 where body like '%맛집%' and body like '%종로%'; 2. 문장을..
1. 서론 색인의 효과와 원리에 대해서는 이제 말했고 본격적인 검색엔진의 차이점을 이야기 하고자 한다. 참고로 오픈소스 검색엔진 (예: solr, 엘라스틱서치)의 경험은 미비하고, 이전 회사에서 사용하던 독크루저라는 상용검색엔진을 토대로 이야기 할것이다. 글을 들어가기에 앞서서 숫자(날짜)의 검색, full scan의 검색에 대해서는 다루지 않음을 밝혀둔다. 그 이유는 너무 일반적이고 이미 알고 있는 내용이기 때문이다. 그래서 DB와 검색엔진에서 큰 차이를 보이는 문자열(텍스트)의 검색과 색인에 대한 이야기를 다루고자 한다. 2. 인덱스 다시한번 기억하기 기억력이 가물가물거리는 독자를 위해 한번 간단히 정리해보겠다. 색인을 한다는건... 색인어와 페이지번호를 추출해서 빠르게 찾게 하는작업이라고 할 수 있..
1. 들어가기전... 들어가기에 일단 사용하는 용어부터 혼동을 위해 미리 말해둘것이 있다. 참고로 네이버 사전을 이용해 index를 검색해 보면 아래와 같이 번역되어 있는데 "인덱스"를 번역한게 "색인"이다 그런데, "인덱스"와 "색인"을 둘 다 섞어서 사용한다. 앙드레김 선생님도 아닌데 왜 영어랑 해석된 단어랑 섞어쓰는거지? 라고 할지 모르겠는데 편의상 아래와 같이 구분해서 쓰도록 하겠다. "색인" (=indexing) 1. 인덱스를 만드는 과정이나 행위를 의미함. "인덱스" (=index) 1. 색인하여 만들어진 결과물. 2. 색인과 인덱스 "오늘은 5월 20 이죠? 바로 '세계인의 날' 입니다" 주말근무를 하던 선배는 라디오를 듣다가 깜짝놀라며 말했다. "뭐 오늘이 색인이 날이라고?" 색인이 뭔데 ..
Prolog 내가 다니던 회사의 후배 개발자들의 고생담을 페이스북에서 보면 뭔가 "찡~~" 한 느낌이 온다. 아마 내가 옛날에 겪었던 고생한 기억과 동질감이라는 감성적인 이유도 있지만, 협업하는 업체와 바라보는 입장이 달라서 겪었던 기술적인 문제들도 생각났기 때문이다. 검색프로젝트는 분명 일반적인 방법과 다르게 접근할 부분과 지식이 존재한다. 하지만, 안타깝게도 이런 정보나 경험은 찾아보기 힘들다는 문제점이 있었다. 그때는 찾아 다녔지만, 이제는 나의 지식과 노하우를 공유할때가 되지 않았나 생각한다. 일단, 기술적인 내용은 "독크루저"라는 상용 검색엔진을 사용한 경험과 프로토타입 개발시 사용한 mongoDB, 그밖의 DB사용경험을 토대로 이야기를 풀어보려고 한다. 참고로 필자(=정선생)는 검색프로젝트팀에..