조현제 버즈니 AI Lab 팀장

[아이티데일리]

▲ 조현제 버즈니 AI Lab 팀장

개요

인터넷 쇼핑의 세계에는 셀 수 없을 만큼 많은 수의 상품이 존재한다. 때문에 인터넷 쇼핑을 운영하는 회사에서는 어떻게 하면 좀 더 효율적으로 사용자가 좋아할만한 상품을 쉽게 노출 시켜줄 수 있을지 끊임없이 고민하고 있다. 이때 가장 기본적이면서도 중요한 역할을 하는 것 중 하나는 바로 상품의 카테고리 정보다. 쇼핑 도메인에서의 상품 카테고리 정보는 쇼핑을 하고자하는 사용자에게 상품을 선택하기 위한 가이드라인이 될 수 있기도 하고, 단순한 아이쇼핑을 하고자 하는 사용자에게는 일종의 추천처럼 활용하기도 한다.

버즈니가 운영 중인 모바일 홈쇼핑 포털 앱 ‘홈쇼핑모아’에는 1억 개 이상의 상품이 존재하며, 상품의 카테고리 정보는 서비스에서 사용자에게 제공되는 핵심 정보 중 하나다. 서비스의 다양한 부분에서 사용자들의 홈쇼핑 경험을 극대화시키기 위해 사용되고 있다. 홈쇼핑모아의 가장 핵심적인 페이지라고 할 수 있는 편성표 페이지와 검색 결과 페이지에서 사용자가 원하는 상품을 더욱 쉽게 찾을 수 있도록 필터 형태로 카테고리 정보를 활용하고 있다. 상품의 카테고리 정보를 활용해 상품 필터를 제공하면 사용자가 더욱 원하는 상품들만 확인할 수 있게 되어 상품의 반응도가 상승하게 되고, 이는 매출의 상승으로 이어지게 된다.

▲ 편성표 페이지에서의 카테고리 필터(왼쪽)와 검색 결과에서의 카테고리 필터(오른쪽)

홈쇼핑모아의 카테고리 정보는 직접적으로 필터 형태로 노출되는 부분뿐만 아니라, 검색 과정에서 사용자가 입력한 질의어와 상품 사이의 연관도를 계산하는 과정, 사용자가 입력한 질의어의 의미를 분석하는 과정, 상품의 브랜드 정보를 추출하는 과정, 사용자가 좋아할 만한 상품을 추천해 주는 과정 등 눈에 보이지 않는 서비스의 다양한 부분에서도 사용자의 홈쇼핑 경험의 극대화를 위해 적극적으로 활용되고 있다. 그렇기 때문에 홈쇼핑모아에서 사용자들에게 좋은 홈쇼핑 경험을 제공하기 위한 시작은 정확한 카테고리 정보를 구축하는 것이 시작이라고 하더라도 과언이 아니다.

그렇지만 이 작업은 생각만큼 쉽지 않다. 앞서 언급하였듯 홈쇼핑모아에는 1억개 이상의 상품이 존재하는데, 상품의 갯수가 방대할 뿐만 아니라 여러 정보가 혼재돼 있다. 홈쇼핑모아에서 노출되는 상품의 기본 정보는 여러 쇼핑사에서 EP(Engine Page) 형태로 데이터를 받아오고 있는데, 이때 제공받는 카테고리 정보는 각 쇼핑사에서 사용하고 있는 카테고리 정보다. 각 쇼핑사에서 사용하는 카테고리 정보는 해당 쇼핑사별 비즈니스 모델이나 서비스에 맞게 구축된 카테고리 체계이기 때문에 쇼핑사마다 사용하는 카테고리 체계가 전부 다르다. 때문에 그 정보를 그대로 활용하게 되면, 같은 상품에 하나의 카테고리가 아닌 여러 카테고리가 존재할 수 있게 되며, 카테고리의 체계 또한 일관적이지 않게 된다. 그래서 홈쇼핑모아에서는 이 1억개 이상의 상품을 아우를 수 있는 별도의 통합된 카테고리 체계가 필요하며, 모든 상품을 통합된 카테고리 체계에 맞추어 다시 분류해야하는 필요성이 생긴다.

버즈니에서는 이를 위해 3단계 기준 1200여개, 4단계 기준 4200여개의 체계를 갖는 새로운 카테고리 체계를 구축했다. 또한 1억개 이상의 상품을 이 체계에 맞추어 일일히 사람이 상품의 카테고리 분류를 수행하는 것은 불가능한 일이므로, 딥러닝 기술을 활용하여 자동으로 상품의 카테고리를 분류하는 시스템을 구축하여 문제를 해결했다.


상품 카테고리 분류 모델

머신러닝 기술을 활용해 상품의 카테고리를 분류하기 위해서는 트레이닝 데이터셋을 구축하는 것이 필수적이다. 이를 위해 버즈니에서는 다양한 전처리 방법과 파트타이머를 활용하여 데이터셋을 구축했다.

카테고리 분류에는 상품명을 기반으로 한 텍스트 정보와 상품 이미지에서 추출한 이미지 정보 등 크게 두 가지 정보가 활용된다. 딥러닝을 활용한 자연어처리 모델에 대한 많은 리서치가 진행되기 전에는 SVM(Support Vector Machine)을 초기 모델로 활용하여 카테고리 분류를 수행해왔다. 텍스트 정보는 버즈니에서 자체 개발한 쇼핑 데이터에 최적화된 상품명 토크나이저를 포함해 공개돼 있는 여러 토크나이저를 이용했으며, 토크나이저를 활용하여 생성된 텍스트 단어들을 TF-IDF 방법을 이용해 벡터화시킨 후에, 벡터화된 상품명 정보를 SVM의 입력으로 하여 카테고리 분류를 수행했다.

문자 단위의 CNN과 RNN 계열의 딥러닝 모델이 등장한 이후에는 텍스트 정보 추출 과정을 Bidirectional LSTM과 Self-attention 기법을 활용한 모델로 변경했다. 그리고 최근에 등장한 Transformer 모델과, BERT 모델을 기반으로 한 고성능 분류 모델을 적용하기 위한 리서치를 진행하고 있다.

▲ Bidirectional LSTM과 Self-Attention을 이용한 텍스트 정보 추출 모델

이미지 데이터는 구축한 카테고리 데이터셋을 이용하여 이미지 분류 모델을 학습시킨 후, 해당 모델에서 추출된 이미지 피쳐를 활용했다. 이 때 사용된 이미지 분류 모델은 초기 이미지 분류 모델 중 하나인 VGG 부터 최신 모델까지 여러 연구를 진행한 후 최적의 모델을 학습하여 사용하였다. 그리고 텍스트 모델에서 생성된 텍스트 정보와, 이미지 모델에서 추출된 이미지 피쳐를 결합하여 최종 카테고리 분류기를 학습시켰다.

▲ 텍스트 정보와 이미지 정보를 결합한 최종 분류 모델

상품 카테고리 분류기 API

홈쇼핑모아에서 분류해야 하는 상품의 수는 1억개가 넘으며, 상품에 대한 카테고리 정보를 얻기 위한 것뿐만 아니라 다른 부분에서도 카테고리 정보를 얻어야 하는 경우가 많기 때문에 카테고리 분류를 수행해야 하는 양이 매우 많다. 그리고 카테고리 분류 모델이 개선될 때 마다 기존에 분류했던 상품 전부를 다시 분류해야 하며, 매일 새롭게 생성되는 상품들에도 빠르게 카테고리 정보를 부여해야 한다. 때문에 대량의 데이터에 대해 카테고리 분류를 빠르게 수행시키기 위해서는 안정적이며 확장 가능성이 뛰어난 API를 구축하는 것이 필수적이다.

홈쇼핑모아에 적용된 상품 카테고리 분류기는 이러한 요구사항들을 만족시키기 위해 Tensorflow Serving을 활용했다. Tensorflow Serving은 Tensorflow를 프로덕션 수준으로 활용하기 위한 프레임워크인 TFX의 기능 중 하나이며, 프로덕션 규모에서 머신러닝 모델을 이용한 서빙 시스템을 구축하기 위해 사용된다. Tensorflow Serving을 활용하게 되면 새로운 모델이나 데이터셋에 대해서도 한번 구성한 아키텍처를 변환하지 않고 적용이 가능하다. 그리고 자동으로 RESTful API를 생성해 주기 때문에 입력 데이터의 전처리만 신경 써 주면 된다는 장점이 있다. 홈쇼핑모아에서는 Tensorflow Serving을 이용하여 다음과 같은 구조로 카테고리 분류기 API를 구성했다.

▲ Tensorflow Serving을 이용한 카테고리 분류기 API의 구조

학습된 모델을 TensorFlow Serving 에서 사용할 수 있는 형태로 변환한 후, TensorFlow Serving과 docker를 이용하여 여러 대의 서버에 다수의 Tensorflow Serving 컨테이너를 띄운 후, 로드밸런싱을 위해 Nginx를 설정한 구조다. 그리고 Flask 기반의 간단한 API를 개발하여 이 API가 카테고리 분류 요청을 받으면, 간단한 텍스트 전처리를 거친 후 Nginx를 통해 각 모델 서버에 존재하는 TensorFlow Serving API를 호출하게 된다. 물론 이러한 모델 서버 구성은 최근 많이 이용하고 있는 Kubernetes를 활용하면 더욱 쉽게 배포하고, 관리하며, 확장하는 것이 가능하다.


모니터링 시스템과의 연계

앞서 언급하였듯 홈쇼핑모아에서 사용자에게 카테고리 정보가 직접적으로 노출되는 부분에는 크게 두 부분이 있다. 하나는 편성표 페이지에서의 카테고리 필터 정보이며, 다른 하나는 검색 결과에서 노출되는 카테고리 필터 정보다. 이 두 가지 중 편성표 페이지에 등장하는 상품들은 홈쇼핑모아의 핵심이 되는 상품들이며, 사용자에게 여러 가치를 제공해 주는 과정에서 검색 결과로 등장하는 상품들과는 다르게 카테고리 정보에 대한 의존도가 더욱 높다. 때문에 편성표 페이지에 노출되는 상품들은 자동으로 분류된 결과보다 더욱 정확한, 100%의 정확도에 가까운 카테고리 분류 정확도를 필요로 한다. 이것을 위해 편성표 상품 카테고리 관리자가 상품의 카테고리가 정확하게 부여되어 있는지 판단하는 과정이 존재한다.

모니터링 시스템을 이용하는 상품 카테고리 관리자는 편성표 페이지에 노출되는 모든 상품을 검수할 수 없다. 하루에 편성표 페이지에 노출되는 상품의 수는 1000여개에 가까울 뿐더러, 카테고리 체계는 3차 카테고리 기준 1200여개의 카테고리 중 하나로 매칭을 하고 있기 때문에, 하루에 모든 상품을 검수하는 것은 쉬운 일이 아니다. 또한 검수를 받지 못한 상품은 편성표 페이지에 정상적으로 노출되기가 어렵기 때문에 검수하는 데에 시간이 오래 걸리는 것은 서비스 퀄리티에 심각한 영향을 끼치게 된다. 따라서 빠르고 정확한 모니터링 시스템을 구축하는 것이 매우 중요했으며, 이 과정에서 앞서 개발한 카테고리 분류기를 적극 활용했다.

▲ 편성표 상품의 카테고리 모니터링 프로세스

EP 형태로 홈쇼핑모아의 상품 데이터베이스에 상품이 추가되면, 모니터링 프로세스가 이것을 감지해 기존에 카테고리 정보를 매칭했던 적이 있는 상품인지 여부를 가장 먼저 체크하게 된다. 홈쇼핑 상품의 도메인 특성상 과거에 편성되었던 상품이 재편성 되는 경우가 있기 때문에 과거 편성 정보를 활용한다면 이 과정에서 쉽게 중복 제거가 가능하다. 신규 상품의 경우에는 우선 앞서 개발한 카테고리 분류기를 이용하여 자동으로 카테고리를 분류하고, 자동으로 분류된 카테고리를 그대로 신뢰할지 여부를 체크한다.

만약 신뢰하기 어려운 카테고리라면 상품 검수 데이터베이스에 추가하고, 상품 카테고리 관리자가 검수 데이터베이스에 추가된 상품들을 검토하게 된다. 이때에도 검수 도구에서 한 가지의 분류 결과만 보여주는 것이 아니라, 여러 분류기에서 생성된 다양한 분류 결과를 보여주고 손쉽게 카테고리의 검색이 가능하도록 하여 관리자의 검토 시간을 최소화했다.

이렇게 자동 카테고리 분류 모델과 모니터링 시스템을 활용하여 편성표 페이지에 노출되는 상품 카테고리의 정확도를 3차 카테고리 기준 90% 후반, 1차 카테고리 기준으로는 100%에 가까운 정확도로 유지할 수 있게 됐다.


결론

지금까지 설명한 상품 카테고리 자동 분류 시스템은 개선해야 할 부분들이 존재한다. 분류 모델 성능의 중심이 되는 딥러닝 네트워크 구조도 최신 네트워크 기반으로 개선시켜 지금보다 더 높은 성능을 이끌어내야 하며, Semi-supervised Learning 이나 Self-supervised Learning 기법들을 이용해 좀 더 강건한 모델을 만들어야 할 필요성도 있다. 또한 학습된 모델에 대한 심도있는 분석과 학습 데이터셋에 대한 고민도 필요하다. 모델의 API를 구성할 때 사용한 Tensorflow Serving 역시 완벽하게 사용하고 있지 못하기 때문에 TFX에서 제공하는 여러 기능과 Kubernetes를 활용하여 더욱 효율적이고 강건한 아키텍처를 구성해야 한다.

앞으로 이러한 일련의 과정들이 개선된다면 좀 더 정확하고, 안정적인 상품 카테고리 자동 분류 시스템을 구축될 것이라고 생각한다. 그리고 이 과정들을 반복하면 언젠가는 상품 카테고리 관리자 없이도 모든 상품에 100% 정확한 카테고리를 부여할 수 있는 날이 오지 않을까 생각한다.

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