딥러닝을 통한 블럭스 개인화 추천 시스템의 진화: 2편

어텐션 알고리즘의 심층 분석과 트랜스포머의 활용
Content's avatar
Jul 19, 2024
딥러닝을 통한 블럭스 개인화 추천 시스템의 진화: 2편

지난 글에서 블럭스(Blux) 머신러닝 팀이 고객 행동 데이터를 기반으로 개인화 추천 솔루션을 개발하는 과정을 간단히 살펴보았습니다. 특히, 임베딩 기법과 어텐션 알고리즘을 활용해 상품 특성 정보와 문맥적 정보를 벡터 공간에 맵핑하는 방법을 소개했는데요. 이번 글에서는 이러한 추천 시스템의 핵심 요소 중 하나인 ‘어텐션(Attention) 알고리즘’을 좀 더 심층적으로 탐구하고, 트랜스포머 기법을 블럭스 추천 시스템에 어떻게 적용하는지 알아보겠습니다.


어텐션 알고리즘 핵심 원리와 추천 시스템 적용 방법

‘어텐션 알고리즘’은 추천 시스템의 성능을 향상시키는 데 중요한 역할을 합니다. 고객의 행동 데이터를 분석하고, 이를 바탕으로 개인 맞춤형 추천을 제공하기 위해서는 어텐션 메커니즘을 이해하는 것이 필수적입니다.

딥러닝의 대표적인 알고리즘인 어텐션은 ‘뉴럴 네트워크(Neural Network)’가 주어진 데이터들 사이의 관계를 학습하기 제한적인 한계를 극복하기 위해 고안된 알고리즘입니다. 데이터들 사이의 관계는 다양하게 정의될 수 있지만, 딥러닝에서는 통상적으로 데이터들이 얼마나 유사한가로 정의합니다. 즉, 데이터를 표현하는 벡터들의 내적(Dot Product)을 통해 그 관계를 파악합니다. 따라서 어텐션 알고리즘의 궁극적인 목표는 주어진 벡터들의 가중합을 구하는 일입니다. 이때 가중치가 곱해지는 대상이 되는 벡터들을 ‘밸류(Value)’라고 정의합니다.

추천 시스템의 관점에서는 고객들이 과거에 상호작용을 진행한 상품들이 됩니다. 그리고 이 가중치들은 해당 밸류를 잘 표현할 수 있는 데이터와 유사성을 측정할 대상이 되는 데이터의 내적으로 구해지게 됩니다. 전자를 ‘키(Key), 후자를 ‘쿼리(Query)’라고 정의합니다. 많은 경우, 밸류와 키는 같은 값을 가지게 됩니다. 예를 들어 어떤 고객의 행동 데이터들을 ‘애그리게이션(Aggregation)’할 때, 특정 상품 A와 유사한 상품에 더 큰 가중치를 주고 싶다면 쿼리는 상품 A의 벡터가 되고, 키와 밸류는 고객이 과거 상호작용하였던 상품들의 벡터가 됩니다. 이를 그림으로 표현하면 다음과 같습니다.

애그리게이션상호작용

이때 q는 상품 A의 벡터, K_i와 V_i는 i번째에 고객이 상호작용한 상품의 벡터가 됩니다. 이들을 서로 내적하면 하나의 상수값(Scalar)으로 유사도가 측정됩니다. 이 유사도를 가중치로 활용하여 벡터화된 고객의 행동데이터를 애그리게이션하게 됩니다. 쿼리 벡터와 i번째 상품벡터인 K_i 의 유사도를 ‘alpha_i‘라고 정의하겠습니다.

고객행동데이터애그리게이션

내적 연산을 마치게 되면 위 그림과 같이 쿼리로 주어진 상품벡터와 고객이 과거 상호작용을 진행한 상품들 사이의 유사도가 담긴 벡터가 만들어지게 됩니다. 이는 그 값이 클수록 서로 유사한 상품이라는 걸 의미합니다.

다음으로 이 유사도 값들의 합이 1이 되도록 ‘노멀라이즈(Normalize)’과정을 진행합니다. 이때 ‘소프트맥스(Softmax)’ 연산이 적용되며, 이 과정 이후 각 유사도의 값은 확률값으로 해석될 수 있습니다. 이를 ‘어텐션 디스트리뷰션(Attention Distribution)’이라고 이야기합니다. 이후 어텐션 디스트리뷰션의 값을 밸류의 각 벡터에 곱한 뒤 이들을 더해 밸류 벡터들을 모두 더한 새로운 벡터를 생성하게 됩니다. 추천 시스템의 관점에서는 상품 A와의 유사도한 상품에 더 많은 가중치를 주어 고객의 행동패턴을 추출한 벡터를 의미합니다.

어텐션디스트리뷰션

즉, 어텐션 알고리즘은 쿼리와 키의 관계를 포착할 수 있는 연산을 진행하여 어텐션 디스트리뷰션을 구한 뒤 키와 맵핑이 되어 있는 밸류에 해당 가중치를 곱하는 방식으로 계산됩니다. 이때 쿼리나 키의 차원으로 ‘스케일링(Scaling)’을 진행하여 더욱 안정적인 연산을 진행합니다. 이렇게 내적을 이용하여 관계를 측정하고, 스케일링을 진행하는 어텐션을 ‘스케일드 닷 프로덕트 어텐션(Scaled Dot-Product Attention)’이라고 이야기합니다. 이를 식으로 표현하면 다음과 같습니다.

Scaled Dot-Product Attention

어텐션 알고리즘은 ‘맥스 폴링(Max Pooling)’처럼 어렵게 하나의 벡터를 선택하는 것이 아니기 때문에 ‘소프트-셀렉션(Soft-selection)’ 방식이라고 불리기도 합니다. (출처: Structured Attention Network, Yoon Kim, 2017)

트랜스포머는 이러한 어텐션을 기반으로 하여 순차 데이터에서 나타나는 일종의 패턴을 학습하는 데 특화된 알고리즘으로 다양한 모델의 기반이 되고 있습니다. 트랜스포머 기법을 처음 제안한 논문에서는 자연어처리의 번역과 같이 입력된 데이터를 다른 도메인의 데이터로 변형하는 ‘시퀀스-투-시퀀스(Sequence-to-Sequence)’ 모델을 위해 ‘인코더(Encoder)’, ‘디코더(Decoder)’ 구조를 채택하고 있습니다. 그렇지만 추천 시스템에서는 다른 도메인의 값으로 출력하는 것이 아닌 주어진 정보의 문맥을 파악하는 데 그 목적을 두고 있기 때문에 인코더만을 이용하여 모델링을 진행합니다. 그리고 이러한 인코더 구조를 활용한 대표적인 모델로써 ‘BERT(Bidireactional Encoder Representations Transformers)’가 있습니다.

상품 추천에 적합한 BERT4REC

BERT는 구글에서 트랜스포머의 인코더를 이용하여 주어진 문장의 문맥(Context)을 추출하기 위해 제안된 모델입니다. 추천 시스템에서는 2019년에 BERT의 구조를 차용하여 주어진 행동 데이터의 문맥을 추출하는 모델이 제안되었습니다.

BERT4RE

BERT4REC은 BERT에서 제안된 ‘마스크드 랭귀지 모델(Masked Language Model)’ 방식을 차용합니다. 마스크드 랭귀지 모델은 주어진 문장에서 일부 토큰들을 마스크 처리하여 해당 자리에 들어갈 토큰을 맞추는 방식으로 학습을 진행합니다. 이와 마찬가지로 BERT4REC은 주어진 과거 행동 데이터에서 일부 상품들을 마스크 처리하여 해당 자리에 들어갈 상품을 맞추는 방식으로 학습이 진행됩니다. 실제 추천을 진행할 때는 고객의 과거 행동 데이터 마지막에 마스크를 붙여 해당 자리에 들어갈 상품이 무엇인지 예측하는 방향으로 추천이 진행됩니다.

조금 더 구체적으로 그 과정을 살펴보겠습니다.

마스크드랭귀지모델

인풋으로는 과거 고객이 상호작용을 진행한 상품들이 시간순으로 정렬되어 들어옵니다. 그리고 해당 인풋을 구성하는 상품들을 임의로 선택하여 마스크 토큰으로 바꾸어 버립니다.

이렇게 만들어진 마스크드 인풋을 트랜스포머 레이어에 넣어 연산을 진행하는데, 그 과정을 도식화하면 다음과 같이 표현할 수 있습니다.

트랜스포머레이어

마스크가 씌워진 토큰의 경우, 트랜스포머 레이어를 지나고 나면 다른 행동 데이터의 정보가 반영된 벡터가 형성됩니다. 최종 아웃풋 레이어에서는 해당 벡터와 추천 후보가 되는 ‘아이템 임베딩 매트릭스(Item Embedding Matrix)’와 내적을 통해 유사도를 구하고 ‘소프트맥스(Softmax)’ 연산을 통해 각 상품이 해당 위치에 존재할 확률을 구하게 됩니다. 이후 모델은 ‘라벨(Label)’ 상품의 확률값이 높아지도록 학습이 이루어집니다. 이를 수식으로 표현하면 다음과 같습니다.

아이템임베딩매트릭스

다양한 머신러닝 모델로 최고의 솔루션 제공이 목표

앞서 설명한 BERT4REC은 현재 블럭스가 실제 서비스에 사용하는 머신러닝 모델들의 ‘기준선(Baseline)’으로 고객의 행동 정보를 추출하는 데 사용되고 있습니다. 하지만 BERT4REC만으로는 큐레이션 단계에서 발생하는 비즈니스 문제들을 해결하기에 역부족입니다. 가령 트랜스포머 계열의 모델들은 상품들의 상대적인 위치 관계를 반영하기 때문에 주기성과 같은 ‘시간(Temporal)’ 정보가 반영되기 어렵습니다. 또 고객이 ‘좋아요’를 누르는 등 명확한 선호 표현을 했을 때의 정보를 반영하기도 무리가 있습니다.

때문에 블럭스는 여러 방법론을 결합하여 트랜스포머만으로는 해결할 수 없는 문제들을 해결하고 있습니다. 앞으로 더욱 발달한 모델을 바탕으로 고객의 행동 패턴을 정밀하게 분석하고, 이를 바탕으로 더욱 최적화한 맞춤형 추천을 제공해 블럭스 솔루션을 사용하는 기업들의 매출 증가에 기여할 수 있도록 노력하겠습니다.

글쓴이

김회인(Simon) 블럭스 Machine Learning Engineer 새로운 미션에 거침 없이 도전하고, 폭풍처럼 성장하는 미래가 목표인 블럭스의 ML 엔지니어로, AI 시대로 급변하는 마케팅 시장의 문제를 구성원들과 함께 고민하고 해결하며 나아가고 있습니다.

👉 딥러닝을 통한 블럭스 개인화 추천 시스템의 진화: 1편

Share article
개인화 상품 추천으로 기업 매출 상승!
지금 서비스 소개서를 받아보세요!
Privacy Policy

블럭스 매거진