Рекомендательная система на основе сюжетных линий

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

Rounak Banik

Data Scientist

Рекомендатель фильмов

Название Обзор
Shanghai Triad Провинциальный юноша, связанный с шанхайской криминальной семьёй, завербован дядей в космополитичный Шанхай 1930-х — прислуживать любовнице гангстера.
Cry, the Beloved Country Южноафриканский священник отправляется на поиски непутёвого сына, совершившего преступление в большом городе.
Конструирование признаков для NLP на Python

Рекомендатель фильмов

get_recommendations("The Godfather")
1178               The Godfather: Part II
44030    The Godfather Trilogy: 1972-1990
1914              The Godfather: Part III
23126                          Blood Ties
11297                    Household Saints
34717                   Start Liquidation
10821                            Election
38030                          Goodfellas
17729                   Short Sharp Shock
26293                  Beck 28 - Familjen
Name: title, dtype: object
Конструирование признаков для NLP на Python

Шаги

  1. Предобработка текста
  2. Формирование tf-idf векторов
  3. Построение матрицы косинусного сходства
Конструирование признаков для NLP на Python

Функция рекомендателя

  1. Принять название фильма, матрицу косинусного сходства и серию индексов в качестве аргументов.
  2. Извлечь попарные оценки косинусного сходства для фильма.
  3. Отсортировать оценки по убыванию.
  4. Вывести названия с наибольшими оценками.
  5. Исключить наивысшую оценку сходства (равную 1).
Конструирование признаков для NLP на Python

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

# Import TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer

# Create TfidfVectorizer object
vectorizer = TfidfVectorizer()

# Generate matrix of tf-idf vectors
tfidf_matrix = vectorizer.fit_transform(movie_plots)
Конструирование признаков для NLP на Python

Построение матрицы косинусного сходства

# Import cosine_similarity
from sklearn.metrics.pairwise import cosine_similarity

# Generate cosine similarity matrix
cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)
array([[1.        , 0.27435345, 0.23092036, ..., 0.        , 0.        ,
        0.00758112],
       [0.27435345, 1.        , 0.1246955 , ..., 0.        , 0.        ,
        0.00740494],
       ...,
       [0.00758112, 0.00740494, 0.        , ..., 0.        , 0.        ,
        1.        ]])
Конструирование признаков для NLP на Python

Функция linear_kernel

  • Длина tf-idf вектора равна 1
  • Косинусное сходство двух tf-idf векторов равно их скалярному произведению.
  • Это существенно сокращает время вычислений.
  • Используйте linear_kernel вместо cosine_similarity.
Конструирование признаков для NLP на Python

Построение матрицы косинусного сходства

# Import cosine_similarity
from sklearn.metrics.pairwise import linear_kernel

# Generate cosine similarity matrix
cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)
array([[1.        , 0.27435345, 0.23092036, ..., 0.        , 0.        ,
        0.00758112],
       [0.27435345, 1.        , 0.1246955 , ..., 0.        , 0.        ,
        0.00740494],
       ...,
       [0.00758112, 0.00740494, 0.        , ..., 0.        , 0.        ,
        1.        ]])
Конструирование признаков для NLP на Python

Функция get_recommendations

get_recommendations('The Lion King', cosine_sim, indices)
7782                      African Cats
5877    The Lion King 2: Simba's Pride
4524                         Born Free
2719                          The Bear
4770     Once Upon a Time in China III
7070                        Crows Zero
739                   The Wizard of Oz
8926                   The Jungle Book
1749                 Shadow of a Doubt
7993                      October Baby
Name: title, dtype: object
Конструирование признаков для NLP на Python

Давайте потренируемся!

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

Preparing Video For Download...