본문 바로가기

Projects

[Open-domain question answering(ODQA)] 3. Retrieval Experiment - ElasticSearch(엘라스틱 서치)

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)

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

RoBERTa-Lage batch16, learning rate 1e-5, epoch 3

  • TF-IDF, BM25, Elasticsearch 비교하여 Retrival 실험 진행
  • Elasticsearch의 은전한닢 형태소 분석기 기반 한국어형태소 분석기 nori tokenizer, 단어 단위로 한 묶음을 구성하는 shingle token filter, 복합명사를 분리하고 기존 형태를 보존할 수 있도록 decompound mode는 mixed, 유사도 점수로는 BM25를 사용
  • BM25의 성능이 가장 좋은 것으로 확인

 

참고
Elastic 가이드북
Elastic korea 공식 홈페이지 블로그