Elasticsearch와 함께 사용하는 Nori 형태소 분석기와 KNN 서치
Elasticsearch는 강력한 검색엔진이지만, 기본적으로 영어에 최적화되어 있음.
한국어 같은 복잡한 언어를 정확하게 처리하려면 형태소 분석이 필요하며, 이를 위해 Nori 분석기를 사용함.
또한, KNN 서치는 텍스트 유사도 기반 검색이나 추천 시스템을 구축할 때 사용하는 벡터 기반의 고속 유사 검색 기능임.
1. Nori 형태소 분석기란 무엇인가
Nori 분석기는 Elasticsearch에서 제공하는 한국어 전용 형태소 분석기임.
형태소는 단어를 구성하는 가장 작은 의미 단위이며, Nori는 이를 분리하고 불용어 제거, 사용자 사전 기반 분석 등 다양한 기능을 제공함.
주요 기능
- 명사, 동사, 조사 등 분리하여 분석함.
- 불용어 제거로 검색 정확도를 향상시킴.
- 사용자 사전 지원으로 도메인 특화 키워드를 반영할 수 있음.
예시
문장: “스프링부트를 활용한 웹개발”
Nori 분석 결과:
→ “스프링부트”, “활용”, “웹”, “개발”
이처럼 조사나 접사 없이 핵심 키워드만 추출해 검색 정확도를 높일 수 있음.
2. Nori 분석기 설정 예시
{
"settings": {
"analysis": {
"tokenizer": {
"nori_user_dict": {
"type": "nori_tokenizer",
"user_dictionary": "userdict_ko.txt"
}
},
"analyzer": {
"korean_analyzer": {
"type": "custom",
"tokenizer": "nori_user_dict"
}
}
}
}
}
사용자 사전 userdict_ko.txt 에 도메인 용어를 등록하면 분석 결과에 반영됨.
예:
스프링부트, NNP
카프카, NNP
3. KNN 서치란 무엇인가
KNN(K-Nearest Neighbor) 서치는 벡터 기반 유사도 검색 기능임.
일반 키워드 기반 검색과 달리, 문장의 의미나 맥락까지 반영한 검색 결과를 제공할 수 있음.
특징
- 텍스트, 이미지 등 다양한 벡터에 적용 가능함.
- 벡터 간 거리(유사도)를 계산하여 가장 유사한 k개의 결과를 반환함.
- Elasticsearch에서는 dense_vector 필드와 knn 쿼리를 사용하여 구현 가능함.
사용 예
{
"size": 3,
"query": {
"knn": {
"text_vector": {
"vector": [0.5, 0.2, 0.8],
"k": 3
}
}
}
}
벡터 [0.5, 0.2, 0.8]과 가장 유사한 k=3개의 결과를 반환함.
4. Nori 분석기 + KNN 서치 통합 활용
Nori와 KNN을 함께 사용하면 단어 기반 검색의 정확성과 의미 기반 검색의 유연성을 동시에 확보할 수 있음.
활용 흐름
- 문장을 Nori 분석기로 전처리하여 핵심 토큰 추출
- 해당 문장을 벡터 임베딩 (BERT, FastText 등 활용)
- 임베딩된 벡터를 Elasticsearch에 저장
- 검색 시 입력 문장을 같은 방식으로 임베딩
- KNN 서치로 유사도 기반 결과 반환
5. 실무 활용 사례
- 한국어 검색엔진
- 사용자 입력을 Nori로 전처리하여 검색 정확도 향상
- 유사도 기반 검색으로 관련 문서 추천 기능 제공
- 상품 추천 시스템
- 상품 설명을 벡터로 변환 후 KNN 검색으로 유사한 상품 추천
- 챗봇 유사 질문 매칭
- 사용자의 질문을 벡터화하여 기존 질문들과 유사도 비교
- 리뷰 분석
- Nori 분석으로 핵심 키워드 추출 + KNN으로 관련 리뷰 제공
6. 장단점 비교
항목 | Nori 분석기 | KNN 서치 |
강점 | 한국어 문법 기반 분석, 조사 제거, 명사 추출 | 의미 기반 검색, 문장 단위 유사도 비교 |
약점 | 단어 기반이므로 문맥 파악이 어려움 | 임베딩 모델과 연동 필요, 처리 비용 높음 |
사용 목적 | 정확한 키워드 추출 및 검색 | 의미/문맥 중심 유사 검색 |
주요 기술 | 형태소 분석, 토큰화 | 임베딩, 벡터화, 거리 기반 검색 |
정리
- Nori 분석기는 한국어 문장을 형태소 단위로 분석하여 정확한 키워드 추출이 가능함.
- KNN 서치는 문장 의미를 벡터화한 뒤 유사도를 기반으로 검색 결과를 반환함.
- 두 기술을 함께 사용하면 정확하고 유연한 한국어 검색 시스템을 구현할 수 있음.
- Elasticsearch는 이 두 기능을 모두 지원하여 자연어 기반의 검색 품질을 극대화할 수 있음.
출처 : ChatGPT
'DB > Elasticsearch' 카테고리의 다른 글
N-gram (0) | 2025.04.13 |
---|---|
[Elasticsearch] 엘라스틱서치 (1) | 2025.02.27 |