TF-IDF에 대해서 알아보기
개발/검색2011. 8. 11. 23:00
728x90
TF-IDF
TF(단어 빈도수, term frequency)는 특정한 단어가 문서 내에 얼마나 자주 등장하는지 나타내는 값
DF(Document Frequency)는 특정 단어가 나타난 문서의 수를 말하며, 이 값의 역수를 IDF(inverse document frequence)라고 한다.
TF-IDF = TF*IDF = TF*log((N – n)/n)
N : 전체 문서의 수
n : 단어가 포함된 문서의 수
IDF = log((N – n)/n)
예를 들어서
전체 문서가 100,000,000 존재한다.
gift 라는 단어가 DOC1에 2번, DOC2에 1번 그리고 존재하는 문서는 300,000
card 라는 단어가 DOC1에 3번, DOC2에 6번 그리고 존재하는 문서는 400,000
gift card 라는 단어를 입력했을 때 DOC1, DOC2 문서간의 유사도를 구해본다.
먼저
DOC1 문서
gift tf = 2 , IDF = log((100,000,000 - 300,000) / 300,000 ) = 5.0431
card tf = 3 , IDF = log((100,000,000 - 400,000) / 400,000 ) = 7.1886
위와 같이 TF-IDF 결과값이 나왔으며 이를 좌표를 표현하면 아래와 같다.
QUERY와 DOC1의 계산
DOC1·Query = 5.0431*2.5216 + 7.1886*2.3962 = 29.94200
|DOC1|=(5.0431*5.0431 + 7.1886*7.1886) 1/2 = (25.4329 + 51.6760)1/2 = 8.78117
|Query |=(2.5216*2.5216 + 2.3962*2.3962) 1/2 = (6.3585 + 5.7418) 1/2 = 3.47854
Cosine angle=DOC1·Query/(|DOC1|*|Query |)=29.94200/(8.78117*3.47854)= 0.9802
TF(단어 빈도수, term frequency)는 특정한 단어가 문서 내에 얼마나 자주 등장하는지 나타내는 값
DF(Document Frequency)는 특정 단어가 나타난 문서의 수를 말하며, 이 값의 역수를 IDF(inverse document frequence)라고 한다.
TF-IDF = TF*IDF = TF*log((N – n)/n)
N : 전체 문서의 수
n : 단어가 포함된 문서의 수
IDF = log((N – n)/n)
예를 들어서
전체 문서가 100,000,000 존재한다.
gift 라는 단어가 DOC1에 2번, DOC2에 1번 그리고 존재하는 문서는 300,000
card 라는 단어가 DOC1에 3번, DOC2에 6번 그리고 존재하는 문서는 400,000
gift card 라는 단어를 입력했을 때 DOC1, DOC2 문서간의 유사도를 구해본다.
먼저
DOC1 문서
gift tf = 2 , IDF = log((100,000,000 - 300,000) / 300,000 ) = 5.0431
card tf = 3 , IDF = log((100,000,000 - 400,000) / 400,000 ) = 7.1886
ITEM | TERM |
TF |
N |
n |
IDF | TF-IDF |
DOC1 | gift |
2 |
100,000,000 |
300,000 |
2.5216 |
5.0431 |
DOC1 | card | 3 | 100,000,000 |
400,000 | 2.3962 | 7.1886 |
DOC2 | gift |
1 | 100,000,000 | 300,000 |
2.5216 | 2.5216 |
DOC2 | card | 6 | 100,000,000 | 400,000 |
2.3962 | 14.3772 |
Query | gift | 1 | 100,000,000 | 300,000 | 2.5216 | 2.5216 |
Query | card | 1 | 100,000,000 | 400,000 | 2.3962 | 2.3962 |
위와 같이 TF-IDF 결과값이 나왔으며 이를 좌표를 표현하면 아래와 같다.
QUERY와 DOC1의 계산
DOC1·Query = 5.0431*2.5216 + 7.1886*2.3962 = 29.94200
|DOC1|=(5.0431*5.0431 + 7.1886*7.1886) 1/2 = (25.4329 + 51.6760)1/2 = 8.78117
|Query |=(2.5216*2.5216 + 2.3962*2.3962) 1/2 = (6.3585 + 5.7418) 1/2 = 3.47854
Cosine angle=DOC1·Query/(|DOC1|*|Query |)=29.94200/(8.78117*3.47854)= 0.9802
QUERY와 DOC2의 계산
DOC2·Query = 2.5216*2.5216 + 14.3772*2.3962 = 40.8091
|DOC2|=(2.5216*2.5216 + 14.3772*14.3772) 1/2 = (6.3585 + 206.7039) )1/2 = 14.5967
|Query |=(2.5216*2.5216 + 2.3962*2.3962) 1/2 = (6.3585 + 5.7418) 1/2 = 3.47854
Cosine angle=DOC2·Query/(|DOC2|*|Query |)=40.8091/(14.5967*3.47854) =0.80372
DOC1 이 입력된 gift card 쿼리에 대해 DOC2보다 정확도가 높은 걸로 나온다.
제가 작성한 내용은 아래 링크된 문서를 필요한 부분만 옮겼기 때문에
정확한 내용은 아래 링크를 확인하시면 됩니다.
http://www.miislita.com/information-retrieval-tutorial/cosine-similarity-tutorial.html
DOC2·Query = 2.5216*2.5216 + 14.3772*2.3962 = 40.8091
|DOC2|=(2.5216*2.5216 + 14.3772*14.3772) 1/2 = (6.3585 + 206.7039) )1/2 = 14.5967
|Query |=(2.5216*2.5216 + 2.3962*2.3962) 1/2 = (6.3585 + 5.7418) 1/2 = 3.47854
Cosine angle=DOC2·Query/(|DOC2|*|Query |)=40.8091/(14.5967*3.47854) =0.80372
DOC1 이 입력된 gift card 쿼리에 대해 DOC2보다 정확도가 높은 걸로 나온다.
제가 작성한 내용은 아래 링크된 문서를 필요한 부분만 옮겼기 때문에
정확한 내용은 아래 링크를 확인하시면 됩니다.
http://www.miislita.com/information-retrieval-tutorial/cosine-similarity-tutorial.html
728x90
댓글 영역