AI 공부 기록 블로그

[논문 리뷰] A Flexible Large-Scale Similar Product Identification System in E-commerce 본문

논문 리뷰

[논문 리뷰] A Flexible Large-Scale Similar Product Identification System in E-commerce

dhgudxor 2022. 9. 22. 14:41

  본 논문은 2020년 KDD 워크샵 중 Industrial Recommendation Systems에서 발표되었으며, 아마존의 대규모 상품 유사도를 식별하기 위해 사용한 딥러닝 기반의 방법론과 상품 유사성 서비스에 대한 전반적인 내용을 다루었습니다. 

 

논문의 리뷰는 제가 이해한 내용을 바탕으로 작성하였으며, 오역이나 잘못된 내용이 있다면 지적해주시면 감사하겠습니다 :)


1. Introduction

  아마존에서 유사 상품 식별은 대체 상품 추천, 비슷한 상품 추천, 유사 상품 검색 등 다양한 분야에서 응용되어 사용되고 있습니다. 아래 그림의 (a)의 경우 고객이 핸드폰 케이스를 구매하려 할 때, 재고가 남아있지 않은 경우 사용자가 원했던 상품의 이미지, 제목, 설명 정보 등을 반영하여 이와 유사한 핸드폰 케이스를 대신 추천해줄 수 있습니다. 그림 (b)의 경우 고객이 가방을 선택했을 때, 이와 유사한 다른 디자인의 가방을 추천해 고객이 다양한 선택을 할 수 있도록 합니다. 그림 (c)의 경우 고객이 검색한 가구와 다른 판매자가 판매하는 비슷한 디자인의 가구를 찾아 고객이 다양한 선택을 할 수 있도록 제시할 수 있습니다. 

 

<그림 1. Amazon의 유사 제품 식별>

  이처럼 E-commerce에서 상품간 유사성은 널리 응용되고 있습니다. 저자에 따르면 이전에는 상품간 유사성을 계산하기 위해 특정 도메인마다 다르게 적용하였다고 합니다. 하지만 특정 도메인을 위한 독립적인 컴퓨팅 시스템을 구축하는 작업은 모델 개발 및 리소스 활용 측면에서 비효율적입니다. 이에 따라 아마존 팀은 아래의 핵심 사항들을 고려해 다양한 도메인에서도 통합적으로 활용할 수 있는 Product Similarity Service(PSS)를 구축하였습니다. 

 

  먼저 다양한 도메인에서도 적용할 수 잇는 Flexible Similarity Definition을 위해 1) 변형 입력 제품 정보,  2) 다른 최적화 목표,  3) 핵심 속성 매칭을 강조합니다. 

1) Variant Input Product Information (변형 입력 제품 정보) - 시각적으로 유사한 상품을 추천하기 위해 상품의 이미지가 핵심이지만 대체 제품 식별의 경우 이미지, 제목 및 설명 등의 핵심 정보를 고려해야 함. 이에 따라 다양한 입력 정보를 반영할 수 있는 것이 중요

2) Different Optimization Goals (다른 최적화 목표) - 비슷한 상품 추천에서는 쿼리 이미지와 유사한 시각적 형태를 보인 제품을 순위 순서대로 반환해야 하며, 대체 상품 추천에서는 고객이 구매 결정을 내릴 때 서로 교체할 수 있는 상품을 식별해야 함. 이에 따라 다양한 최적화 목표를 고려해야 함 

3) Key Attributes Matching (핵심 속성 매칭) - 예를 들어 고객이 iPhone X 케이스를 탐색하는 경우 iPhone X와 호환되지 않는 케이스는 모두 제거하는 후처리 과정이 필요. 이에 따라 사후 필터를 적용해서 부적격한 유사 항목을 제거해야 함. 

 

  이에 더해 아마존의 대규모 데이터를 다루기 위해 확장 가능하고 효율적인 유사성 컴퓨팅을 고려해야 한다고 주장하며, 아래와 같은 3가지를 강조합니다.

1) Scalability (확장성) - 지속해서 증가하는 방대한 상품을 처리하고 제어할 수 있는 시간 프레임으로 갱신한 유사성 결과를 게시할 수 있어야 함

2) Compute management (컴퓨팅 관리) - 뉴럴 넷을 통해 이미지임베딩 및 텍스트임베딩 계산 결과와 유사성 검색을 위한 대규모 아이템 인덱싱 처리 과정의 비용 최적화를 위한 컴퓨팅 리소스(예: CPU/GPU 및 메모리 사용량) 관리가 필요함

3) Caching (캐싱) - 반복적인 계산 없이 여러 애플리케이션에서 재사용할 수 있도록 미리 계산된 결과를 식별하고 캐싱할 수 있어야 함

2. PSS Framework

<그림2. PSS 프레임워크>

  위 그림은 저자들이 위에서 언급한 핵심 사항들을 모두 고려한 아마존의 PSS 프레임워크입니다. PSS 프레임워크는 크게 (a) Product Embedding (b) Similarity Indexing & Search (c) Post-filtering의 3가지 모듈로 나누어집니다. 또한 학습을 위한 Training flow와 사용자의 질의를 위한 Query flow로 구분되어 입력됩니다. 대략적인 흐름을 보면 Product Embedding 단계에서 학습 아이템의 상품 이미지, 텍스트, 고객 행동 데이터를 추출하여 상품 간의 유사도를 Siamese Network를 기반으로 Multi-task Learning 학습을 수행합니다. 이후 학습된 모든 상품의 임베딩 벡터들을 유사도 상관관계에 따라 인덱스 아티팩트를 구축합니다. 쿼리아이템의 경우 이미 학습된 네트워크를 기반으로 아이템의 특징 벡터를 추출하고 KNN 알고리즘을 기반으로 상위 K개의 유사한 아이템을 찾습니다. 최종적으로 사후 필터링을 적용하여 쿼리 항목과 일치하지 않고 부적절한 항목들을 제거하여 데이터 저장소에 업로드합니다. 그러면 이제 각각의 모듈들에 대해 자세히 살펴보도록 하겠습니다. 

(a) Product Embedding

  신발, 전자 제품, 가구 등 상품마다 서로 다른 유사도를 정의하는 것은 효율적이지가 않습니다. 이에 따라 저자들은 카테고리에 제한 없이 통합된 솔루션을 만들 수 있도록 아이템의 이미지, 제목, 설명, 고객 행동 데이터들의 특징 벡터들을 추출하고 결합하여 하나의 Compound feature를 생성하였습니다. 여기서 이미지의 경우 사전 학습된 AlexNet으로부터 특징들을 추출하고, 제목과 설명 정보의 경우 Word2Vec을 활용하였습니다. 또한 고객들의 행동 데이터는 사용자와 아이템 간의 연결성을 고려하는 그래프 기반의 솔루션을 적용해서 특징들을 추출하였습니다.

<그림 3. Compound feature 생성>

  아이템들의 Compound feature로부터 유사함/비유사함의 관계를 학습하기 위해 SiameseNetwork 구조를 활용하였습니다. SiameseNetwork의 경우 서로 다른 입력에 대해 모델이 공유되는 가중치를 가지기 때문에 출력 벡터 간에 거리 계산이 용이하다는 특징이 있습니다. 간단한 Feed Forward Network(FFN)를 통해 학습을 수행하는데, 모델이 보다 유연하게 학습 될 수 있도록 고객 행동 유사성 데이터/전문가 라벨링 데이터로부터 Multi-task learning 방식을 사용했습니다. 

  수식으로는 아래와 같이 정의됩니다. $f_i$는 compund feature를 의미하고, 활성함수 $\sigma$와 weight $W$, bias $b$로 이루어진 $L$개의 fully connected networks를 통과해 결과 벡터를 출력합니다. 손실함수의 경우 아이템 쌍들간$(i, j)$에 Contrastive loss를 사용하여 다중 태스크($t\in \tau$)를 학습합니다.

 

$h_i^{L} = FFN(f_i) = \sigma(\sigma(f_iW^{(1)}+b^{(1)})\cdot\cdot\cdot)W^{(L)}+b^{(L)}$    $\cdot \cdot\cdot  1)$

$L^{t}=\frac{1}{|M|}\sum_{(i,j)\in M}^{}L_{i,j}^{t}(y_{ij}, h_i, h_j)$    $\cdot \cdot\cdot  2)$

$L_{all}=\sum_{t\in \tau}^{}\alpha_t*L^{t}$    $\cdot \cdot\cdot  3)$

 

  Contrastive loss는 두 입력 벡터로부터 거리를 계산하여 같은 입력끼리 더 가까워지도록 학습하고, 다른 입력끼리는 더 멀어지도록 학습하는 특징이 있습니다. 아래의 수식에서 두 쌍 간의 유사 여부(1, 0)가 주어질 때 L2 distance를 계산하여 Loss가 최소화되는 방향으로 가중치가 업데이트됩니다. 이때 negative pairs의 경우 마진($m^2$)을 지정하여 두 쌍 간의 거리가 마진보다 작다면(두 쌍 간 유사함) 계속해서 loss 값을 생성하고, 두 쌍 간의 거리가 마진보다 커지면 loss 값을 0으로 수렴시킬 수 있습니다.

 

$L(y, h_i, h_j)=y*\left\|h_i-h_j \right\|^2+(1-y)*max(0,m^2-\left\|h_i-h_j \right\|^2)$    $\cdot \cdot\cdot  4)$

 

<그림 4. 아이템 임베딩 학습을 위한 SiameseNetworks>

  SiameseNetwork로부터 좋은 아이템 임베딩 벡터를 출력하기 위해 학습에 사용되는 데이터셋이 중요합니다. 이는 모델이 맞추기 쉬운 데이터로 계속 학습을 수행할 경우 추론 과정에서 헷갈리는 데이터가 등장했을 때 정확도가 떨어지기 때문입니다. 모델이 예측하기 어려운 hard positive/negative training pairs를 구축하기 위해 저자들은 다음과 같은 방법을 사용했습니다. 

 

(1) 고객 행동 데이터인 View-to-Purchase(V2P)의 경우 가장 최근에 본 제품과 바로 이어서 구매한 제품을 positive pairs로 지정하고, 구매한 제품보다 N 번째 이전에 본 제품은 hard negative pairs로 지정

(2) 전문가로부터 직접 라벨링(human label-based)을 수행하여 positive/negative 학습 쌍을 구축

(3) 수집한 학습 데이터로부터 추가 cleaning step을 실행

    - positive pairs의 경우 이미지/제목/상품 행동 데이터들의 임베딩 벡터들 값의 코사인 유사도가 0.6보다 작으면 제거

    - negative pairs의 경우 이미지/제목/상품 행동 데이터들의 임베딩 벡터들 값의 코사인 유사도가 0.8보다 높으면 제거

 

  최종적으로 모델을 학습하기 위해 V2P 데이터 10만 개의 positive pairs와 50만 개의 negative pairs를 가지고 학습을 수행하였으며, human label-based 데이터 4천 개의 positive pairs와 2만 개의 negative pairs를 사용했습니다. 

 

  * 유사도 학습 시 positive pairs보다 negative pairs를 더 많이 확보하는 이유

    - 두 입력이 유사할 경우 같다는 기준이 확실하게 있지만, 유사하지 않을 경우 기준이 모호하고 다양하기 때문

    - 예를 들어 신발 이미지들끼리 공통점이 분명하지만, 신발-가구, 신발-전자제품 등 비교하는 상품에 따라 천차만별임

    - 이에 따라 negative sample을 많이 확보하여 모델을 학습시키는 것이 중요함 

(b) Similar Products Indexing & Search / (c) Post-filtering Refinement

<그림 5 & 6. 분산된 유사도 indexing 과 query / 후처리 결과>  

  상품들의 임베딩 벡터들이 학습이 완료되면 인덱스 아티팩트를 구축하여 빠르게 쿼리와 유사한 상품을 검색할 수 있도록 합니다. 데이터가 크기 때문에 여러 개의 index partition과 query partition으로 나눈 후, 분할된 쿼리로부터 distributed KNN 알고리즘을 수행합니다. 이를 통해 쿼리와 거리가 가장 가까운 상위 k개의 상품을 반환하고 모든 파티션에 대해 결과를 종합하여 최종 후보 목록을 도출합니다. 이후 상황이나 조건에 따라 후처리(Post-filtering) 과정을 수행하게 됩니다. 우측 그림의 예시 (a)는 어떠한 필터링도 수행하지 않고 다양한 형태의 상품 후보들이 출력됩니다. 반면 (b)의 경우 쿼리 상품으로부터 색상이 유사한 상품만 필터링 과정을 거쳤으며, (c)의 경우 쿼리 상품과 유사한 스타일의 드레스만 남기도록 필터링을 수행하였습니다. 

3. Experiments

  저자들은 3가지 관점에서 실험을 진행했는데, 먼저 오프라인 평가로 상품 간의 유사도 확인, 대체 상품 유사성 랭킹을 실험하였습니다. 상품간 유사도 확인의 평가 데이터셋의 경우 Human labeled data 중 5천 개의 positive pairs와 2만 5천 개의 negative pairs를 데이터 셋을 활용하였으며, 평가 지표로는 Recall과 Precision에 대한 trade-off 관계를 고려하는 Recall@Precision 80%, 90%, 95%(R%@P80%, R%@P90%, R%@P95%) 사용하였습니다. 대체 상품 유사성 랭킹의 평가 데이터셋은 실제 고객들의 클릭 데이터로 평가를 진행하였으며, 평가 지표로는 추천되는 순서에 따라 가중치를 달리하는 NDCG@1, 10, 20과 관련 항목들의 평균 Precision을 계산한 MAP를 사용했습니다. 또한 온라인 평가로는 아마존 홈페이지에서 A/B 테스트를 수행해 실제로 유의미한 변화가 있었는지 확인하였고, 시스템 성능을 확인하기 위해 대규모 유사성 컴퓨팅 작업 수행의 속도와 비용을 비교하였습니다.

3.1 Product Similarity Verfication

  먼저 오프라인 테스트 중 상품 유사도 확인에 대한 실험 결과를 보도록 하겠습니다. 서로 다른 상품의 입력 정보로부터 R@P80%의 성능을 비교해본 결과 모든 정보(이미지, 제목, 행동 데이터)가 반영된 compound feature의 경우 43.32%의 결과가 나왔지만, 이미지만 반영한 경우 29.61%, 행동 데이터만 반영한 경우 32.44%, 제목만 반영한 경우 7.36%의 결과가 나왔습니다. 이를 통해 서로 다른 입력의 정보가 상호 보완적이며 이들을 모두 합쳤을 때 가장 좋은 결과가 나온다는 것을 알 수 있었습니다. 

  아래의 좌측 표는 서로 다른 데이터 셋으로부터 Multi-task Learning 방법을 통해 학습한 결과 비교입니다. 표의 첫 번째 행인 Compound Feature의 경우 별도의 학습 없이 추출한 특징 벡터들로만 실험을 수행하였습니다. Single-task Learning(V2P / Labeled 4K)을 수행한 것보다 Multi-task Learning(V2P & Labeled 4K)을 사용한 것이 매우 우수한 것을 알 수 있습니다. 아래의 우측 표는 유사도를 학습하기 위해 SiameseNetwork의 구조를 서로 달리하였을 때 비교한 결과입니다. 모델 레이어에 대해서 256-256-256-256 총 4개의 레이어를 통해 학습하는 것이 가장 좋은 성능을 나타냄을 알 수 있습니다. 우측 표의 4번째-6번째와 5번째-7번째 행을 비교하였을 때 넓은 네트워크 구조 보다는 깊은 네트워크 구조를 가졌을 때 더 우수한 성능을 보이는 것을 알 수 있습니다. 

<표 1 & 2. Multi-task learning 비교 / SiameseNetwork 구조>

3.2 Similarity Ranking 

  다음으로 대체 상품 추천을 위한 유사성 랭킹 실험 결과를 보도록 하겠습니다. 서로 다른 입력 정보로부터 성능을 비교해 보았을 때 개별 정보들만 반영한 1-3 행의 결과를 보면 Image 정보만 반영했을 때 가장 좋은 성능을 보였습니다. 이는 일반적으로 이미지 정보가 대체 상품 추천에 있어 중요한 역할을 한다는 것을 알 수 있습니다. 4번째 행의 Compound Feature의 경우 입력정보 간에 상호 보완적 특징을 가져 개별 정보를 반영한 대체 상품 추천보다 좋은 성능을 보였습니다. 그중에서도 SiameseNetwork를 활용하여 상품들을 학습하고 대체 상품을 추천한 5번째 행의 결과가 가장 좋은 성능을 보였습니다. 

 

<표 3. 다른 입력으로부터 랭킹 성능 비교>

  이번에는 카테고리마다 대체 상품 추천 성능은 MAP를 통해 비교를 하였습니다. 아래 표를 보게 되면 카테고리마다 입력 정보들의 중요성이 달라지는 것을 알 수 있었습니다. Image 정보의 경우 카테고리 중 apparel, shoes, home이 가장 좋은 성능을 보였으며, Compound 정보의 경우 PC, toy 카테고리에서 좋은 성능을 보였습니다. 그렇지만 SiameseNetwork를 사용한 경우 모든 카테고리에 대해 전반적으로 우수한 성능을 갖는 것을 알 수 있었습니다.

 

<표 4. 서로 다른 카테고리 랭킹 성능 비교>

3.3 Online A/B Test & Distributed Computing Performance

  이번에는 실제 아마존 사이트에서 A/B 테스트를 수행해 저자들이 제안한 PSS 프레임 워크가 유의미한 성능 향상이 있었는지 확인하였습니다. 먼저 대체 상품 추천에선 4주 동안 실험 집단과 통제 집단의 구매 전환율을 비교해보았을 때, p-value 0.03에서 6.58% 향상이 있었습니다. 마찬가지로 유사 상품 추천에선 p-value 0.04에서 1.02% 성능 향상이 있었습니다. 이를 통해 실제로 저자들이 제안한 PSS 프레임워크가 유의미한 성능을 나타낸 것을 알 수 있었습니다. 아래의 좌측의 그림은 실제 아마존에서 대체 상품 추천, 유사한 상품 추천의 결과를 시각화하여 나타내었습니다. 결과를 보게 되면 실제로 쿼리가 되는 상품과 유사한 상품들을 추천합니다. 아래 우측의 표는 PSS의 확장성을 평가하기 위해 유사성 컴퓨팅 수행 시 분산 솔루션과 비분산 솔루션을 비교한 결과입니다. 결과를 보게 되면 분산 인덱싱과 쿼리 모두 비분산 솔루션보다 지속해서 우수한 성능을 갖는 것을 알 수 있었습니다. 이를 통해 저자들이 제안한 PSS 프레임워크의 경우 거대한 양을 갖는 데이터에서 효율적인 컴퓨팅 능력과 확장성을 갖는 것을 알 수 있습니다.

<그림 8. & 표 5. 실제 결과 시각화 / 분산 유사도 컴퓨팅 성능>

4. Conclusion

  저자들은 E-commerce에서 유사 상품의 식별은 다양하게 활용되기 때문에 중요한 과제라고 제시합니다. 이에 따라 아마존에서는 도메인에 의존되지 않고 통합된 하나의 유사도 식별 솔루션인 PSS를 제안하였습니다. 특히 SiameseNetwork를 통해 아이템들의 쌍을 학습하고 Multi-task Learning 방식을 사용하여 유연한 대규모 데이터에서도 상품 간 유사도를 식별할 수 있는 모델 구조를 만들었습니다. 또한 유사도 식별, 랭킹 태스크 등 다양한 실험을 통해 저자들이 제안한 PSS 프레임워크가 우수함을 보였으며, 컴퓨팅 효율성 및 시스템 확장성 측면에서도 유용함을 보였습니다. 개인적으로 본 논문의 경우 유사도를 식별하기 위해 복잡한 모델 구조를 사용한 것이 아닌 간단한 FFN를 활용하고, 전처리-후처리 과정에 많은 관심을 기울여 높은 성능을 끌어낸 것이 인상적이었습니다.

Comments