※ 교재에 없는 말뭉치(corpus)와 문서(document) 등의 설명을 아래 포스트에 따로 담았다.

 

TF-IDF 이모저모 - 말뭉치(corpus), 문서(document), 상용로그...

'인공지능의 수학' 교재의 아래 섹션을 공부하다가 추가로 알아봐야 할 내용들이 있어 따로 포스팅을 해본다. swjman.tistory.com/120 말뭉치(corpus) 인공지능 기술 중 특별히 언어 관련 분야에서 데이

swjman.tistory.com

 

 

교재링크(광고 아님): freelec.co.kr/book/인공지능을-위한-수학/

 

 

특징어(keyword?)

문서 내에 자주 또는 중요할 때 사용되어 그 문서의 성격이나 종류를 유추할 수 있게 하는 단어(word)나 문구(phrase). 교재에도 영어 용어가 기재되어 있지 않고, 인터넷으로 검색해도 나오지를 않았는데, TF-IDF 관련 위키 문서를 보면 아무래도 keyword가 가장 의미적으로 통하는 것으로 보인다.

 

가중치(weighting factor)

가중치 자체는 매우 범용적인 용어이니 여기서의 의미에 대해서만 설명한다. 특징어의 유무만으로 문서의 성격을 판단하는 것은 불가능하기 때문에 특징어가 될만한 단어들에 적당한 배점(가중치)를 적용하여 판별에 활용한다.

 

아다마르 곱(Hadamard product)

행렬의 동일 성분끼리 곱하는 연산자. 즉, M×N 행렬에 아다마르 곱을 하려면 똑같은 M×N 크기의 행렬이 필요하다. 결과 역시, M×N이 된다. 기호는 o을 이용한다. 예를 하나 보이면,

$$ \begin{pmatrix} 9 & 8 \\\ 1 & 0 \end{pmatrix} \circ \begin{pmatrix} 2 & 0 \\\ 5 & 2 \end{pmatrix} = \begin{pmatrix} 18 & 0 \\\ 5 & 0 \end{pmatrix} $$

코딩을 하다보면 배열 간의 곱하기를 구현할 때가 많은데, 설계 시점에서 수식 표현 시 유용할 것 같다.

교재에서는 BoW(Bag-of-Words) 벡터에 가중치 벡터를 곱하는 것을 이 기호로 표현했다.

 

TF(Term Frequency)

어떤 단어가 말뭉치(corpus)에서 얼마나 자주 나오는 지를 수치로 표현한 것. 예를 들어 말뭉치가 총 1,000개의 단어로 구성되어 있고, 그 중 어떤 단어가 50번 나왔다면 TF는 50/1000 = 0.05 가 된다.

 

IDF(Inverse Document Frequency)

말뭉치 내 문서 대비 어떤 단어가 얼마나 자주 나오는지가 DF(Document Frequency)이고, 이의 역수(inverse)를 나타낸 것이 IDF이다. IDF를 위해 상용로그를 취하는 것과 '문서'라는 용어의 뜻에 대해서는 맨 위 포스트에 따로 담았다.

교재에 나온 공식은 아래와 같다. D는 문서의 총개수이며, d는 어떤 단어가 나온 문서의 개수이다.

$$ IDF = -\log{ \frac{d}{D} } = \log{ \frac{D}{d} } $$

여기서 한가지 문제가 있는데, d가 0이 되는 경우이다. 해당 단어가 한번도 안나올 수 있기 때문이다. 위키문서에 따르면 이를 피하기 위해 1을 더하여 보정(adjusting)을 해준다고 한다. 즉,

$$ IDF = \log{ \frac{D}{1+d} } $$

다만, 이 보정값이 희석되기 위해서는 D가 매우 커야겠지.

 

TF-IDF(Term Frequency - Inverse Document Frequency)

TF와 IDF를 곱한 값이다. 위키문서에 따르면 TF의 다소 엉뚱할 수 있는 부분을 IDF로 보정해준다고 보면 된단다.(가중치의 가중치?)

 

 

Posted by JMAN