tf-idf 문서 벡터 구축

Python으로 배우는 NLP 피처 엔지니어링

Rounak Banik

Data Scientist

n-그램 모델링

  • 차원 가중치는 해당 단어의 빈도에 따라 결정됩니다.
    • 문서에 human이 5번 등장합니다.
    • human에 해당하는 차원의 가중치는 5입니다.
Python으로 배우는 NLP 피처 엔지니어링

동기

  • 일부 단어는 모든 문서에서 매우 자주 등장합니다.
  • 우주에 대한 문서 코퍼스
    • 한 문서에서 jupiteruniverse가 각각 20회 등장합니다.
    • 다른 문서들에서는 jupiter는 드뭅니다. universe는 흔합니다.
    • 희소성을 반영해 jupiter에 더 높은 가중치를 부여합니다.
Python으로 배우는 NLP 피처 엔지니어링

활용 사례

  • 불용어 자동 탐지
  • 검색
  • 추천 시스템
  • 일부 예측 모델링에서 성능 향상
Python으로 배우는 NLP 피처 엔지니어링

TF-IDF: 용어빈도-역문서빈도

  • 용어 빈도에 비례
  • 등장 문서 수의 역함수
Python으로 배우는 NLP 피처 엔지니어링

수식

$$\red{w_{i,j}} = tf_{i,j} \cdot \log\left(\frac{N}{df_{i}}\right) $$

$$\red{w_{i,j}} \rightarrow \text{문서 } j \text{에서 용어 } i \text{의 가중치}$$

Python으로 배우는 NLP 피처 엔지니어링

수식

$$w_{i,j} = \red{tf_{i,j}} \cdot \log\left(\frac{N}{df_{i}}\right) $$

$$w_{i,j} \rightarrow \text{문서 } j \text{에서 용어 } i \text{의 가중치}$$

$$\red{tf_{i,j}} \rightarrow \text{문서 } j \text{에서 용어 } i \text{의 빈도} $$

Python으로 배우는 NLP 피처 엔지니어링

수식

$$w_{i,j} = tf_{i,j} \cdot \red{\log\left(\frac{N}{df_{i}}\right)} $$

$$w_{i,j} \rightarrow \text{문서 } j \text{에서 용어 } i \text{의 가중치}$$

$$tf_{i,j} \rightarrow \text{문서 } j \text{에서 용어 } i \text{의 빈도} $$

$$\red{N} \rightarrow \text{코퍼스의 문서 수} $$

$$\red{df_{i}} \rightarrow \text{용어 } i \text{가 포함된 문서 수}$$

Python으로 배우는 NLP 피처 엔지니어링

수식

$$w_{i,j} = tf_{i,j} \cdot \log\left(\frac{N}{df_{i}}\right) $$

$$w_{i,j} \rightarrow \text{문서 } j \text{에서 용어 } i \text{의 가중치}$$

$$tf_{i,j} \rightarrow 문서 \; j \; 에서 \; 용어 \; i \; 의 \; 빈도 $$

$$N \rightarrow 코퍼스 \; 내 \; 문서 \; 수 $$

$$df_{i} \rightarrow 용어 \; i \; 를 \; 포함한 \; 문서 \; 수 $$

예:

$\red{w_{library, document}} = 5 \cdot log(\frac{20}{8}) \approx 2 $

Python으로 배우는 NLP 피처 엔지니어링

scikit-learn으로 tf-idf

# Import TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer

# Create TfidfVectorizer object vectorizer = TfidfVectorizer()
# Generate matrix of word vectors tfidf_matrix = vectorizer.fit_transform(corpus) print(tfidf_matrix.toarray())
[[0.         0.         0.         0.         0.25434658 0.33443519
  0.33443519 0.         0.25434658 0.         0.25434658 0.
  0.76303975]
 [0.         0.46735098 0.         0.46735098 0.         0.
  0.         0.46735098 0.         0.46735098 0.35543247 0.
  0.        ]
...
Python으로 배우는 NLP 피처 엔지니어링

Vamos praticar!

Python으로 배우는 NLP 피처 엔지니어링

Preparing Video For Download...