В этой многосекционной итеративной серии вы познакомитесь с лексической обработкой: представление TF-IDF (частота терминов — обратная частота документа). Является продолжением 13 части серии.

Представление мешка слов, хотя и эффективное, является очень наивным способом представления текста. Это зависит только от частоты слов в словах документа. Как бы то ни было, не могли бы вы сказать, что репрезентация слов не должна зависеть исключительно от частотности слов? Есть еще один метод адресации документов в матричном дизайне, который более разумно обращается к слову. Это представление известно как TF-IDF, и оно неоднократно нравилось большинству исследователей данных.

Термин TF представляет частоту термина, а термин IDF представляет r обратную частоту документа. Как это может быть не то же самое, что представление мешка слов?

Представление TF-IDF, также называемое моделью TF-IDF, учитывает значимость каждого слова. В модели мешка слов каждое слово считается одинаково значимым, что, очевидно, неверно.

Расчет веса TF-IDF для термина в формуле документа:

Журнал в приведенном выше уравнении имеет основание 10. В настоящее время оценка TF-IDF для любого термина в документе является результатом только двух терминов:

Более высокие веса присваиваются терминам, регулярно встречающимся в документе и редко встречающимся среди всех документов. С другой стороны, низкая оценка присваивается терминам, которые являются общими для всех документов.

А теперь попробуйте пройти следующий тест. Вопросы 1–3 основаны на следующем наборе документов:

Документ 1: «В Fume, Бангалор есть действительно отличные места для отдыха на террасе и потрясающий вид на горизонт Бангалора»
Документ 2: «Пиво в Fume, Бангалор было великолепно. Мой лучший выбор — пшеничное пиво и пиво-эль».
Документ 3: «Фьюм, Бангалор — лучший вид в Бангалоре».

Обратите внимание, что TF-IDF выполняется по-разному в разных диалектах и ​​пакетах. При представлении показателя TF некоторые люди используют только частоту термина, например, они не делят частоту термина на общее количество терминов. При представлении оценки IDF некоторые люди используют натуральный журнал, а не журнал с основанием 10. Из-за этого вы можете увидеть разные оценки одних и тех же терминов в одном и том же наборе документов. Но цель остается прежней — присвоить вес в соответствии с важностью слова.

Как TF-IDF реализован в Python?

Блокнот Jupyter, чтобы следовать:

Данные спам-сообщений, используемые в блокноте:



Теперь попробуйте выполнить следующее упражнение по программированию, чтобы укрепить свои навыки.

В) Практические вопросы по модели TF-IDF

## TF-IDF model

### Description
You are given a set of documents in the code below. Calculate the tf-idf matrix and output the score of the term 'belt' in document two.

### Execution Time Limit
10 seconds
import pandas as pd
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
from sklearn.feature_extraction.text import TfidfVectorizer

# consider the following set of documents
documents = ["The mentor stumbled on once more, with heavier wreaths of fog shutting round it as it started the plunge.",
             "The guard soon replaced his blunderbuss in his arm-chest, and, having looked to the rest of its contents, and having looked to the supplementary pistols that he wore in his belt, focused on a more modest chest underneath his seat, wherein there were a couple of smith's instruments, several lights, and a  tinder-box.",
             "For he was outfitted with that culmination that assuming the mentor lights had been blown and stomped out, which did periodically occur, he had exclusively to quiet himself down inside, keep the stone and steel starts well off the straw, and get a light no sweat (assuming that he were fortunate) shortly.",
             "Jerry, abandoned in the fog and obscurity, got off in the meantime, not exclusively to facilitate his spent pony, however, to clear the mud off of his face, and shake the wet out of his cap overflow, which may be equipped for holding about a portion of a gallon.",
             "In the wake of remaining with the harness over his vigorously sprinkled arm, until the wheels of the mail were as of now not inside hearing and the night was very still once more, he went to stroll down the hill."]       

# preprocess the document
def preprocess(document):
    # 'converts document to lower case, eliminates stopwords and stems words'
    # change sentence to lower case
    document = document.lower()

    # tokenize into words
    words = word_tokenize(document)

    # remove stop words
    words = [word for word in words if word not in stopwords.words("english")]
    
    # stem
    stemmer = PorterStemmer()
    words = [stemmer.stem(word) for word in words]
    
    # join words to make sentence
    document = " ".join(words)
    
    return document

# preprocess reports utilizing the preprocess capability and store the records again in a nlist
documents = [preprocess(document) for document in documents]

# create tf-idf matrix
vectorizer = TfidfVectorizer()
tfidf_model = vectorizer.fit_transform(documents)
tf_idf = pd.DataFrame(tfidf_model.toarray(), columns = vectorizer.get_feature_names())

# check score of 'belt' in document two
print(tf_idf)

# extract score
score = 0.175006

# print the score of the term ''
print(round(score, 4))

В следующем разделе мы обучим алгоритм машинного обучения на наборе данных спама для создания детектора спама с использованием библиотеки NLTK.

Предыдущая часть серии