1. Elasticsearch(엘라스틱 서치)
: 분산 검색 엔진
- 전문(full text) 검색 엔진이면서 일종의 NoSQL 데이터베이스
- 텍스트 외에도 숫자, 날짜, IP 주소, 지리 정보 등 다양한 데이터 타입에 최적화
- 관계형 데이터베이스에서 제공하는 LIKE 같은 단순 텍스트 매칭 기법을 넘어, 텍스트를 여러 단어로 변형하여 검색할 수 있으며 스코어링 알고리즘을 통한 연관도에 따른 정렬 기능 제공. 대량의 데이터에서 빠르고 정확한 검색이 가능하게 만들어 줌
1.1. ELK 스택
Elasticsearch는 검색을 위해 단독으로 사용되기도 하며, ELK( Elasticsearch / Logstatsh / Kibana )스택으로 사용되기도 함
- 키바나: 시각화와 엘라스틱서치 관리 도구
- 로그스태시: 이벤트 수집과 정제를 위한 도구
- 비츠: 엣지단에서 동작하는 경량 수집 도구
1.2. 쿼리 컨텍스트와 필터 컨텍스트
쿼리 컨텍스트
- 질의에 대한 유사도를 계산
- 연관성에 따른 스코어 결과 제공
- 다양한 스코어 알고리즘 사용할 수 있는데 기본적으로 BM25 알고리즘 이용
필터 컨텍스트
- 유사도를 계산하지 않고 일치 여부에 따른 결과만 반환
- "예/아니요"의 결과 제공
- 스코어 계산 과정 생략하여, 전체적인 쿼리 속도 올릴 수 있고 결과에 대한 업데이트를 매번 수행할 필요가 없기 때문에 캐시 이용 가능
1.3. Analyzer(분석기)
- 엘라스틱 서치가 전문 검색을 지원하기 위해 역인덱싱 기술을 사용
- 역인덱싱은 상문의 문자열을 분석해 작은 단위로 쪼개어 인덱싱하는 기술
- 캐릭터 필터, 토크나이저, 토큰 필터로 구성된 Analyzer가 문자열을 나누는 기준으로 사용
토큰 필터
NGram
- 특정한 사용 사례에 따라 텀이 아닌 단어의 일부만 가지고도 검색해야 하는 기능이 필요한 경우. 검색 텀의 일부만 미리 분리해서 저장을 할 수 있는데 이렇게 단어의 일부를 나눈 부위를 NGram 이라고 함
Edge NGram
- 검색을 위해 NGram을 저장하더라도 보통은 단어의 맨 앞에서부터 검색하는 경우. ngram 만 저장하기 위해서는 Edge NGram 토큰필터를 이용
Shingle
- NGram과 Edge NGram은 모두 하나의 단어로부터 토큰을 확장하는 토큰 필터. 문자가 아니라 단어 단위로 구성된 묶음을 Shingle이라고 함
한글 형태소 분석기
은전한닢 (seunjeon)
- URL: https://bitbucket.org/eunjeon/seunjeon
- 설명: mecab-ko-dic 기반으로 만들어진 JVM 상에서 돌아가는 한국어 형태소분석기입니다. 기본적으로 java와 scala 인터페이스를 제공합니다. 사전이 패키지 내에 포함되어 있기 때문에 별도로 mecab-ko-dic을 설치할 필요가 없습니다. 특징으로는 (시스템 사전에 등록되어 있는 단어에 한하여) 복합명사 분해와 활용어 원형 찾기가 가능합니다.
- License: Apache 2.0
아리랑 (arirang)
- URL: https://github.com/HowookJeong/elasticsearch-analysis-arirang
- 설명: korean analyzer (lucene analyzer kr arirang)
- License: as-is
open-korean-text
- URL: https://github.com/open-korean-text/open-korean-text
- 설명: 오픈소스 한국어 처리기 (Official Fork of twitter-korean-text)
스칼라로 쓰여진 한국어 처리기입니다. 현재 텍스트 정규화와 형태소 분석, 스테밍을 지원하고 있습니다. 짧은 트윗은 물론이고 긴 글도 처리할 수 있습니다. - License: Apache 2.0
Nori tokenizer
Elasticsearch 6.6 버전 부터 공식적으로 Nori(노리) 라고 하는 한글 형태소 분석기를 Elastic사에서 공식적으로 개발해서 지원. 은전한닢에서 사용하는 mecab-ko-dic 사전을 재가공 하여 사용.
노리토크나이저 옵션
- user_dictionary : 사용자 사전이 저장된 파일의 경로를 입력합니다.
- user_dictionary_rules : 사용자 정의 사전을 배열로 입력합니다.
- decompound_mode : 합성어의 저장 방식을 결정합니다. 다음 3개의 값을 사용 가능합니다.
2. ODQA Retrieval Experiment
- TF-IDF, BM25, Elasticsearch 비교하여 Retrival 실험 진행
- Elasticsearch의 은전한닢 형태소 분석기 기반 한국어형태소 분석기 nori tokenizer, 단어 단위로 한 묶음을 구성하는 shingle token filter, 복합명사를 분리하고 기존 형태를 보존할 수 있도록 decompound mode는 mixed, 유사도 점수로는 BM25를 사용
- BM25의 성능이 가장 좋은 것으로 확인
'Projects' 카테고리의 다른 글
[Open-domain question answering(ODQA)] 5. Reader Experiment - 외부데이터 추가, TAPT (0) | 2023.01.08 |
---|---|
[Open-domain question answering(ODQA)] 4. Reader Experiment - Curriculum Learning (0) | 2023.01.08 |
[Open-domain question answering(ODQA)] 2. EDA, Pytorch Lightning Refactoring (0) | 2023.01.08 |
[Open-domain question answering(ODQA)] 1. 프로젝트 개요 (2) | 2023.01.08 |
NLP 자동차 주제 데이터 제작 프로젝트 (0) | 2022.12.28 |