Рубрики
Без рубрики

Создание модели TF-IDF с нуля в Python

Модель TF-IDF – это способ представлять слова в числовых значениях. «Привет, как ты?», Вы можете легко понять, что я пытаюсь вас спросить

Автор оригинала: 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 закодирована вектор

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

Цель этой статьи – продемонстрировать, как TF-IDF на самом деле работает под капотом.

Вы можете найти ноутбук для этого руководства на моем репозитории GitHub здесь Отказ

Не стесняйтесь реализовать и изменить код, используя новый и более универсальный текстовый корпус.

Заключение

В этой статье мы реализовали модель TF-IDF с нуля в Python. Мы также сосредоточились на понимании какой-то теории позади модели и, наконец, закодировали наши собственные предложения, используя функции, которые мы создали.

Счастливое обучение!