My Post (1)

Recommendation Systems with TensorFlow on Google Cloud Platform [Part 2-2]

Phần 2 -2 : Xây dựng matrix factorization-based collaborative filtering Recommendation System trên GCP

Chào mọi người ngày mới, hy vọng là mọi người vẫn còn nhớ 4 bước xây dựng hệ thống gợi ý matrix factorization Recommendation System trên GCP, lần trước mình đã giới thiệu bước 1 cho mọi người rồi, lần này thì tiếp tục ở bước 2 nhé. Dành cho những bạn chưa nắm được 4 bước này là gì thì mình ghi lại ở đây nhé

  • Bước 1: Xây dựng model: Bước này sẽ giới thiệu cho các bạn cách dùng thuật toán WALS trong TF để tạo dự đoán về rating phim. 
  • Bước 2: Train và Tune model trên AI platform: Bước này mình sẽ giới thiệu cho các bạn cách training model, tuning hyperparameters để optimize model. 
  •  Bước 3: Tiếp đến là ứng dụng model đã tạo cho data từ Google Analytics: Ở bước này mình và các bạn sẽ tìm hiểu cách để ứng dụng hệ thống recommendation cho data được lấy từ Google Analytic 360 để thực hiện recommendation cho các website sử dụng Analytics. 
  • Bước 4: Deploy hệ thống recommendation: cùng nhau thực hiện việc deploy hệ thống này lên GCP để hệ thống có thể chạy real-time recommendation trên các website. 

Giờ thì bắt tay vào việc Train và Tune model thôi nào. Lần này mình sẽ cùng các bạn tìm hiểu 2 chủ đề nhỏ chính nè. Đầu tiên là học cách training job trên AI Platform  GCP  trên dataset MovieLens lần trước nè. Sau đó sẽ là công việc Tune AI Platform hyperparameters và optimize TensorFlow WALS recommendation model cho MovieLens dataset.

Nhớ start lại bé VM nếu lần trước bạn có stop nhé.

Training jobs trên AI Platform

Để training model rên AI Platform bạn cần chỉ định cụ thể một job directory cùng với đó là Cloud Storage bucket folder. Để chạy training job thì cần 3 bước sau.

  1. Tại mới Cloud Storage bucket trên project của bạn hoặc dùng cái đã có sẵn cũng được nhé.

Để tao mới một bucket thì bạn có thể làm như sau: trong Cloud Console, chọn Cloud Storage > Browser, và sau đó nhấn click Create Bucket. Lưu ý là nên đặt tên của bucket mang tính gợi nhớ và nằm cùng region với region của Compute Engine instance.

  1. Active shell lên nếu bạn chưa làm và cài đặt environment variable BUCKET  của Cloud Storage bucket URL bucket mà bạn dùng nhé 

BUCKET=gs://[YOUR_BUCKET_NAME]

  1. Copy MovieLens datasets vào bucket của bạn bằng gsutil tool:

gsutil cp -r data/u.data $BUCKET/data/u.data

gsutil cp -r data/ratings.dat $BUCKET/data/ratings.dat

gsutil cp -r data/ratings.csv $BUCKET/data/ratings.csv

  1.  Running training script trong the wals_ml_engine.

 Tùy thuộc vào cấu trúc thư mục của bạn thì hãy cd wals_ml_engine nhé

Với MovieLens 100k dataset mà mình đã chọn lúc đầu,  thực thi câu lệnh sau

./mltrain.sh train ${BUCKET} data/u.data

Bạn có thể kiểm tra và xem lại thông tin trên Logs của AI Platform trên GCP nhé

Lưu model 

 Sau khi factorization, factor matrix được lưu thành 5 file riêng biệt dưới dạng numpy format sau đó bạn có thể dùng file này để thực thi hệ thống recommendations của bạn rồi. Trong phần 2-3 mình sẽ giải thích cho các bạn về 5 files này và hướng dẫn cách generate ra recommendations từ 5 files này nhé. Khi bạn training model dưới máy local  các files này được lưu trong cùng folder chứa package code của bạn. Còn hiện tại chúng ta đang chạy model trên AI Platform của GCP nên các file này sẽ được lưu trữ trong Cloud Storage bucket mà lúc nãy các bạn vừa trỏ tới. 

MovieLens dataset results

Kết quả của matrix factorization approximations dựa trên predicted ratings của test set. Test set được extract từ ratings matrix trong quá trình preprocessing. Để tính toán sự khác biệt giữa predicted rating và actual user-supplied test set ratings bạn có thể dùng Loss function để tính toán nhé. 

Hiệu suất của matrix factorization phụ thuộc khá nhiều vào các thuộc tính hyperparameters. Trong model vừa rồi, chúng ta đang dùng các chỉ số mặc định cho hyperparameters, mình để bên dưới nha, để cải thiện được model mình có thể update lại các chỉ số cho hyperparameters. 

Hyperparameter name and descriptionDefault ValueScale
latent_factorsNumber of latent factors K5UNIT_REVERSE_LOG_SCALE
regularizationL2 Regularization constant0.07UNIT_REVERSE_LOG_SCALE
unobs_weightWeight on unobserved ratings matrix entries0.01UNIT_REVERSE_LOG_SCALE
feature_wt_factorWeight on observed entries130UNIT_LINEAR_SCALE
feature_wt_expFeature weight exponent1UNIT_LOG_SCALE
num_itersNumber of alternating least squares iterations20UNIT_LINEAR_SCALE

Tuning hyperparameters

Công việc tìm ra thống số thích hợp bộ hyperparameters là một việc rất quan trọng.  Tuy nhiên hiện tại có rất ít hướng dẫn để hướng dẫn cách thức tìm ra được giá trị phù hợp. Kết quả có của bộ hyperparameters thường được tìm thấy thông qua quá trình thử nghiệm nhiều lần, kiểm chứng lại dữ liệu và thông thường quá trình này tốn rất nhiều thời gian và công sức. 

Câu chuyện này sẽ được thay đổi nếu bạn dùng AI Platform của GCP. AI Platform trên GCP có chứ luôn hyperparameter tuning feature, thao tác này sẽ được thực hiện tự động và trả về cho bạn bộ hyperparameters nhất. Để dùng được tuning feature, bạn có thể cung cấp danh sách của các hyperparameter mà bạn muốn tune và các giá trị expected range của các tham số này. AI Platform sẽ tiến hành thực thi tìm kiếm trong space của hyperparameters,  thực thi nhiều lần và trả về kết quả tốt nhất.Bạn có thể tìm hiểu thêm thông tin của  AI Platform documentation ở đây nhé. 

Run the hyperparameter tuning job

Với dataset 100k đã chọn thì bạn thực thi câu lệnh dưới đây để tune nhé. 

./mltrain.sh tune $BUCKET data/u.data

Dưới đây là bảng giá trị các Hyperparameter sau khi được tuning

Hyperparameter nameDescriptionValue from tuning 
latent_factorsLatent factors K34
regularizationL2 Regularization constant9.83
unobs_weightUnobserved weight0.001
feature_wt_factorObserved weight189.8
feature_wt_expFeature weight exponentN/A
num_itersNumber of iterationsN/A

Dưới đây là kết quả của model khi không chạy tune

Thời gian chạy tune của model khá lâu nên bạn cần kiên nhẫn nhé. Nhưng đem lại kết quả tốt hơn rất nhiều nè.

Trong bài viết lần sau bạn hãy cùng mình tìm hiểu rõ hơn về các tham số nhé ^^

Recommendation Systems with TensorFlow on Google Cloud Platform: Series links

Comments are closed.