본문 바로가기
Study/NLP

[NLP] Feature Extraction From Text(TF-IDF, BM25)

by kimdaepa 2026. 1. 27.

Feature Extraction From Text(텍스트 특징 추출)

  • 대부분의 일반적인 머신러닝은 원시 텍스트를 이해하거나 받아들일 수 없다.
  • 대신 수치적 특성을 전달하기 위해 원시 텍스트에서 특징을 추출해야 한다.
    • 각 단어가 나타나는 횟수, 카운트 벡터화, 단어 빈도, 역 문서 빈도

카운트 벡터화

  • 모든 중복되지 않는 단어(특징)의 등장 횟수를 센다.
  • 이를 각 문서(=메시지) 별로 정리[한계]
    1. 최소 표현으로 인한 리소스 낭비
    2. 빈도적 접근에 따른 문제
  • ⇒ DTM(문서 단어 행렬)

TF-IDF Vectorizer

TF(Term-Frequency; 단어 빈도; tf(t, d))

  • 단어와 특정 문서의 함수 = 문서에서 그 단어가 나타난 횟수

IDF(Inverse Document Frequency)

  • 문서들에 매우 빈번하게 나타나는 단어의 가중치를 감소시키고, 드물게 나타나는 단어의 가중치가 증가시키는 역할

TF·IDF

  • 공식
    \[ \mathrm{idf}(t, D) = \log\!\frac{N}{\left|\{\, d \in D : t \in d \,\}\right|} \]
    \[ \mathrm{tfidf}(t, d, D) = \mathrm{tf}(t, d)\cdot \mathrm{idf}(t, D) \]
  • Ex)
    문서 1 = 나는 사과를 먹었다. 사과는 맛있다.
    문서 2 = 나는 바나나를 먹었다.
    문서 3 = 사과와 바나나는 과일이다.
    [TF]
    문서 1에서 전체 단어 수: 6개
    사과 등장 횟수: 2번
    ⇒ TF(사과, 문서 1) = 2/6
    [IDF]
    전체 문서: 3개
    사과가 등장한 문서: 문서 1, 문서 3
    ⇒ IDF(사과) = log(3/2)
    [TF-IDF]
    TF·IDF(사과, 문서 1) = 2/6 * log(3/2)

BM25(BestMatching 25)

  • TF·IDF는 단어가 많이 반복될수록 점수가 비례해서 커질 수 있음
  • 문서 길이에 영향을 받음
  • 공식
    \[
    \mathrm{Score}(D, Q)
    =
    \sum_{t \in Q}
    \mathrm{IDF}(t)\cdot
    \frac{f(t, D)\cdot (k_1+1)}
    {f(t, D) + k_1\left(1-b + b\cdot\frac{|D|}{\mathrm{avg}(dl)}\right)}
    \]
    $$
    {\small
    \begin{aligned}
    t &:\ \text{질의 토큰}\\
    f(t,D) &:\ \text{문서 }D\text{에서의 등장 횟수}\\
    |D| &:\ \text{문서 길이}\\
    \mathrm{avg}(dl) &:\ \text{평균 문서 길이}\\
    k_1, b &:\ \text{BM25 파라미터}\\
    &\ \ \ \text{- } b=0:\ \text{길이 보정 안함}\\
    &\ \ \ \text{- } b=1:\ \text{길이 보정 강하게 함}\\
    &\ \ \ \text{- } b=0.75\ \text{가 흔함}\\
    &\ \ \ \text{- } k_1\uparrow:\ \text{TF 영향 오래 유지}\\
    &\ \ \ \text{- } k_1\downarrow:\ \text{TF가 빨리 포화 (반복 증가 효과 }\downarrow\text{)}\\[4pt]
    \mathrm{IDF}(t) &= \log\!\left(\frac{N-df(t)+0.5}{df(t)+0.5}\right)\\
    N &:\ \text{전체 문서 수}\\
    df(t) &:\ \text{단어 }t\text{가 등장한 문서 수}
    \end{aligned}
    }
    $$