검색엔진 기초
대부분의 검색엔진을 위해 필요한 기능의 기초는 다음 네개면 해결할 수 있다.
- 색인 생성
- 파일, 웹사이트, 데이터베이스 레코드를 검색가능하게 만든다. 색인이라는 뜻이 와닿지 않으면 모든 책장의 소개 부분에 목차가 있는데 이와 비슷한 것이라고 생각하면 이해가 빠르다.
- 사용자 입력
- 사용자가 무엇을 검색할지 입력하고, 입력 인터페이스를 제공하기도 한다.
- 순위화
- 결과를 사용자가 입력한 것과 가까운 순으로 정렬한다.
- 결과 보여주기
- 사용자가 입력한 내용을 보여준다.
색인화
색인화는 보통 문서를 분석한뒤 토큰 단위로 나누고 선택적으로 각 토큰을 색인어라고 하는 정규화된 토큰을 만들기 위한 하나이상의 변경 작업으로 구성된다. 색인어를 만들기 위해선 어간 추출, 소문자화, 완전한 제거를 포함하여 토큰 변경을 정하고 (혹은 정하지않고) 문서를 토큰으로 분리한다.
"나는 밥을 먹는다" -> "나는", "밥", "먹는다" 이렇게 분리된 토큰을 추출하여 색인어를 포함하는 문서를 빠르게 찾는데 최적화된 역파일 이라는 데이터 구조에 저장된다. 사용자가 검색할 단어를 입력하면 검색엔진은 빠르게 그 단어를 포함한 모든 문서를 찾는다. 색인어가 검색어에 포함된다면 색인어가 출현하는 문서간 링크를 찾아 관련 문서를 찾을 수 있고 또한 빈도수, 동의어를 포함한 유사도 등을 측정하거나 백터 공간 모델을 활용해 순위를 먹일 수도 있다.
벡터
벡터는 데이터를 n차원 선형공간에 매핑하는 대수적 모델이다. 말은 어려워도 쉽게 생각하면 "자동차"와 "자전거"로 제한된 언어로 작성된 문서의 집합을 갖고 있을때 이 문서를 "자동차"는 세로축 "자전거"는 가로축으로 하는 2차원 그래프에 그리다고 상상을 했을때 이 두 단어 사이에는 수없이 많은 각도의 줄이 생길 수 있다.이 두축 사이의 하나의 화살표를 벡터로 표현된다. 검색엔지는 훨씬 더 많은 언어로 집약된 문서의 집합이기때문에 백만 차원 이상이 될 수도 있을것이다. 실제로 검색엔진은 아주 높은 차원을 다루고있다.
순위화
위에서 설명한 벡터데이터를 통해 가중치를 계산할 수 있는데 가장 일반적인 방식은 단어 빈도 역문서 빈도 모델, 또는 TF-IDF모델이라고한다. 어떤 단어가 컬렉션 전체에 나타나는 횟수(IDF)에 비해 문서에 출현하는 빈도가 높으면(TF) 많은 수의 문서에 공통적으로 출현하는 단어보다 중요하다는 것이라는 가정을 두고 작동한다.
결과 보여주기
검색 결과를 사용자가 입력한 내용의 결과에 따라 묶으면 (클러스터링)사용자가 검색했을때 원했던 결과가 훨신 더 만족스러울 것이다. 패신 브라우징은 문서별로 각각의 카태고리가 미리 부여되지만 클러스터링은 반환된 결과에 따라 동적으로 문서의 유사성을 결정한다. 두 경우 모두 사용자는 결과 반환이 보장된 유효 카테고리를 사용해서 표시된 결과를 개선할 수 있다. 쉽게말해 하나를 고르면 비슷한게 딸려오는것이다.
출처: 자연어 텍스트 처리를 통한 검색 시스템 구축
'자연어처리' 카테고리의 다른 글
텍스트 길들이기 기초 (0) | 2024.05.06 |
---|---|
텍스트 길들이기 (1) | 2024.04.28 |