들어가기에 앞서

전제할 내용이 있습니다. 이 글은 네이버 알고리즘 개발자들이 2017년에 발표한 논문 ‘Deep Neural Networks for News Recommendations’를 바탕으로 분석한 것입니다. 이 당시 소개된 AiRS의 버전이 그 상태이진 않을 겁니다. 이미 여러 업데이트를 거쳤을 것으로 추정됩니다. 이 점 이해하시고 읽어주시기 부탁드립니다.

AiRS 모델이 해결하고자 한 문제들

너무나도 많은 기사의 양 : 어떤 내부 조건과 맥락에서 이 알고리즘이 기획됐든, 네이버에서 뉴스 추천 알고리즘을 개발하려면 이 문제와 마주할 수밖에 없습니다. 매초마다 전송돼, 하루 6만 건 이상 쏟아지는 기사들 그리고 그 안에서 발생하는 중복의 문제들을 해결할 수 있어야 한다고 쓰고 있습니다. 따라서 One-Hot 재현 방식(각 단어별 임베딩 방식) 실용적이지 않다고 밝히고 있습니다. 하루에만 수만 건인데 그걸 다시 단어별로 임베딩해서 처리한다면 어마어마한 컴퓨팅 자원이 필요로 할 수도 있어서 일 겁니다. 그래서 문서임베딩 방식으로 대신하더군요,

유독 강조되는 최신성 : 뉴스는 다른 영역과 달리 최신 기사를 선호하는 경향이 강합니다. AiRS 개발팀은 이에 대한 부담이 컸던 모양입니다. 정확한 표현을 인용하면 “대부분의 사례에서, 사람들은 지난 기사보다는 새 기사를 기대한다"라고 쓰고 있습니다. 하지만 금방 전송된 기사는 클릭 이력 등이 없기 때문에 학습의 대상이 될 수 없고 추천할 최소 정보값을 갖고 있지 않아 콜드 스타트 문제에 직면할 수밖에 없죠. 여기서 콜드 스타트는 아무런 정보값이 없는 상태에서 추천을 개시해야 하는 형태를 의미합니다. 자 여기서, 네이버 개발자 쪽의 철학이 개입이 되는데요, 바로 최신성에 과도한 비중을 두고 있는 특성과 정의입니다. 즉, 새로 전송된 기사가 추천풀의 핵심이지 에버그린하면서, 하루이틀 지난 기사는 추천의 풀에 올라오기 어렵다는 판단이 AiRS에 반영돼 있습니다.

적용된 모델 및 알고리즘들

  • 세션 기반의 RNN
  • 이력 기반의 RNN
  • CNN 분류기(classifier)

AiRS를 통한 추천 과정

  1. 세션 기반의 RNN이 사용자의 현재 세션에서 피딩된 즉각적 관심사에 유의미한 새 기사를 검색한다
  2. 이력 기반의 RNN이 사용자의 과거 히스토리에서 피딩된 단기 관심사에 유의미한 기사들을 검색한다
  3. 사용자의 장기 선호와 카테고리 사이의 유사도를 결합시켜서 RNN이 검색한 기사들을 다시 서열을 매긴다. 만약 뉴스 카테고리가 존재하지 않는다면, CNN 분류기를 통해 예측한다

활용 및 학습한 데이터 세트

  • 네이버의 뉴스 데이터 세트를 활용했으며, (저작권 때문에 공개하지 못한다고 써두었더군요)
  • 로데이터는 암호화한 사용자 로그인 ID, 세션 ID, 타임스탬프, 검색 쿼리, 기사 ID로 구성이 됐습니다.

실험과 평가를 위해 아래와 같은 하이퍼파라미터 값을 개발자들이 설정했습니다.

개발자들이 밝힌 향후 과제 3가지

  • “모든 클릭은 긍정적이다라고 가정을 했는데 모든 클릭이 반드시 긍정적이지만은 않은 것 같다. 어텐션 메커니즘으로 체류시간(dwell time)을 결합시켜 볼 계획이다.”
  • “일부 기사는 추천하기에 부적절했다. 특히 기사의 품질이 나쁘면 나쁜 사용자 경험을 줄 수 있다. 기사 품질을 보증하는 CNN 모델을 학습시키는 걸 고려 중이다.”
  • “우리는 각 사용자들에 대한 문서의 카테고리 선호만을 사용했다. 인구통계정보나 시간 등의 요소도 사용할 계획이다.”

네이버 (개발자)의 철학이 AiRS 알고리즘에 어떤 방식으로 투영됐나

왜 최신성을 중심에 두었나에 대한 판단들 : 이 논문 요약문만 보셔도 네이버 개발자들의 철학과 전제가 얼마나 많이 개입됐는지 유추할 수 있습니다. 예를 들어 AiRS는 최신성이 상당히 강조되는 편인데요, 이러한 구조 하에서는 최신성은 조금 낮지만 고품질의 뉴스는 추천의 후보군에 오르지 못하게 됩니다. AiRS는 사용자들이 네이버 뉴스에서는 새로운 뉴스를 보기를 원한다는 그 전제가 강하게 투영돼 있는 셈입니다.

뉴스 선호를 세션 기반으로 구성한 판단들 : 사용자의 선호를 추정하기 위해 세션을 중요하게 선택했다는 점도 개발자의 철학이 개입된 부분이라고 할 수 있습니다. 세션은 30분 단위로 구성되고 갱신되죠. 하나의 세션으로 네이버 뉴스에 접속해서 클릭한 뉴스들, 그것을 분석해 즉시적 관심사를 끌어내는 형태입니다. 세션 이후는 이력 기반의 RNN이 처리하면서 관심사를 확인하게 되는 겁니다. 즉시적 관심사(세션 기반 RNN)와 단기 관심사(이력 기반 RNN)이 각각의 역할을 담당하면서 해당 사용자의 즉/단기적 관심사에 맞는 기사 풀을 구성하는 방식으로 해석해볼 수 있을 겁니다. 여기서 장기적 관심사는 생각보다 무시되는 경향이 있다는 점도 사람의 판단이라고 볼 수 있을 겁니다.

카테고리를 사용자 뉴스 선호의 개인화의 중심에 둔 판단들 : 이 논문이 발표된 당시 뉴스 카테고리는 1depth 8개, 2 depth 62였다고 합니다. 사용자가 봤던 뉴스의 1/2 뎁스 카테고리를 추적해서 가중된 값을 설정했다고 밝히고 있습니다. 그 전에 이런 전제를 합니다. “스포츠 기사를 많이 읽는 사람은 정치 기사를 거의 클릭하지 않을 것이다". 그렇습니다. 이 전제로 개인화를 위한 선호 값을 생성하는데요. 저처럼 류현진을 좋아하면서 정치 기사를 마구마구 읽어대는 사람을 거의 염두에 두지 않은 전제 조건이라고 봐야 할 겁니다.

향후 과제에 투영된 그들의 철학들 : 향후 계획에는 ‘무엇보다 기사 품질이 나쁘다’는 문장이 포함돼 있는데요. 기사 품질이 나쁘다는 어떻게 정의하느냐에 따라 언론사들의 희비가 크게 갈릴 겁니다. 이 명제를 정의하기가 어렵다는 건 여러 연구를 통해서 확인된 바 있습니다. 자의적 판단이 개입될 수밖에 없는 영역이죠.

뉴스 선호를 추정하기 위한 체류시간과 인구통계학 요소들 : 개별 사용자, 혹은 특정 사용자 그룹(클러스터)의 뉴스 선호를 추정하기 위해 가장 적합한 데이터가 무엇일까? 여러분들은 뭐라고 생각하시나요? 이처럼 생각이 모두 다를 수밖에 없습니다. 두 요소를 도입한다는 판단 또한 개발자들과 네이버 내부의 판단이라고 보시면 될 겁니다.

굳이 오늘 이 논문을 분석한 이유는 윤영찬 의원을 옹호하기 위한 게 전혀 아닙니다. 그보다는 포털 쪽의 대응 논리, 반박 논리가 조금더 세련돼졌으면 하는 바람을 전하고 싶어서입니다. “알고리즘은 중립적이다, AI라서 관여할 수 없다” 이런 논리는 많이 낡았다고 보는 편입니다.(죄송스럽지만, 솔직히 말하면 좀 없어 보입니다) 이상적이긴 하지만 “우리는 저널리즘 원칙과 사용자들의 정보 필요가 조화되도록 끊임없이 알고리즘을 개선하고 있으며 이 과정에서 알고리즘 및 모델링의 개선 독립성을 보장해달라"고 요구하면 어떨까 싶기도 하더군요. 너무 이상적인가요?

카카오의 루빅스 알고리즘은 제가 아직 논문을 찾지 못해서 분석하진 못했습니다. 예전에 봤던 것 같은데 기억이 가물가물하네요.

추가 참고 자료