Feature Extraction From Text(텍스트 특징 추출)
- 대부분의 일반적인 머신러닝은 원시 텍스트를 이해하거나 받아들일 수 없다.
- 대신 수치적 특성을 전달하기 위해 원시 텍스트에서 특징을 추출해야 한다.
- 각 단어가 나타나는 횟수, 카운트 벡터화, 단어 빈도, 역 문서 빈도
카운트 벡터화
- 모든 중복되지 않는 단어(특징)의 등장 횟수를 센다.
- 이를 각 문서(=메시지) 별로 정리[한계]
- 최소 표현으로 인한 리소스 낭비
- 빈도적 접근에 따른 문제
- ⇒ 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}
}
$$
'Study > NLP' 카테고리의 다른 글
| [NLP] 분류 평가 기준&ConfusionMatrix&Regression(Linear, Logistic) (0) | 2026.01.10 |
|---|---|
| [NLP] Stopward&NER (0) | 2026.01.07 |
| [NLP] Tokenization, Stemming & Lemmatization (0) | 2026.01.06 |