Learning to Rank: 개념만 간단히
검색엔진을 구성하는 요소에는 수집기, 색인기, 검색기 등이 있지만, 사용자가 체감하는 품질을 결정짓는 요소는 결국 랭킹입니다. 키워드 입력하고 엔터키 쳤을 때, 얼마나 그에 잘 부합하는 문서가 상단에 나오느냐 하는 거죠. 랭킹의 중요한 특징은 키워드-문서 사이의 관련도를 반드시 수치로 정확하게 알 필요가 없다는 점입니다. 문서 A와 B의 점수가 각각 80점 / 70점이든, 90점 / 60점이든 상관없습니다. 순서가 A, B라는 것, 바로 그게 중요한 겁니다.
예전에는 TF-IDF가 됐건 BM25가 됐건 간에 키워드-문서 사이의 관련도를 잘 모델링해서 검색 결과에 관련있는 문서는 넣고 상관없는 문서는 빼는 데 많은 노력을 기울였습니다. 그게 어느 정도 잘 되는 지금은 이제 문서를 “어떻게 더 잘 정렬할 것인가” 즉 더 좋은 문서를 더 앞에 보여줄까를 두고 많은 연구가 이루어지고 있습니다. 단순히 관점의 차이랄 수도 있지만, 이 작은 차이에서 많은 변화가 비롯합니다.
우선 평가 척도가 바뀌어야겠죠. 정보검색의 고전적인 평가 방식은 Precision/Recall입니다. 쿼리에 대해 각 문서가 적합한가(Relevant)한가 아닌가를 미리 정해 두고 검색엔진이 얼마나 적합한 문서를 잘 찾느냐를 계산합니다. 요즘은 이보다 훨씬 정교한 평가 방식을 씁니다. 검색엔진이 내놓은 결과 문서들의 순위가 정답, 즉 가능한 최적의 랭킹과 얼마나 비슷한지 비교하는 거지요. 자세한 방법은 위키피디아의 NDCG 페이지에 설명되어 있습니다.
그러면 이 정렬기(Ranker)는 어떻게 만들까요?
입력으로 [쿼리별로 정확하게 정렬된 문서들]과 [각 문서의 특징 벡터(Feature Vector)]가 주어지면, 우리는 문서의 순위를 가장 정확하게 결정할 수 있는 함수를 찾아내야 합니다. 어떻게 찾을까요? 바로 이 지점에서 정보검색(Information Retrieval; IR)과 기계학습(Machine Learning; ML)이 만납니다. 기계학습 알고리즘을 써서 최적의 랭킹함수를 찾아내는 겁니다. Learning to Rank라는 이름이 랭킹하는 법을 학습한다는 뜻이잖아요. 가령, 초창기에 제안된 모델인 RankNet(ICML, 2005년)은 랭킹함수를 만드는 데 인공신경망(Artificial Neural Network, ANN)을 썼습니다.
최근에 인기를 끄는 분야이다 보니 검색하면 정말 많은 논문이 쏟아져 나옵니다. 알고리즘 이름만 나열해도 RankNet, fRank, RankBoost, AdaRank, LambdaRank, McRank, SoftRank, ListNet 등등.. 전문으로 파고들 요량이 아니면 논문을 하나씩 찾아 읽기는 좀 어려울 것 같습니다. 제가 도움을 받은 문서 두 개를 소개하니 관심 있으신 분들은 한 번 읽어보세요.
둘 다 마이크로소프트 연구소(Microsoft Research; MSR)에서 나온 자료입니다. 특히 두 번째 문서는 2008년 월드와이드웹(WWW) 컨퍼런스의 튜토리얼 발표 자료인데, 방대한 관련 연구들이 정리되어 있습니다. 다만, 발표자인 Tie-Yan Liu 박사가 Listwise Approach to Learning to Rank 쪽으로 연구를 하는 탓에 그 관점으로 치중된 감이 있고, 발표 자료만 읽어서는 절대로 각각의 세부 알고리즘을 이해하기 어렵다는 아쉬움은 있습니다. 그저 맨땅에 헤딩하지 않도록 큰 그림을 보여주는 시작점으로 생각하면 좋겠습니다.