🤔 1. IDF는 왜 필요한가? (제안 동기)
IDF를 이해하려면, 먼저 이전에 배운 **TF(Term Frequency, 단어 빈도)**의 한계를 알아야 합니다.
- TF의 한계: 불용어 문제
- TF는 단순히 '하나의 문서 안에서' 특정 단어가 얼마나 자주 등장하는지를 나타냅니다.
- 이 때문에 'the', 'a', 'is'나 한국어의 '은', '는', '이', '가'와 같은 **불용어(Stopword)**들은 거의 모든 문서에서 높은 TF 값을 갖게 됩니다.
- 하지만 이런 불용어들은 문서의 핵심 주제를 파악하는 데 전혀 도움이 되지 않습니다. 오히려 중요한 단어들의 가치를 희석시킬 뿐이죠.
- 필요성: 단순히 한 문서 내에서의 빈도수만 볼 것이 아니라, 전체 문서들 사이에서 이 단어가 얼마나 특별하고 희귀한 정보인지를 측정할 척도가 필요하게 되었습니다. 이것이 바로 IDF가 등장한 배경입니다.
📖 2. IDF란 무엇인가? (정의)
**IDF(Inverse Document Frequency, 역문서 빈도)**는 특정 단어가 전체 문서 집합(코퍼스)에서 얼마나 공통적으로 사용되는지를 나타내는 값의 역수입니다. 즉, 단어의 **'희귀성' 또는 '중요도'**를 나타내는 지표입니다.
- 핵심 원리:
- 많은 문서에서 등장하는 단어일수록 IDF 값은 낮아집니다. (예: 'the', '조사')
- 적은 수의 특정 문서에서만 등장하는 단어일수록 IDF 값은 높아집니다. (예: '트랜스포머', '어텐션' 같은 전문 용어)
- 공식:
- : 단어 (term)
- : 전체 문서의 수
- : 단어 t가 등장한 문서의 수 (Document Frequency)
- 해석:
- IDF 값이 높다 → 그 단어는 소수의 문서에만 등장하는 희귀하고 중요한 키워드일 확률이 높다.
- IDF 값이 낮다 → 그 단어는 여러 문서에 공통적으로 등장하는 일반적이고 중요도가 낮은 단어일 확률이 높다.
⚖️ 3. Log는 왜 사용하는가? (Log 보정의 필요성, ★시험 핵심★)
IDF 공식에 log가 붙어있는 것은 매우 중요한 이유가 있습니다. 값의 스케일을 완화하여 균형을 맞추기 위함입니다.
슬라이드의 예시를 통해 log가 있을 때와 없을 때의 차이를 극명하게 비교해 보겠습니다. (전체 문서 수 이라고 가정)
log가 없는 경우:
| 단어 | 등장 문서 수 (df) | IDF 값 |
| word1 | 1 | 1,000,000 |
| word2 | 100 | 10,000 |
| word3 | 1,000 | 1,000 |
| word4 | 10,000 | 100 |
| word5 | 100,000 | 10 |
| word6 | 1,000,000 | 1 |
- 문제점: 가장 희귀한 단어(word1)의 IDF 값이 1,000,000으로, 가장 흔한 단어(word6)의 IDF 값 1과 비교했을 때 차이가 너무 극심합니다. 이렇게 되면 나중에 TF와 IDF를 곱할 때, IDF 값이 전체 점수를 좌지우지하게 되어 TF의 의미가 거의 사라지게 됩니다. 희귀 단어에 너무 과도한 가중치를 부여하는 것이죠.
log를 적용한 경우:
(※ 편의상 상용로그()로 계산)
| 단어 | 등장 문서 수 (df) | IDF 값 |
| word1 | 1 | |
| word2 | 100 | |
| word3 | 1,000 | |
| word4 | 10,000 | |
| word5 | 100,000 | |
| word6 | 1,000,000 |
- 결과: 가장 희귀한 단어의 IDF는 6, 가장 흔한 단어는 0이 되었습니다. 값의 차이가 훨씬 부드럽고 완만해졌죠.
- 핵심 역할: 이처럼 로그 함수는 값이 폭발적으로 커지는 것을 막아주는 '댐퍼(damper)' 역할을 합니다. 이를 통해 IDF 값이 지나치게 커지는 것을 방지하고, 단어의 중요도를 더 합리적인 스케일로 조정해 줍니다.
🎓 시험 대비 최종 요약
- IDF의 목적: TF만 사용했을 때 발생하는 불용어 문제를 해결하고, 단어의 **전체적인 중요도(희귀성)**를 측정하기 위함.
- IDF의 의미: 값이 높을수록 특정 주제를 대표하는 중요한 키워드, 값이 낮을수록 변별력 없는 일반적인 단어.
- Log를 사용하는 이유 (★매우 중요★): IDF 값의 스케일을 줄여(완화하여), 희귀 단어에 부여되는 과도한 가중치를 막고, 전체 점수를 더 균형 있게 만들기 위함.
💡 1. TF-IDF란 무엇이고 왜 사용하는가?
**TF-IDF(Term Frequency-Inverse Document Frequency)**는 단어의 중요도를 평가하는 통계적 가중치입니다. 이름 그대로 두 가지 값을 곱해서 계산합니다.
TF-IDF = TF × IDF
- TF (Term Frequency, 단어 빈도): 특정 문서 내에서 단어가 얼마나 자주 등장하는지 (문서 내 중요도)
- IDF (Inverse Document Frequency, 역문서 빈도): 전체 문서들 중에서 해당 단어가 얼마나 희귀한지 (전체적인 희귀성)
핵심 아이디어 🧠 단순히 등장 횟수만 세는 것을 넘어, "모든 문서에 자주 나오는 일반적인 단어(예: a, the, 은, 는)는 중요도를 낮추고, 특정 문서에만 집중적으로 등장하는 희귀한 단어는 중요도를 높이자!" 는 것입니다. 이를 통해 각 문서를 가장 잘 대표하는 핵심 키워드, 즉 **특징점(feature)**을 추출할 수 있습니다.
🔢 2. 예시로 완벽 이해하는 TF-IDF 계산 과정
슬라이드에 나온 4개의 문서를 예시로 처음부터 끝까지 계산해 보겠습니다.
- 문서1: 먹고 싶은 사과
- 문서2: 먹고 싶은 바나나
- 문서3: 길고 노란 바나나 바나나
- 문서4: 저는 과일이 좋아요
1단계: TF (단어 빈도) 계산하기
각 문서에서 단어의 등장 횟수를 해당 문서의 전체 단어 수로 나누어 정규화합니다.
- 문서1 (총 3단어): '먹고', '싶은', '사과'는 각각 1번씩 등장 → TF는 모두 1/3
- 문서3 (총 4단어): '길고', '노란'은 1번, '바나나'는 2번 등장 → '길고', '노란'의 TF는 1/4, '바나나'의 TF는 2/4
2단계: IDF (역문서 빈도) 계산하기
전체 문서 수(4개)를 기준으로 각 단어의 희귀성을 측정합니다.
- 희귀한 단어 (1개 문서에만 등장): '과일이', '길고', '노란', '사과', '저는', '좋아요'
- IDF =
- 일반적인 단어 (2개 문서에 등장): '먹고', '바나나', '싶은'
- IDF =
IDF 값이 높을수록 희귀하고 중요한 단어라는 것을 알 수 있습니다.
3단계: TF와 IDF 곱하기 (최종 TF-IDF 점수)
이제 위에서 구한 TF와 IDF를 단어별로 곱해줍니다.
- 문서1의 "사과" 점수:
- TF(1/3) × IDF(1.386) ≈ 0.462
- (해석: "사과"는 이 문서에서 중요하고(TF), 전체적으로도 희귀해서(IDF) 매우 높은 점수를 받음)
- 문서2의 "먹고" 점수:
- TF(1/3) × IDF(0.693) ≈ 0.231
- (해석: "먹고"는 이 문서에 있지만, 다른 문서에도 등장하는 일반적인 단어라 상대적으로 낮은 점수를 받음)
- 문서3의 "바나나" 점수:
- TF(2/4) × IDF(0.693) ≈ 0.347
- (해석: "바나나"는 이 문서에서 매우 중요하지만(TF가 큼), 다른 문서에도 등장해서(IDF가 낮음) 적당한 점수를 받음)
이 과정을 모든 문서의 모든 단어에 대해 반복하면, 각 문서를 나타내는 고유한 TF-IDF 벡터가 완성됩니다.
🎓 시험 대비 최종 요약
- TF-IDF란? 단어의 **지역적 중요도(TF)**와 **전체적 희귀성(IDF)**을 함께 고려한 가중치.
- 핵심 목적: 불용어처럼 변별력 없는 단어의 가중치는 낮추고, 특정 문서의 주제를 잘 나타내는 키워드의 가중치는 높이기 위함.
- 계산 순서: TF 계산 → IDF 계산 → 두 값 곱하기.
- 최종 활용: 완성된 TF-IDF 벡터는 문서 유사도 계산(코사인 유사도 등), 검색 순위 결정, 텍스트 분류 모델의 입력 특징으로 사용됨.
🤔 4. TF-IDF의 한계점 (★시험 핵심★)
TF-IDF는 강력한 기법이지만, 다음과 같은 명확한 한계점들을 가지고 있으며, 이 한계점을 극복하기 위해 후속 모델들이 제안되었습니다.
한계점 1: 문맥 정보 부재 (Lack of Context)
- 문제점: TF-IDF는 결국 단어의 빈도수에만 의존하는 Bag-of-Words 기반 모델입니다. 따라서 단어의 순서나 단어 간의 의미적 관계(유사성)를 전혀 고려하지 못합니다.
- 다의어(Polysemy) 문제: "돈을 찾으러 은행에 갔다"와 "강둑 은행에 앉았다"에서 '은행'은 전혀 다른 의미지만, TF-IDF는 이 둘을 완전히 동일한 단어로 취급하여 같은 벡터 값을 부여합니다.
- 유의어(Synonym) 문제: '자동차'와 '차'는 의미가 매우 유사하지만, TF-IDF는 이 둘을 전혀 다른 단어로 취급합니다.
한계점 2: TF의 선형적 증가 문제 (Unbounded TF Scaling)
- 문제점: TF 값은 단어가 반복해서 등장할수록 선형적으로 무한정 증가할 수 있습니다. 예를 들어 한 문서에 '사랑'이라는 단어가 10번 나온 것과 100번 나온 것의 TF 값은 10배 차이가 납니다.
- 현실: 하지만 실제로 단어의 중요도는 그렇게 선형적으로 증가하지 않습니다. '사랑'이라는 단어가 10번 정도 나오면 이미 그 문서의 핵심 단어임이 분명하며, 100번 나온다고 해서 중요도가 10배가 되는 것은 아닙니다. **중요도는 어느 수준에 이르면 포화(saturate)**됩니다.
- 해결 방안: TF 값에 로그(log)를 씌우거나, 특정 횟수 이상부터는 가중치가 완만하게 증가하도록 설계해야 합니다. 이 아이디어를 적용한 대표적인 모델이 BM25입니다.
한계점 3: 문서 길이 문제 (Document Length Bias)
- 문제점: 다른 조건이 같다면, 문서의 길이가 길수록 특정 단어가 더 많이 등장할 확률이 높고, 더 다양한 단어를 포함하게 됩니다. 이 때문에 짧은 문서와 긴 문서의 TF-IDF 값을 직접 비교하는 것은 불공평할 수 있습니다.
- 해결 방안: 문서의 길이를 일종의 페널티로 사용해 보정해야 합니다. 즉, 문서의 길이를 전체 문서의 평균 길이와 비교하여 점수를 조정하는 방식이 필요합니다. 이 또한 BM25 알고리즘의 핵심 아이디어 중 하나입니다.
'코딩공부 > 자연어처리' 카테고리의 다른 글
| 시험공부를 하려고 만든 자연어처리 정리-단어임베딩 (LSA,SVD) (0) | 2025.10.08 |
|---|---|
| 시험공부를 하려고 만든 자연어처리 정리-전처리 3탄(벡터화)-BM25 (0) | 2025.10.08 |
| 내가 시험공부하려고 만든 자연어처리-전처리 3탄(벡터화) 벡터유사도 (0) | 2025.10.05 |
| 내가 시험공부하려고 만든 자연어처리-전처리 3탄(벡터화)-카운트 기반 벡터화, Bag-of-Words (BoW) (0) | 2025.10.05 |
| 내가 시험공부하려고 만든 자연어처리-전처리 3탄(벡터화)-패딩 (0) | 2025.10.05 |