TF-IDF
태그 : 언어지능
- 개념
- 텍스트 마이닝 - 정보 검색과 텍스트 마이닝에서 이용하는 가중치로, 여러 문서로 이루어진 문서 군이 있을 때 어떤 단어가 특정 문서 내에서 얼마나 중요한 것인지를 나타내는 통계적 수치 - 문서의 핵심어를 추출하거나, 검색 엔진에서 검색 결과의 순위를 결정하거나, 문서들 사이의 비슷한 정도를 구하는 등의 용도로 사용
## Ⅰ. TF-IDF 개요
### 가. TF-IDF 의 정의
- 정보 검색과 텍스트 마이닝에서 이용하는 가중치로, 여러 문서로 이루어진 문서 군이 있을 때 어떤 단어가 특정 문서 내에서 얼마나 중요한 것인지를 나타내는 통계적 수치
- 문서의 핵심어를 추출하거나, 검색 엔진에서 검색 결과의 순위를 결정하거나, 문서들 사이의 비슷한 정도를 구하는 등의 용도로 사용
### 나. TF 와 IDF 각각의 설명
| 구분 | 설 명 |
| -------- | -------- |
| TF | - 특정한 단어가 문서 내에 얼마나 자주 등장하는지를 나타내는 값으로, 이 값이 높을수록 문서에서 중요하다고 생각할 수 있다.
- 하지만 단어 자체가 문서군 내에서 자주 사용되는 경우, 이것은 그 단어가 흔하게 등장한다는 것을 의미한다.
이것을 DF(문서 빈도, document frequency)라고 하며, 이 값의 역수를 IDF(역문서 빈도, inverse document frequency)라고 한다
- TF-IDF는 TF와 IDF를 곱한 값이다. | | IDF | - IDF 값은 문서 군의 성격에 따라 결정된다
- 예를 들어 '**원자**'라는 낱말은 일반적인 문서들 사이에서는 잘 나오지 않기 때문에 IDF 값이 높아지고 문서의 핵심어가 될 수 있지만,
원자에 대한 문서를 모아놓은 문서 군의 경우 이 낱말은 상투어가 되어 각 문서들을 세분화하여
구분할 수 있는 다른 낱말들이 높은 가중치를 얻게 된다.| ## Ⅱ. TF-IDF 사용 사례 ### 가. TF-IDF 수학적 공식 - TF(단어 빈도수, term frequency)는 특정한 단어가 문서 내에 얼마나 자주 등장하는지 나타내는 값
DF(Document Frequency)는 특정 단어가 나타난 문서의 수를 말하며, 이 값의 역수를 IDF(inverse document frequency)라고 한다. **- TF-IDF = TF* IDF = TF* log((N – n)/n)** N : 전체 문서의 수
n : 단어가 포함된 문서의 수
IDF = log((N – n)/n)
![](/upload/editor/images/TF-IDF.png) ### 나. TF-IDF 사용 예 |구분 | 설 명 |
| -------- | -------- |
| 문제 | 전체 문서가 100,000,000 존재한다.
gift 라는 단어가 DOC1에 2번, DOC2에 1번 그리고 존재하는 문서는 300,000 card 라는 단어가
DOC1에 3번, DOC2에 6번 그리고 존재하는 문서는 400,000 gift card 라는 단어를
입력했을 때 DOC1, DOC2 문서간의 유사도를 구해본다.| | 1) TF-IDF
도출 | 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 결과값이 나왔으며 이를 좌표를 표현하면 아래와 같다. | | 2)좌표 표현 | ![](/upload/editor/images/좌표표현1.png)
![](/upload/editor/images/좌표표현2.png) | | 3)QUERY
와 DOC1
의 계산 | **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 | | 4)QUERY
와 DOC2
의 계산 | **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보다 정확도가 높은 걸로 나온다. |
- 하지만 단어 자체가 문서군 내에서 자주 사용되는 경우, 이것은 그 단어가 흔하게 등장한다는 것을 의미한다.
이것을 DF(문서 빈도, document frequency)라고 하며, 이 값의 역수를 IDF(역문서 빈도, inverse document frequency)라고 한다
- TF-IDF는 TF와 IDF를 곱한 값이다. | | IDF | - IDF 값은 문서 군의 성격에 따라 결정된다
- 예를 들어 '**원자**'라는 낱말은 일반적인 문서들 사이에서는 잘 나오지 않기 때문에 IDF 값이 높아지고 문서의 핵심어가 될 수 있지만,
원자에 대한 문서를 모아놓은 문서 군의 경우 이 낱말은 상투어가 되어 각 문서들을 세분화하여
구분할 수 있는 다른 낱말들이 높은 가중치를 얻게 된다.| ## Ⅱ. TF-IDF 사용 사례 ### 가. TF-IDF 수학적 공식 - TF(단어 빈도수, term frequency)는 특정한 단어가 문서 내에 얼마나 자주 등장하는지 나타내는 값
DF(Document Frequency)는 특정 단어가 나타난 문서의 수를 말하며, 이 값의 역수를 IDF(inverse document frequency)라고 한다. **- TF-IDF = TF* IDF = TF* log((N – n)/n)** N : 전체 문서의 수
n : 단어가 포함된 문서의 수
IDF = log((N – n)/n)
![](/upload/editor/images/TF-IDF.png) ### 나. TF-IDF 사용 예 |
gift 라는 단어가 DOC1에 2번, DOC2에 1번 그리고 존재하는 문서는 300,000 card 라는 단어가
DOC1에 3번, DOC2에 6번 그리고 존재하는 문서는 400,000 gift card 라는 단어를
입력했을 때 DOC1, DOC2 문서간의 유사도를 구해본다.| | 1) TF-IDF
도출 | 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 결과값이 나왔으며 이를 좌표를 표현하면 아래와 같다. | | 2)좌표 표현 | ![](/upload/editor/images/좌표표현1.png)
![](/upload/editor/images/좌표표현2.png) | | 3)QUERY
와 DOC1
의 계산 | **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 | | 4)QUERY
와 DOC2
의 계산 | **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보다 정확도가 높은 걸로 나온다. |