'information retrieval'에 해당되는 글 2건

  1. 2011.07.27 IDF:Inverse Document Frequency
  2. 2011.07.26 TF:Term Frequency
Writings2011. 7. 27. 00:02
2011/07/26 - [Literal] - TF:Term Frequency


앞서의 TF에 이어서 IDF를 소개해보겠다.
TF기반의 Scoring 산정은 몇 가지 문제를 포함하고 있다. 일단 질의어에 포함된 모든 term에 대해서 동일한 비중을 둔다는 것이다. 예를 들어, 기상예보를 검색하기 위해서 기상예보를 제공하는 웹 사이트를 검색한다고 가정 하자. 이곳에서 오늘의 기상예보를 찾기 위해 다음과 같은 질의어를 입력한다.

"오늘 수도권 날씨"

이 질의어에서 가장 중요한 단어가 무엇인지 분별할 수 있겠는가? 주어진 질의에 대해 다음과 같은 문서들이 검색될 수 있을 것이다.

1. "... 오늘 호남지방의 날씨는 어제 날씨와 마찬가지로 폭우가 이어질 것으로 전망됩니다. 이어서 내일의 날씨는 ..."

2. "... 오늘날씨입니다. 장마가 계속 이어지고 있는 가운데, 수도권의 강우량은 어제와 마찬가지로 150mm이상의 많은 강우량이 예상됩니다..."

TF의 방식으로 각 문서의 점수를 계산해보면 1번 문서는 1 + 0 + 3 = 4가 될 것이고, 2번 문서는 1 + 1 = 1 = 3이 될 것이다. 따라서 1번 문서가 2번 문서보다 더 상위에 랭크될 것이다. 하지만 두 문서 중 질의 결과로 더 적합한 문서는 2번 문서이다.

이러한 일이 생기는 원인은 검색을 수행한 문서 컬렉션이 특정 주제(여기서는 기상예보)에 대해 모인 문서들이기 때문이다. 즉 이 컬렉션에 속하는 문서는 모두 기상예보에 대한 문서들이며, 직관적으로 '날씨'와 같은 단어가 모든 문서에 포함되어 있으리라고 예측할 수 있을 것이다.

이와 같이 모든 문서에 고루 분포된 term들은 문서의 순위를 매기는데 도움이 되지 않는다. 그보다는 해당 컬렉션 내에서 특정 문서를 특징짓는 term이 검색에는 더 도움이 된다. 예시에서는 '수도권'과 같은 term이 그런 역할을 수행하고 있다. 이러한 term의 특징은 전체 컬렉션에 대해 그 term이 포함된 문서의 수가 적다는 것이다.

특정 term을 가진 문서에 대한 빈도수를 df:document frequency라고 하자. 전체 문서의 수가 N이라고 할때, 특정 term을 가진 문서의 수가 적을 수록 좋으므로, N을 df(t)(t는 특정 term)로 나눈다. 이렇게 되면 df에 대해 반비례한 관계식이 되므로, df의 값이 작을수록 결과 값은 커지게 될 것이다. 이에대해 밑을 10으로 하는 로그 스케일로 변경시킨 값을 idf value라고 하며 다음과 같이 표현한다.



그리고 tf-idf라는 score로 기존의 tf score를 대신한다.


결과적으로 tf-idf score는 term 빈도수가 높을 수록, 그리고 해당 term을 가진 문서가 적을 수록 높은 값을 가지게 된다. 이 tf-idf를 문서내의 모든 term에 대해 작성하여, term에 대한 vector로 표현한다.

<score(t_1,d), score(t_2,d), score(t_3, d), ... >


이 벡터 값에 대하여, 질의문의 term-vector와 내적을 구하면(간단히 말하면, 문서의 term들 중에 질의어의 term과 같은 것들을 따로 골라 위의 tf-idf 값을 더하는 것을 의미한다.) 질의문에 대한 해당 문서의 score가 구해지게 된다. 이 score를 기준으로 정렬을 하면 ranked-retrieval이 가능해질 것이다.


[footnote][/footnote]수식 출처 "An Introduction to Information Retrieval : Christopher D. Manning : Cambridge Press"

'Writings' 카테고리의 다른 글

Cosine Similarity  (0) 2011.07.27
TF:Term Frequency  (0) 2011.07.26
Posted by 곰푼
Writings2011. 7. 26. 21:15
Information Retrieval 에서 각 문서의 적합성을 평가할 때, 질의로 던진 키워드가 있느냐 없느냐로 우선적으로 판별하게 된다. 가장 단순한 Boolean Retrieval에서는 해당 키워드가 있으면 적합한 문서로 판단하고, 그렇지 않을때는 적합하지 않은 문서로 판단하게 된다.
이 경우는 문서의 갯수가 많지 않고, 사용자가 정확한 키워드를 정확한 용법에 맞추어 사용한다면 유효할 수 있는 방법이다.

하지만 현대의 웹 환경에서 문서의 갯수는 그야말로 기하급수적으로 증가하고 있고, 더불어 사용자가 검색에 할해할 시간은 더더욱 줄어들고 있다. 사용자는 정확한 용법을 배우고, 정확한 키워드를 찾아내어 검색하길 원치 않는다. 때문에 대부분의 검색 질의어는 한개의 단어 혹은 모호한 단어의 결합으로 이루어지기 마련이다.

TF는 이러한 문서들의 적합성을 평가하여 순위를 매길때 사용하는 문서의 수치적 표현중 하나이다. 문서를 여러 단어들의 조합으로 생각해보자. 가령,

"기상예보입니다. 오늘도 수도권에서는 어김없이 폭우가 쏟아질 예정입니다. 벌써 며칠째 계속된 폭우로 인해 곳곳에서 재산피해, 인명피해가 발생하고 있습니다. 수도권에 거주하시는 시민들께서는 각별히 폭우에 주의하시어 예방할 수 있는 사고에 피해입지 않도록 주의하시기 바랍니다."

와 같은 일기예보 문서가 있다고 하자. 이 문서를 각각의 토큰으로 나누고, 조사와 같은 것들을 제거하면 이 문장은 단어의 집합일 될 것이다.

"기상예보 오늘 수도권 어김없이 폭우 예정 며칠째 계속 폭우 곳곳 재산피해 인명피해 발생 수도권 거주 시민 폭우 주의 예방 사고 피해 주의"


이러한 각각의 단어들을 term이라고 표기하며, 이 문서는 다시 각 term당 출현 갯수로 다시 나타낼 수 있다.

"기상예보:1 오늘:1 수도권:2 어김없이:1 폭우:3 예정:1 ......."


이 문서에서 가장 빈도수가 높은 term은 무엇일까? 세번정도 나타난 '폭우'라고 할 수 있겠다. 이때 문서상에서 '폭우'라는 term의 tf 값은 3이 된다. 다른 term들은 대부분 1을 tf 값으로 갖는 term이 된다. 더불어 이경우, term간의 순서나 상관관계는 실질적으로 의미가 없어지게 된다. 이러한 모델을 "bag of words" 모델이라고 부르며, 각 단어의 빈도수를 term frequency:tf라고 부른다.

이러한 term frequency는 문서들을 각 term의 가중치로 표현할 때 쓰인다. 이때 사용자가 free text query를 질의어로 사용한다고 가정하자. (free text query는 우리가 흔히 사용하는 '모호한 형태의 키워드 모음' 형식의 질의를 의미한다.) 사용자는 서울 나들이를 가기 위해 오늘 오후 수도권의 기상예보를 검색하고자 한다.

 "오늘 오후 수도권 기상예보"

보통 위와 같은 형태로 검색을 수행할 것이다. 이때 질의어로부터 알 수 있는 것은, 질의어가 네 개의 term으로 나뉜다는 것이다. 위와 같은 term에 대응하여 각 문서의 term 집합과 비교를 수행한다. 이때, 검색 결과에 순위를 적용하기 위해서 점수를 계산한다고 하자. 점수는 위에서 표현한 tf 값을 더하는 것으로 계산할 수 있을 것이다. 그러면 위에서 예시로 든 문서의 점수는

"tf(오늘) + tf(오후) + tf(수도권) + tf(기상예보) = 1 + 0 + 2 + 1 = 4"

가 될 것이다. 만일 이 점수가 검색을 수행한 문서 컬렉션에서 가장 높은 점수라면, 이 문서는 검색결과의 최 상위에 랭크되어 나타날 것이다.


'Writings' 카테고리의 다른 글

Cosine Similarity  (0) 2011.07.27
IDF:Inverse Document Frequency  (0) 2011.07.27
Posted by 곰푼