Chương 2 CÁC KỸ THUẬT PHÂN RÃ
2.2 KỸ THUẬT PHÂN RÃ MA TRẬN-MF
Kỹ thuật phân rã ma trận đƣợc xem là kỹ thuật tiến bộ nhất trong số các kỹ thuật dùng trong phương pháp CF vì nó cho phép ta khám phá ra những đặc tính tiềm ẩn nằm bên dưới các tương tác giữa người dùng và hạng mục. Một trong những thành công nhất của mô hình thuộc tính ẩn (Latent Factor Model) là dựa trên phân tích ma trận. Trong hình thức cơ bản, ma trận thừa số được đặc trưng bởi các sản phẩm và người dùng bằng các vectơ của các yếu tố đƣợc suy ra từ mô hình đánh giá sản phẩm.
Phương pháp này ngày càng trở nên phổ biến bằng cách kết hợp khả năng mở rộng tốt và độ chính xác cao.
Hệ thống gợi ý dựa trên các loại dữ liệu đầu vào khác nhau, thường được đặt trong một ma trận hai chiều với một chiều biểu diễn cho các người dùng và chiều còn lại là các sản phẩm được người dùng quan tâm. Có 2 phương pháp thu thập dữ liệu. Thu thập dữ liệu trực tiếp qua thông tin phản hồi trực tiếp (explicit feedback) từ phía người dùng về quan tâm của họ dành cho sản phẩm. Các quan tâm này thường được đặc trưng bởi các con số được gọi là điểm đánh giá. Ma trận điểm đánh giá từ thu thập trực tiếp thường là các ma trận thưa vì bất kỳ một người dùng nào cũng thường có xu hướng chỉ đánh giá một tỉ lệ nhỏ các hạng mục có sẵn. Trường hợp không thu thập dữ liệu trực tiếp được, hệ tư vấn sẽ phải thu thập dữ liệu gián tiếp (implicit feedback) để suy diễn ra các quan tâm của người dùng bằng cách quan sát thái độ của người dùng trong quá khứ từ các dữ liệu lịch sử đi mua, duyệt các dữ liệu này để tìm kiếm các mô hình, … Dữ liệu gián tiếp thường là có hoặc không có một sự kiện nào đó nên ma trận dữ liệu là một ma trận dầy đặc. Điểm mạnh của phương pháp phân rã ma trận là khả năng cho phép kết hợp thông tin bổ sung, xử lý được các trường hợp mà Content filtering khó xử lý như người dùng mới, sản phẩm mới...
2.2.2 Ý tưởng thực hiện
Mục đích của kỹ thuật phân rã ma trận là việc chia một ma trận lớn X thành hai ma trận có kích thước nhỏ hơn W và H, sao cho ta có thể xây dựng lại X từ hai ma trận nhỏ hơn này càng chính xác càng tốt, nghĩa là:
X ~ WHT
Hình 2.3. Minh họa kỹ thuật phân rã ma trận
Trong đó, W ∈ |U|×K là một ma trận mà mỗi dòng u là một véc-tơ bao gồm K nhân tố tiềm ẩn (latent factors) mô tả người dùng u, và H ∈|I|×K là một ma trận mà mỗi dòng i là một vectơ bao gồm K nhân tố tiềm ẩn mô tả cho item i.
Ví dụ, X là ma trận được tạo nên từ việc xếp hàng của người dùng U và Item(địa điểm du lịch) I. Thông thường, khi tiến hành đánh giá các xếp hạng chỉ dựa vào tiêu chí người dùng – địa điểm du lịch thì sự đánh giá này không đƣợc chính xác. Do vậy, cần phải đƣợc đánh giá trên nhiều tiêu chí khác, từ đó cần có một số K tiêu chí để phân tích ma trận xếp hàng ban đầu thành hai ma trận nhỏ hơn, có sự tham gia của các tiêu chí ẩn. Điều này cho thấy việc đánh giá các xếp hạng có độ chính xác cao hơn.
Gọi wuk và hik là các phần tử tương ứng của hai ma trận W và H, khi đó xếp hạng của người dùng u trên mục tin i được dự đoán bởi công thức:
1
ˆ w
k
ui ik ik
k
r h
= w.hT (2.1)
ui ui ˆui
e r r ∀ u,i ∈ X
eui là sai số huấn luyện trên xếp hạng thứ (u,i).
Nhƣ vậy, vấn đề then chốt của kỹ thuật phân rã ma trận là làm thế nào để tìm đƣợc giá trị của hai tham số W và H. Hai tham số này có đƣợc bằng cách tối ƣu hóa hàm mục tiêu (objective function). Trong hệ thống gợi ý, hàm mục tiêu của phân rã ma trận hay đƣợc sử dụng nhƣ sau :
2 2 2
, , , 1
( ˆ ) ( )
ui ui u
k MF
u i X u i X u i X
i ui ui ui
k
e r w
O r r h
(2.2)
Một trong những kỹ thuật có thể dùng để tối ƣu hóa hàm mục tiêu là giảm gradient ngẫu nhiên (Stochastic Gradient Descent).
Để tối ưu hóa hàm mục tiêu (2.2), trước tiên ta khởi tạo các giá trị ngẫu nhiên cho W và H, sau đó từng bước cập nhật giá trị của chúng cho đến khi hàm mục tiêu hội tụ về giá trị nhỏ nhất (convergence). Để làm đƣợc điều đó, ta cần phải xác định là nên tăng hay nên giảm các giá trị của W và H qua mỗi lần cập nhật, do vậy cần phải tìm đạo hàm từng phần của chúng:
wuk
OMF = 2(rui r hˆui) ik hik
OMF= 2(rui rˆui)wuk
Sau khi tìm đạo hàm, chúng ta cần giảm thiểu tối đa độ lỗi này và cập nhập lại cho wuk và hik đƣợc lặp đi lặp lại (tối ƣu hoá bằng kỹ thuật Stochastic Gradient Descent- kỹ thuật giảm gradient ngẫu nhiên). Các phần tử của W và H sẽ được cập nhập ngược hướng với giá trị của đạo hàm, qua công thức :
w w w 2 ( ˆ )
w
new old MF old
uk uk uk ui ui ik
uk
O r r h
ˆ
2 ( )w
new old MF old
ik ik ik ui ui uk
ik
h h O h r r
h
: tốc độ học (learning rate)
Quá trình cập nhập sẽ thực hiện đến khi nào hàm mục tiêu đạt giá trị nhỏ nhất hoặc đến số lần lặp được xác định trước. Sau quá trình tối ưu, ta có được giá trị W và H.
Chính tắc hóa (Regularization): Để ngăn ngừa sự quá khớp hay còn gọi là học vẹt (overfitting – xảy ra khi mô hình dự đoán cho kết quả tốt trên dữ liệu huấn luyện, nhưng cho kết quả kém trên dữ liệu thử nghiệm) người ta thay đổi hàm mục tiêu (2.2) bằng cách thêm vào một đại lƣợng gọi là chính tắc hóa (regularization) để điều khiển độ lớn của các giá trị trong W và H. Hàm mục tiêu (2.2) bây giờ trở thành:
2 2
2 , 1
( w ) ( W )
Train
K MF
ui uk ik F F
u i D k
O r h H
Trong đó là hệ số chính tắc hoá (0 <1) và . là chuẩn Frobenius. Với hàm mục tiêu mới này, giá trị của wuk và hik đƣợc cập nhập theo công thức:
wuknewwolduk (2(rui r hˆui) ik .wukold)
.(2( ˆ )w .
new old old
ik ik ui ui uk ik
h h r r h
Quá trình cập nhập giá trị của W và H đƣợc lặp lại cho đến khi đạt độ lỗi chấp nhận hoặc lặp lại đến số lần quy định trước.
Quá trình dự đoán: Sau quá trình huấn luyện ta đƣợc 2 ma trận W và H đã tối ƣu thì quá trình dự đoán (công thức 2.2) đƣợc thực hiện nhƣ minh họa trong Hình 2.4
Hình 2.4. Minh hoạ dự đoán người dùng thứ 3 cho sản phẩm thứ 3
2.2.3 Thuật toán MF
Đầu vào: Một bộ dữ liệu huấn luyện X, giá trị khởi tạo ban đầu W0 và H0 Đầu ra: Hai ma trận W và H
procedure MF (DTrain,K, β, λ, stopping condition) // W[|U|][K] và H[|I|][K] là 2 tham số cần tìm
W := N(0,σ2) //khởi tạo giá trị theo phân phối chuẩn H := N(0, σ2) //khởi tạo giá trị theo phân phối chuẩn while(stopping condition) do
Draw randomly (u,i,x) from DTrain rˆ := 0
for (k:=1; k<=K; k++)
rˆ := rˆ + W[u][k] * H[i][k]
end for e = r – rˆ
for (k:=1; k<=K; k++)
W[u][k] := W[u][k] + β * (eui * H[i][k] - λ * W[u][k]) H[i][k] := H[i][k] + β * (eui * W[u][k] - λ* H[i][k]) end for
end while return{W,H}
end procedure