기술 이야기
home
Programming
home
🤩

추천 시스템과 생성형 언어 모델의 유사성에 대하여

Upload date
2024/02/13
Tag
추천
인사이트
딥러닝
FC온라인
Editor
추천팀_신다연
Editor is
범고래와 펭귄을 좋아합니다
상태
2 more properties

Table of contents

들어가며

안녕하세요, 추천팀 신다연입니다. 추천실 추천팀에서는 유저 편의성 증대를 위해 RPG, 스포츠 등 다양한 장르의 게임에 추천 서비스를 제공하고 있습니다. 작년 10월 추천실의 매칭팀과 함께 작업한 스쿼드 추천 서비스FC 온라인 게임에 새롭게 오픈되었습니다 (2023.10.19 업데이트).
FC 온라인 데이터센터 스쿼드 메이커
추천팀과 매칭팀, 두 팀이 함께 작업한 만큼 스쿼드 추천 서비스를 구성하는 모델은 다양한데요, 한 가지 모델을 공개하자면…. (두구두구두구 ) 생성형 언어 모델 구조 중 하나인 BERT가 스쿼드 추천 서비스에 활용되고 있습니다.
생성형 언어 모델 기반으로 추천 서비스를 개발하는 일련의 프로젝트를 하고 추가로 연구해 보면서 추천 시스템과 생성형 언어 모델들이 궁극적으로 동작하는 방식과 목표하는 바가 꽤 유사하다고 판단하였는데요. 서로 다른 두 영역으로 보이는 두 시스템이 어떤 부분에서 유사하다고 판단하였는지 인사이트를 공유해 드리려 합니다. 또한 추천 시스템에서 고려 되어야 할 주요 포인트들을 함께 정리하였습니다.

1. 추천 시스템에 대하여

1-1. 추천이란?

여러분들은 추천무엇이라고 생각하시나요?
현실과 연관 지어 생각해 볼 때, “추천”이라는 개념은 흔히 상점(온라인 스토어를 포함)에서 많이 관측할 수 있습니다. 고객의 편의 및 즐거움 등 이익과 효용을 위하여 그에게 필요/적합해 보이는 특정 상품을 권유/제안하는 경우가 주로 일상생활에서 관측되는 추천의 대표적인 예시로 볼 수 있습니다. 특히 고객 개인의 효용을 고려하여 서로 각기 다른 상품들을 권유한다면, 이는 개인화 추천이라 일컬을 수 있습니다.
추천팀은 이러한 개인화 추천을 다양한 주제와 방식으로 유저 분들께 제공하고 있습니다. 메이플스토리 ALT 점프가 국룰?에서 소개되었던 추천 키세팅 서비스는 유저 분들의 편의를 위하여 특정 유저(=고객)분들께 특정 키세팅(=상품)들을 제안하는 서비스 입니다.
추천의 의미에 대해 좀 더 자세히 고찰해 보면,
추천은 다수의 선택 가능한 항목들의 집합에서 어떤 조건들(=추천 조건, 추천의 이유가 될 수 있습니다.)에 의하여 특정 K 개의 항목들을 “Selecting(선택)” 하는 일입니다. 이 선택받은 K 개의 항목들 “추천 항목”이라 정의할 수 있습니다.
하지만 여기서 한 가지 더 추가되는 개념이 있는데요, 바로 “Ranking(순위)” 입니다.
K 개의 추천 항목들을 뽑아냈다면, 어떤 순서로 이 항목들을 권유할 수 있을까요? 직관적으로 생각해 보면, 추천 매력도가 높은, 즉 바로 고객의 선택을 받을 법한 항목을 먼저 보여드리고 싶을 것입니다. 가장 선택 받을 법한 항목을 우선 보여준 후, "앗, 추천된 선수가 마음에 들지 않으신가요? 그럼, 이 선수는 어떠세요?” 하며 다른 추천 항목을 제안할 수 있습니다. 이렇게 추천 항목들을 특정 기준에 따라 순서대로 제안할 수 있으며, 특정 항목들에 대해 기준을 가지고 순서대로 나열하는 것은 Ranking을 부여하는 것과 동일합니다.
핵심 요소는 총 두 가지로 아이템 선택(Selecting)선택된 아이템의 정렬(Ranking)로 정리할 수 있습니다.
이렇게 추천이라는 행위에 도달하기 위한 단계를 크게 두 단계로 나누어 보았습니다.
그렇다면, 아이템을 Selecting 하고 적절히 Ranking까지 부여한 다음엔 어떻게 될까요? 우리는 최종적으로 서비스위해 사용자에게 적절히 추천 아이템을 전달할 필요가 있습니다.
즉, Selecting 과 Ranking 과정을 통해 다양한 아이템 중에서 적절히 “추천할 만한” 아이템들의 범위를 축소하였다면, 이렇게 추려진 아이템들 사이에서 최종적으로 사용자에게 전달할 추천 아이템을 선정해야 합니다.
그렇다면 최종적으로 전달하려는 추천 아이템의 양, 즉 추천의 형태에 대해 생각해 볼까요?
사용자에게 전달되는 추천 아이템의 양은 한 건의 아이템만 추천하는 단일 아이템의 형태와 기획 상품 세트처럼 N 개의 아이템들을 추천하는 복수 아이템의 형태가 있습니다.
따라서 최종적으로 사용자에게 전달되는 추천 제공 형태는,
단일 아이템
그림 1: 메이플스토리 키세팅 추천 서비스 - 단일 아이템 형태로 추천 제공
복수 아이템 (≥ 2)
그림 2: FC 온라인 스쿼드 추천 서비스 - 복수 아이템(최대 11개까지의 선수 카드 세트) 형태로 추천 제공
크게 두 가지 형태로 정리할 수 있습니다.
이때, 복수 아이템의 경우 서로 연관성이 있는 아이템들로 하나의 추천 아이템 세트가 구성됩니다. 갑자기 뜬금없는 상품들끼리 서로 묶여서 추천 아이템 세트로 정의되지는 않는다는 의미입니다. 적어도 같은 카테고리, 같은 timeline 등 최소한의 공통점을 발견할 수 있고, 이 공통점은 아이템들을 묶어 하나의 세트로 만들어 주는 기준이 됩니다. 한 가지 독특한 포인트는 추천 아이템 세트를 만드는데 대개 기획적 요소를 많이 발견할 수 있다는 점입니다. (Ex. 마감 빵 묶음 세일, 00 브랜드 과자 기획전 ..)
그렇다면, 단일 아이템 추천 시 기획적 요소는 존재하지 않을까요? 아닙니다. 단일 아이템 또한 기획적 요소가 존재할 수 있습니다. 특정 상품을 홍보하기 위한 각종 기획적 요소와 함께 “누가 이거 써봤는데, 괜찮대 ~ “ 라는 입소문이 더해져 추천 상품으로 광고하는 모습을 많이 관측할 수 있는데요, 이렇게 기획적 요소와 더불어 사용자 경험에 의해 증명된 상품을 추천이 꽤 설득력이 있게 되는 것을 자주 관측할 수 있습니다.
여기까지 생각해 봤다면, 추천된 아이템들은 기획 요소(Concept)와 선택적으로 경험(Experience)이라는 특성을 담고 있다고 볼 수 있습니다.
또한 서비스 시 염두에 두어야 할 점은, “상품은 영원하지 않다 ” 는 것입니다. 새로운 상품이 출시되고 기존 상품이 없어질 때마다, 이전 추천의 결과물들 또한 함께 변화하게 됩니다.

1-2. 추천 서비스에 대해

앞서 기술한 추천 서비스의 요소를 가볍게 요약하면 아래의 표로 정리해 볼 수 있을 것 같습니다.
그림 3: 추천 서비스 Components 요약
추천팀에서 개발하는 추천 시스템은 자연스럽게 앞서 설명한 현실에서의 ‘추천’과 ‘서비스’의 관점을 모두 반영하여 개발 및 운영되고 있습니다.
예를 들어, 추천팀에서 운영 중인 서비스를 두 개 정도 간단히 살펴보면,
FC 온라인 스쿼드 추천
메이플스토리 키세팅 추천
선택된 아이템 Ranking
랜덤으로 1개의 스쿼드(11개의 선수 카드 집합) 노출
필터링 통과 기준에 따른 순서 부여
아이템 Selecting
팀컬러, 포메이션에 따른 선수 카드 선호 확률 분포를 기반으로 예산에 맞추어 강화 단계와 세부 선수 카드 시즌을 selecting
레벨 200이상 5차 전직을 완료한 용사님들 중 일반적인 키세팅 구성으로 필터링된 키세팅
기획 요소
구단주 분이 원하는 팀컬러, 예산, 포메이션에 맞추어 적절한 스쿼드를 추천
현재 용사님이 사용 중인 키세팅 정보와 캐릭터 정보를 바탕으로 다른 용사님들이 사용하는 키세팅을 추천
경험
스쿼드 - 정상적으로 종료된 공식 경기(몰수승 제외)에서 구단주 분들이 실제로 운용하는 선발된 11개의 선수 카드 집합
키세팅 - 다른 용사님들이 사용하는 키세팅
추천 제공 형태
복수 아이템 (11개의 선수 카드 집합)
단일 아이템 (키세팅)
상품의 가변성 반영
매달 출시되는 신규 클래스를 주기적으로 반영하여 추천 모델 업데이트
신규 직업 출시 시, 해당 직업 추천 키세팅 업데이트
추천팀의 모든 추천 서비스는 현실에서 발생하는 추천의 모든 요소에 대해 정리 가능합니다. 추천이라는 Task 그 자체만 놓고 보면 꽤 명확하다는 점을 느낄 수 있었습니다.

2. 추천 시스템과 생성형 언어 모델 유사성

생성형 언어 모델의 포괄적인 동작에 대해 가볍게 설명하면서, 어떤 부분에서 추천 시스템과 유사한 포인트를 지니는지 정리해 보고자 합니다.
생성형 언어 모델을 단순하게 표현하면, 주어진 Input(=입력값)에 따라 응답을 만들 수 있도록 확률 분포를 만들어 내는, 사람이 알 수 없는 수준으로 복잡하고 거대한 함수입니다.
그렇다면 주어진 입력값은 무엇이고, 해당 입력값으로 무엇에 대한 확률 분포를 만들어내는 것일까요?
ChatGPT, Bard 등 생성형 언어 모델을 기반으로 동작하는 채팅 서비스를 써보셨다면 바로 아실 것 같은데요, 주어진 입력값은 바로 사용자가 입력한 자연어가 되고, 이 입력값마다 다르게 “단위 언어 요소” (Ex. 문장, 단어, 단어보다 작은 단위, 음운 수준의 단위 … )에 대한 확률 분포를 만들어 내는 것입니다. 즉, 자연어 맥락이 주어졌을 때 바로 다음 순서로 어떤 단위 언어 요소가 출현할지 예측하기 위한 확률 분포를 만들어 낸다고 정리할 수 있습니다. 그런 다음 만들어진 확률 분포를 토대로 적절히 Sampling 하여 발화문에 상응하는 단위 언어 요소를 반환합니다.
구체적으로는 여러 웹 사이트나, 책, 채팅과 같은 대화 기록 등 다양한 정보를 기반으로 한 생성형 언어 모델 전용 사전이 만들어지면, 모델은 이 전용 사전에 대한 확률 분포를 만들어 냅니다. 이때, 생성형 언어 모델 전용 사전이 Vocabulary이고, 이 Vocabulary 속 단위 언어 요소 하나하나를 token이라 부릅니다.
한 가지 더 챙겨야 할 포인트는 바로 Input이 되는 발화문에 있습니다. 자연어를 입력받았을 때, 그 입력 받은 자연어 뒤에 대화가 이어지도록 말을 만들어 내는 것이 결국 생성형 언어 모델의 주요 역할인데, 여기서 사용자가 제시한 자연어는 단위 언어 요소의 배열, 즉 순서를 가지게 되며 이 순서로 인해 말의 ‘맥락’이 존재하게 된다는 점이 중요합니다. 사용자 발화문과 전혀 상응하지 않는, 맥락에 맞지 않는 엉뚱한 문장을 만들어 낸다면 우리는 그런 모델을 좋은 생성형 언어 모델로 평가하지 않습니다.
그렇다면, 생성형 언어 모델이 좋은 퍼포먼스를 위해 해내야 하는 것은 token이 나열된 발화문에서 의미와 맥락을 발견하는 것입니다. 그다음에야 이 맥락에 어울리는 답변을 만들기 위해 생성형 언어 모델은 서로 상대적인 위치에 존재하는 token의 확률을 적절하게 학습하고, 이렇게 학습하여 만들어 낸 확률 분포를 기반으로 답변을 생성해 내는 것이 생성형 언어 모델이 동작하는 기본 방식이 됩니다. 단순화하면 맥락과 어울리지 않는 token 들에는 낮은 확률을 부여하고 어울리는 것으로 판단되는 token 들에는 높은 확률을 부여하게 되면서, 여기서 “확률”이라는 Ranking 가능한 스코어가 만들어집니다.
앞서 설명한 생성형 언어 모델에서 “추천”의 관점으로 가져갈 수 있는 포인트는 세 가지입니다.
Vocabulary
Vocabulary 속 token 들에 대한 확률 분포 모델 및 결과 Sampling
Sequential 한 token 들이 지니는 맥락
위 항목들을 “추천 시스템”과 대응해 보면 Vocabulary는 추천할 아이템이 속한 모든 아이템의 Pool 이 되고, 이 아이템 Pool 속에서 어떤 아이템이 출현하면 좋을지 표현하는 것이 아이템에 대한 출현 확률, 즉 선택 확률이 되고, 이를 나타낼 수 있는 모델로 생성형 언어 모델을 차용할 수 있습니다.
좀 더 예를 들어서, FC 온라인 스쿼드 추천 Task에 대응해 보면 아래와 같습니다.
※ 예시이며, 실제 FC 온라인 스쿼드 추천 시스템은 아래의 예시와 일치하지 않습니다.
Vocabulary
FC 온라인에 존재하는 모든 선수 카드 등 스쿼드 구성 요소
Vocabulary 속 token들에 대한 확률 분포 모델 및 결과 Sampling
FC 온라인에 존재하는 모든 선수 카드에 대한 확률 분포 기반으로 가장 높은 확률을 지니는 Top K 개 Sampling
위의 예시에서는 가장 간단하게 추천 시스템이 확률값이 높은 아이템을 순서대로 노출하는 방식으로 동작할 수 있다는 걸 표현하였습니다. 아이템 Selecting아이템 Ranking 요소가 벌써 해소되었다고 볼 수 있습니다.
그러나 확률값이 높은 순서대로 그대로 추천 노출하는 것이 과연 좋을까요? 이 부분에 대해서는 추천 시스템, 생성형 언어 모델 모두 다양하게 연구하고 개선하고자 하는 공통점이 있으며, 생성형 언어 모델 쪽에서도 매우 활발하게 Sampling에 대한 연구가 진행되고 있어 차용해 올 수 있는 부분이 많을 것으로 보입니다.
이다음부터는 추천의 기획 요소 가 중요해집니다. Sequential 한 token 들의 맥락, token 들이 어떤 맥락을 지녀야 하는지, 즉 “우리는 어떤 추천 맥락을 이해하게 할 것인가?” 라는 질문을 두고 추천 Concept을 생각해야 하며, 이 추천 Concept이 앞서 설명한 기획 요소에 해당합니다. (이 부분은 언어 모델을 추천 모델화하는 모델링 측면에서는 학습 방법에 해당하기도 하지만, 자세한 내용은 생략하겠습니다.)
이어서 FC 온라인 스쿼드 추천 Task를 계속해서 이어 나가보면, 아래와 같이 token의 맥락을 부여할 수 있습니다.
Sequential 한 token 들이 지니는 맥락
특정 팀컬러의 특정 포메이션에서 사용하는 선수 카드들에 대한 맥락
Ex) 맨시티 4-2-3-1 포메이션에서는 {선수 카드 리스트}를 사용한다.
포지션 별 위치하는 선수 카드에 대한 맥락
Ex) 리스 제임스라는 선수 카드는 원래 RB, RWB인데, 어떤 유저 분들은 ST, CF, CAM 자리에도 많이 사용한다.
이때, 맥락 부여를 위해 선정되는 token들은 FC 온라인의 구단주분들이 실제 1:1 공식 경기에서 사용한 token 들(=팀컬러, 포지션, 선수 카드들)로 정의하였습니다. 따라서 누군가 써본 팀컬러와 포지션, 선수 카드들을 기반으로 한다는 점에서 경험요소까지 가져갈 수 있었습니다.
이제 FC 온라인 스쿼드 추천에 알맞게 학습된 생성형 언어 모델은 맨시티 팀컬러의 ST 포지션에 어떤 선수 카드가 오면 좋을지 예측하기 위한 모든 token 들에 대해 확률 분포를 알려줍니다. 이제 우리는 우리가 하고 싶은 추천의 형태에 알맞게 적절히 선택하면 됩니다.
추천받고자 하는 모든 포지션에 대해 복수 선수 카드들을 추천
추천받고자 하는 특정 포지션에 대해 복수 선수 카드들을 추천
추천받고자 하는 특정 포지션에 대해 단일 선수 카드들을 추천
FC 온라인 스쿼드 추천 시스템의 경우, 실제로는 BERT 모델을 베이스로 개발되었으며, 첫 번째와 세 번째 추천의 형태가 채택되어 라이브 서비스를 오픈하게 되었습니다.
다시 한번 잠깐 서비스 홍보를 하자면 FC 온라인 스쿼드 메이커에서 스쿼드 추천 서비스를 경험해 보실 수 있습니다.
지금까지의 내용을 정리하면,
1.
FC 온라인 스쿼드 추천은 구단주분들이 사용한 팀컬러, 포지션, 선수 카드를 종합적으로 고려하여 게임에서 직접 경험하는 스쿼드 정보의 맥락을 이해한다는 추천 기획 요소를 지닙니다.
2.
이러한 맥락을 학습한 생성형 언어 모델은 팀컬러 혹은 포지션들에 대해 입력 받았을 때, 이 입력의 맥락에 적절히 어울리는 선수 카드들의 확률을 알려줄 수 있습니다.
3.
이제 이 확률들을 가지고 어떤 기준으로 Selecting 할지, 혹은 Ranking 할지는 추가적인 기획과 함께 행해질 수 있습니다.
4.
최소한의 Selecting 기준과 Ranking 기준을 마련해준다는 점이 생성형 언어 모델을 추천 시스템에 차용할 수 있는 이유이며,
5.
이는 생성형 언어 모델과 추천 시스템이 서로 유사함을 시사합니다.

나가며

이렇게 생성형 언어 모델에서 추천 시스템에 차용할 수 있는 포인트들을 정리해 보았는데요, 서로 다른 분야인 것처럼 보이지만 시스템의 본질을 파악했을 때 서로 유사한 점들이 존재한다는 것을 사유해 볼 수 있었습니다. 생성형 언어 모델 외에도 다양한 도메인에서도 추천 시스템에 차용할만한 포인트를 발견할 수 있을 것 같습니다.
추천팀에서는 다양한 방법론을 연구하고 사용해 보며 어떤 추천이 좋은 추천일지 끊임없이 고민하고 있습니다. 앞으로도 다양한 게임 속 서비스로 유저 분들께 도움을 드리고 즐거운 플레이를 위한 좋은 추천 정보로 찾아뵙길 희망하며, 글을 마치도록 하겠습니다. 긴 글 읽어주셔서 감사합니다.
함께 읽으면 좋은 글
Techblog Contents
Related Sites
 넥슨 게임 포탈
회사 소개
인텔리전스랩스 소개
 테크블로그 문의 devrel@nexon.co.kr