0Pricing
Learn AI with Python · Урок

Фильтрация на основе содержания

Представления объектов TF-IDF, косинусное сходство, создание рекомендательной системы фильмов по метаданным

«Фильтрация на основе содержания» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Что такое фильтрация на основе содержимого

Фильтрация на основе содержимого рекомендует объекты, похожие на те, которые пользователь уже оценил положительно, основываясь на собственных признаках объектов: тексте, жанре и тегах. В отличие от коллаборативной фильтрации, этому подходу не нужны данные о других пользователях, поэтому он обходит проблему холодного старта объектов.

Объекты как векторы признаков

Основная идея такова: преобразовать каждый объект в числовой вектор, описывающий его содержимое, а затем измерить сходство между векторами. Для текстовых описаний классическим способом построения таких векторов является TF-IDF.

Что такое TF-IDF

TF-IDF (частота термина — обратная частота документа) повышает вес слов в зависимости от того, как часто они встречаются в объекте, и снижает вес слов, общих для всех объектов. Редкие отличительные слова получают высокий вес и отражают уникальные особенности объекта.

TfidfVectorizer

scikit-learn преобразует список описаний объектов в матрицу TF-IDF всего за две строки.

from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer(stop_words="english")
tfidf_matrix = vectorizer.fit_transform(df["description"])

Понимание формы матрицы

tfidf_matrix имеет форму (количество объектов, количество терминов): одна строка на объект и один столбец на каждое уникальное слово в словаре. Матрица разреженная, поскольку большинство объектов используют лишь небольшую часть всех слов.

print(tfidf_matrix.shape)  # (n_items, vocabulary_size)

Настройка векторизатора

Полезные параметры: stop_words удаляет распространённые слова, max_features ограничивает размер словаря, а ngram_range=(1,2) добавляет двухсловные фразы для более подробного описания признаков.

vectorizer = TfidfVectorizer(
    stop_words="english",
    max_features=5000,
    ngram_range=(1, 2)
)

Косинусное сходство между объектами

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

from sklearn.metrics.pairwise import cosine_similarity

cosine_sim = cosine_similarity(tfidf_matrix)
print(cosine_sim.shape)  # (n_items, n_items)

Ускорение с помощью линейного ядра

Поскольку векторы TF-IDF по умолчанию нормализуются по L2, linear_kernel даёт тот же результат, что и косинусное сходство, но работает быстрее. Это распространённая оптимизация для больших каталогов.

from sklearn.metrics.pairwise import linear_kernel

cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)

Сопоставление названий с индексами

Чтобы находить объект по названию, создайте обратный индекс, сопоставляющий название с позицией строки.

indices = pd.Series(df.index, index=df["title"]).drop_duplicates()

Функция get_recommendations

Получив название, найдите соответствующую строку сходства, отсортируйте её по убыванию, пропустите сам объект и верните наиболее подходящие результаты.

def get_recommendations(title, n=10):
    idx = indices[title]
    scores = list(enumerate(cosine_sim[idx]))
    scores = sorted(scores, key=lambda x: x[1], reverse=True)
    top = scores[1:n+1]          # skip itself at position 0
    item_idxs = [i for i, _ in top]
    return df["title"].iloc[item_idxs]

Преимущества и ограничения

Преимущества: подход работает с совершенно новыми объектами, а рекомендации легко объяснить («потому что у них есть общие слова»).

Ограничения: рекомендации остаются в пределах известных предпочтений пользователя, что приводит к чрезмерной специализации, и не позволяют находить неожиданные удачные объекты других жанров так, как это может коллаборативная фильтрация.

Проверка знаний

Проверьте свои знания о фильтрации на основе содержимого.

Итоги

Вы создали фильтрацию на основе содержимого: TfidfVectorizer преобразует описания в матрицу (количество объектов, количество терминов), cosine_similarity сравнивает объекты, а get_recommendations возвращает наиболее похожие объекты, пропуская сам объект. Подход справляется с холодным стартом, но может привести к чрезмерной специализации. Далее: гибридные системы и метрики оценки.

Часто задаваемые вопросы

Урок «Фильтрация на основе содержания» бесплатный?

Да — полный текст урока «Фильтрация на основе содержания» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Фильтрация на основе содержания»?

Представления объектов TF-IDF, косинусное сходство, создание рекомендательной системы фильмов по метаданным Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Фильтрация на основе содержания»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Коллаборативная фильтрация: на основе пользователей и объектов
  2. Матричная факторизация с SVD
  3. Фильтрация на основе содержания
  4. Гибридные системы и метрики оценки
← Назад к Learn AI with Python