23/08/2019, 08:55

Xây dựng hệ gợi ý với Machine Learning bằng Laravel

Người viết: Ngô Thuý Hoa Ở bài này, chúng ta sẽ xây dựng 1 hệ gợi ý item-based từ đầu. Chúng ta sẽ sử dụng machine learning để so sánh độ tương đồng giữa 2 sản phẩm trong bộ dữ liệu sử dụng trong bài. Với machine learning, bạn có thể có rất nhiều giải thuật để áp dụng và việc lựa ...

Xây dựng hệ gợi ý với Machine Learning bằng Laravel

Người viết: Ngô Thuý Hoa

Ở bài này, chúng ta sẽ xây dựng 1 hệ gợi ý item-based từ đầu. Chúng ta sẽ sử dụng machine learning để so sánh độ tương đồng giữa 2 sản phẩm trong bộ dữ liệu sử dụng trong bài.

Với machine learning, bạn có thể có rất nhiều giải thuật để áp dụng và việc lựa chọn sẽ phụ thuộc vào bộ data của bạn và mục đích của bạn. Vì vậy hãy thử vài thuật toán để lựa chọn ra thuật toán tốt nhất cho mục đích của bạn.

Ở ứng dụng demo này sẽ có 3 giải thuật được sử dụng.

  Hướng dẫn tối ưu Laravel cho lập trình viên
  10 tính năng hiệu quả có thể bạn không biết về Laravel Eloquent

Nhóm giải thuật Giám sát và Không giám sát

Cách giải thuật trong machine learning được chia làm 2 nhóm: học Giám sát và học Không giám sát.

Học giám sát được sử dụng khi bạn đánh nhãn dữ liệu và bạn biết chính xác kết quả đầu ra. Nó kiểu kiểu như 1 giáo viên sửa lại các kết quả của thuật toán cho tới khi nó cho kết quả chấp nhận được.

Học không giám sát là khi dữ liệu không được gán nhãn và bạn sẽ không biết kết quả chính xác của dữ liệu là gì. Thuật toán sẽ đưa ra và định dạng dữ liệu và qua đó bạn có thể phát hiện các đặc điểm và hiểu rõ hơn về dữ liệu.

Lọc cộng tác hướng người dùng và lọc cộng tác hướng sản phẩm

Có 2 cách để biểu diễn sự gợi ý cho người dùng:

Cách đầu tiên là hướng người dùng(user-based). Cách này hiểu đơn giản là bạn và 1 anh hàng xóm cùng thích chung 1 số hoạt hình như Doraemon, One Piece, …. và khi anh hàng xóm bắt đầu xem Siêu nhân Gao thì bạn cũng sẽ được giới thiệu để xem phim ấy.

Cách còn lại là hướng sản phẩm(item-based). Cách này thì không dựa vào việc người khác thích gì mà dựa vào việc bạn thích gì và hệ thống sẽ gợi ý ra các sản phẩm có đặc tính tương tự. Ví dụ như bạn thích Siêu nhân Gao thì hệ thống sẽ có các phim Siêu nhân Khủng Long, Siêu nhân Cuồng phong, Siêu nhân Thần kiếm, Siêu nhân Đạo chính choảng Siêu nhân Cảnh sát,…..

Xây dựng ứng dụng

Với app thử nghiệm ở mục này, chúng ta sẽ xây dựng hệ gợi ý hướng sản phẩm với nhóm thuật toán Giám sát.

Chúng ta sử dụng các đặc tính của sản phẩm, trường hợp này là thời trang (chất liệu, màu sắc, độ ấm,…), giá và loại sản phẩm làm cơ sở cho việc tính toán độ tương đồng.

Các thuật toán sử dụng là Hamming Distance cho đề xuất sản phẩm, Euclidean Distance cho giá của sản phầm và Chỉ mục Jacard cho phân loại sản phẩm. Xây dựng hệ gợi ý với Machine Learning bằng Laravel

Bước 1

Tạo project Laravel mới:

Bước 2

Lấy bộ dữ liệu ở link dưới đây và lưu vào ./storage/data trong project Laravel của bạn.

Nếu bạn định sử dụng cho môi trường production thì lời khuyên đặc biệt trong trường hợp này là bạn hãy làm các model Eloquent và seed data vào cơ sở dữ liệu thay vì dùng JSON.

Xem thêm JSON là gì

Bước 3

Ở đây 1 class chứa toàn bộ các thuật toán cần thiết được tạo ra để tính độ tương đồng. Copy code dưới đây và đặt vào Similarity.php trong ./app.

Bước 4

Khi đã có 1 class chứa tất cả các giải thuật thì chúng ta cũng cần 1 class chứa các phép tính độ tương đồng. Tất cả code dưới đây là trong ProductSimilarity.php ở thư mục ./app.

Phương thức calculateSimilarityMatrix sẽ tính toán sự giống nhau giữa tất cả các sản phẩm và tạo ra một ma trận.

Nếu bạn định sử dụng hệ gợi ý này trong production hoặc nếu bạn có nhiều sản phẩm, bạn nên tạo một lệnh Artisan gọi chức năng này tuần tự thông qua Scheduler và lưu trữ kết quả trong Redis hoặc các cơ sở dữ liệu NoSQL tương tự.

Bằng cách đó, bạn có ma trận tương tự đầy đủ được lưu trong bộ nhớ cache và không phải tính toán nó mỗi khi có request.