카탈로그 내 중복 상품 찾기의 자동화

상품 매칭을 위한 FAISS 및 이미지, 텍스트 임베딩 시스템을 구축한 방법

By Eway Zhan, Amir Aghamousa

온라인 쇼핑 중, 검색 결과에 같은 상품이 여러 다른 버전으로 나오는 상황을 경험해보신 적 있으신가요? 이런 현상은 오픈 마켓 플랫폼에서 흔히 볼 수 있는 문제입니다. 고객 경험에 부정적인 영향을 끼칠뿐더러, 검색 결과 내 온라인 공간을 차지하면서 판매자 경쟁을 약화시키고 카탈로그 품질도 저해합니다.

쿠팡에서는 이러한 현상을 중복 상품이라 부릅니다. 이 현상을 쿠팡의 아이템 매칭 시스템에서 이미지와 텍스트 임베딩을 활용해 어떻게 최소화했는지, 이 글을 통해 공유하려고 합니다.

목차

· 유사성 탐지
· 검색으로서의 매칭
· 실험의 구성
· 실험 결과
· 서비스 아키텍처
· 향후 계획

유사성 탐지

사람은 상품 사진을 눈으로 훑기만 해도 상품의 특징, 여러 상품의 유사성을 빠르게 탐지해 냅니다. 하지만 컴퓨터가 상품의 특징 또는 유사성을 탐지해내는 것은 상당히 어려운 일입니다. 상품 이미지 및 상품명을 기계가 이해할 수 있는 수치적 표현으로 변환해야 하고, 이 수치적 표현에는 사람이 인지하는 상품의 특징 및 유사성이 반영되어야 됩니다.

다시 말하자면, 사람이 인지하는 이미지와 텍스트의 유사성을 숫자로 표현하는 시도를 하고 있는 것입니다. 이런 수리적 표현은 일반적으로 벡터의 형태를 취하게 됩니다. 상품 비교를 위해서, 벡터들 간의 거리로 인간이 감지하는 유사성을 표현하게 하는 것이 목표입니다.

전통적인 벡터 생성 방식은 텍스트 데이터 입력을 활용한 워드 카운트 히스토그램입니다. 이 방식은 지난 20년간 조금씩 다듬어져 왔지만, 핵심은 히스토그램의 원리에서 그리 많이 벗어나지 않았습니다. 하지만 히스토그램 벡터화 방식으로 특정 태스크(Task) 또는 데이터 세트에 벡터를 최적화하는 데에는 한계가 있습니다.

최근 각광받는 벡터 생성 방식은 심층 신경망(Deep Neural Network, DNN)을 활용한 딥 임베딩 벡터입니다. 히스토그램 방식과 가장 큰 차이점은 임베딩 벡터가 DNN에 의해 특정 태스크 또는 데이터 세트에 최적화될 수 있으며 성능을 크게 개선할 수 있다는 점입니다. 또한, 임베딩 벡터는 동일한 파이프라인에서 텍스트와 이미지 입력에 대한 연산이 가능합니다.

임베딩 벡터의 연산 과정을 보여주는 도표
그림 1. 임베딩 벡터의 연산 과정을 보여주는 도표

임베딩 벡터는 특정 도메인에서 유클리드 메트릭 공간으로의 매핑입니다. 딥 임베딩 벡터는 DNN의 비선형적 매핑을 통해 도출됩니다. 명확한 거리(distance)의 개념을 가진 메트릭 공간으로 이미지와 텍스트를 매핑하여 두 벡터의 유사성을 효율적으로 계산할 수 있습니다.

임베딩 벡터의 또 다른 장점은 효율성입니다. 그래픽 처리장치(Graphic Processing Units, GPUs)의 대규모 병렬 아키텍처를 활용하면 벡터를 효율적으로 계산할 수 있습니다. 게다가 병렬화는 장치 수준뿐 만이 아니라 머신과 머신이 속한 클러스터 수준에서도 실현이 가능합니다. 효율적인 계산은 임베딩 벡터의 효율적인 저장, 조회 및 구성을 용이하게 해주어 딥 임베딩을 이용한 플랫폼에서 무엇보다 중요한 요소입니다.

GPU의 병렬식 구조
그림 2. GPU의 병렬식 구조를 통해 수백만 건의 이미지 및 텍스트 항목의 효율적인 연산이 가능해집니다.

이 프로젝트에서는 딥 임베딩 방식의 재현율(recall)과 일래스틱서치(Elasticsearch, ES) 방식의 재현율을 비교했습니다. 딥 임베딩 모델이 저희가 원하는 수준까지 학습했다는 가정 하에, 딥 임베딩 모델의 학습 및 최적화 과정은 더 설명하지 않겠습니다.

검색으로서의 매칭

매칭은 2차 시간 복잡도(quadratic time complexity)가 있기 때문에 확장하기가 어렵습니다. 각 상품을 세트에 있는 나머지 상품과 하나하나 비교해야 하는데, 각 카테고리마다 수백만, 때로는 수억 개의 상품이 있는 쿠팡에서는 매우 어려운 과제입니다.

그래서 저희는 매칭을 검색 문제로 바꿨습니다. 입력 항목에 참 매치(true match)일 확률이 가장 높은 후보군을 출력하는 것입니다. 이것을 저희는 서브세팅이라 하는데, 서브세팅은 입력 항목에 매치되는 항목의 개수가 적을 때 특히 효과적입니다. 매칭의 문제를 검색의 문제로 전환함으로써, 매칭 정확성의 개선을 위한 재현율 최적화를 할 수 있습니다.

실험의 구성

이 실험에서는 ES를 활용하는 전통적인 벡터 스페이스 모델과 FAISS (Facebook AI Similarity Search)를 사용한 딥 임베딩 벡터 모델을 비교합니다. 앞으로 ES기반 벡터 모델은 “기준 모델”로 부르며 FAISS기반 벡터 모델은 “대안 모델”로 부르겠습니다.

기준 모델

먼저, 기준 모델이 필요한 이유는 다음과 같습니다. 해당 실험의 목표는 아이템 매칭의 재현율(recall)을 개선하는 것입니다. 수백 만 항목의 재현율을 얻기 위해서는 카테고리 내 모든 항목의, 아니면 적어도 조사하고 있는 항목의 참 양성(true positives, TP) 세트를 찾아야 합니다. 소규모로는 가능하지만 대규모 카테고리에서 중복 상품 TP를 찾는 것은 수기로 검수해야 하기 때문에 비현실적입니다.

모든 매치를 수기로 검수하는 대신에 이 실험에서는 기준 모델의 결과와 대안 모델의 결과를 비교하여 TP를 찾습니다. 만약 임베딩 벡터를 이용한 대안 모델이 기준 모델보다 많은 참 매치의 결과를 제공한다면, 대안 모델을 통해 저희는 재현율을 개선했다는 것을 알게 됩니다. 수백만 건의 매치를 검수하는 대신, 기준 모델의 결과를 사용하여 대안 모델의 성능을 측정합니다.

ES는 역인덱스(Inverted Index)를 주요 데이터 구조로 사용합니다. 역인덱스는 데이터베이스의 요청(Request) 및 텍스트에 대한 워드 카운트 히스토그램의 효율적인 계산을 가능하게 합니다. 따라서, 유사성도 효율적으로 계산할 수 있습니다. 기준 모델의 구조는 더 깊게 설명하지 않겠지만 실험 파이프라인에 대한 다음 섹션에서 자세히 논의하겠습니다.

대안 모델

이제 FAISS로 텍스트와 이미지 임베딩 벡터를 사용하는 대안 모델을 설명하겠습니다.

먼저 최적화된 신경망 모델로부터 이미지와 텍스트 임베딩 벡터를 받습니다. 이미지 벡터는 상품 이미지에서, 텍스트 벡터는 상품명에서 도출합니다. 일단 상품 이미지와 텍스트를 벡터화한 이후에, 중복 상품을 찾기 위해 유사성을 연산해야 합니다.

FAISS는 수억 개의 상품을 대상으로 효율적인 벡터 유사성 인덱싱 및 조회를 용이하게 합니다. 이미지 벡터와 텍스트 벡터에 FAISS 인덱스를 생성하여, 두 개의 인덱스가 나옵니다. 임베딩을 FAISS에 입력하면, 그 인덱스를 거쳐 입력 벡터와 유사성이 가장 높은 벡터의 인덱스를 출력합니다.

FAISS를 이용하여 인덱싱 및 검색 방법
그림 3. FAISS를 이용하여 참 매치를 클러스터로 묶어, 매치 후보를 더 잘 정리하고 주어진 임계 값 이상의 잠재적 후보를 모두 찾을 수 있습니다.

FAISS의 또 다른 장점은 주어진 유사성 임계 값(Threshold)을 넘는 참 매치 후보들의 클러스터를 출력할 수 있다는 것입니다. 기존의 조회 방법에서 순위(Rank)로 후보를 구성하는 것과는 달리, FAISS는 유사성 수준에 따라 매치 후보를 그룹으로 묶습니다. 유사성 후보 관리도 더 용이하고, 주어진 임계값 이상의 후보 모두를 소진할 수 있어서, 클러스터링을 통해 인덱스 사이즈를 상당히 절약하고 조회 속도도 빠르게 만들 수 있습니다.

예를 들어, 쿠팡 가전 카테고리에는 5천만 개 이상의 상품들이 있습니다. 클러스터링이 없다면 상품 전체의 인덱스를 만들어야 하고 전체 상품을 서로 비교하며 유사성 후보를 도출할 수 밖에 없습니다. 그러나 클러스터링된 데이터 구조에서는 인덱스 및 검색이 필요한 대상이 단지 약 1천7백만 개의 클러스터로 묶인 상품이 되기 때문에 결과적으로 3.29배의 스토리지 및 연산이 절감됩니다.

파이프라인

ES 기준 모델과 FAISS 대안 모델 결과를 비교하는 실험 파이프라인
그림 4. ES 기준 모델과 FAISS 대안 모델 결과를 비교하는 실험 파이프라인

이제 실험의 절차를 살펴보고 ES기준 모델과 FAISS 대안 모델의 결과를 어떻게 비교했는지 분석해 보겠습니다. 그림 4는 전반적인 실험 프레임워크를 보여줍니다. 아래는 실험 과정의 단계별 개요입니다.

  1. 무작위 입력 항목 세트 선택
  2. ES 기준 모델로부터 n 개의 매칭 후보 도출
  3. FAISS 대안 모델로부터 n 개의 매칭 후보 도출. FAISS 모델은 이미지 입력에 대하여 n 개의 후보 및 텍스트 입력에 대하여 n 개의 후보 출력
  4. 후보의 매치 여부를 판단하는 이진 분류 모델인 매처(matcher)를 사용하여 기준 모델에서 도출된 후보와 대안 모델에서 도출된 후보의 참 매치 건수 검수
  5. ES, FAISS 이미지 임베딩, FAISS 텍스트 임베딩 방식들 사이의 참 양성(TP) 건수를 비교하여 재현율 증가를 계산

실험 결과

저희는 각 카테고리 내 수백만 개의 상품을 대상으로 ES 기준 모델과 텍스트와 이미지 임베딩 모델을 비교하는 실험을 해보았습니다.

뷰티 카테고리와 식품 카테고리

쿠팡 뷰티와 식품 카테고리 실험 결과
그림 5. 뷰티와 식품 카테고리 실험 결과. 벤 다이어그램의 퍼센티지는 중복되는 TP의 퍼센티지를 의미합니다. 양 카테고리에서 재현율이 눈에 띄게 증가했습니다.

그림 5의 왼쪽 벤 다이어그램은 2천만 개의 상품이 포함되어 있는 뷰티 카테고리의 실험 결과를 보여주고 있습니다. 이미지와 텍스트 임베딩 방식은 둘 다 ES 기준 방식에 비해 추가적인 매치를 탐지하였습니다. 이미지 임베딩으로 찾은 참 양성(TP) 매치는 기준 방식에서 나온 결과와 57% 겹쳤으며 텍스트 임베딩으로 찾은 매치와는 35% 겹쳤습니다.

게다가 흥미로운 현상은 이미지 임베딩 벡터와 텍스트 임베딩 벡터의 TP 간에는 오직 12%만이 겹치고 있다는 것입니다. 우리는 이를 앙상블 학습 기법(ensemble learning)에서 사용되는 용어를 빌려 상호보완적 특성이라 지칭하였습니다. 앙상블 학습 기법은 상호 보완적인 기능을 가진 약한 학습기들(weak learners)을 모아서 강력한 모델로 만드는 것입니다.

식품 카테고리에서도 동일한 실험을 수행하였습니다. 식품 카테고리는 약 1천7백만 개의 상품이 있습니다. ES 모델의 TP와 더불어, 이미지 임베딩과 텍스트 임베딩은 각각 73% 그리고 36%의 상호 보완적인 TP를 도출하였습니다. 이미지 임베딩과 텍스트 임베딩 결과에서 겹치는 참 매치 쌍은 겨우 16%입니다. 가장 중요한 것은, 재현율이 공통 참 매치에서 106% 증가하였다는 것입니다.

결과 분석

재현율 증가는 카테고리마다 다르게 나타났지만, 전반적으로 대안 모델이 ES 모델보다 유의미한 차이로 더 많은 참 매치를 제공하였습니다. 이러한 결과는 대안 모델이 더 개선된 매칭 시스템을 구축하는데 신뢰할 만한 기반이라는 것을 보여줬습니다.

추가로 텍스트와 이미지 임베딩 TP 매치 쌍에서 관측된 상호보완적 특성도 분석해 보았습니다. 텍스트와 이미지 임베딩 사이의 겹치는 TP가 왜 그렇게 드물었는지 알고 싶었기 때문이었습니다.

이미지 및 텍스트 임베딩 매칭에 대한 히스토그램
그림 6. 텍스트 임베딩 참 매치가 아닌 이미지 임베딩 참 매치의 쌍에 대한 유사성 점수 히스토그램과, 이미지 참 매치가 아닌 텍스트 임베딩 참 매치의 쌍에 대한 유사성 점수 히스토그램을 만들어 보았습니다.

실험에서 보인 상호보완적 특성을 이해하기 위하여, 이미지 임베딩에서는 TP이지만 텍스트 임베딩에서는 TP가 아닌 항목과, 텍스트 임베딩에서는 TP이지만 이미지 임베딩에서는 TP가 아닌 항목들을 조사했습니다. 조사한 결과, 상품 매칭에는 이미지 정보 또는 텍스트 정보 중 하나만 유용하게 사용되는 것을 발견했습니다. 그림 7은 그러한 항목의 예시입니다.

왼쪽에 있는 첫 번째 예시는 이미지 유사성이 높지만 텍스트 유사성은 낮은 참 매치의 쌍을 보여줍니다. 보다시피 두 개의 상품이 실제로는 동일한 상품이지만, 상품의 유사성 정보는 텍스트보다 이미지에서 더 명확합니다. 두 상품의 텍스트에 겹치는 부분은 거의 없지만 이미지는 거의 동일합니다.

두 번째 예시는 이미지와 텍스트가 동일한 양의 유사성 정보를 나타내는 참 매치의 쌍을 보여줍니다. 마지막 예시는 상품의 동일성 정보가 이미지보다는 텍스트를 통해 더 명확하게 표현되는 참 매치의 쌍을 보여줍니다.

텍스트와 이미지의 유사성이 엄청나게 다르고 모호하게 유사한 경우
그림 7. 이 세 개의 예시는 텍스트와 이미지의 유사성이 엄청나게 다르고 모호하게 유사한 경우를 보여줍니다. 이러한 특성으로 인해, 이미지 임베딩과 텍스트 임베딩의 TP 사이에는 겹치는 부분이 거의 없습니다. 상품의 브랜드명은 삭제하였습니다.

서비스 아키텍처

서비스 아키텍처에서 재현율 향상과 임베딩 모델의 상호보완적 특성을 활용하기 위해 텍스트와 이미지 임베딩 파이프라인이 ES 기준 모델과 병행 실행될 수 있도록 설계하였습니다.

쿠팡의 서비스 아키텍처와 플랫폼.
그림 8. 쿠팡의 서비스 아키텍처와 플랫폼. 우리는 서로 다른 모델의 상호보완적 특성을 이 정교한 매칭 시스템에서 우리에게 유리하게 활용하는데 성공했습니다.

현재는, 각 파이프라인의 후보 세트의 조합이 시스템의 참 매치 세트 결과가 됩니다. 향후에는 색, 사이즈와 같은 기타 다른 상품 속성들을 활용하는 컴비네이션 모듈의 통합을 통해 정확도를 높이고자 합니다.

쿠팡의 상품 매칭 시스템은 인덱싱, 검색, 모니터링의 3가지 주요 요소들(component)로 구성되어 있습니다. 이미지와 텍스트 파이프라인에 이 컴포넌트를 제공하여 프로덕션 등급의 효율성, 확장성, 신뢰도를 제공합니다. 인덱싱과 검색 파이프라인 시스템은 초당 3,500개의 요청을 처리할 수 있습니다. 쿼리 지연시간의 범위는 100ms에서 1sec 사이이며 TP90은 900ms입니다.

쿠팡 매칭 시스템의 인덱싱 및 검색 파이프라인
그림 9. 우리 매칭 시스템의 인덱싱 및 검색 파이프라인. 이 파이프라인들은 효율성, 신뢰도, 확장성 있게 설계되었습니다.

이 시스템은 현재 카탈로그 내 중복 상품을 찾아서 줄이기 위해 운영되고 있으며, 쿼리 유사성 분석을 위해 쿼리 결과에도 사용되고 있습니다. 추후에 패션 영역이나 가격 비교 영역으로 시스템을 확장할 계획입니다.

향후 계획

저희는 “기계가 수백만 개의 상품을 사람처럼 인식하는 것이 가능할까"라는 질문을 던졌습니다. 돌이켜보면, 이 목표에 상당한 진전을 이뤘다는 생각이 듭니다. 이 프로젝트를 위해 협력해 주신 팀과 리더분들께 감사를 표하고 싶습니다.

그러나 저희는 아직 만족하지 않습니다. 임베딩 유사성과 이산 범주형 속성(discrete categorical attributes)을 위한 마스터 API 개발 및 타 팀에게 쉽게 확장성을 제공할 수 있는 SDK 개발도 고려하고 있습니다. 게다가, 애플리케이션이나 사용 사례가 증가함에 따라, 스토리지 최적화와 비용 효율화를 목표로 다양한 DNN 모델을 지원할 수 있는 모델 관리 모듈도 개발할 예정입니다 .

여기에 소개된 내용의 결과나 방법을 개선하는데 무언가 꼭 더 필요하다는 생각이 드신다면, 저희 팀에서 함께 일해보시는 건 어떠실까요?

--

--

Read about our engineers and how they are changing the face of e-commerce and beyond.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
쿠팡 엔지니어링

쿠팡 엔지니어링

473 Followers

쿠팡의 엔지니어들은 매일 쿠팡 이커머스, 이츠, 플레이 서비스를 만들고 발전시켜 나갑니다. 그 과정과 결과를 이곳에 기록하고 공유합니다.