Построение векторов документов tf-idf

Конструирование признаков для NLP на Python

Rounak Banik

Data Scientist

Модель n-грамм

  • Вес измерения зависит от частоты соответствующего слова.
    • Документ содержит слово human в пяти местах.
    • Измерение, соответствующее human, имеет вес 5.
Конструирование признаков для NLP на Python

Мотивация

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

Применение

  • Автоматическое определение стоп-слов
  • Поиск
  • Рекомендательные системы
  • Повышение качества предиктивных моделей в ряде случаев
Конструирование признаков для NLP на Python

TF-IDF: частота термина — обратная частота документа

  • Пропорционально частоте термина
  • Обратная функция от числа документов, в которых он встречается
Конструирование признаков для 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...