Xây dựng bộ gợi ý dựa trên cốt truyện

Khai thác đặc trưng cho NLP bằng Python

Rounak Banik

Data Scientist

Bộ gợi ý phim

Tựa phim Tóm tắt
Shanghai Triad Một cậu bé tỉnh lẻ, họ hàng với gia đình tội phạm Thượng Hải, được chú đưa lên Thượng Hải thập niên 1930 để làm hầu gái cho tình nhân của trùm băng.
Cry, the Beloved Country Một mục sư Nam Phi đi tìm người con trai hư hỏng đã phạm tội ở thành phố lớn.
Khai thác đặc trưng cho NLP bằng Python

Bộ gợi ý phim

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
Khai thác đặc trưng cho NLP bằng Python

Các bước

  1. Tiền xử lý văn bản
  2. Tạo vector tf-idf
  3. Tạo ma trận tương đồng cosine
Khai thác đặc trưng cho NLP bằng Python

Hàm gợi ý

  1. Nhận tựa phim, ma trận tương đồng cosine và series chỉ mục làm tham số.
  2. Trích điểm tương đồng cosine cặp đôi cho phim đó.
  3. Sắp xếp điểm giảm dần.
  4. Trả về tựa phim có điểm cao nhất.
  5. Bỏ qua điểm cao nhất (bằng 1).
Khai thác đặc trưng cho NLP bằng Python

Tạo vector 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)
Khai thác đặc trưng cho NLP bằng Python

Tạo ma trận độ tương đồng cosine

# 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.        ]])
Khai thác đặc trưng cho NLP bằng Python

Hàm linear_kernel

  • Độ lớn của vector tf-idf là 1
  • Điểm cosine giữa hai vector tf-idf là tích vô hướng của chúng.
  • Có thể tăng tốc tính toán đáng kể.
  • Dùng linear_kernel thay cho cosine_similarity.
Khai thác đặc trưng cho NLP bằng Python

Tạo ma trận độ tương đồng cosine

# 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.        ]])
Khai thác đặc trưng cho NLP bằng Python

Hàm 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
Khai thác đặc trưng cho NLP bằng Python

Ayo berlatih!

Khai thác đặc trưng cho NLP bằng Python

Preparing Video For Download...