- Tổng quan hệ thống:
- Xây dựng hệ thông hybrid Movie Recommendation System để đề xuất phim cho user thông qua Content-based Recommendation System.
- Các thuật toán được sử dụng:
- Giải thích các thuật toán:
-
TF-IDF:

- Term Frequency - Inverse Document Frequency là một phương pháp thống kê được sử dụng phổ biến trong NLP cổ điển và information retrieval để đánh giá mức độ quan trọng của từ vựng (word) trong một tài liệu so với toàn bộ tập tài liệu..
- TF: Term Frequency:
- Đo lường tần suất xuất hiện của 1 từ trong 1 tài liệu
- TF = Số lần xuất hiện từ ‘X’ trong tài liệu / Tổng số từ đang có trong tài liệu
- TF cao → từ xuất hiện nhiều trong tài liệu
- IDF: Inverse Document Frequency:
- Đo lường mức độ phổ biến / hiếm của 1 từ trong toàn bộ các tài liệu.
- IDF = log( Tổng số lượng tài liệu hiện có / số tài liệu có chưa từ ‘X’)
- IDF cao → Từ đó hiếm xuất hiện.
- TF-IDF: Term Frequency - Inverse Document Frequency:
- TF-IDF = TF * IDF
- Từ xuất hiện nhiều trong tài liệu đó → TF cao
- Từ xuất hiện ít trong các tài liệu khác → IDF cao
-
Cosine Similarity:

- Cosine similarity là một phương pháp tính độ tương đồng giữa 2 vector. Nó đo góc giữa 2 vector đó, nếu 2 vector gần nhau (nội dung tương tự nhau) thì hướng của vector tương tự → góc của 2 vector nhỏ → cosine similarity cao.
- Thường được dùng để so sánh văn bản sau khi được vector hóa (vectorizer) bằng TF-IDF hoặc word embeddings (Encoding),…
- Consine similarity = tích vô hướng / tích độ dài giữa 2 vector
- Giá trị thu được sẽ nằm trong khoảng [-1, 1].
-
Tokenizer:
- Tokenizer là bước tiền xử lý trong NLP, giúp chia nhỏ văn bản thành các đơn vị nhỏ hơn để mô hình có thể hiểu và xử lý, các đơn vị đó được gọi là token.
- Tokenizer giúp giảm kích thước tự vựng, xử lý những từ chưa từng được thấy, giảm chi phí tính toán và tăng độ chính xác của mô hình.
- Ví dụ:
- ‘Phân tích dữ liệu’
- Token:
- [Phân, tích, dữ, liệu]
- [Phân tích, dữ liệu]
- …
-
Vector Embedding:

- Vector embedding (hay embedding) là cách biểu diễn (nhúng) các dữ liệu phức tạp, phi cấu trúc (hình ảnh, văn bảng) bằng các vector số trong không gian nhiều chiều.
- Embedding là một tập hợp các vector ngữ nghĩa:
-
Embedding lưu trữ ngữ nghĩa (semantic meaning) hoặc đặc tính của dữ liệu.
-
1 token được nhúng vào không gian tạo thành 1 vector số thực trong không gian nhiều chiều.
- VD:
- “cat” -> [0.21, 0.54, …. , -0.33]
- “dog” -> [0.19, 0.60, … , -0.25]
-
Các token được nhúng sao cho chúng có ngữ nghĩa, ngữ cảnh giống nhau sẽ có vector gần nhau, khoảng cách giữa các vector biểu diễn mức độ quan hệ giữ các token

-
Sentence Transformer (keepitreal//vietnamese-sbert):
- Đây là 1 quy trình:
- Data → Transformer Encoder + pooling → sentence embedding.
- Dataflows của hệ thống:

-
Data Crawling:
- Sử dụng Scrapy (Spider) để crawl data từ web animehay.life
- Trong quá trình crawl, sẽ xử lý dữ liệu như sau:
- Các nội dung sẽ lấy:
- Tên Phim: Tên của phim
- Tên Khác: Tên khác của phim được hiển thị (nếu có, không thì trả về rỗng)
- Nội Dung: Nội dung của phim
- Thể Loại: Các thể loại của phim
- Rating: Điểm đánh giá của phim
- Số lượng đánh giá: Số lượng đánh giá của người xem
- Năm Phát Hành: Năm phim được phát hành
- Image: Hình nền của phim
- Tiền xử lý trong quá trình crawl:
- Các content nằm rời rạc sẽ được gom lại với nhau.
- Lọc bỏ phim có thể loại CN Animation (đây là phim Trung Quốc nên không lấy).
- Chuyển đổi các kiểu dữ liệu:
- Rating và số lượng đánh giá được chuyển về Float và Integer.
- Năm Phát Hành chuyển về integer.
- Gộp các thể loại rời rạc của phim lại thành 1 chuỗi (được phân cách nhau bởi dấu ‘,’ ).
- Sau khi cào xong dữ liệu (thu được khoảng hơn 4k2 phim). Lưu lại dưới dạng file CSV (anime_movie.csv).
-
Data Preprocessing:
- Tiền xử lý dữ liệu trước khi thực hiện tính toán:
- Loại bỏ các giá trị null / NaN hoặc các giá trị lỗi.
- Tiền xử lý ‘Thể Loại’ feature:
- Thay khoảng trắng bằng ‘_’ để nối giá trị từng thể loại với nhau
- VD: Hài Hước, Hành Động → Hài_Hước, Hành_Động.
- Thay ‘,’ Bằng khoảng trắng
- VD: Hài_Hước, Hành_Động → Hài_Hước Hành_Động.
- Gộp các đặc trưng: ‘Tên Phim’, ‘Nội Dung’ và ‘Thể Loại’ thành một đặc trưng mới là ‘movie_content_data’. Sau đó thực hiện tính toán trên đặc trưng mới này.
-
Vectorizer - Vector Embedding:
- Tách token của ‘movie_content_data’ feature và input đầu vào của user.
- TF-IDF:
- Tạo một vectorizer từ TF-IDF.
- Vector hóa ‘movie_content_data’ bằng vectorizer, tạo thành một ma trận số: movie content vectorizer.
- Vector hóa dữ liệu user nhập vào thành một ma trận số: user input vectorizer.
- Sentence Transformers:
-
Cosine Similarity Score:
-
Deploy demo into Streamlit:
-
So sánh mức độ hiệu quả:
-
TF-IDF:
-
Sentence Transformers:
→ TF-IDF hoạt động tốt hơn Sentence Transformers trong trường hợp trên.
⇒ 1 số định hướng giúp sentence transformers hoạt động tốt hơn (có thể tốt hơn cả TF-IDF):