Matrix Factorization Là Gì, Một Tiếp Cận Đa Quan Hệ Cho Hệ Thống Gợi Ý

2. Xây dựng và tối ưu hàm mất mát 3. Lập trình Python 4. Thảo luận

1. Giới thiệu

Trong Bài 24, chúng ta đã làm quen với một hướng tiếp cận trong Collaborative Filtering dựa trên hành vi của các users hoặc items lân cận có tên là Neighborhood-based Collaborative Filtering. Trong bài viết này, chúng ta sẽ làm quen với một hướng tiếp cận khác cho Collaborative Filtering dựa trên Matrix Factorization (hoặc Matrix Decomposition), tức Phân tích ma trận thành nhân tử.

Đang xem: Matrix factorization là gì

Nhắc lại rằng trong Content-based Recommendation Systems, mỗi item được mô tả bằng một vector (mathbf{x}) được gọi là item profile. Trong phương pháp này, ta cần tìm một vector hệ số (mathbf{w}) tương ứng với mỗi user sao cho rating đã biết mà user đó cho item xấp xỉ với:

Với cách làm trên, Utility Matrix (mathbf{Y}), giả sử đã được điền hết, sẽ xấp xỉ với:

= left< egin{matrix}mathbf{x}_1 \mathbf{x}_2 \dots \mathbf{x}_M \end{matrix} ight>left< egin{matrix}mathbf{w}_1 & mathbf{w}_2 & dots & mathbf{w}_Nend{matrix} ight> = mathbf{XW}>

với (M, N) lần lượt là số items và số users.

Chú ý rằng, (mathbf{x}) được xây dựng dựa trên thông tin mô tả của item và quá trình xây dựng này độc lập với quá trịnh đi tìm hệ số phù hợp cho mỗi user. Như vậy, việc xây dựng item profile đóng vai trò rất quan trọng và có ảnh hưởng trực tiếp lên hiệu năng của mô hình. Thêm nữa, việc xây dựng từng mô hình riêng lẻ cho mỗi user dẫn đến kết quả chưa thực sự tốt vì không khai thác được đặc điểm của những users gần giống nhau.

Bây giờ, giả sử rằng ta không cần xây dựng từ trước các item profile (mathbf{x}) mà vector đặc trưng cho mỗi item này có thể được huấn luyện đồng thời với mô hình của mỗi user (ở đây là 1 vector hệ số). Điều này nghĩa là, biến số trong bài toán tối ưu là cả (mathbf{X}) và (mathbf{W}); trong đó, (mathbf{X}) là ma trận của toàn bộ item profiles, mỗi hàng tương ứng với 1 item, (mathbf{W}) là ma trận của toàn bộ user models, mỗi cột tương ứng với 1 user.

Với cách làm này, chúng ta đang cố gắng xấp xỉ Utility Matrix (mathbf{Y} in mathbb{R}^{M imes N}) bằng tích của hai ma trận (mathbf{X}in mathbb{R}^{M imes K}) và (mathbf{W} in mathbb{R}^{K imes N}).

Thông thường, (K) được chọn là một số nhỏ hơn rất nhiều so với (M, N). Khi đó, cả hai ma trận (mathbf{X}) và (mathbf{W}) đều có rank không vượt quá (K). Chính vì vậy, phương pháp này còn được gọi là Low-Rank Matrix Factorization (xem Hình 1).

*

Hình 1: Matrix Factorization. Utility matrix (mathbf{Y}) được phân tích thành tích của hai ma trận low-rank (mathbf{X}) và \(mathbf{W})

Có một vài điểm lưu ý ở đây:

Ý tưởng chính đằng sau Matrix Factorization cho Recommendation Systems là tồn tại các latent features (tính chất ẩn) mô tả sự liên quan giữa các itemsusers. Ví dụ với hệ thống gợi ý các bộ phim, tính chất ẩn có thể là hình sự, chính trị, hành động, hài, …; cũng có thể là một sự kết hợp nào đó của các thể loại này; hoặc cũng có thể là bất cứ điều gì mà chúng ta không thực sự cần đặt tên. Mỗi item sẽ mang tính chất ẩn ở một mức độ nào đó tương ứng với các hệ số trong vector (mathbf{x}) của nó, hệ số càng cao tương ứng với việc mang tính chất đó càng cao. Tương tự, mỗi user cũng sẽ có xu hướng thích những tính chất ẩn nào đó và được mô tả bởi các hệ số trong vector (mathbf{w}) của nó. Hệ số cao tương ứng với việc user thích các bộ phim có tính chất ẩn đó. Giá trị của biểu thức (mathbf{xw}) sẽ cao nếu các thành phần tương ứng của (mathbf{x}) và (mathbf{w}) đều cao. Điều này nghĩa là item mang các tính chất ẩn mà user thích, vậy thì nên gợi ý item này cho user đó.

Xem thêm: Hotel Amenities Là Gì ? Một Amenities Bao Gồm Những Gì? Hotel Amenities Là Gì

Vậy tại sao Matrix Factorization lại được xếp vào Collaborative Filtering? Câu trả lời đến từ việc đi tối ưu hàm mất mát mà chúng ta sẽ thảo luận ở Mục 2. Về cơ bản, để tìm nghiệm của bài toán tối ưu, ta phải lần lượt đi tìm (mathbf{X}) và (mathbf{W}) khi thành phần còn lại được cố định. Như vậy, mỗi hàng của (mathbf{X}) sẽ phụ thuộc vào toàn bộ các cột của (mathbf{W}). Ngược lại, mỗi cột của (mathbf{W}) lại phục thuộc vào toàn bộ các hàng của (mathbf{X}). Như vậy, có những mỗi quan hệ ràng buộc chằng chịt giữa các thành phần của hai ma trận trên. Tức chúng ta cần sử dụng thông tin của tất cả để suy ra tất cả. Vậy nên phương pháp này cũng được xếp vào Collaborative Filtering.

Thêm nữa, việc lưu trữ hai ma trận (mathbf{X}) và (mathbf{W}) yêu cầu lượng bộ nhớ nhỏ khi so với việc lưu toàn bộ Similarity matrix trong Neighborhood-based Collaborative Filtering. Cụ thể, ta cần bộ nhớ để chứa (K(M+N)) phần tử thay vì lưu (M^2) hoặc (N^2) của Similarity matrix.

Tiếp theo, chúng ta cùng đi xây dựng hàm mất mát và cách tối ưu nó.

2. Xây dựng và tối ưu hàm mất mát

2.1. Hàm mất mát

Tương tự như trong Content-based Recommendation Systems, việc xây dựng hàm mất mát cũng được dựa trên các thành phần đã được điền của Utility Matrix (mathbf{Y}), có khác một chút là không có thành phần bias và biến tối ưu là cả (mathbf{X}) và (mathbf{W}). Việc thêm bias vào sẽ được thảo luận ở Mục 4. Việc xây dựng hàm mất mát cho Matrix Factorization là tương đối dễ hiểu:

trong đó (r_{mn} = 1) nếu item thứ (m) đã được đánh giá bởi user thứ (n), (||ullet||_F^2) là Frobineous norm, tức căn bậc hai của tổng bình phương tất cả các phần tử của ma trận (giống với norm 2 trong vector), (s) là toàn bộ số ratings đã có. Thành phần thứ nhất chính là trung bình sai số của mô hình. Thành phần thứ hai trong hàm mất mát phía trên là (l_2) regularization, giúp tránh overfitting.

Lưu ý: Giá trị ratings thường là các giá trị đã được chuẩn hoá, bằng cách trừ mỗi hàng của Utility Matrix đi trung bình cộng của các giá trị đã biết của hàng đó (item-based) hoặc trừ mỗi cột đi trung bình cộng của các giá trị đã biết trong cột đó (user_based). Trong một số trường hợp nhất định, ta không cần chuẩn hoá ma trận này, nhưng kèm theo đó phải có thêm các kỹ thuật khác để giải quyết vấn đề thiên lệch trong khi rating.

Việc tối ưu đồng thời (mathbf{X}, mathbf{W}) là tương đối phức tạp, thay vào đó, phương pháp được sử dụng là lần lượt tối ưu một ma trận trong khi cố định ma trận kia, tới khi hội tụ.

Xem thêm: Thì Hiện Tại Đơn ( Simple Present Tense Là Gì, Present Simple

2.2. Tối ưu hàm mất mát

Khi cố định (mathbf{X}), việc tối ưu (mathbf{W}) chính là bài toán tối ưu trong Content-based Recommendation Systems:

Khi cố định (mathbf{W}), việc tối ưu (mathbf{X}) được đưa về tối ưu hàm:

Hai bài toán này sẽ được tối ưu bằng Gradient Descent.

Chúng ta có thể thấy rằng bài toán ((2)) có thể được tách thành (N) bài toán nhỏ, mỗi bài toán ứng với việc đi tối ưu một cột của ma trận (mathbf{W}):

Vì biểu thức trong dấu (sum) chỉ phụ thuộc vào các items đã được rated bởi user đang xét, ta có thể đơn giản nó bằng cách đặt (hat{mathbf{X}}_n) là ma trận được tạo bởi các hàng tương ứng với các items đã được rated đó, và (hat{mathbf{y}}_n) là các ratings tương ứng. Khi đó: và đạo hàm của nó:

Vậy công thức cập nhật cho mỗi cột của (mathbf{W}) là:

Tương tự như thế, mỗi cột của (mathbf{X}), tức vector cho mỗi item, sẽ được tìm bằng cách tối ưu: <egin{eqnarray}mathcal{L}(mathbf{x}_m) &=& frac{1}{2s}sum_{n:r_{mn} = 1} (y_{mn} - mathbf{x}_mmathbf{w}_n)^2 + frac{lambda}{2}||mathbf{x}_m||_2^2 ~~~~ (8)end{eqnarray}>

Đặt (hat{mathbf{W}}_m) là ma trận được tạo bằng các cột của (mathbf{W}) ứng với các users đã đánh giá item đó và (hat{mathbf{y}}^m) là vector ratings tương ứng. ((8)) trở thành:

Tương tự như trên, công thức cập nhật cho mồi hàng của (mathbf{X}) sẽ có dạng:

Related Posts