|| 카테고리 분류에 2조 토큰을 쓰면서 알게된 것들
안녕하세요. 당근 Taxonomy 팀 윈터(winter.jung), 지원(jiwon)이에요. 저희 팀은 택소노미(Taxonomy)라고 부르는 카테고리 체계를 만들고, 그 체계를 기반으로 중고거래, 모임 게시글 등 당근에 올라오는 게시글을 자동으로 분류해 실제 서비스가 사용하도록 적재하는 파이프라인을 운영하고 있어요.
이번 글에서는 프로덕션 파이프라인에서 카테고리 분류를 위해 LLM을 어떻게 쓰고 있는지, 그리고 성능, 비용, 운영 측면에서 잘 사용하기 위해 어떤 고민과 시도를 했는지 이야기해보려고 해요.
택소노미가 뭔가요?
택소노미라는 단어가 좀 생소하실 수 있는데, 사실 온라인 마트나 서점, 쇼핑몰의 카테고리를 생각해보시면 바로 이해가 되실 거예요. 택소노미는 트리 구조로 된 카테고리 체계를 뜻해요. 어떤 데이터가 어떤 종류인지를 일관된 규칙으로 표현하기 위한 분류 체계이고, 상황에 따라 카탈로그라고도 불러요. 이 글에서는 용어를 택소노미로 통일할게요.
예를 들어 “아우터 > 패딩/다운 > 롱패딩”처럼 위에서 아래로 내려가며 더 구체적인 의미를 담을 수 있고, 같은 아이템이라도 서비스의 필요에 따라 “겨울 아우터 > 출퇴근용”처럼 다른 위계를 담아볼 수 있어요.
택소노미에는 카테고리뿐만 아니라 속성도 담을 수 있어요. 카테고리가 이 상품이 무슨 종류인지를 표현하는 명사라면, 속성은 이 상품이 어떤 특징을 갖는지를 표현하는 형용사에 가까워요. 예를 들어 같은 “롱패딩”이라도 브랜드=나이키, 색상=블랙, 재질=폴리에스터 같은 속성으로 더 구체적으로 설명할 수 있어요.
당근 내부 중고거래 카테고리 예시택소노미가 왜 중요한가요?
택소노미가 있으면 같은 종류의 아이템을 통일된 방식으로 다룰 수 있어요. 예를 들어 “스마트폰”을 서비스마다 “휴대폰”, “모바일기기”, “핸드폰” 제각각 취급하는게 아니라 {"id": "electronic_smartphone", "name": "전자기기 > 스마트폰"}처럼 일관된 방식으로 사용할 수 있어요. 이게 생각보다 서비스 전반에 큰 영향을 줘요.
검색은 카테고리를 기준으로 결과를 좁히거나 확장할 수 있어요. 예를 들어 스마트폰을 검색했다면 아이폰, 갤럭시 같은 하위 카테고리를 포함한 검색이 가능해져요.
추천은 비슷한 카테고리의 아이템을 묶어서 학습하거나, 반대로 같은 카테고리만 연속으로 나오지 않게 다양성을 설계할 수 있어요.
광고나 타겟팅은 아이템, 콘텐츠의 카테고리를 기반으로 더 정교한 세그먼트를 만들 수 있어요.
데이터 분석이나 피처 엔지니어링에서도 카테고리와 속성은 매우 재사용성이 높은 공통 피처가 돼요.
이렇게 택소노미는 검색, 추천, 광고, 분석, ML 모델까지 여러 팀이 함께 쓰는 공통 언어 역할을 해요.
당근은 어디서 카테고리를 쓰고있나요?
당근에서 카테고리는 생각보다 다양한 곳에서 쓰여요. 대표적으로는 중고거래 게시글이 있고, 모임을 만들 때 어떤 타입의 모임인지를 표현하는 체계도 있고, 동네지도에 노출되는 업체에도 카테고리가 필요해요.
특히 당근의 핵심인 중고거래 영역에서는 내부적으로 최대 3 depth로 나뉜 약 1,400개 수준의 카테고리를 관리하고 있어요. 다만 실제로 당근 앱을 사용하는 사용자 입장에서는 보통 앱 화면에서 표면적으로 보이는 카테고리나, 추천 칩 같은 형태로만 카테고리를 만나보셨을 거예요.
(좌) 앱에서 보이는 중고거래 카테고리 (우) 홈 피드 상단에서 볼 수 있는 추천 칩택소노미 관리는 그동안 주로 사람이 해왔어요
전통적으로 택소노미 관리는 휴먼 리소스가 많이 필요한 영역이었어요.
정의 자체가 도메인 전문가의 영역이에요. 어떤 카테고리를 만들지, 서로 어떻게 구분할지, 어디에 속하게 할지 같은 문제는 정답이 있는 문제라기보다 도메인과 제품의 맥락을 아는 사람이 결정하는 경우가 많아요.
ML로 분류하려면 라벨 데이터가 필요해요. 모델을 학습시키려면 결국 사람이 라벨링한 데이터가 필요하