Filtrowanie oparte na treści
Reprezentacje elementów TF-IDF, podobieństwo cosinusowe, tworzenie systemu rekomendacji filmów na podstawie metadanych.
Filtrowanie oparte na treści to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Czym jest filtrowanie oparte na treści?
Filtrowanie oparte na treści rekomenduje elementy podobne do tych, które użytkownik już polubił, na podstawie własnych cech elementów (tekstu, gatunku, tagów). W przeciwieństwie do filtrowania kolaboracyjnego nie wymaga danych o innych użytkownikach, więc omija problem zimnego startu nowych elementów.
Elementy jako wektory cech
Główna idea polega na przekształceniu każdego elementu w wektor liczbowy opisujący jego treść, a następnie zmierzeniu podobieństwa między wektorami. W przypadku opisów tekstowych klasyczną metodą tworzenia takich wektorów jest TF-IDF.
Czym jest TF-IDF?
TF-IDF (Term Frequency-Inverse Document Frequency) przypisuje słowom wagi zależnie od tego, jak często występują w danym elemencie, jednocześnie zmniejszając wagę słów wspólnych dla wszystkich elementów. Rzadkie, charakterystyczne słowa otrzymują wysokie wagi, dzięki czemu można uchwycić cechy wyróżniające element.
TfidfVectorizer
scikit-learn przekształca listę opisów elementów w macierz TF-IDF za pomocą dwóch wierszy kodu.
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(stop_words="english")
tfidf_matrix = vectorizer.fit_transform(df["description"])Zrozumienie kształtu macierzy
Obiekt tfidf_matrix ma kształt (n_items, n_terms): jeden wiersz przypada na każdy element, a jedna kolumna na każde unikalne słowo w słowniku. Macierz jest rzadka, ponieważ większość elementów używa tylko części wszystkich słów.
print(tfidf_matrix.shape) # (n_items, vocabulary_size)Strojenie wektoryzatora
Przydatne parametry to: stop_words, który usuwa często występujące słowa, max_features, który ogranicza rozmiar słownika, oraz ngram_range=(1,2), który uwzględnia frazy dwuwyrazowe i pozwala uzyskać bogatszy zestaw cech.
vectorizer = TfidfVectorizer(
stop_words="english",
max_features=5000,
ngram_range=(1, 2)
)Podobieństwo cosinusowe między elementami
Należy obliczyć podobieństwo parami dla wszystkich elementów. Wynikiem jest macierz n_items x n_items, w której każda komórka określa podobieństwo opisów dwóch elementów.
from sklearn.metrics.pairwise import cosine_similarity
cosine_sim = cosine_similarity(tfidf_matrix)
print(cosine_sim.shape) # (n_items, n_items)Skrót z użyciem jądra liniowego
Ponieważ wektory TF-IDF są domyślnie normalizowane w normie L2, linear_kernel daje ten sam wynik co podobieństwo cosinusowe, ale działa szybciej. Jest to częsta optymalizacja w przypadku dużych katalogów.
from sklearn.metrics.pairwise import linear_kernel
cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)Mapowanie tytułów na indeksy
Aby wyszukiwać elementy po nazwie, należy zbudować indeks odwrotny mapujący tytuł na pozycję wiersza.
indices = pd.Series(df.index, index=df["title"]).drop_duplicates()Funkcja get_recommendations
Dla podanego tytułu należy pobrać odpowiedni wiersz podobieństwa, posortować go malejąco, pominąć sam element i zwrócić najtrafniejsze wyniki.
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]Zalety i ograniczenia
Zalety: działa dla zupełnie nowych elementów, a rekomendacje można wyjaśnić („ponieważ zawiera te słowa”).
Ograniczenia: pozostaje w obrębie znanych upodobań użytkownika (nadmierna specjalizacja) i nie potrafi odkrywać zaskakujących rekomendacji z innych gatunków tak jak filtrowanie kolaboracyjne.
Szybki test
Sprawdź swoją wiedzę na temat filtrowania opartego na treści.
Podsumowanie
Zbudowano filtrowanie oparte na treści: TfidfVectorizer przekształca opisy w macierz (n_items, n_terms), cosine_similarity porównuje elementy, a get_recommendations zwraca najbardziej podobne elementy (pomijając sam element). Metoda radzi sobie z problemem zimnego startu, ale grozi nadmierną specjalizacją. Następny temat: systemy hybrydowe i metryki oceny.
Często zadawane pytania
Czy lekcja „Filtrowanie oparte na treści” jest bezpłatna?
Tak — pełny tekst „Filtrowanie oparte na treści” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Filtrowanie oparte na treści”?
Reprezentacje elementów TF-IDF, podobieństwo cosinusowe, tworzenie systemu rekomendacji filmów na podstawie metadanych. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Filtrowanie oparte na treści”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Filtrowanie kolaboratywne: oparte na użytkownikach i elementach
- Faktoryzacja macierzy za pomocą SVD
- Filtrowanie oparte na treści
- Systemy hybrydowe i metryki oceny