Побудова векторів документів tf-idf

Інженерія ознак для NLP у Python

Rounak Banik

Data Scientist

Моделювання n-грам

  • Вага виміру залежить від частоти слова, що йому відповідає.
    • У документі слово human трапляється п'ять разів.
    • Вимір для human має вагу 5.
Інженерія ознак для NLP у Python

Мотивація

  • Деякі слова часто зустрічаються в усіх документах
  • Корпус документів про всесвіт
    • В одному документі jupiter і universe трапляються по 20 разів.
    • jupiter рідкісне в інших документах. universe — поширене.
    • Надайте більшої ваги jupiter через його унікальність.
Інженерія ознак для NLP у Python

Застосування

  • Автоматично виявляти стоп-слова
  • Пошук
  • Рекомендаційні системи
  • Краще прогнозування в окремих задачах
Інженерія ознак для NLP у Python

Частота терміна — обернена частота документа

  • Пропорційно частоті терміна
  • Обернено залежить від кількості документів, де він трапляється
Інженерія ознак для NLP у Python

Математична формула

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

$$\red{w_{i,j}} \rightarrow \text{вага терміна } i \text{ у документі } j$$

Інженерія ознак для NLP у Python

Математична формула

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

$$w_{i,j} \rightarrow \text{вага терміна } i \text{ у документі } j$$

$$\red{tf_{i,j}} \rightarrow \text{частота терміна } i \text{ у документі } j $$

Інженерія ознак для NLP у Python

Математична формула

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

$$w_{i,j} \rightarrow \text{вага терміна } i \text{ у документі } j$$

$$tf_{i,j} \rightarrow \text{частота терміна } i \text{ у документі } j $$

$$\red{N} \rightarrow \text{кількість документів у корпусі} $$

$$\red{df_{i}} \rightarrow \text{кількість документів, що містять термін } i$$

Інженерія ознак для NLP у Python

Математична формула

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

$$w_{i,j} \rightarrow \text{вага терміна } i \text{ у документі } j$$

$$tf_{i,j} \rightarrow term \; frequency \; of \; term \; i \; in \; document \; j $$

$$N \rightarrow number \; of \; documents \; in \; the \; corpus $$

$$df_{i} \rightarrow number \; of \; documents \; cotaining \; term \; i$$

Приклад:

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

Інженерія ознак для NLP у Python

tf-idf у scikit-learn

# 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.        ]
...
Інженерія ознак для NLP у Python

Давайте потренуємось!

Інженерія ознак для NLP у Python

Preparing Video For Download...