본문 바로가기메뉴 바로가기


카카오가 ‘카카오 아레나’를 하는 이유

카카오는 매년 머신러닝을 이용한 문제 해결 대회 플랫폼인 ‘카카오 아레나’를 개최합니다. 올해는 ‘멜론 사용자를 위한 음악 추천 대회’라는 주제로 개최되었고, 많은 분들의 관심과 참여로 뜻깊게 3회 대회가 종료되었습니다.  

카카오 아레나에 대해 잘 모르시거나, 관심은 있었지만 아직 참가해보지 못한 분들을 위해 카카오 아레나가 무엇인지, 카카오 아레나를 통해 카카오가 개발자들에게 전하고 싶은 메시지는 무엇인지 소개하고자 합니다. 이번 글을 통해 내년에 진행될 카카오 아레나 4회 대회에도 많은 기대와 관심 부탁드리며 꼭 도전해 보시길 바랍니다.


카카오 아레나

아레나는 원형 극장 한가운데 모래를 깔아놓은 고대 로마 경기장을 지칭하는 단어입니다.
카카오 아레나 대회 역시 같은 문제를 해결하기 위해 여러 명이 선의의 경쟁을 하는 플랫폼이기 때문에 ‘카카오 아레나’로 명명하였습니다.

‘카카오 아레나’는 카카오가 가진 문제와 문제 해결에 도움이 되는 양질의 데이터를 공개하고 솔루션을 마련하는 대회로, 머신러닝과 문제 해결을 즐기는 사람이라면 누구나 참여할 수 있습니다.

카카오 아레나, 왜 하나요?

국내 기술기업으로서 카카오이기 때문에 가능하고, 또 해야 한다고 생각합니다.

이미 국내 여러 기업에서 문제 해결 대회를 개최한 바가 있습니다. 그러나 플랫폼으로서 지속해서 대회를 운영하며, 참가자들 간의 정보를 공유하는 자리를 제공하고, 양질의 데이터와 대회 산출물을 공개하는 대회는 없었던 것 같습니다. 조금 늦은 감이 있지만, 기존 대회들보다 더 나은 가치와 목적으로 시작하게 되었습니다.

카카오 아레나는 머신러닝과 문제 해결을 즐기는 사람들에게 데이터와 장소를 제공하고, 결과 산출물을 공개해서 누구에게나 도움이 될 수 있게 하려고 합니다. 이외에도 카카오 입장에서는 우리가 중요하게 생각하는 문제를 모두와 함께 풀 수 있고, 우리가 고민하는 문제와 데이터를 제공함으로써 좋은 개발자 영입에도 도움이 될 것으로 기대합니다.

히스토리

1회 : 쇼핑몰 상품 카테고리 분류 대회 (2018)

첫 대회는 ‘쇼핑몰 상품 카테고리 분류‘를 주제로 진행되었습니다. 쇼핑몰에 등록된 상품의 텍스트, 이미지 정보 등을 활용해 상품의 카테고리를 분류하는 분류기를 만드는 것이 목표였으며 총 450개 팀, 589명이 참가해 상품 텍스트와 이미지 데이터를 활용한 머신러닝 기술을 선보였습니다. 우승팀의 경우 사전에 제공된 대회 베이스라인 솔루션 대비 분류 정확도가 약 12% 정도 개선된 결과를 보여주며 AI 오픈 플랫폼으로써 가능성을 확인했습니다.

2회 : 브런치 사용자를 위한 글 추천 대회 (2019)

브런치(brunch) 데이터를 활용한 사용자의 취향에 맞는 글 예측/추천‘을 주제로 진행되었습니다. 사용자의 과거 활동 정보를 기반으로 취향을 분석하고 모델링 하여 미래 소비 결과를 예측해보는 실험인데요, 콘텐츠가 늘어남에 따라 추천을 통해 글이 가치 읽게 읽히는 경험은 창작자에게도, 독자에게도 매우 중요한 일입니다. 2회 대회를 통해 카카오는 브런치의 콘텐츠, 작가/독자, 행태 정보 등 데이터를 제공하여 브런치에 담긴 양질의 글을 독자가 충분히 감상할 수 있도록 보다 유저의 취향을 반영하여 정밀하게 추천하면서도 주제가 한쪽으로 쏠리지 않도록 다양성을 확보해주는 추천 기술을 만드는 것을 목표로 하였습니다.

총 364개 팀, 491명이 참가해 우수한 정밀 추천 기술을 선보였으며, 또한 대회가 종료된 후 세계 최대 오픈소스 커뮤니티인 깃허브에 대회 관련 데이터를 오픈해 오픈 소스 활성화에도 기여하였습니다.

3회 카카오 아레나는?

올해 3회를 맞이한 카카오 아레나는 ‘멜론 사용자를 위한 음악 추천 대회’라는 주제로, 멜론 플레이리스트의 제목과 태그, 그리고 곡 목록을 주었을 때, 이 플레이리스트와 유사한 플레이리스트를 자동으로 생성하는 것을 목표로 하였습니다.

멜론 특정 플레이리스트의 곡 제목, 곡 정보, 음성에서 추출된 특징, 태그 등 ‘일부 데이터’를 공개한 후 나머지 숨겨진 곡, 태그의 일부 혹은 전부를 예측/추천하는 모델을 만드는 것인데요,

총 786개 팀, 1143명이 참가하였으며 많은 분들의 관심과 도전으로 3회 대회 최종 참가팀은 1회 대비 80%, 2회 대비 120% 증가하였습니다.

카카오는 이번 대회의 결과물을 활용해 좀 더 정교하게 사용자 취향에 맞는 음악을 분석, 추천하는 기술을 서비스에 적용할 예정인데요, 매회 다른 데이터와 다른 문제를 제공하여 다양한 참여자를 모집하고, 매번 새로운 솔루션을 확인할 수 있다는 점이 카카오 아레나의 매력이라고 생각합니다.

3회 대회 참가 크루 인터뷰

3회 대회에 참가한 2020 신입 개발자 크루인 geo, tory, wade, young 네 분을 만나 보았습니다.

✔️ 이번 ‘카카오 아레나’ 대회에 참가하게 된 계기는 무엇인가요?

(young) 대학원에서 딥러닝 시스템 관련 연구를 했었습니다. 모델링에 대한 갈망, 갈증 같은 게 있었는데 마침 대회가 나왔고, 동기들 중에서 ML(Machine Learning)/DL(Deep Learning)에 관심 있는 크루들이 있었던 것이 생각나서 팀을 모집하게 되었고 geo, tory, wade와 뜻이 맞아 함께 참가하게 되었습니다.

✔️ 참가 과정/결과에 대해 소개해 주세요.

(wade) 저희는 오토인코더의 한 종류인 DAE(Denoising AutoEncoder)를 사용했습니다. 결과는 곡/태그 NDCG(Normalized Discounted Cumulative Gain)가 각각 0.19, 0.37 정도 나왔으며 총 스코어는 0.21이었습니다. 그렇게 좋지도 나쁘지도 않은 결과였는데 저희가 시작을 조금 늦게 했고, BERT(Bidirectional Encoder Representations from Transformers)를 구현하다가 성능이 잘 안 나와서 마지막에 급하게 DAE로 선회했기 때문에 데이터 전처리와 하이퍼 파라미터 튜닝을 할 시간이 부족해 조금 더 최적화시키지 못한 것이 좀 아쉽습니다.

(young) 모델 실험을 해보기 전 한 달 반 동안은 추천 모델들에 대해서 연구를 follow-up 했습니다. 다들 추천 모델이 처음이었기 때문에, 꽤 오랜 시간을 연구 follow-up 하는데 사용했습니다. MF(Matrix Factorization), CF(Collaborative Filtering), Attentive model, XGBoost, DL 등 여러 가지 모델들에 대한 연구 논문들을 살펴보았는데, 사실 어차피 제출은 딥러닝 같은 느낌이었어요. 답은 정해놓고(BERT로), 논문을 찾아봤던 느낌이었죠. 차라리 이때 MF, CF 등 골고루 시도해봤더라면 어땠을까 싶기도 해요.

그래서 결국 처음에 시도했던 건, BERT4REC 베이스로 DAE 형식의 approximator를 개발하면 되지 않을까 싶었습니다. 생각보다 학습이 안됐는데, 실험 시작했던 시기가 제출 2주 전이었어서 길게 실험할 여유가 없었어요. 시간이 좀 더 있었다면, 여러 가지로 실험해 봤을 텐데 퇴근 후에만 작업하니까, 하루에 할 수 있는 실험의 수가 한정되더라고요. 결국 문제를 해결하진 못했고, RECSYS2018에서 2등을 했던 MMCF(Multimodal Collaborative Filtering for Automatic Playlist Continuation) 기반의 모델로 제출 2일 전에 선회를 했습니다.

제출하기 전에, 데이터 EDA, 클렌징도 하고 하이퍼 파라미터도 튜닝을 많이 했어야 되는데, 데이터 EDA(Exploratory Data Analysis), 클렌징, 하이퍼 파라미터 튜닝을 하나도 못한 상태로 제출하게 돼서 기대한 것보다 결과가 좋지 못했습니다.

✔️ 어떻게 역할을 나눠서 협업하였는지, 팀에서 맡은 역할을 소개해 주세요. 

첫 3주 정도는 추천 문제에 대한 접근법이 어떤 것들이 있는지 알아보기 위해 각자 사용자 행동에 기반한 추천에 관련된 논문을 1개씩 읽어오고 리뷰를 했습니다. 추천 문제에서 널리 사용되는 CF에서부터 자연어 처리에서 많이 사용되는 Attention을 기반으로 한 모델,  최근까지도 성능이 좋다고 평가받았던 BERT를 활용한 모델, 간단한 모델이지만 비슷한 성향의 대회에서 좋은 성능을 보여줬던 오토인코더를 활용한 모델 등에 관한 논문을 서로 공유했습니다.

그 후 모델 구현 시에는 geo와 young이 모델링을, wade는 이전 곡 입력이 전혀 없는 콜드 스타트 상황에 대한 처리를 위해 플레이리스트 제목을 임베딩하여 모델의 입력으로 줄 수 있도록 Char LSTM을 구현했고, tory는 BERT 성능이 낮을 경우를 대비하여 투 트랙으로 MMCF를 맡아서 개발하였습니다.

✔️ 참가하면서 재미있었던 에피소드가 있다면 무엇인가요? 

(geo) 굉장히 학구적인 모임이었기 때문에 그렇게 재미있었던 에피소드가 있지는 않았던 것 같아요. 그나마 재밌었던 기억을 꼽자면 BERT 모델을 만들고 학습시키면서 정말 많은 시간을 사용했는데도 스코어가 0.02 정도가 나왔었는데, MMCF로 바꾸고는 하루 만에 0.2가 넘었던 웃픈 기억이 있네요.

(wade) 저희는 각 플레이리스트에 태그가 최대 10개까지만 있는 줄 알고 구현을 했었는데 아주 극소수의 플레이리스트가 태그를 11개까지 가지고 있어서 모델을 학습 시키는데 계속 오류가 발생했었습니다. 심지어 전체 데이터 셋에 대해서 학습하는 에포크가 처음 몇 번은 도는데 그 후에 죽어버려서 문제점을 찾기 더욱 힘들었는데다가 제출일이 며칠 남지 않아 그날에 제대로 돌아가는 모델을 완성해야 했습니다.

각자 모델을 구현해와서 붙이고 마무리만 해서 잘 돌아가는지만 확인하면 돼서 빠르게 끝날 줄 알았던 작업이 위와 같은 사소한 문제점들 때문에 새벽 2시가 돼서 끝나게 되었습니다.

결국 위의 문제는 디버깅을 하다가 해결책을 발견했는데, 사실 저희가 데이터 구조를 분석하던 도중 이미 플레이리스트 태그가 11개가 될 수 있음을 알고 있었는데도 삽질을 했던 터라 약간은 허탈했지만 지금 생각해보면 재미있는 에피소드였던 것 같습니다.

✔️ 업무와 병행하는데 어려운 점은 없었는지 또 준비하면서 힘들었던 점은 없었나요?

(geo) 업무와 병행했기 때문에 시간 자체가 부족했어요. 그래서 BERT 모델의 경우 상대적으로 복잡해서 실험해야 할 부분이 되게 많았는데 그러한 부분들을 실험해보지 못해서 좋은 성능을 내지 못한 게 아닌가 하는 아쉬움이 남아요.

(tory) 오히려 만나는 장소와 시간에 대해서 고민할 필요가 없어서 좋았습니다. 대신 하루는 서비스 장애가 일어나서 약속시간에 늦었던 적이 있었는데, 모두 같은 회사이고 개발자이다 보니 서로 잘 이해해 주었습니다. 힘들었던 점은 업무와 다른 성격의 대회이다 보니 따로 준비해야 되는 기간이 필요했고 퇴근을 하더라도 쉬는 시간을 포기하고 아레나에 집중해서 신체적으로나 정신적으로 조금 힘들었었습니다. 또한 코로나19(COVID-19)로 인해서 대회 초반에는 오프라인으로 잘 모이지 못해서 서로 정보 공유가 잘 안된다는 느낌을 받은 적이 있었습니다.

(young) 딥러닝 같은 경우 좀 아기 다루듯 계속 신경 써주고 해야 되는데(결과를 보는 데까지 시간이 오래 걸린다는 의미) 저희는 낼 수 있는 시간이 부족해서 시간이 좀 더 있었다면 어땠을까 싶습니다.

✔️ 위 문제를 어떻게 해결했는지도 궁금해요! 

(tory) 주말, 퇴근 후의 시간을 많이 사용했어요. 업무도 병행하고 있기 때문에 의무적으로 휴식시간을 확보하기도 했고요. 코로나19(COVID-19)로 인해서 못 모여서 화상회의를 통해서 모임을 진행하는 등 최대한 정보 공유를 하려고 노력했습니다.

(young) 해결 못했어요. 이번 실수로 배웠죠. 옛날에 나온 모델들도 좋은 성능을 낼 수 있고, 딥러닝만이 정답이 아니라는걸요. 여유가 좀 더 됐다면 XGBoost도 시도해봤으면 좋았을 텐데 못해봐서 아쉽습니다.

✔️ ‘카카오 아레나’ 참가 소감 부탁드려요, 참가를 통해서 배운 점이 있다면요?

(geo) 카카오 아레나를 하면서 정말 재미있었어요. 다 같이 논문을 하나씩 읽어와서 리뷰하기도 하고 young이 이 부분에 다른 동기들보다는 많이 알고 있어서 강의를 해주기도 하고 하나씩 배워가는 과정이 정말 재밌었던 것 같아요. 그리고 braincloud의 GPU를 사용했는데, 네 명이 ssh로 접근해서 같이 작업을 할 수 있었기 때문에 git을 제대로 사용하지 않았었는데 이 때문에 버전 관리가 조금 어려워진 면이 있는 것 같아요. 다음번엔 꼭 git을 열심히 사용하는 것으로.. !

(tory) 저 같은 경우는 이번 대회로 추천이나 머신러닝에 대해서 처음 경험하게 되었습니다. 신기한 점도 있었고 의외였던 점도 많이 있었습니다. 실제로 경험을 해봤던 young이나 geo가 계획을 세워서 모델을 결정하고, 구현한 다음 모델을 개선하는 등 프로세스에 대해서 많이 배웠습니다.

(wade) 저는 대회 참가 경험이 없어 조금 힘들었지만, 실제 데이터를 가지고 사용할 특성들을 뽑고, 적절히 전처리를 해서 구현한 모델을 학습 시킨다는 것 자체가 즐거웠고, 아레나 초기에 했던 논문 스터디도 여러 가지 접근법과 방법론을 배울 수 있어서 좋았습니다. 또한 동기들과 같이 하나의 문제에 대해서 고민하고 의견을 나누는 과정 자체도 즐거웠고, 배운 점도 많았습니다.

(young) ML에 대해서 아예 모르는 상태에서 참가하기에는 어려움이 있는 것 같습니다. 또한 직장인이다 보니 퇴근 후에 하기에도 좀 벅차긴 하더라고요. 이번 대회를 계기로 MF나 CF, Boosting 같은 모델들에 대해서도 다시 생각하게 됐어요. 최근 SOTA(State of the art) 성능들을 딥러닝이 싹 쓸어가면서, 머신러닝하면 무조건 딥러닝이라는 생각이 고정관념처럼 박혀있었는데, 생각보다 시간이 촉박하다면 딥러닝은 좋은 선택지가 아니라는 생각이 들었어요.

✔️ 마지막으로 개발자들에게 ‘카카오 아레나’ 추천하고 싶은가요?

(geo) 대부분의 개발자는 요즘 핫한 빅데이터나 머신러닝과는 조금 다른 일을 하고 있으실 거라 생각해요. 이러한 일상에서 조금 벗어나서 논문도 읽어보고 데이터 분석도 하고 머신러닝도 조금 해보면 정말 재밌을 거라고 생각해요. 내년에도 지금과 같이 스터디를 하고 있다면 꼭 참가해서 올해보다 얼마나 발전했을지 확인하고 싶어요.

(tory) 업무를 하다 보면 의외로 자신의 시야가 좁아지게 되는데 평소에 하던 업무와 다른 일을 하면서 시야를 넓힐 수 있어서 추천합니다. 다음번에는 입상권을 목표로 참가할 생각입니다.

(wade) 추천하고 싶습니다. 성적이 잘 나오지 않아도 그 자체로 배울 점이 많고 재미있는 경험인 것 같습니다. 예를 들어 저희는 조금 복잡한 모델인 BERT로 먼저 시도를 했었는데 오히려 간단한 모델인 DAE가 더 성능이 좋을 수도 있다는 것과 (물론 저희가 구현을 제대로 못했을 수도 있지만) 입력 데이터가 없는 경우에 대한 처리 등을 배울 수 있었습니다. 또한 아레나는 혼자서도 참가할 수 있지만, 팀으로 참가를 하면 그만큼 내가 모르던 부분들을 팀원에게서 배울 수 있고, 같이 고민도 해볼 수 있어서 좋은 경험이 될 것 같습니다.

카카오 아레나가 전하는 메시지

앞으로 카카오는 카카오 아레나를 통해 블로그, 음악, 뉴스 등 카카오 주요 서비스의 흥미로운 문제들을 공개하고, 지속적으로 많은 대회를 개최해 참가자들 간의 정보를 공유하는 공간을 제공할 계획입니다.

카카오 또한 개발자 생태계의 일원으로서 카카오 아레나를 통해 머신러닝에 관심 있는 개발자들과 소통하며 향후에도 지속적인 대회 개최를 통해 양질의 데이터와 성과를 공개하여, 데이터가 필요한 연구, AI 개발 분야의 발전을 지원하고 대회의 산출물을 공개해 오픈소스 공개 활성화에도 이바지하기 위해 노력할 것입니다.

카카오 그리고 머신러닝에 관심 있는 분들은 내가 가지고 있는 머신러닝 지식을 마음껏 나눌 수 있는 좋은 기회를 놓치지 마시고 카카오 아레나를 통해 도전하세요!

kakao tech
kakao tech Developer Relations at kakao corp.
Top Tag
2021
2021-new-krew
adaptive-hash-index
adt
agile
agilecoach
ai
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
android
angular
anycast
applicative
Architecture
arena
async
aurora
Backend
bgp
ble
blind-recruitment
block
blockchain
bluetooth
brian
cahtbot
cd
ceph
certificate
certification
cgroup
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codereview
coding
competition
component
conference
consul
container
contents
contest
couchbase
COVID-19
cpp
Data
DB
deep-learning
developer
developer relations
developers
devops
digitalization
digitaltransformation
dns
docker
dr
employeecard
eslint
Feature List
Featured
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
go
graphdb
graphql
growth
ha
hadoop
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
id
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
json
kafka
kakao
kakao-commerce
kakao-games
kakaoarena
kakaocon
kakaok
kakaokey
kakaokrew
kakaomap
kakaotalk
KCDC
khaiii
kubernetes
l3dsr
l4
links
load-balancing
machine-learning
marathon
meetup
melon
mesos
Messaging
microservice
mobil
monad
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
nomad
ocp
open
opensource
openstack
OpenWork
page
parallel
PBA
planning poker
programming-contest
pycon
python
quagga
react
reactive-programming
reactor
recommendation
recruitment
redis
redis-keys
redis-scan
related-blind
rest
rubics
ruby
rxjs
s2graph
scala
scalaz
server
service
sharding
shopping
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
support
System
talk
talkchannel
tcp
tech
test
Thread-Debugging
time-wait
tmux
typescript
update
User Story
vim
vim-github-dashboard
vim-plugin
vue
vue.js
web-cache
webapp
WebSocket
weekly
All Tag
2021
2021-new-krew
adaptive-hash-index
adt
agile
agilecoach
ai
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
android
angular
anycast
applicative
Architecture
arena
async
aurora
Backend
bgp
ble
blind-recruitment
block
blockchain
bluetooth
brian
cahtbot
cd
ceph
certificate
certification
cgroup
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codereview
coding
competition
component
conference
consul
container
contents
contest
couchbase
COVID-19
cpp
Data
DB
deep-learning
developer
developer relations
developers
devops
digitalization
digitaltransformation
dns
docker
dr
employeecard
eslint
Feature List
Featured
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
go
graphdb
graphql
growth
ha
hadoop
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
id
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
json
kafka
kakao
kakao-commerce
kakao-games
kakaoarena
kakaocon
kakaok
kakaokey
kakaokrew
kakaomap
kakaotalk
KCDC
khaiii
kubernetes
l3dsr
l4
links
load-balancing
machine-learning
marathon
meetup
melon
mesos
Messaging
microservice
mobil
monad
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
nomad
ocp
open
opensource
openstack
OpenWork
page
parallel
PBA
planning poker
programming-contest
pycon
python
quagga
react
reactive-programming
reactor
recommendation
recruitment
redis
redis-keys
redis-scan
related-blind
rest
rubics
ruby
rxjs
s2graph
scala
scalaz
server
service
sharding
shopping
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
support
System
talk
talkchannel
tcp
tech
test
Thread-Debugging
time-wait
tmux
typescript
update
User Story
vim
vim-github-dashboard
vim-plugin
vue
vue.js
web-cache
webapp
WebSocket
weekly

위로