반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

Memo 본문

ElasticStack

Memo

닉의네임 2022. 4. 3. 00:51
반응형

 

term : 분해된 텀 조건에 참인 문서를 검색

terms : 여러개의 텀을 검색  

match : analyzer 를 통한 분석으로 쿼리 operator 를 통해 AND , OR 조건으로 검색 가능  

match_phrase : 입력순서 고려한 검색, slop 옵션 단어사이에 다른단어가 끼어드는것을 허용

query_string : 루씬의 검색문법 사용

 

lucene이 데이터를 색인하는 절차

  • 루씬문서생성
  • 문서텍스트 분석
  • 색인에 문서추가

 

루씬쿼리 

URL 검색에 사용

query_string 쿼리 사용시에 활용

 

토크나이저 필터

 

interceptor

 

HandlerInterceptor 인터페이스를 상속 받으면 preHandle, postHandle, afterCompletion

 3개의 매서드를 구현해야함

preHandle 은 컨트롤러 실행전,

postHandle 는 컨트롤러 실행후, 

afterCompletion 는 view 파일 로드후 



디자인패턴

즐겨쓰는 패턴  추상팩토리패턴 - 객체의 조합을 만드는 인터페이스를 제공하는 패턴

 

전체 100의 문서중 32개가 관련문서 검색결과로 가져온 문서는 20 그중에 16개가 관련문서

 

정밀도

검색결과로 가져온 문서 중 실제 관련된 문서의 비율  

16/20

 

재현율

관련된 문서중  검색된 문서의 비율

16/32

 

성능평가 알고리즘

ndcg

 

cg = 추천결과들은 동일한 비중으로 계산

dcg = 랭킨순서에따라 비중을 줄여 관련도를 계산

ndcg = 전체데이터에 대한 best DCG 를 계산




추천알고리즘

Collaborative Filtering > Contents Based Filtering

 

Collaborative Filtering : 사용자의 과거 행동데이터만 가지고 추천을 진행

Contents Based Filtering : 사용자와 아이템에 대하여 프로필을 작성하고 이를 기반으로 추천

 

hybrid filtering : 위의 두가지를 적용하고, 이의 가중 평균 (Weight Average) 를 구하는 Combining Filtering 기법

 

평점 + 아이템프로필 조합 하여 = 사용자프로필을 만들어 추천하는 Collaboration via Contents

 

중국의 컨텐츠 추천 서비스, 진 르 터우탸오는 가입 후 일정 데이터가 쌓이기 전까지는 contents based 추천을, 

사용 기록이 어느 정도 쌓인 이후에는 collaborative filtering을 사용한다고 합니다.

The standard similarity algorithm used in Elasticsearch

  • TF(Term Frequency)
  • IDF(Inverse Document Frequency)
  • Field-length norm



BM25

BM25를의 검색 점수를 계산하는 수식은 다음과 같다.

TF(Term Frequency): 단어 빈도

TF의 영향이 줄어든다.

TF에서는 단어 빈도가 높아질수록 검색 점수도 지속적으로 높아지는 반면, BM25에서는 특정 값으로 수렴한다.

IDF(Inverse Document Frequency): 문서 역빈도

IDF의 영향이 커진다.

BM25에서는 DF가 높아지면 검색 점수가 0으로 급격히 수렴하므로, 불용어가 검색 점수에 영향을 덜 미친다.

norm: 문서 길이 가중치

문서 길이의 영향이 줄어든다.

BM25에서는 문서의 평균 길이(avgdl)를 계산에 사용하며, 문서의 길이가 검색 점수에 영향을 덜 미친다.

 

왜 BM25가 왜 더 나은가

BM25가 TF/IDF보다 더 나은 이유는 "Elasticsearch가 그렇게 하기 때문이다". Elasticsearch, Improved Text Scoring with BM25에서 이야기하는 그 이유를 여기에 번역해 둔다.

  • 논문에서 그렇다고 한다.
  • TREC 등의 챌린지에서 그렇다고 한다.
  • 사용자들이 그렇다고 한다
  • 루씬 개발자도 그렇다고 한다
  • Konard Beiske도 BM25 vs Lucene Default Similarity에서 그렇다고 한다.

 

Elasticsearch 전처리 과정

Character Filter 

  • HTML strip : html 태그 제거
  • Mapping : 특정문자열을 원하는 값으로 대체 
  • Pattern Replace : 특정 정규식 패턴을 원하는 값으로 대체

 

Tokenizer Filter

문자열을 받아 단어들을 토큰화 하는 과정

 

  • standard : 공백과 하이픈(-) 을 기준으로 토큰화를 수행, 일부 특수 문자를 제거 
  • letter : 문자열 이외의 기준으로 토큰화 수행 Brown-Foxes dog's 같은 문자열은 [Brown, Foxes, dog, s] 
  • whitespace 공백기준으로 토큰화 (공백,줄바꿈,텝)


Token Filter

  • lowercase : 소문자로 바꾸어 주는 토큰 
  • stop : 불용어 is be a as 제거
  • snowball : 단어의 기본형태  s, ing 제거



Stemming 

토큰의 원형 

 

must : 쿼리가 참인 도큐먼트들을 검색합니다.

must_not : 쿼리가 거짓인 도큐먼트들을 검색합니다.

should : 검색 결과 중 이 쿼리에 해당하는 도큐먼트의 점수를 높입니다.

filter : 쿼리가 참인 도큐먼트를 검색하지만 스코어를 계산하지 않습니다. must 보다 검색 속도가 빠르고 캐싱이 가능합니다.

 

반응형

'ElasticStack' 카테고리의 다른 글

[es] 로그설정  (0) 2022.10.21
[es] random sort  (0) 2022.10.20
Elasticsearch 이미지 유사도 검색  (0) 2021.09.18
시스템 설정 구성  (0) 2020.08.11
Nori plugin  (0) 2020.06.09
Comments