일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 파이썬
- aggregation
- API
- 차트
- aggs
- Java
- TensorFlow
- 900gle
- License
- zip 암호화
- MySQL
- springboot
- zip 파일 암호화
- Kafka
- license delete
- query
- Python
- Elasticsearch
- licence delete curl
- docker
- token filter test
- high level client
- plugin
- analyzer test
- matplotlib
- Mac
- ELASTIC
- Test
- sort
- flask
- Today
- Total
개발잡부
Memo 본문
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 |