며칠 전 인턴 지원에 대한 언급을 했었는데, 여러 회사와 8번의 인터뷰 끝에 최근 Microsoft Research Redmond에서 인턴을 하기로 결정하였습니다. Bing Search Engine의 검색 모델을 담당하는 팀이며, 제가 맡을 프로젝트는 최근 많은 이슈가 되고 있는 실시간 검색(real-time search)의 성능을 높이는 일입니다. 

미국 대학원 박사과정의 리서치 인턴을 간단히 소개하자면, 기업 연구소에서 주어진 기한내에 (주로 12주) 팀의 일원이 되어 연구 프로젝트를 완수하는 일입니다. 실제 연구원들과 동등한 자격으로 일을 하며, 대체로 결과를 퍼블리시하는 것도 가능하기 때문에 대학원생 입장에서는 상당히 매력적인 조건입니다. 물론 일반 기업에서와 마찬가지로 향후 입사에도 도움이 됩니다. 

인턴 선발 과정은 시작부터 마무리까지 실제 채용과정의 축소판이라고 할만하며, 결과에 관계 없이 참으로 많은 것을 배울 수 있기 때문에 이공계 학과에 유학 중이신 분들은 꼭 해보실만한 일입니다. 기업 연구소에서 어떤 사람을 원하고, 그런 사람을 가려내기 위해 어떤 잣대를 사용하는지 느끼실 수 있기 때문입니다. 

또한 대부분 박사과정 이후에 학교냐 회사냐의 고민을 하게 되는데, 인턴 과정을 통해 '회사'를 느끼고 나면 좀더 균형있는 판단이 가능할 것입니다. 학교에만 있다 보면 웬지 기업 연구소에 끌리게 마련인데, 주변에서 인턴 생활 이후 기업 연구소에 대한 환상을 깨고 학계쪽으로 진로를 확정하는 경우도 자주 보았습니다. 앞으로 인턴 지원을 준비하는 분들에게 도움이 될 수 있도록 전형 과정을 간단히 정리해 보았습니다.

서류 전형
인턴 지원을 공식적으로 시작하기 위해서는 주로 온라인 폼을 작성하게 됩니다. 많은 경우 다른 채용 및 장학급 지원과 마찬가지로 교수님의 추천서가 필요합니다. 여기서는 연구 실적이 주된 평가기준이 되겠지만, 역시 많은 경우 내부 인력의 추천을 통하여 인터뷰 대상자가 선정됩니다. 또한 연구 계획서를 작성하게 되는데, 자신의 연구 경험과 관심사를 요약하면서도, 관심사를 지나치게 specific하게 쓰지는 않는 것이 요령입니다. 예컨데 저는 'All areas of information retrieval, with recent work on personalized search, desktop search, search with semi-structured data, and search over multiple document types. '이라고 적었습니다. 

인터뷰
구글이나 마이크로소프트의 인터뷰는 난해하기로 이름이 높습니다. 구글은 9단계의 인터뷰를 하는 것으로 알려져 있고, 주로 문제해결력을 측정하는 마이크로소프트의 인터뷰 질문은 으로도 나와 있죠.  이번에도 재미있는 질문을 많이 받았는데, 그 중 기억에 남는 몇가지를 저의 답변과 함께 소개하겠습니다. 
질문 : 검색 엔진의 인덱스 크기를 어떻게 측정하겠습니까?

답변 : 검색 엔진에 질의를 던져 리턴되는 문서의 개수를 측정한다. 이때, 질의어로는 'the'와 같은 모든 글에 쓰이는 단어(stopword)가 좋다. 그 이유는 가장 많은 문서를 포함시킬 수 있으며, 특정 주제에 관한 글만 샘플링하는 것을 막을 수 있기 때문이다.  즉, 통계에서 말하는 unbiased estimator가 되는 것이다.

질문 : 제한된(constant) 공간의 메모리를 가지고 임의의 배열을 랜덤하게 섞는 방법은 무엇입니까?

답변 : 링크로 대신합니다.
또한, 각 그룹에서 진행되는 프로젝트를 간단히 설명하고, "당신이라면 어떻게 하겠습니까"를 묻는 질문도 자주 받았습니다. 이런 질문에 대답하기 위해서는 평소에 논문을 읽으며 '나라면 이 문제를 어떻게 풀었을까' 하고 생각해 보는 연습이 유용할 것 같습니다. 마지막으로, 대부분 인터뷰에서 Massively Parallel Processing (Hadoop / MapReduce)에 대한 경험을 물었는데, 그만큼 이 분야 종사자들에게는 필수 소양이 된 듯 합니다. 

마치며
예전에 컨퍼런스를 다녀와서 새로운 세상에 눈을 뜬 느낌이었는데, 이번 인턴 역시 색다른 경험이 될 것 같습니다. 그동안 검색 연구를 하면서 실제 사용자 데이터를 다루는 환경에 대한 갈증이 있었는데, 이번에 해소하고 돌아오려고 합니다. 레드몬드 인근 지역은 여름 날씨가 참 좋다고 하더군요. 인턴 생활에 대해서도 회사 규정에 저촉되지 않는 범위에서 종종 포스팅하겠습니다.

추가 : 마이크로소프트 면접에 대해 잘 정리된 자료가 있어 소개합니다. 

검색(IR) 연구자의 경쟁력은?

검색연구동향 : 2010. 2. 10. 12:40   By LiFiDeA
최근에 서머 인턴직을 구하고 있습니다. 가뜩이나 불경기에 MS와 야후의 웹 검색 통합 건으로 말미암아 검색 연구자로서 구직에 좋은 시기는 아닙니다. 어쨌든 몇 번의 전화 인터뷰를 보면서 느끼는 점이 많습니다. 연구자로서 발전하고 논문을 쓰는 것도 중요하지만, 언젠가는 구인 시장(Job Market)에 나가는 '상품'으로서 최대한 가치를 높여야 한다는 생각이 들었습니다. 전문가로서 스스로의 시장 가치를 높여야 좋은 환경에서 연구를 계속할 수 있을 것이기 때문입니다.

그 와중에 생각하게 된 것이 검색(Information Retrieval) 연구자로서의 경쟁력이었습니다. 구직시장에서 검색 연구를 했다는 것이 어떤 평가를 받는지, 검색 연구자로서 최고의 경쟁력을 갖추기 위해 어떤 노력을 해야 할까 생각해 보았습니다. 나중에 어떤 연구를 하던간에 제가 학문적 기초를 닦은 분야는 검색 연구이기 때문입니다. 대학 때 복수전공했던 경영학이 남겨준 문제의식인지도 모르겠습니다. 

사실 검색 연구의 주된 내용은 (주로 질의로 표현되는) 사용자의 정보욕구에 맞는 문서(혹은 다른 대상)를 찾는 모델을 만들고 평가하는 것인데, '사용자'에 초점을 맞추고 있으면서도 실제 대부분의 시간을 통계나 기계학습 기법을 학습하고 구현하는데 보내는게 보통입니다. 이처럼 학제적인 성격이 강한 까닭에, 검색학을 전통적인 학문의 분류에 넣기는 쉽지 않습니다.

이런 어중간한 포지션을 가진 경우 위험성은 어느 한 분야에서도 전문가 대접을 받기가 어렵다는 점입니다. 인간에 대한 깊이있는 이해가 필요한 사용자 연구나, 탄탄한 수학적 기초를 요구하는 기계학습이나 한 우물만 파도 깊이를 얻기 힘든 분야이기 때문입니다. 그리고 회사나 학교에서나 전문성이 뚜렸한 인재를 원하는 것이 현실입니다.

하지만, 두가지를 겸비했다는 것이 장점이 될 때도 있습니다. 전체를 아우르는 폭넓은 시야나, 한쪽 분야의 전문성을 다른 분야에 적용하는 데서 나오는 문제해결력 등은 두가지 이상의 전문성을 갖출 때 나옵니다. 대부분의 검색 연구가 사용자의 행동을 모델링하고 이를 검색 모델에 반영한 결과물이라는 점은, 검색 연구자가 갖는 유니크한 포지션이 갖는 장점을 대변합니다. 사용자 연구 전문가라면 문제의식을, 기계학습 전문가라면 해결책을 갖추었겠지만, 검색 연구자는 두가지를 모두 갖추어야 하기 때문입니다.

또한, PageRank로 대표되는 다양한 속성(feature)들, Language Modeling을 포함한 다양한 검색 모델들, TREC으로 대표되는 다양한 평가 데이터와 기법은 검색 연구가 쌓아올린 고유 영역입니다. 계속 쏟아져나오는 새로운 서비스와 사용자 환경이 새로운 검색 및 평가 기법을 필요로한다는 것을 고려하면, 앞으로도 검색이라는 연구분야의 장래는 밝다고 생각합니다.

연구를 하는 분이라면, 아니 어떤 식으로든 지적 자산을 쌓아가는 지식 근로자라면 한번쯤 생각해 볼만한 일입니다. 자신이 하는 일이 드넓은 학문 (혹은 산업) 세계에서 갖는 위치를 정확히 아는 것은 앞으로의 진로에 대한 좀더 현명한 판단을 가능하게 합니다. 최근 후배의 블로그에서 읽은 HCI(Human-computer Interaction) 연구자의 포지셔닝이라는 글을 소개하는 것으로 마칠까 합니다. 

목차 : 
정보 검색 (IR) 연구의 최신 동향
4가지 측면에서 바라본 정보 검색 (IR) 연구의 흐름
검색을 위한 문서 모델링 - 문서에서 유용한 속성 추출하기
질의어 분석 - 사용자 질의를 남김없이 해부한다
랭킹 함수 (retrieval model) - 검색 엔진의 심장부
검색 결과 평가하기 - 평가 없이는 향상도 없다
검색 기술의 미래 - 
 
검색 연구자들은 어떤 생각을 하고 있을까 

검색을 한마디로 정의하자면 '질의어에 대하여 문서를 평가하는 일'입니다. 그리고 제대로 된 평가를 위해서는 평가의 항목이 잘 정의되어야 할 것입니다. 중요한 요소
(feature)
를 모두 포함시키고 각 항목의 값을 정확히 매겨야 할 것입니다. 문서 모델링은 이처럼 검색을 위해 유용한 속성을 찾고 그 값을 추정(estimate)하는 작업입니다. 다음으로 몇 가지 대표적인 속성을 알아보겠습니다.

Topicality (textual similarity)
검색엔진을 만든다면 가장 먼저 생각할 수 있는 것이 질의어를 많이 포함한 문서(TF)를 먼저 보여주는 것입니다. 실제 검색엔진이 질의어에 대한 관련성을 평가하는 방법 역시 유사합니다. 몇가지 더 추가되는 고려사항은, 같은 빈도라면 좀더 드문 단어를 포함한 문서를 높게 평가하고 (IDF), 문서간 길이가 다르다는 사실을 고려하여 점수를 보정한다는 정도입니다. 많이 사용되는 TF-IDF, BM25, Query-likelihood등이 모두 이러한 아이디어를 각기 다른 수학적 모델로 표현한 결과이며, 잘 튜닝된 경우 비슷한 성능을 내는 것으로 알려져 있습니다. 

문서가 구조화된 경우에는 여러 항목(field)가 존재하기 때문에, 위와 같은 관련성 평가를 각 항목별로 할 수 있습니다. 그 후에 항목별 점수를 가중치를 두어 (예: 제목은 본문보다 2배 중요하다) 결합하면 최종 점수를 계산할 수 있을 겁니다. 저의 첫번째 논문은 이에 한걸음 나아가 각 질의어 별로 각 항목에 다른 가중치를 두는 아이디어를 기반으로 합니다. 

또한 검색 성능(주로 recall)을 높이기 위해 문서에 추가적인 텍스트 요소를 포함시키는 기법 역시 활발한 연구가 되고 있습니다. 많이 알려진 Anchor Text (문서를 대상으로 한 링크에 포함된 텍스트) 이외에 문서에 대한 태그나 질의어를 아는 경우 이를 문서 자체에 포함시키면 검색 성능을 높일 수 있겠죠. 또한 클러스터링을 통해 이웃 문서를 찾고, 이렇게 찾은 이웃 문서의 단어를 각 문서에 포함시키면 성능이 높아진다는 연구 결과도 있습니다.

Authority (popularity)
내용상의 관련성이 비슷하다고 해도 품질이 높고 믿을만한 문서를 먼저 보여주어야 할 것입니다. 이제는 일반명사가 되버린 구글의 PageRank를 포함하여 이러한 문서의 품질을 평가하는 방법에는 여러 가지가 있습니다만, 대부분 (웹) 문서간의 연결관계를 분석하여 종합한 결과로 품질이 게산된다는 점입니다.  이에 대한 확장으로 특정 주제에 대해 권위있는 페이지를 계산해내는 Topical PageRank라는 기법도 개발되어 널리 쓰이고 있습니다. 

Recency
최근 많은 검색업계의 화두가 된 것이 실시간 검색(real-time search)입니다. 이는 속보성이 중요한 질의를 가려내어 실시간으로 업데이트되는 뉴스나 트윗을 보여주는 기법입니다. 실시간이 아니더라도 최근 만들어진 문서일수록 더 정확한 내용을 담고 있을 확률이 높습니다. 또한 자주 업데이트되는 페이지 역시 좋은 점수를 받습니다. 

마치며
지금까지 검색을 위해 문서를 평가하는데 유용한 속성을 알아보았습니다. 물론 이외에도 도메인에 따라 다양한 속성이 존재하며, 상업용 웹
 검색엔진에서는 수백 수천개의 속성을 사용한다고 합니다. 사람이라면 순간적 직관으로 판단할 수 있는 일이겠지만, 그 정도로 복잡한 시스템의 
검색 결과에도 오류가 많은 것을 보면 인공지능을 만드는 것이 어렵다는 것을 알 수 있습니다. 

또한 속성이 개수가 많아질수록 속성간의 상대적 중요성을 사람의 힘으로 판단하기 어렵습니다. 따라서 최근에는 주로 사용자 클릭 데이터를 바탕으로 속성의 가중치를 계산해주는 기계학습 기법(Learning to Rank)이 각광받고 있습니다. 이런 연구에 널리 사용되는 데이터셋을 소개한 논문에는 검색을 위해 얼마나 다양한 속성이 사용될 수 있는지가 잘 드러나 있습니다. 

목차 : 
정보 검색 (IR) 연구의 최신 동향
4가지 측면에서 바라본 정보 검색 (IR) 연구의 흐름
검색을 위한 문서 모델링 - 문서에서 검색에 유용한 속성 추출하기
질의어 분석 - 사용자 질의를 남김없이 해부한다
랭킹 함수 (retrieval model) - 검색 엔진의 심장부
검색 결과 평가하기 - 평가 없이는 향상도 없다
검색 기술의 미래 - 
검색 연구자들은 어떤 생각을 하고 있을까 
---

오늘은 , 최근의 연구 동향을 문서 모델(document model), 질의어 모델(query model), 검색 모델(retrieval model), 그리고 평가(evaluation)의 순으로 정리해보려 합니다. 전체를 아우르는 큰 그림은 지난 포스트에 소개한 바가 있습니다. 

(1) Document Modeling
문서 모델링은 문서에서 검색에 도움이 되는 속성(feature)을 뽑아 인덱스를 생성하는 단계입니다. 잘 알려진 것으로는 단어의 빈도에 근거하여 관련성(topicality)을 평가하는 전통적인 속성(TF-IDF, BM25), 그리고 웹 문서의 연결 관계(link structure)를 분석하여 가장 권위있는 문서를 뽑아주는 속성(PageRankHITS) 등이 있습니다. 

전통적으로 가장 많은 연구가 집중되어온 영역이지만 최근들어 새로운 속성(feature)을 찾는 일은 조금씩 한계에 부딛히고 있는 듯 합니다. 하지만 Anchor Text나 태그 등 부가적인 메타데이터를 활용하거나, 클러스터링 등을 통해 발견한 인접 문서와의 유사성을 이용하여 문서를 좀더 정확하게 평가하려는 노력은 계속되고 있습니다. 

(2) Query Analysis
다음은 사용자가 입력한 질의를 분석하는 단계입니다. 여기에는 질의어 확장(expansion), 교체(substitution), 어근 분석(stemming), 철자 교정(spell correction), 분리(segmentation), 가중치 부여(weighting) 등 질의어 자체를 개선 하거나 좀더 세분화된 처리를 위해 질의어의 유형을 분류(classification)하는 작업이 포함됩니다. 사용자의 질의는 (특히 웹 검색) 보통 짧은데다가 애매하거나 오류를 포함한 경우가 많아, 잘의어 분석만 잘 해도 검색 성능을 획기적으로 올릴 수 있습니다.

특히 기존 연구 (e.g. 문서 모델링)가 한계에 부딛히고, 대량으로 주어지는 Query Log의 활용이 새로운 연구 토픽으로 각광받으면서 최근 검색 연구에서 가장 'hot'한 분야라고 할 수 있습니다. 최근 구글과 야후 등이 경쟁하듯 내놓고 있는 개인화 검색 역시, 사용자 프로필에서 추출한 단어를 검색어로 사용한다는 측면에서 주로 이쪽에 분류됩니다. 검색 개인화에 대해서는 좀더 자세히 다루겠습니다.

(3) Retrieval Model
검색 모델은 문서 모델링(1)에서 추출한 속성과 질의어 모델링(2)에서 분석된 질의어를 기반으로 각 문서의 실제 점수를 계산하는 공식(ranking formula)을 가리킵니다. 전통적인 의미의 검색 모델은 대부분 질의어와 문서의 유의성(textual similarity)에 기반한 것이 많았는데, Vector Space Model, Probabilistic Model (BM25), Language Model등이 모두 여기에 포함됩니다. 

하지만 2003년 이후, 검색의 기준이 되는 속성에 문서의 최신성, 품질 등 많은 요소가 추가되고, 검색 품질에 대한 평가를 자동화할 수 있는 클릭 로그(click-through log)의 사용이 보편화되면서 머신러닝 기법을 검색에 도입하는 연구가 대세를 이루고 있으며 이를 통칭하여 랭킹 학습(Rank-learning / Learning to Rank) 기법이라고 합니다. RankNet, RankSVM, RankBoost등이 이에 포함됩니다.

이와 함께 최근 눈에 띄는 경향은 검색 결과의 다양성(diversity)을 높이려는 시도입니다. 과거에는 문서 각각을 평가하여 좋은 문서가 Top에 있으면 무조건 좋은 것으로 간주하였지만, 비슷한 혹은 중복된 문서를 여러 개 보여주는 것은 검색 품질에 악영향을 끼치기 때문에, 이를 검색 모델 및 평가에 반영하려는 것입니다. 

(4) Evaluation
검색은 '평가의 과학'이라는 말이 있을 정도로 검색 결과를 정확하고 효율적으로 평가하는 일은 검색 연구의 주된 축이었습니다. 전통적인 Precision / Recall / Mean Average Precision 이외에도 검색 결과를 정확히 반영하는 평가 지표(metric)을 만드려는 노력이 계속되어 문서의 품질을 평가 결과에 좀더 정확히 반영할 수 있는 NDCG등 새로운 방법이 각광받게 되었습니다. 

또한 검색 결과의 평가를 위해서는 문서 각각의 적합성을 사람이 직접 평가해야 되기 때문에, 이 과정에서 필요한 문서의 숫자를 줄이려는 연구도 있었습니다. 또한 단순히 Top 10에 몇개의 relevant한 문서가 있다는 식이 아니라, 실제 사용자의 작업 효율을 높여주는 정도를 평가 척도에 반영하려는 노력도 있어 왔습니다.

기계적인 검색에서 인간적인
 검색으로
몇 단어를 던져주면 딱 맞는 문서를 찾아 주는 마술같은 검색 엔진의 이면에는 이렇게 복잡다단한 노력이 숨어 있습니다. 위에서 여러가지 흐름을 소개했지만, 요약하자면 점차 '사용자' 중심의 연구를 하게 되었다고 볼 수 있을 것 같습니다. 단순히 고정한 함수를 계산하여 가장 높은 점수순으로 문서를 출력하는 것이 아니라, 사용자에게 실제로 유의미한 결과를 제공할 수 있는 검색 모델을 만들고, 사용자 질의를 분석 및 분류하고, 클릭 데이터를 수집하여 평가하고, 이를 바탕으로 검색 결과를 개선하는 겁니다. 물론 검색 개인화 역시 같은 맥락으로 볼 수 있습니다.

 다음회부터는 각 부문별 동향 소개가 이어집니다.  좀더 설명이 필요한 부분이 있다면 지적 바랍니다. ^^
작년 2학기에 저는 지도교수이신 Bruce Croft교수님이 주제하는 논문 발표 세미나에 참가하였습니다. 규모는 크지 않았지만 Yahoo! Research의 Rosie Jones와 같은 사람들이 연사로 초청될 정도였습니다. 한학기 내내 최근 검색 연구동향을 대표하는 약 스무편의 논문을 읽고, 저는 검색 개인화(personalization) 관련 내용을 발표(자료 첨부)했습니다. 

한참 전에 검색 연구의 개론이라는 글을 썼었는데, 그간 배운 내용을 정리할 겸 앞으로 몇차례에 걸쳐, 최신 논문에 근거한 IR 연구의 동향을 소개할까 합니다. 각 논문의 기술적인 내용을 다 설명할 수는 없겠지만, 기본 아이디어와 큰 흐름 정도는 전달하려 합니다.  큰 그림은 다음과 같습니다. 시스템 측면에서 문서의 속성(feature)을 추출하여 인덱싱(1)하고 사용자의 질의를 분석(2)하여 최종적으로 각 문서에 대한 점수를 계산(3)하고, 마지막으로 검색 결과의 품질을 평가(4)하여 성능 개선에 활용하는 것입니다. 


위 그림이 검색 연구의 전부라고 할 수는 없지만, 대부분의 연구가
 문서 모델(document model), 질의어 모델(query model), 검색 모델(retrieval model), 그리고 평가(evaluation) 중 하나의 카테고리에 속하며, 실제 많은 연구가 위에 소개한 기본적인 모델을 특정 분야 (e.g. 웹 검색, 블로그 검색, 데스크탑 검색)에 적용하는 것을 주제로 합니다. 

마치며
다음번에는 각 부문별로 최근의 연구 동향을 요약해보겠습니다. 내용에 대한 문의나 제안은 언제든지 환영합니다. ^^

참고 자료
IR 교과서 Stanford / UMass CIIR