Автор оригинала: Pankaj Kumar.
Создание модели TF-IDF с нуля в Python
Модель TF-IDF – это способ представлять слова в числовых значениях. “Привет, как ты?” , вы можете легко понять, что я пытаюсь спросить вас, но компьютеры хороши с цифрами, а не со словами.
Для того, чтобы компьютер имел смысл предложений и слов, мы представляем эти предложения, используя номера, надеясь сохранить контекст и значение.
Модель TF-IDF – это один из таких способов, чтобы представлять слова в числовых значениях. TF-IDF обозначает «Термин частота – обратная частота документа» Отказ
Этот метод удаляет недостатки, с которыми сталкиваются сумка моделей слов. Он не назначает равное значение всем словам, поэтому важные слова, которые возникают несколько раз, будут присвоены высокие веса.
В этой статье мы создадим представление TF-IDF некоторого образец текста Corpus Step за шагом с нуля.
Введение в TF-IDF
TF-IDF – это продукт терминной частоты и обратной частоты документа. Вот формула для расчета TF-IDF.
Частота TF-IDF (TF) * Обратная частота документа (IDF)
Что такое термин частота и обратная частота документа, которую вы спрашиваете? Посмотрим, что они на самом деле.
Что такое термин частота?
Это мера частоты слов в документе. Это соотношение количества раз, когда слово появляется в документе по сравнению с общем количеством слов в этом документе.
TF (T, D) т в D/количество слов в D
Что такое обратная частота документа?
Слова, которые редко встречаются в корпусе, имеют высокую оценку IDF. Это журнал соотношения количества документов на количество документов, содержащих слово.
Мы принимаем журнал этого соотношения, потому что когда корпус становится большим значением IDF, могут получить большие, вызывая его взорваться, следовательно, воспользовавшись журналом.
Мы не можем разделить на 0, мы сглаживаем значение, добавив 1 к знаменателю.
IDF (T) (N/(DF + 1))
Шаг за шагом Реализация модели TF-IDF
Давайте направимся на реализацию части модели TF-IDF в Python.
1. Препроцировать данные
Мы начнем с предварительной обработки текстовых данных и сделайте словарный набор слов в наших учебных данных и назначить уникальный индекс для каждого слова в комплекте.
#Importing required module import numpy as np from nltk.tokenize import word_tokenize #Example text corpus for our tutorial text = ['Topic sentences are similar to mini thesis statements.\ Like a thesis statement, a topic sentence has a specific \ main point. Whereas the thesis is the main point of the essay',\ 'the topic sentence is the main point of the paragraph.\ Like the thesis statement, a topic sentence has a unifying function. \ But a thesis statement or topic sentence alone doesn't guarantee unity.', \ 'An essay is unified if all the paragraphs relate to the thesis,\ whereas a paragraph is unified if all the sentences relate to the topic sentence.'] #Preprocessing the text data sentences = [] word_set = [] for sent in text: x = [i.lower() for i in word_tokenize(sent) if i.isalpha()] sentences.append(x) for word in x: if word not in word_set: word_set.append(word) #Set of vocab word_set = set(word_set) #Total documents in our corpus total_documents = len(sentences) #Creating an index for each word in our vocab. index_dict = {} #Dictionary to store index for each word i = 0 for word in word_set: index_dict[word] = i i += 1
2. Создать словарь для подсчета
Затем мы создаем словарь, чтобы сохранить количество количества документов, содержащих данное слово.
#Create a count dictionary def count_dict(sentences): word_count = {} for word in word_set: word_count[word] = 0 for sent in sentences: if word in sent: word_count[word] += 1 return word_count word_count = count_dict(sentences)
3. Определите функцию для расчета срока частоты
Теперь давайте определим функцию, чтобы сначала считать термин частоту (TF).
#Term Frequency def termfreq(document, word): N = len(document) occurance = len([token for token in document if token == word]) return occurance/N
4. Определите функцию Рассчитать обратную частоту документа
Теперь, с набором функции частоты термина, давайте определим другую функцию для обратной частоты документа (IDF)
#Inverse Document Frequency def inverse_doc_freq(word): try: word_occurance = word_count[word] + 1 except: word_occurance = 1 return np.log(total_documents/word_occurance)
5. Объединение функций TF-IDF
Давайте создадим другую функцию для объединения функций TF, так и IDF сверху, чтобы дать нам наш желаемый выход для модели TF-IDF.
def tf_idf(sentence): tf_idf_vec = np.zeros((len(word_set),)) for word in sentence: tf = termfreq(sentence,word) idf = inverse_doc_freq(word) value = tf*idf tf_idf_vec[index_dict[word]] = value return tf_idf_vec
6. Примените модель TF-IDF на наш текст
Реализация модели TF-IDF в Python завершена. Теперь давайте передам текстовый корпус к функции и посмотрите, как выглядит выходной вектор.
#TF-IDF Encoded text corpus vectors = [] for sent in sentences: vec = tf_idf(sent) vectors.append(vec) print(vectors[0])
Теперь, если модель сталкивается с неизвестным словом, отличным от пролоса, он даст нам ключевую ошибку, так как мы не учитываем никаких неизвестных токенов.
Цель этой статьи – продемонстрировать, как TF-IDF на самом деле работает под капотом.
Вы можете найти ноутбук для этого руководства на моем репозитории GitHub здесь Отказ
Не стесняйтесь реализовать и изменить код, используя новый и более универсальный текстовый корпус.
Заключение
В этой статье мы реализовали модель TF-IDF с нуля в Python. Мы также сосредоточились на понимании какой-то теории позади модели и, наконец, закодировали наши собственные предложения, используя функции, которые мы создали.
Счастливое обучение!