무신사 기술 블로그를 개인적으로 공부 겸 정리했습니다.
무신사의 경우 상품 검색 시 추천순이라는 정렬 방식을 사용 중
기존 모델이 정말 고객이 원하는 상품을 잘 추천해주고 있는지에 대한 의문
ex. "후드 집업"으로 검색을 했을 때, 랭킹 스코어가 낮은 후드 집업보다 스코어가 높은 후드티가 상위 랭크에 위치하는 경우가 발생
고객 피드백 결과, 특정 브랜드를 검색하는 고객에게는 해당 브랜드를, 특정 카테고리(ex. 슬리퍼)를 찾는 고객에게는 해당 카테고리를 보여준다.
적합도(Relevance) - 검색어와 상품 색인 필드의 단어간 확률적 연관 관계 - 개념 도입
(필드별 중요도 * 필드별 유사도)
필드별 중요도
필드별 유사도
모델 개선안 (기존에 인기도 요소만 존재했던 모델에 적합도 요소 추가)
인기도(Popularity) : 상품의 구매, 후기, 클레임 등으로 판단한 점수
적합도(Relevance) : 검색어와 상품 정보 간 확률적 연관 관계
모델 프로토타이
기존 추천 시스템 아키텍처
개선된 추천 시스템 아키텍처
프로토 타입에서 구현한 목표를 실제 서비스에 적용
→ Elasticsearch의 Function score query를 사용해 스코어링 모델 구현
적합도 점수와 인기도 점수 조합시 사용한 데이터
Function score query에서 사용할 수식
Function score query 작동 조건
Field 점수 사용 여부
해당 함수 쿼리에 검색어의 Term이 있으면 1, 없으면 0
1번과 2번의 점수에 가중 할 점수 : 가중치로 우선 순위 지정
3번의 값들을 합산할 것인지 곱셈할 것인지 등에 관한 결정
⇒ 가중치를 통해 의도한대로 상품 정렬
무신사 검색 엔진은 여러 가지 색인 필드 항목(브랜드, 카테고리, 상품명, 태그 등)을 Multi match query를 통해 하나의 필드처럼 만들어서 검색
Function score query
검색된 상품은 기존과 동일하나 정렬 순서만 변경하고자 함
query : 기존 검색 조건을 포함한 Multi match query 사용
functions : 스코어링하고 싶은 요소를 추가해 상품 정렬을 변경 (개선된 부분)
Function score query의 스코어링 Flow