작년에 Gmail에 도입된 유용한 서비스가 Priority Inbox입니다. 작년에 구글이 Buzz 및 Wave등으로 한창 삽질(?)을 하고난 이후라서 처음에는 그 유용성에 대해 반신반의했었지만, 처음에 몇개의 Email을 Important / Not Important로 레이블링 해주고 난 후에는 거의 100% 올바른 분류를 하는 것을 확인하고 놀랐습니다.

오늘 연구실 동료의 트윗에서 Gmail Priority Inbox의 알고리즘을 소개한 Technical Paper를 발견하고 읽어 보았습니다. 그동안 저처럼 궁금하셨을 분들께 간단히 소개합니다. 평소 기계학습이 '주어진 알고리즘을 갖다 쓰는 것'이라고 여겼던 분들이라면, 단순한 Regression Model을 주어진 Learning Problem에 적용하는 과정에도 굉장히 많은 고려가 필요함을 알 수 있습니다. 

The Learning Problem

잘 아시겠지만, Regression은 주어진 Feature를 가지고 실수값을 갖는 Label을 예측하는 기법입니다. 우선 메일의 중요도를 나타내는 Label을 살펴보면, 메일 도착 후 일정시간 이내에 사용자가 특정한 액션(open, reply 등)을 취하는 경우를 중요한 메일로, 사용자가 보고도 아무 조치도 취하지 않은 경우 중요하지 않은 것으로 간주하는 것을 알 수 있습니다. 즉, 사용자의 Explicit Label과 함께 Implicit Action을 모두 학습에 활요하는 것입니다. 

또한 아래와 같은 다양한 Feature가 학습에 활용됩니다. 이메일의 기본 Feature에 Label까지 활용하는군요. 
Social features are based on the degree of interaction between sender and recipient, e.g. the percentage of a sender’s mail that is read by the recipient. 
Content features attempt to identify headers and recent terms that are highly correlated with the recipient acting (or not) on the mail, e.g. the presence of a recent term in the subject. 
Thread features note the user’s interaction with the thread so far, e.g. if a user began a thread. 
Label features examine the labels that the user applies to mail using filters

다음은 실제 학습 알고리즘입니다. 기본적으로는 Logistic Regression을 사용하지만, 모든 유저의 데이터에서 학습한 내용과 개별 유저로부터의 학습 내용을 모두 학습에 사용하기 위하여 Transfer Learning을 사용합니다. Transfer Learning은 모델을 학습한 도메인과 적용할 도메인이 다를 경우 사용하는 기법입니다. 다음 다이어그램은 이러한 학습 과정을 시각화합니다.


알고리즘에서 또 하나 이채로운 점은, 각 메일에 대한 Important / Not Important의 결정을 내리는 기준(threshold)을 사용자의 Explicit Label을 사용해 개인화한다는 점입니다. 각 사용자 별로 중요한 메일의 비율이 다르기 때문에, 이는 자동화하기 힘든 부분입니다.

Production

개발된 알고리즘을 수백만의 사용자가 매일 사용하는 시스템에 적용하는 것은 또다른 문제입니다. 논문에서는 구글 컴퓨팅 클러스터의 기본 데이터 구조인 BigTable이 어떻게 활용되는지 자세히 밝히고 있습니다. 사용자별 학습 알고리즘 수행의 부하를 각 Core에 나누는 과정도 흥미롭습니다.

Result

논문에서는 위에서 설명한 Global Model과 Per-user Model의 조합, 그리고 사용자별 중요도 기준의 개인화를 통해서 에러율을 상당부분 낮출 수 있었다는 결론을 내고 있습니다. 또한 Industry Paper답게 Priority Inbox의 도입이 Gmail사용자들의 메일 사용을 어떻게 효율적으로 만들었는지를 다음과 같이 밝히고 있습니다. 

The ultimate goal is to help Gmail users. We analyzed the time Google employees spent on email with and without Priority Inbox. Averaging over Googlers that receive similar volumes of mail, Priority Inbox users (approx. 2000 users) spent 6% less time reading mail overall, and 13% less time reading unimportant mail. They are also more confident to bulk archive or delete email.

마치며

겨우 4장짜리 논문이지만, 기계학습 알고리즘을 실제 문제에 적용하는 과정에서 발생하는 수많은 문제를 간결하면서도 명쾌하게 기록하고 있습니다. 한때 기계학습이 알고리즘의 인풋과 아웃풋만 알면 블랙박스처럼 활요할 수 있을 것이라고 생각한 때도 있었지만, 위 논문만 읽어 보아도 학습 기법의 실전 활용에는 상당한 지식이 필요함을 알 수 있습니다. 기타 재미있는 디테일이 많으니 관심있으신 분들꼐 일독을 권합니다.