버즈니 AI Lab 리서치 엔지니어 신동협

버즈니 AI Lab 리서치 엔지니어 신동협

[아이티데일리] 1. 개요
이커머스 시장에서는 한 상품이 다양한 플랫폼에서 판매되고 있다. 다양한 판매자와 프로모션 등을 통해 서로 다른 가격과 구성으로 판매되는 경우도 쉽게 볼 수 있다. 버즈니가 운영하고 있는 모바일 홈쇼핑 포털 앱 ‘홈쇼핑모아’에서는 국내 모든 홈쇼핑 및 T커머스에서 판매 중인 상품들을 모아서 하나의 영역에서 보여주고 있는데, 여러 홈쇼핑사에서 판매되는 특정 상품이 서로 다른 상품인 것처럼 보일 수 있다.

이러한 문제는 서비스 이용자에게 한 상품을 수 차례 보여주게 되어 사용자 경험을 해칠 수 있고, 사용자의 트래픽이 분산되어 개인화 추천 서비스처럼 사용자 로그를 기반으로 하는 서비스 측면에서도 비효율적이다.

이러한 문제를 해결하기 위해선 여러 플랫폼에서 유입되는 동일 상품들의 클러스터 집합인 카탈로그(catalog)가 필요하다. 대규모 상품들을 처리하는 서비스에서는 매우 중요한 요소 중 하나다.

카탈로그를 만들기 위해선 대규모 상품들을 클러스터링할 수 있는 카탈로그 시스템(catalog system)이 필요하다. 올바른 카탈로그 시스템을 구축한다면 위에서 소개한 중복 상품 이슈뿐만 아니라, 효율적인 소비에 큰 도움을 주는 가격 비교와 같은 새로운 서비스들도 가능하다.

버즈니에서도 카탈로그 시스템을 구축해 다양한 서비스에 활용하고 있다. 아래 [그림 1]은 버즈니의 홈쇼핑모아와 사자마켓에서 서비스 중인 가격 비교 기능이다. 카탈로그는 이러한 서비스뿐만 아니라 검색을 위한 상품 메타 정보 구축, 딥러닝 모델 학습 등의 다양한 프로세스에서 적극적으로 활용되고 있다. 본 기고에서는 버즈니에서 사용 중인 카탈로그 시스템에 대해 소개한다.

[그림 1] 카탈로그를 활용한 가격 비교 서비스 (왼쪽: 홈쇼핑모아, 오른쪽: 사자마켓) ]
[그림 1] 카탈로그를 활용한 가격 비교 서비스 (왼쪽: 홈쇼핑모아, 오른쪽: 사자마켓) ]

2. 카탈로그 시스템
버즈니에서는 오래전부터 카탈로그 시스템이 사용됐다. 상품들을 일대일 비교해 동일한 상품인지 아닌지를 예측하는 딥러닝 모델을 학습하고, 학습된 모델을 활용하여 카탈로그를 생성했다.

관련 내용은 이전 기고문에서 찾아볼 수 있다. 하지만 상품 개수가 크게 늘어남에 따라 보다 효율적인 카탈로그 시스템이 요구됐다. 본 기고에서는 해싱(hashing) 기술을 활용한 개선된 카탈로그 시스템에 대해서 소개한다.

[그림2] 카탈로그 생성 프로세스
[그림2] 카탈로그 생성 프로세스

[그림 2]는 전체적인 카탈로그 시스템을 나타낸 그림이다. 먼저 해싱 기반 클러스터링(hashing-based clustering) 단계에서는 상품의 일치 여부를 판별할 수 있는 키(key) 정보(ex. 상품명, 상품 이미지, 제품 코드)들을 해싱 함수를 통해 해시 코드로 변환하고 이를 기반으로 클러스터링을 수행한다. 이후 서브 카탈로그 통합 단계에서는 각 상품 키 정보별로 만들어진 서브 카탈로그들을 묶인 상품을 기준으로 병합하여 최종적인 통합 카탈로그를 생성한다. 각 단계에서의 자세한 내용은 3장과 4장에서 이어 소개한다.


3. 해싱 기반 클러스터링
3.1 해싱 기반 클러스터링

해싱 기반 클러스터링이란 주어진 데이터를 해시 함수를 통해 해시 코드로 변환하고, 해시 코드가 같은 데이터들끼리 묶어내는 기술이다. 간단하게 해시 코드를 key로, 클러스터를 value로 여기고 준비된 key-value 저장소에 데이터를 하나씩 넣어주기만 하면 클러스터들을 빠르게 완성시킬 수 있다.

각 상품들을 서로 비교하지 않고 상품마다 해시 코드만 계산하기 때문에 리소스 측면에서 굉장히 효율적이다. 하지만 기준이 되는 데이터(해시 코드로 변환할 데이터)와 해시 함수에 의존적이기 때문에, 좋은 카탈로그를 위해선 두 요소에 대한 고민이 필요하다.

[그림 3] 해싱 기반 클러스터링 생성 예시
[그림 3] 해싱 기반 클러스터링 생성 예시

[그림 3]은 상품이미지를 기준으로 상품 카탈로그를 만드는 예시이다. 먼저 상품 이미지로부터 해시 코드를 생성하고, 동일한 해시 코드들을 기준으로 카탈로그를 생성한다. 여기서 해시 함수의 역할은 유사한 상품 이미지들을 동일한 해시 코드로 변환하는 것이다.

앞서 소개한 것처럼 카탈로그 생성에는 기준 데이터의 선정이 매우 중요하다. 이커머스 도메인에서는 상품마다 상품을 나타내는 다양한 메타 정보들이 존재한다. 그중에서도 정보 자체로 특정 상품을 지칭할 수 있는 정보들을 카탈로그의 기준 데이터로 선정할 수 있다. 예를 들어 브랜드, 가격, 색상 등의 정보들은 그 자체로 상품을 지칭하기 어렵기 때문에 적절하지 않다. 버즈니에서는 상품명, 상품 이미지, 제품 코드를 기준 데이터로 선정했다. 다만 상품 이미지의 경우 같은 이미지의 다른 상품들이 가끔씩 등장하기 때문에 상품명 해시 코드를 혼합해서 사용했다.


3.2 해시 함수 정의
상품명, 상품 이미지와 같은 비정형 데이터를 해시 코드로 변환하기 위해선 몇 가지 과정이 필요하다. 먼저 해시 코드는 비슷한 데이터에 대해 같은 값을 가져야 하기 때문에, 비슷한 데이터끼리 같은 공간으로 매핑할 수 있는 함수가 필요하다. 데이터의 의미를 벡터로 변환하는 표현학습(representation learning)의 특징을 지닌 딥러닝 모델을 활용하면 비정형 데이터에 대해 적절한 매핑 함수를 만들 수 있다. 본 기고의 카탈로그 시스템에서도 해시 코드를 생성하기 위해 미리 학습된 딥러닝 모델로 상품명과 상품이미지를 고정된 크기의 벡터로 변환하는 과정을 거친다.

버즈니에선 자체적으로 개발한 상품명/이미지 피처 추출 모델들을 사용했다. 두 모델 모두 deep metric learning 기술을 사용하여 대규모의 이커머스 도메인 데이터들을 통해 학습했다. deep metric learning 기술은 의미적으로 같은 데이터는 가깝게, 다른 데이터는 멀게 학습하는 방법으로, 비슷한 데이터들을 같은 해시 코드로 변환해야 하는 요구사항에 잘 부합한다.

한편 CLIP과 같이 대규모 데이터로 학습된 공개 모델을 활용할 수도 있지만, 좋은 카탈로그를 만드는 데에는 도메인에 맞는 데이터들로 모델을 직접 학습하는 것이 큰 도움이 된다.

[그림 4] 해시 코드 추출 과정
[그림 4] 해시 코드 추출 과정

위처럼 딥러닝 모델을 통해 데이터를 고정된 크기의 벡터로 변환한다면 의미적으로 같은 데이터들의 벡터는 유사도가 높을 뿐 동일하진 않다. 이 문제를 해결하기 위해 차원 축소(dimension reduction)와 이진화(binarization)라는 추가적인 변환 과정을 거친다. 차원 축소는 PCA 기술을 사용하였고, 차원 축소 결과에 양수를 1, 음수를 0으로 변환하는 이진화를 거쳐 최종적인 해시 코드를 생성한다. 이때 차원 축소 길이에 따라 얼마나 비슷한 데이터까지 묶을 것인지를 선택할 수 있다.

예를 들어 64개 길이의 해시 코드는 거의 동일한 데이터만을 묶는 반면, 32개 길이의 해시 코드는 어느 정도 비슷한 데이터까지 묶는다. 이는 서비스의 요구사항에 따라 결정될 수 있다. 앞서 설명한 차원 축소 및 이진화 과정 또한 위의 딥러닝 모델에 포함시킬 수 있지만 모델 재사용, 각 모듈 교체 등의 유연성을 위해 위 과정을 채택하였다. 마지막으로 제품 코드의 경우 코드 값 자체를 해시 코드로 사용했다.


4. 카탈로그 생성
4.1 서브 카탈로그 생성

[그림 5] 상품이미지 기반으로 생성된 카탈로그의 상품 클러스터 예시
[그림 5] 상품이미지 기반으로 생성된 카탈로그의 상품 클러스터 예시

[그림 5]는 해시 코드 생성 후 같은 해시 코드의 상품끼리 묶은 카탈로그의 한 클러스터 샘플이다. 이처럼 총 세 가지(A.상품명, B.상품 이미지, C.제품 코드) 데이터마다 각각의 서브 카탈로그가 생성된다. 이 중에서 상품 이미지의 경우 이미지만 같은 다른 상품이 묶이는 경우를 방지하기 위해서, 상품 이미지 해시 코드에 낮은 차원의 상품명 해시 코드를 붙인 값을 해시 코드로 사용했다. 상품명의 카탈로그와 달리 작은 차원의 해시 코드를 사용하여, 같은 상품 이미지면서 어느 정도는 비슷한 상품명인 상품들만 묶일 수 있도록 했다. (ex. 이미지 해시 코드: 101110, 상품명 해시 코드: 101 -] 최종 해시 코드: 101110101)


4.2 서브 카탈로그 통합

각 서브 카탈로그는 상품의 일부 정보만을 사용해 묶어낸 결과이기 때문에, 이상적인 카탈로그를 기준으로 Precision은 높지만 Recall은 낮은 상태다. 예를 들어 상품명을 기준으로 묶었을 때 상품명이 완전히 다른 동일 제품은 묶이지 않는다. 이러한 문제는 상품 이미지, 제품 코드 등 상품의 다른 정보들을 활용하여 추가적으로 묶어서 보완할 수 있다. 서브 카탈로그를 통합하는 과정은 이처럼 각 서브 카탈로그의 부족한 Recall을 보완하기 위한 작업으로 볼 수 있다. 쉽게 말해 상품의 여러 측면을 고려하여 카탈로그를 만드는 것이다.

[그림 6] 서브 카탈로그 통합 예시
[그림 6] 서브 카탈로그 통합 예시

[그림 6]은 서브 카탈로그를 통합하는 방법을 나타낸 것이다. 각 서브 카탈로그를 구성하는 클러스터들은 동일(해시 코드가 같은) 상품으로 구성되어 있다. 그리고 각 상품이 공통적으로 포함된 클러스터는 하나의 클러스터로 묶을 수 있다. 이처럼 같은 상품을 공유하는 클러스터들을 연결하고, 연결된 모든 클러스터들을 하나의 클러스터로 병합하는 작업을 통해 각 카탈로그들을 모두 통합할 수 있다.

클러스터 병합 문제는 클러스터 그래프에서 연결 성분(connected component)을 찾는 문제로 해결 가능하다. 먼저 서브 카탈로그들의 클러스터들을 정점(node)으로 두고 같은 상품을 공유하는 클러스터들끼리 간선(edge)을 이어 클러스터 그래프를 만든다. 그리고 DFS 또는 BFS 알고리즘을 통해 연결 성분(모든 정점들이 연결된 부분 그래프)들을 찾고, 각 연결 성분에 해당하는 클러스터들을 하나의 클러스터로 통합한다. 아래의 [그림 7]은 카탈로그 병합 결과 중 일부 클러스터 결과다.

[그림 7] 통합 카탈로그의 클러스터 예시
[그림 7] 통합 카탈로그의 클러스터 예시

5. 결론
본 기고문에서는 이커머스 플랫폼 서비스의 카탈로그 시스템 기술을 소개했다. 정확도는 높지만 많은 상품들을 처리하기 어려운 일대일 비교 방식을 개선하기 위해, 보다 효율적인 해싱 기반의 클러스터링 방식을 사용했다. 그리고 이커머스 도메인에서 상품의 키로 활용 가능한 데이터들을 대상으로 서브 카탈로그들을 만들고, 동일 상품을 갖는 클러스터들을 통합해 효과적인 카탈로그를 구축했다.

앞서 소개한 방법 외에도 보다 개선된 딥러닝 모델과 추가적인 전/후처리 방법들을 통해 카탈로그의 품질을 개선할 수 있다. 버즈니에서도 모든 상품에 대해 커버리지가 높고 정확한 카탈로그를 생성하기 위해 꾸준히 다양한 방법들을 연구하고 있다.

저작권자 © 아이티데일리 무단전재 및 재배포 금지