추천 시스템 : 사트남 알랙과 ReadWriteWeb 인터뷰 번역글

 In Recommendation Engine

원래 이 인터뷰 내용은 ‘실전 예제로 살펴보는 집단지성 프로그래밍’ 에 포함될 내용이었는데, 개인적인 생각으로 인터뷰글을 책에 넣는 것보다 적절한 시기에 블로그에 공개를 하는 게 나을 거 같다는 생각에 이렇게 공개를 해본다.

원문은 이곳에서 확인해 볼 수 있다.

이번에 번역 출간된 ‘실전 예제로 살펴보는 집단지성 프로그래밍’이 어떤 내용을 담고 있는지 직접 저자와의 인터뷰에서 직접 확인해 볼 수 있을 것이다.

참고로 Netflix Prize 대회는 이미 종료 되었으나 이곳에서 사트남이 언급한  대회에서 우승하기 위한 가이드라인은 마지막 우승을 하기 위해서도 계속 지켜진 방법이니 눈 여겨 볼 만 할 것이다.

 

최근 포스트에서 아마존과 구글이 그들의 추천엔진을 어떻게 구축하였는지 살펴보았습니다.

저희는 최근 출판된 실전 예제로 살펴보는 집단지성 프로그래밍의 저자인 사트남 알랙(Satnam Alag)과 이야기 할 기회가 주어졌는데요, 이 책은 어떻게 하면 좋은 추천 시스템을 만들지에 대한 책이며 현재의 기술적인 조류가 무엇이고 왜 넷플릭스가 그들의 시스템을 개선하기 위해 노력하는지에 대해서 이야기합니다.

폭로하자면 저는 이 책의 추천사를 썼으나 책이 얼마나 팔릴지에는 별로 관심이 없습니다(^^;).

 

리드라이트웹 :저희의 넷플릭스에 대한 최근 포스트에서 우리는 추천에 대한 네 가지 접근 방법에 대해서 살펴보았습니다. 이들로는 사용자의 과거 행적에 기반한 개인화된 추천과 비슷한 사용자에 기반한 소셜(social) 추천 아이템 그 자체에 기반을 둔 아이템 추천 그리고 이들 세 가지 방법을 결합한 기법이 있었습니다. 여러분은 우리가 제안한 이 방법들에 대해서 이해 하셨나요?

(이 부분에 대해서는 http://www.readwriteweb.com/archives/netflix_prize_2009.php 이 글에서 확인할 수 있다)

 

사트남 : 이들 네 가지 카테고리들은 꽤 포괄적입니다. 그래서 저는 제 책에서 추천 시스템을 다르게 분류 했습니다. 저는 두 가지 기본적인 접근 방법들로 구분했는데, 첫 번째 접근 방법은 특정 아이템에 관련이 있는 다른 아이템들을 찾는 아이템 기반의 분석 방법입니다. 만일 사용자가 특정 아이템을 선호한다면 관련 아이템들이 추천되게 됩니다. 두 번째 접근 방법은 사용자 기반의 분석으로 특정 사용자와 유사한 사용자를 찾는 방법이죠.

게다가 유사한 아이템들과 사용자들을 찾는데 두 가지 접근 방법들이 있습니다. 첫 번째 방법은 콘텐츠 기반의 분석으로 아이템과 관련이 있는 콘텐츠 특히 텍스트를 사용해 유사도를 계산하는 방법이죠. 그 외의 협업 접근 방법으로 등급 매기기 북마킹 등등의 사용자 액션 정보를 기반으로 유사한 아이템을 찾기도 합니다. 두 번째 방법으로는 사용자 기반의 분석 방법으로 이를 활용하기 위해 사용자 프로파일 정보나 사용자 액션 그리고 사용자의 친구나 연락처와 같은 정보를 활용하는 등의 다양한 방법들로 사용자 기반의 분석을 합니다. 물론 이들 아이템/사용자 그리고 콘텐츠/협업 접근 방법을 적절히 조합해 추천시스템을 만들 수 도 있을 것입니다.

특정 아이템이나 사용자의 차원은 아이템기반이나 사용자 기반의 방법 중에서 어떤 것을 사용할지 결정하는데 큰 도움이 됩니다. 일반적으로 아이템 기반의 접근 방법은 사용자의 수가 적을 때 사용합니다. 사용자가 증가할 수록 아이템 기반의 접근 방법은 사용자 기반의 접근 방법으로 바뀌게 됩니다.

 

리드라이트웹: 추천 시스템 구현 측면에서 아마존이나 넷플릭스 이외에 당신을 매료시킨 다른 인터넷 회사가 있나요?

 

사트남 : 아마존이나 넷플릭스를 제외하고 구글 뉴스의 개인화가 내가 제일 좋아하는 서비스입니다. 구글 뉴스는 수많은 사용자들(한달에 수백만 사용자들이 방문하는)과 아이템들(두 달마다 수백만의 새로운 기사들이 쏟아지는)을 기반으로 하는 대용량 추천 시스템 구축의 아주 좋은 예이죠(아이템들은 끊임없이 생산된다). 이는 아이템 생산이 좀더 드문 아마존과 다른 점 중에 하나입니다. 구글이 협업 필터링을 사용하기로 결정한 데는 중요한 이유가 있는데, 수많은 사용자 기반의 데이터 접근을 활용하는 것이 다른 애플리케이션이나 마켓(다른 언어를 사용하는)에 동일하게 적용이 가능하기 때문이었습니다. 물론 콘텐츠 기반의 추천 시스템이 잘 동작할지 모르겠지만 특정 언어나 지역에 따른 추가 작업이 필요하게 됩니다. 하지만 구글은 동일한 협업 필터링 기술을 이미지 추천이나 비디오, 음악 추천과 같은 콘텐츠를 분석하기 힘든 미디어에 적용하고자 했죠.

개인적으로 가장 선호하는 사이트는 제가 있는 NextBio에서 개발하는 것입니다. 아직 완성되지는 않았지만 아마도 다음달 정도에 오픈이 되지 않을까 합니다. 이 추천엔진의 핵심 포인트는 아이템들과 사용자들에 대한 공통의 단어를 생성하기 위한, 태그 개념과 유사한 온톨로지의 활용에 있습니다. 시스템은 중, 장기적으로 프로파일 정보와 사용자 교류 정보를 사용해 추천 서비스를 제공합니다. 그리고 이 시스템은 아이템과 사용자 기반의 접근 방법 모두를 지원합니다.

 

리드라이트웹: 추후 몇 년 동안 이런 추천 시스템을 활용한 어떤 상업적인 기회들을 예상하고 있는지요?

 

사트남: 좋은 개인화 추천 시스템은 성공한 사이트와 실패한 사이트의 차이에서 알 수 있습니다. 대부분의 애플리케이션이 이제 사용자를 초대해 사용자 생성 콘텐츠를 사용한다는 것을 감안한다면 새로운 콘텐츠는 경이적인 속도로 생성되게 됩니다. 따라서 적절한 콘텐츠를 적합한 사용자에게 보여주는 것이 다시 방문하고 싶은 애플리케이션을 만드는 키포인트가 됩니다. 대부분 성공한 웹사이트들이 개인화된 경험을 그들의 사용자들에게 제공하기 위해 추천 시스템을 사용하지 않는다고 한다는 사실이 더 놀라울 것입니다(사용하지 않을 수가 없다는 것이다).

 

리드라이트웹: 사트남씨의 책은 협업 필터링에 대한 책입니다. 이런 협업 필터링이 전체 추천 시스템을 구상하는데 어떻게 조화될 수 있는지 말씀해 주실 수 있나요?

 

사트남: 최근에 애플리케이션에 의해 제공되는 엄청난 양의 사용자 교류 정보가 지능정보(intelligence)로 변환되고 있습니다. 이런 교류 정보는 등급이나 블로그 글, 아이템 태깅, 사용자 연결 또는 공통 관심 아이템 공유와 같은 형태로 나타납니다. 이런 형상은 정보 오버로드 문제를 야기합니다. 우리가 원하는 시스템은 사용자의 관심과 교류에 기반한 아이템 추천이죠. 바로 이 때문에 개인화, 추천 엔진이 나오게 되었습니다.

제 책에서는 하나의 애플리케이션에 지능을 추가하기 위한 다양한 방법들을 다루고 있으며, 이들 중에 하나가 추천 엔진입니다. 책에서는 콘텐츠 기반 그리고 협업 기반의 추천엔진 구축 방법에 대해 집중적으로 다루고 있지요. 책에서는 사용자 관련 정보를 애플리케이션 내, 외부에서 어떻게 획득하느냐와 이들을 어떻게 추천을 위한 정보를 변환하는 지를 다루고 있습니다. 여러분들이 추천시스템에서 언급했던 것 중에 한가지였던 여러분들 웹사이트에서 사용자들에게 추천을 하는 기능을 구현하고 싶다고 언급했던 것을 기억합니다. 제 책을 읽은 독자라면 제가 책에서 사용한 기술들을 사용해 이런 시스템을 구축하는 것이 가능할 것입니다.

 

리드라이트웹: 넷플릭스는 추천 알고리즘을 10% 개선한 팀에게 백만 달러를 주겠다고 했습니다. 이제 2년이 지난 시점에서 9.63%의 향상을 어느 팀이 달성했습니다. 물론 회의론이 있기는 하지만 10%의 개선은 시간문제라고 생각합니다. 왜냐면 이제 테스트에 참가한 팀들이 오직 점진적인 향상만을 달성하고 있기 때문이죠. 10% 달성이 곧 이루어 질 것이라고 생각하나요?

 

사트남: 넷플릭스 추천엔진인 Cinematch는 몇 가지 휴리스틱을 가미한 아이템 대 아이템 알고리즘(아마존의 그것과 비슷한)을 사용합니다. 넷플릭스 추천 시스템이 현실에서 매우 성공적이었다라는 것을 감안하면 참가한 팀이 9.63%의 성능향상을 가져 왔다는 사실이 굉장히 인상적입니다. 물론 넷플릭스 콘테스트가 구현 속도와 대용량 처리에 대해서 전혀 고려를 하지 않고 있기는 합니다. 여기서는 단순히 실제 사용자 등급과 예측된 등급 사이의 차이에 대한 관점만으로 추천 품질을 측정합니다. 따라서 넷플릭스가 이 콘테스트에서 나올 수 있는 모든 혁신을 활용할 것인지도 불분명하죠. 또한 넷플릭스 데이터는 콘텐츠 기반의 접근 방식을 사용하기 위한 다양한 정보를 포함하고 있지 않습니다. 이런 이유 때문에, 참가 팀들은 협업 기반의 테크닉에 매달리고 있죠.

 

10%의 성능향상의 장애물들은 뭐가 있을까요?

치우친(skewed) 데이터 : 콘테스트에 사용한 데이터는 1억개의 영화 등급 정보이며, 이 등급은 5개의 별로 표현이 되며, 480,000명의 사용자들과 17,770개의 영화에 대한 정보를 담고 있습니다. 이 문제에서는 사용자-아이템 데이터셋은 99%의 사용자 아이템 값이 0인 드물게 분포된 구조를 가지게 됩니다. 그러니까 사용자당 영화들의 정보가 지우쳐진 분포를 가지고 있다는 말이죠. 사용자당 등급 개수의 중앙값은 93입니다. 대략 10%의 사용자들이 16이나 더 적은 개수의 영화들에 대해서 등급을 준 반면, 25%의 사용자들이 36이나 더 적은 개수의 등급을 매겼습니다. 특히 두 사용자들은 무려 17,000개의 영화에 등급을 매기고 있었습니다. 비슷하게, 영화에 대한 등급들도 치우쳐 있습니다. 거의 절반의 사용자들이 단 하나의 유명 영화에 등급을 매겼습니다(Miss Congeniality). 약 25%의 영화들이 190이나 이보다 더 적은 등급들을 가지고 있고 아주 적은 개수의 영화만이 10개 미만의 등급을 가지고 있었습니다.

접근 방법: 우승팀 벨코어는 무려 2,000시간을 우승 솔루션을 발견하는데 할애 했습니다. 우승 솔루션은 107개 예측셋의 선형 결합이었는데, 많은 알고리즘들이 인접 이웃 방법(k-NN) 또는 SVD와 Restricted Boltzmann Machines(RBMs)와 같은 잠재요인모델(latent factor models)과 관련이 있었죠.

우승 솔루션은 사용자의 등급을 예측하기 위해 k-NN을 사용했고 유사도 계산에는 피어슨-r 상관관계와 코사인 유사도 모두를 사용했으며, 아이템 특정 그리고 사용자 특정의 바이어스를 제거하기 위한 보정 방법을 사용했습니다. 잠재은닉(Latent semantic)모델 또한 우승 솔루션에 널리 사용되었습니다.

벨코어팀은 서로의 단점을 보완할 다양한 모델을 사용하는 게 중요하다는 것을 발견했습니다. 단독 모델 하나로 벨코어가 우승을 할 수는 없었을 겁니다. 모델을 결합하여 Cinematch보다 8.43% 성능향상이 있었으며, RBMs의 결과에 k-NN을 결합한 하이브리드 형태였던 이전까지 가장 좋았던 모델보다 6.43% 성능향상이 있었습니다. LSI 방법으로 얻어진 가장 좋은 성능은 5.1%의 개선이었으며 k-NN 단독 모델은 그 보다 적은 수치였습니다.

벨코어팀은 이런 종류의 콘테스트에서 우승 솔루션을 내기 위한 몇 가지 가이드 라인을 제시했습니다.

  • 상호 보완 적인 모델들을 결합하는 것이 전체 솔루션의 성능향상에 아주 좋은 영향을 끼친다. k-NN, LSI 그리고 RBM 세 가지의 선형 결합만으로 7.58%의 성능향상이 있었다는 것을 기억하기 바란다.
  • 원칙에 의거한 접근 방법이 솔루션 최적화에 도움이 된다.
  • 우승을 거머쥐기 위한 핵심은 충분한 데이터가 있을 때 정확히 예측을 하는 모델을 빌드하는 것이다. 이를 위해 충분한 데이터가 없을 때 과적합이 없는 모델을 빌드하는 게 필요하다.

결과 솔루션도 같은 연장선 상에 있는데, 여러 모델을 결합하고 거기에다가 몇 가지 휴리스틱을 가미한 것뿐입니다. 아마도 참가자들은 마법의 10%대를 내년이나 그 후에 달성을 할거라고 생각합니다.

 

리드라이트웹: 몇몇 사람들은 10% 성능향상은 알고리즘 단독으로 가능하지 않은 수치라고 생각해서 “사람” 요소가 필요하지 않을까라고 하기도 합니다. 예를 들면 ClerkDogs는 실제 비디오 가게의 점원을 고용해 협업 필터링 엔진보다 더 많고, 정확한 데이터베이스를 만들었습니다. 비슷한 방법으로 Pandora는 50명의 직원을 동원해 음악을 듣게 하고 음악 태그를 입력하게 하였습니다. 추천을 하기 위해 알고리즘만으로 얼마나 가능하다고 생각하시나요?

 

사트남: 추천 엔진은 완벽한 게 아닙니다. 다양한 요소들이 성공적인 추천엔진을 만들어 냅니다. 예를 들면 접근 방법이라든지, 컴퓨팅 결과의 퍼포먼스, 휴리스틱, 연구와 개발의 정도 등등이 되겠죠. 그러나 실전에 여러분들이 좀더 개인화된 추천이 가능하다는 것을 이미 보여줬습니다. 이는 더 높은 클릭률, 다시 방문하게 만드는 애플리케이션 그리고 낮은 반송률(bounce rate)과 같은 결과로 나타났습니다.

추천 데이터베이스를 구성하는데 사람을 활용하는 것은 소규모의 애플리케이션에서는 잘 동작할 것입니다. 하지만 애플리케이션의 규모가 커질 수록 비용이 만만치 않게 들어갈 것입니다. 저는 사람과 기계 이들간에 경쟁은 적절치 않다고 생각합니다. 사람/전문가가 추천을 하더라도, 일단 대부분 사용자들의 취향과 유사한 사람/전문가를 찾는 게 필요합니다. 특히나 여러분이 롱테일(long tail)을 목표로 한다면 말이죠.

 

출처 – http://freesearch.pe.kr/archives/2443

Recommended Posts
Comments

Leave a Comment

Contact Us

We're not around right now. But you can send us an email and we'll get back to you, asap.

Not readable? Change text. captcha txt
R로 구현한 맥주 추천 엔진