Как модель tf-idf обрабатывает невидимые слова во время тестовых данных? - PullRequest
0 голосов
/ 14 октября 2019

Я прочитал много блогов, но не был удовлетворен ответами. Предположим, я тренирую модель tf-idf на нескольких документах, например:

   " John like horror movie."
   " Ryan watches dramatic movies"
    ------------so on ----------

Я использую эту функцию:

   from sklearn.feature_extraction.text import TfidfTransformer
   count_vect = CountVectorizer()
   X_train_counts = count_vect.fit_transform(twenty_train.data)
   X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
   print((X_train_counts.todense()))
   # Gives count of words in each document

   But it doesn't tell which word? How to get words as headers in X_train_counts 
  outputs. Similarly in X_train_tfidf ?

Таким образом, вывод X_train_tfidf будет представлять собой матрицу с оценкой tf-idf:

     Horror  watch  movie  drama
doc1  score1  --    -----------
doc2   ------------------------

Это правильно?

Что делает fit и что делает transformation? В sklearn упоминается, что:

метод fit (..) для подгонки нашего оценщика к данным и, во-вторых, метод transform (..) для преобразования нашей подсчитываемой матрицы в представление tf-idf. Что означает estimator to the data?

Теперь предположим, что приходит новый тестовый документ:

    " Ron likes thriller movies"

Как преобразовать этот документ в tf-idf? Мы не можем преобразовать это в TF-IDF правильно? Как обработать слово thriller, которого нет в документе поезда.

1 Ответ

1 голос
/ 14 октября 2019

принимая два текста в качестве входных данных

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer

text = ["John like horror movie","Ryan watches dramatic movies"]

count_vect = CountVectorizer()
tfidf_transformer = TfidfTransformer()
X_train_counts = count_vect.fit_transform(text)
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)

pd.DataFrame(X_train_tfidf.todense(), columns = count_vect.get_feature_names())

o / p

        dramatic    horror      john        like        movie       movies      ryan    watches
   0    0.000000    0.471078    0.471078    0.471078    0.471078    0.335176    0.000000    0.000000
   1    0.363788    0.000000    0.000000    0.000000    0.000000    0.776515    0.363788    0.363788

Теперь, проверяя его на наличие нового комментария, нам нужно использовать функцию преобразования,Слово, которое находится вне словаря, будет игнорироваться при его векторизации.

new_comment = ["ron don't like dramatic movie"]

pd.DataFrame(tfidf_transformer.transform(count_vect.transform(new_comment)).todense(), columns = count_vect.get_feature_names())


    dramatic    horror  john    like    movie   movies  ryan    watches
0   0.57735      0.0    0.0    0.57735  0.57735   0.0   0.0      0.0

, если вы хотите использовать словарь определенного слова, подготовьте список слов, которые вы хотите использовать, и продолжайте добавлять к нему новое слово. список и список передачи CountVectorizer

 vocabulary = ['dramatic', 'movie','horror']
 vocabulary.append('Thriller')
 count_vect = CountVectorizer(vocabulary = vocabulary)
 cont_vect.fit_transform(text)
...