'정보검색'에 해당되는 글 5건

  1. 2008/06/13 키워드의 가중치 구하기와 Zipf's Law
  2. 2008/06/09 Precision/Recall이 가리키는 것
  3. 2008/05/20 Lemmatization
바라바시 교수가 쓴 링크라는 책을 흥미롭게 읽은 기억이 있는데, 그의 최근 논문을 소개하는 블로그를 보고 반가운 마음에 트랙백 걸려고(..;) 씁니다. 그래서 내용 상 큰 관련은 없어요.

Zipf’s Law란, 간단히 말해서 빈도(Frequency)는 지위(Rank)에 반비례한다는 얘기다. 회사에서 직급 별 인원수를 생각해보면 쉽다.

이 Zipf라는 분은 사실 언어학자인데, 문헌에 등장하는 단어의 분포를 연구하다가 이 규칙을 발견한 것으로 보인다. (확실하지 않은 것은 항상 끝을 흐려버림..;;) 즉, 단어들 사이에 지위라는 것이 있다고 할 때, 별로 중요하지 않은 건 자주 많이 등장하고 좀 비중이 있다 싶은 것은 드물게 나타나더라는 (누구나 직관적으로 알고 있는) 사실을 통계적으로 입증하고, 더 나아가 그 사이의 관계를 수식으로 밝힌 것이다.

검색엔진을 얘기할 때 빼놓을 수 없는 TF-IDF에도 이 규칙이 반영되어 있다. TF-IDF란 단어와 문서 사이의 관련도를 측정하는 방식인데, TF (Term Frequency)는 기본적으로 문서에 해당 단어가 몇 번 나오는가를 가리키고, IDF (Inverse Document Frequency)는 그 단어가 나오는 문서가 몇 개나 되는가의 역(inverse)을 뜻한다. 이 둘을 곱하는 것이 TF-IDF다.

TF만 가지고 관련도를 계산하면, 흔하게 쓰이는 단어들 사이에서 희귀한 그래서 상대적으로 검색할 때 의미가 큰 단어가 질식해버릴 수 있다. 그런 위험을 방지하는 한 방법은 각 키워드의 가중치(weight)를 계산해서 TF에다가 반영해주는 것이데, 그게 바로 IDF다. IDF의 정의를 살펴보면 빈도의 역이라는 점에서 Zipf’s Law와 일맥상통하는 것을 알 수 있다. (물론, 등장 문서의 빈도가 아니라 키워드 자체의 빈도를 쓸 수도 있겠지만 실험적으로 IDF가 더 낫다는 것 같다.)

쓰고 보니 예전에 썼던 글의 반복이네요. 게다가.. 금요일 저녁이라 급한 마음에 길게 쓰고 말았습니다.
Posted by 4four
Precision/Recall은 검색엔진의 정확도를 평가하는 척도로서 널리 알려진 방법이다.

먼저 사전적인 뜻부터 짚어보자. Precision을 우리말로 하면 ‘정확률’ 정도가 되며, Recall은 회상, 상기, (결함 제품의) 회수라는 뜻이 있다. 찾아보니까 재현률이라고 많이 번역하는 것 같다.

Precision은 말 그대로 ‘검색 결과가 얼마나 정확한가?’를 따지는 것이며, Recall은 ‘찾아야 할 것 중에서 실제로 얼마 만큼을 찾았나?’를 평가하는 것이다.

아래 수식을 보면 아주 명확하다.
사용자 삽입 이미지
recall

R은 전체 문서 중에서 질의(query)와 관련된(relevant) 문서의 집합이며, A는 검색엔진이 실제로 찾아온 문서의 집합이다.

당연하게도 Precision과 Recall은 서로 트레이드오프 관계가 된다. 예를 들어, A가 아래와 같을 때 (검색엔진이 계산한 관련도에 따라 정렬되어 있으며, 굵게 표시한 것은 R에도 속하는 문서이다.)

A = {4, 7, 1, 3, 8, 6, 9, 5, 2}

Precision을 100%로 맞추려고 A의 크기를 3으로 정하면 Recall이 50%밖에 되지 않는다. A의 크기를 9로 늘리면 Recall을 100%로 올라가지만, 대신에 Precision이 67%로 떨어지고 만다. 검색엔진의 본질적인 기능이란 결국 관련도가 높은 문서에 높은 랭크를 부여하는 것이므로 Precision뿐만 아니라 Recall까지 고려해야만 그 성능을 제대로 평가할 수 있다.

사실 생각해보면 이 개념이 검색엔진에서만 쓰이는 것은 아니다.

more..

Posted by 4four

Lemmatization

분류없음 2008/05/20 21:30
적절한 번역용어가 생각나지 않아서 영어 단어를 그대로 사용한다.

Lemmatization을 한 마디로 말하자면, 문장 속에서 다양한 형태로 활용된(inflected) 단어의 표제어(lemma)를 찾는 일이다. 여기서 말하는 표제어란 사전에서 단어의 뜻을 찾을 때 쓰는 기본형이라고 생각하면 된다. 예를 들어, ‘아름다운’이 Lemmatization을 거치면 ‘아름답다’가 된다.

Lemmatization은 그 단어가 쓰인 문맥까지 고려한다는 점에서 Stemming과는 살짝 다르다. Stemming은 단어 그 자체만을 고려하지만, Lemmatization은 그 단어가 문장 속에서 어떤 품사(Part-of-speech)로 쓰였는지까지 판단해야 한다.

영어를 예로 들면, (한국어에서는 적절한 예가 떠오르지 않는다.) ‘flies’가 주어졌을 때, Stemming은 단순히 이 단어의 어근을 내놓는데 비해, Lemmatization은 문장 속에서 ‘files’가 동사 ‘날다’ 와 명사 ‘파리’ 중 어떤 뜻으로 쓰였는지까지 결정할 수 있어야 한다. 그렇기 때문에 Lemmatization을 수행하려면 문장 구조 분석 같은 언어적 이해가 필요하고 따라서 Stemming에 비해 복잡한 처리 과정을 거쳐야 한다.

참고자료: http://en.wikipedia.org/wiki/Lemmatisation
Posted by 4four