Download - [Elasticsearch] 검색의 연관성 좀 더 높여보기
Copyright All Rights Reserved © job planet 2014
v.1.0����������� ������������������ 20141230����������� ������������������
!Hosang����������� ������������������ Jeon����������� ������������������
검색의 연관성 좀 더 높여보기
Copyright All Rights Reserved © job planet 2014
Table����������� ������������������ of����������� ������������������ Contents
1. 엘라스틱서치는����������� ������������������ 스코어를����������� ������������������ 어떻게����������� ������������������ 계산하는가?����������� ������������������
2. 부스팅����������� ������������������ (Boosting)����������� ������������������ 이란?����������� ������������������
3. function_score����������� ������������������ 쿼리����������� ������������������
4. 스코어����������� ������������������ 결합하기
Copyright All Rights Reserved © job planet 2014
1.����������� ������������������ 엘라스틱서치는����������� ������������������ 스코어를����������� ������������������ 어떻게����������� ������������������ 계산하는가?
Copyright All Rights Reserved © job planet 2014
TF-IDF����������� ������������������ :����������� ������������������ 스코어����������� ������������������ 계산의����������� ������������������ 필수����������� ������������������ 요소
TF����������� ������������������ (Term����������� ������������������ Frequency)����������� ������������������ :����������� ������������������ 용어����������� ������������������ 빈도����������� ������������������ !• 하나의����������� ������������������ 문서����������� ������������������ 내에서의����������� ������������������ 단어의����������� ������������������ 빈도����������� ������������������ • 높을수록����������� ������������������ 연관성이����������� ������������������ 높음
IDF����������� ������������������ (Index����������� ������������������ Document����������� ������������������ Frequency)����������� ������������������ :����������� ������������������ 역문서����������� ������������������ 빈도����������� ������������������ !
• 전체����������� ������������������ 문서에서����������� ������������������ 해당����������� ������������������ 단어의����������� ������������������ 빈도����������� ������������������ • #����������� ������������������ of����������� ������������������ matched����������� ������������������ documents����������� ������������������ • 낮을수록����������� ������������������ 연관성이����������� ������������������ 높음
Copyright All Rights Reserved © job planet 2014
Term����������� ������������������ Frequency����������� ������������������ (TF)
“직장인,����������� ������������������ 회사원,����������� ������������������ 봉급생활자는����������� ������������������ 급여를����������� ������������������ 받고����������� ������������������ 일하는����������� ������������������ 사람을����������� ������������������ 총칭하는����������� ������������������ 말이다.”
“이곳은����������� ������������������ 뽐뿌����������� ������������������ 직장인����������� ������������������ 포럼입니다.����������� ������������������ 직장이야기,����������� ������������������ 직장인����������� ������������������ 고민,����������� ������������������ 직장인����������� ������������������ 연봉,����������� ������������������ 직장인����������� ������������������ 일상����������� ������������������ 등����������� ������������������ 직장인들을����������� ������������������ 위한����������� ������������������ 이야기����������� ������������������ 공간입니다.”
직장인
TF����������� ������������������ :����������� ������������������ 1
TF����������� ������������������ :����������� ������������������ 4
Copyright All Rights Reserved © job planet 2014
Inverse����������� ������������������ Document����������� ������������������ Frequency����������� ������������������ (IDF)
“직장인이����������� ������������������ 10명����������� ������������������ 중����������� ������������������ 6명이����������� ������������������ 명절����������� ������������������ 전후����������� ������������������ 이직을����������� ������������������ 고려한다고����������� ������������������ 한다.����������� ������������������ 이유야����������� ������������������ 어쨌든����������� ������������������ 선물세트를����������� ������������������ 2개나����������� ������������������ 주어서����������� ������������������ 양손은����������� ������������������ 무겁지만…⋯"
“일단����������� ������������������ 토론을����������� ������������������ 잘하려����������� ������������������ 리����������� ������������������ 인지하는����������� ������������������ 것이����������� ������������������ 엇이고����������� ������������������ 충분한����������� ������������������ 면����������� ������������������ 주제를����������� ������������������ 정확히����������� ������������������ 이해해야����������� ������������������ 한다.����������� ������������������ 찬성과����������� ������������������ 반대����������� ������������������ 입장����������� ������������������ 모두의����������� ������������������ 장단점을����������� ������������������ 수렴할����������� ������������������ 수����������� ������������������ 있어야����������� ������������������ 함은����������� ������������������ 물론이다.”
“자연을����������� ������������������ 가까이����������� ������������������ 한다.����������� ������������������ 후지산,����������� ������������������ 카와구치코,����������� ������������������ 사이코,����������� ������������������ 쇼우지코,����������� ������������������ 모토소코,����������� ������������������ 아오키가하라쥬카이의����������� ������������������ 대자연에����������� ������������������ 둘러싸였습니다.����������� ������������������ 한번은����������� ������������������ 올라가봐야����������� ������������������ 한다.”
한다DF : 1직장인 DF : 3 IDF = 1/DF
Copyright All Rights Reserved © job planet 2014
Inverse����������� ������������������ Document����������� ������������������ Frequency����������� ������������������ (IDF)
DF����������� ������������������ 는����������� ������������������ 용어가����������� ������������������ 등장하는����������� ������������������ 문서의����������� ������������������ 개수만을����������� ������������������ 고려할����������� ������������������ 뿐,����������� ������������������ 하나의����������� ������������������ 문서에서����������� ������������������ 해당����������� ������������������ 용어가����������� ������������������ 얼마나����������� ������������������ 자주����������� ������������������ 등장하는지는����������� ������������������ 고려하지����������� ������������������ 않는다.
한다DF : 1직장인 DF : 3 IDF = 1/DF
Copyright All Rights Reserved © job planet 2014
Lucene����������� ������������������ scoring����������� ������������������ formula
Score(q, d) =
q
t
TF(t,d) * IDF(t,d)2 * Norm(d, field) * Boost(t)
• q : query • d : document • t : term
Copyright All Rights Reserved © job planet 2014
Lucene����������� ������������������ scoring����������� ������������������ formula
Score(q, d) =
q
t
TF(t,d) * IDF(t,d)2 * Norm(d, field) * Boost(t)
쿼리 q 에대한 문서 d 의 스코어는 쿼리상의 모든 용어 t 에 대하여 (TF의 제곱근 X IDF의 제곱 X 각 필드의 normalization factor X 용어 t의 부스팅) ! 값의 합이다.
사람이 이해할 수 있는 말로 표현하자면…
그냥 대략 이렇다는 정도만…
Copyright All Rights Reserved © job planet 2014
2.����������� ������������������ 부스팅����������� ������������������ (Boosting)����������� ������������������ 이란?
Copyright All Rights Reserved © job planet 2014
부스팅이란?
XX증권에����������� ������������������ 대한����������� ������������������ 뉴스를����������� ������������������ 검색하고����������� ������������������ 싶다면?
뉴스����������� ������������������ title에����������� ������������������ ‘XX증권’이라는����������� ������������������ 단어가����������� ������������������ 등장하는����������� ������������������ 경우
뉴스����������� ������������������ description에����������� ������������������ ‘XX증권’이라는����������� ������������������ 단어가����������� ������������������ 등장하는����������� ������������������ 경우
title����������� ������������������ 에����������� ������������������ 검색어가����������� ������������������ 등장하는����������� ������������������ 경우가����������� ������������������ XX증권에����������� ������������������ 관련된����������� ������������������ 뉴스일����������� ������������������ 가능성이����������� ������������������ 좀����������� ������������������ 더����������� ������������������ 높기����������� ������������������ 때문에����������� ������������������ title����������� ������������������ 필드를����������� ������������������ 부스팅한다.
Copyright All Rights Reserved © job planet 2014
부스팅����������� ������������������ 값은����������� ������������������ 어떻게����������� ������������������ 사용되는가?
• 스코어����������� ������������������ 계산식에서����������� ������������������ 부스팅����������� ������������������ 값은����������� ������������������ 정규화(Normalization)����������� ������������������ 되기����������� ������������������ 때문에����������� ������������������ 숫자����������� ������������������ 그대로����������� ������������������ 곱셈되지는����������� ������������������ 않는다.����������� ������������������
!• 하지만����������� ������������������ 대략적으로����������� ������������������ 특정����������� ������������������ 필드의����������� ������������������ 부스팅����������� ������������������ 값은����������� ������������������ 3이라고����������� ������������������ 지정한다면����������� ������������������ 그����������� ������������������ 필
드가����������� ������������������ 다른����������� ������������������ 필드들에����������� ������������������ 비하여����������� ������������������ 대략����������� ������������������ 세배정도����������� ������������������ 중요하다고����������� ������������������ 이해해도����������� ������������������ 좋다.
Score(q, d) =
q
t
TF(t,d) * IDF(t,d)2 * Norm(d, field) * Boost(t)
Copyright All Rights Reserved © job planet 2014
부스팅의����������� ������������������ 두����������� ������������������ 가지����������� ������������������ 방법
1. 인덱싱����������� ������������������ 시점에서의����������� ������������������ 부스팅����������� ������������������ !2. 쿼리����������� ������������������ 시점에서의����������� ������������������ 부스팅
인덱싱����������� ������������������ 시점에����������� ������������������ 정의된����������� ������������������ 부스팅은����������� ������������������ 수정하기����������� ������������������ 위해서����������� ������������������ 문서를����������� ������������������ 다시����������� ������������������ 인덱싱해야하기����������� ������������������ 때문에����������� ������������������ 가급적����������� ������������������ 쿼리����������� ������������������ 시점에서����������� ������������������ 부스팅을����������� ������������������ 사용하기를����������� ������������������ 권장한다.
Copyright All Rights Reserved © job planet 2014
쿼리시점에서의����������� ������������������ 부스팅
1. 필드별����������� ������������������ 부스팅����������� ������������������ !2. 용어별����������� ������������������ 부스팅
Copyright All Rights Reserved © job planet 2014
필드별����������� ������������������ 부스팅
curl -XPOST ‘localhost:9200/my-index/_search?pretty’ -d ‘{ “query”: { “multi_match”: { “query”: “직장인”, “fields”: [“title^3”, “description”] } }}’
title����������� ������������������ 필드가����������� ������������������ 3만큼����������� ������������������ 부스팅����������� ������������������ 되었다.
Copyright All Rights Reserved © job planet 2014
용어별����������� ������������������ 부스팅
curl -XPOST ‘localhost:9200/my-index/_search?pretty’ -d ‘{ “query”: { “query_string”: { “query”: “직장인^3 AND 연봉” } }}’
“직장인”����������� ������������������ 검색어가����������� ������������������ “연봉”����������� ������������������ 검색어보다����������� ������������������ 3만큼����������� ������������������ 부스팅����������� ������������������ 되었다.
Copyright All Rights Reserved © job planet 2014
3.����������� ������������������ function_score����������� ������������������ 쿼리
Copyright All Rights Reserved © job planet 2014
function_score����������� ������������������ 쿼리
• 용어나����������� ������������������ 필드를����������� ������������������ 부스팅하여����������� ������������������ 스코어를����������� ������������������ 조정하는����������� ������������������ 것은����������� ������������������ 한계를����������� ������������������ 가지고����������� ������������������ 있다.����������� ������������������ ����������� ������������������ !• 좀더����������� ������������������ 유연하게����������� ������������������ 스코어링을����������� ������������������ 조절할����������� ������������������ 수����������� ������������������ 있는����������� ������������������ 방식이����������� ������������������ 바로����������� ������������������ function_score를����������� ������������������ 이용한����������� ������������������ 쿼리이다.
Copyright All Rights Reserved © job planet 2014
function_score����������� ������������������ 쿼리의����������� ������������������ 구조
curl -XPOST ‘localhost:9200/my-index/_search?pretty’ -d ‘{ “query”: { “function_score”: { “query”: { “match”: { “description”: “직장인” } }, “functions”: [] } }}’
아무런����������� ������������������ 스코어링도����������� ������������������ 하지����������� ������������������ 않는����������� ������������������ function_score����������� ������������������ 쿼리����������� ������������������ 예시
“functions”����������� ������������������ 에����������� ������������������ 정의될����������� ������������������ 함수들은����������� ������������������ 쿼리의����������� ������������������ 결과에����������� ������������������ 대해서만����������� ������������������ 적용된다.
Copyright All Rights Reserved © job planet 2014
function_score����������� ������������������ 쿼리에서����������� ������������������ 사용하는����������� ������������������ 함수의����������� ������������������ 유형
1. boost_factor����������� ������������������ !2. field_value_factor����������� ������������������ !3. script_score����������� ������������������ !4. random_score����������� ������������������ !5. decay����������� ������������������ functions
Copyright All Rights Reserved © job planet 2014
boost_factor����������� ������������������ 함수
• 가장����������� ������������������ 간단한����������� ������������������ 함수로서,����������� ������������������ 단순히����������� ������������������ 상수를����������� ������������������ 곱한다.����������� ������������������ • 필터를����������� ������������������ 이용하여����������� ������������������ 부스팅할����������� ������������������ 문서를����������� ������������������ 결정한다.
curl -XPOST ‘localhost:9200/my-index/_search?pretty’ -d ‘{ “query”: { “function_score”: { “query”: { “match”: { “description”: “직장인” } }, “functions”: [ { “boost_factor”: 1.5, “filter”: {“term”: {“description”: “연봉”}} } ] }
“직장인”����������� ������������������ 검색결과에서����������� ������������������ description에����������� ������������������ “연봉”����������� ������������������ 이라는����������� ������������������ 용어를����������� ������������������ 포함하고����������� ������������������ 있는����������� ������������������ 문서의����������� ������������������ 스코어를����������� ������������������ 1.5배����������� ������������������ 한다.
Copyright All Rights Reserved © job planet 2014
field_value_factor����������� ������������������ 함수
• 숫자형����������� ������������������ 필드의����������� ������������������ 값을����������� ������������������ 스코어에����������� ������������������ 이용����������� ������������������ •좋아요����������� ������������������ 버튼을����������� ������������������ 누른����������� ������������������ 카운트����������� ������������������ 등을����������� ������������������ 검색결과에����������� ������������������ 이용할����������� ������������������ 때����������� ������������������ 사용
curl -XPOST ‘localhost:9200/my-index/_search?pretty’ -d ‘{ “query”: { “function_score”: { “query”: { “match”: { “description”: “직장인” } }, “functions”: [ { “field_value_factor”: { “field”: “review_count”, “factor”: 2.5, “modifier”: “log” } ] } }}’
_score����������� ������������������ =����������� ������������������ log(2.5����������� ������������������ X����������� ������������������ doc[‘review_count’].value)
Copyright All Rights Reserved © job planet 2014
script_score����������� ������������������ 함수����������� ������������������
• 가장����������� ������������������ 자유도가����������� ������������������ 높은����������� ������������������ 스코어링����������� ������������������ 방식
curl -XPOST ‘localhost:9200/my-index/_search?pretty’ -d ‘{ “query”: { “function_score”: { “query”: { “match”: { “description”: “직장인” } }, “functions”: [ { “script_score”: { “script”: “Math.log(doc[\”salaries\”].values.size() * myweight”, “params”: { “myweight”: 2 } } } ] } }}’
Copyright All Rights Reserved © job planet 2014
random_score����������� ������������������ 함수
• 문서를����������� ������������������ 랜덤하게����������� ������������������ 정렬하고����������� ������������������ 싶을����������� ������������������ 때����������� ������������������ 사용����������� ������������������ • seed����������� ������������������ 값을����������� ������������������ 동일하게����������� ������������������ 주면����������� ������������������ 동일한����������� ������������������ 결과가����������� ������������������ 나타남
curl -XPOST ‘localhost:9200/my-index/_search?pretty’ -d ‘{ “query”: { “function_score”: { “query”: { “match”: { “description”: “직장인” } }, “functions”: [ { “random_score”: { “seed”: 1234 } } ] } }}’
Copyright All Rights Reserved © job planet 2014
decay����������� ������������������ 함수들
• 특정����������� ������������������ 필드의����������� ������������������ 값을����������� ������������������ 이용하여����������� ������������������ 스코어를����������� ������������������ 점진적으로����������� ������������������ 줄여나가는����������� ������������������ 함수����������� ������������������ !
• Ex)����������� ������������������ 시간이����������� ������������������ 오래된����������� ������������������ 정보일����������� ������������������ 수록����������� ������������������ 스코어를����������� ������������������ 줄여나가기����������� ������������������ !
• Ex)����������� ������������������ 거리상����������� ������������������ 먼����������� ������������������ 위치일����������� ������������������ 수록����������� ������������������ 스코어를����������� ������������������ 줄여나가기
Copyright All Rights Reserved © job planet 2014
decay����������� ������������������ 함수들
1. linear����������� ������������������ 2. gauss����������� ������������������ 3. exp
세����������� ������������������ 가지����������� ������������������ 종류의����������� ������������������ decay����������� ������������������ 함수들
스코어가����������� ������������������ 줄어드는����������� ������������������ 곡선의����������� ������������������ 형태를����������� ������������������ 결정
Copyright All Rights Reserved © job planet 2014
decay����������� ������������������ 함수들
모든����������� ������������������ decay����������� ������������������ 함수들은����������� ������������������ 아래와����������� ������������������ 같은����������� ������������������ 형식을����������� ������������������ 따름
{ “TYPE”: { “FIELD_NAME”: { “origin”: “…”, “offset”: “…”, “scale”: “…”, “decay”: “…” } }}
Copyright All Rights Reserved © job planet 2014
decay����������� ������������������ 함수들
origin����������� ������������������ :����������� ������������������ 함수����������� ������������������ 곡선의����������� ������������������ 중심.����������� ������������������ 즉,����������� ������������������ 가장����������� ������������������ 스코어가����������� ������������������ 높은����������� ������������������ 지점.����������� ������������������ ����������� ������������������ 예를����������� ������������������ 들어,����������� ������������������ geo-location����������� ������������������ 을����������� ������������������ 이용하는����������� ������������������ 경우����������� ������������������ 사용자의����������� ������������������ 현재����������� ������������������ 위치가����������� ������������������ origin����������� ������������������ 이����������� ������������������ 됨
offset����������� ������������������ :����������� ������������������ origin으로부터����������� ������������������ 스코어가����������� ������������������ 줄어들지����������� ������������������ 않는����������� ������������������ 구간의����������� ������������������ 거리.����������� ������������������ ����������� ������������������ 예를����������� ������������������ 들어,����������� ������������������ offset이����������� ������������������ 1km����������� ������������������ 이면����������� ������������������ origin으로부터����������� ������������������ 1km����������� ������������������ 이내의����������� ������������������ 거리에서는����������� ������������������ 스코어가����������� ������������������ 줄어들지����������� ������������������ 않는다.
scale����������� ������������������ &����������� ������������������ decay����������� ������������������ :����������� ������������������ 이����������� ������������������ 두����������� ������������������ 값의����������� ������������������ 조합으로����������� ������������������ 스코어값이����������� ������������������ 줄어드는����������� ������������������ 기준이����������� ������������������ 정해진다.����������� ������������������ 예를����������� ������������������ 들어,����������� ������������������ scale����������� ������������������ 값이����������� ������������������ 3km����������� ������������������ 이고����������� ������������������ decay����������� ������������������ 값이����������� ������������������ 0.3이면����������� ������������������ origin에서부터����������� ������������������ 3km����������� ������������������ 멀어질����������� ������������������ 수록����������� ������������������ 스코어가����������� ������������������ 0.3배로����������� ������������������ 줄어든다.
Copyright All Rights Reserved © job planet 2014
decay����������� ������������������ 함수들
gaussian����������� ������������������ decay����������� ������������������ 함수����������� ������������������ 예제
curl -XPOST ‘localhost:9200/my-index/_search?pretty’ -d ‘{ “query”: { “function_score”: { “query”: { “match”: { “description”: “직장인” } }, “functions”: [ { “gauss”: { “geolocation”:{ “origin”: “23.232112,-42.324211”, “offset”: “100m”, “scale”: “2km”, “decay”: 0.5 } } } ] }
Copyright All Rights Reserved © job planet 2014
4.����������� ������������������ 스코어����������� ������������������ 결합하기
Copyright All Rights Reserved © job planet 2014
스코어����������� ������������������ 결합하기
SCORE_MODE
• “functions”����������� ������������������ 배열����������� ������������������ 안의����������� ������������������ 여러����������� ������������������ 함수의����������� ������������������ 스코어들을����������� ������������������ 결합하는����������� ������������������ 방법����������� ������������������ ����������� ������������������ • multiply(default),����������� ������������������ first,����������� ������������������ sum,����������� ������������������ avg,����������� ������������������ max,����������� ������������������ min
• 함수의����������� ������������������ 스코어를����������� ������������������ 쿼리����������� ������������������ 결과의����������� ������������������ 스코어와����������� ������������������ 결합하는����������� ������������������ 방법����������� ������������������ • multiply(default),����������� ������������������ replace,����������� ������������������ sum,����������� ������������������ avg,����������� ������������������ max,����������� ������������������ min
BOOST_MODE
Copyright All Rights Reserved © job planet 2014
감사합니다.