Helpex - Trao đổi & giúp đỡ Đăng nhập

Đề xuất phim với tính năng lọc cộng tác Spark

Lọc cộng tác (CF) [1]  dựa trên kỹ thuật bình phương nhỏ nhất xen kẽ (ALS) [2]  là một thuật toán khác được sử dụng để tạo các đề xuất. Nó tạo ra các dự đoán tự động (lọc) về sở thích của người dùng bằng cách thu thập sở thích từ nhiều người dùng khác (cộng tác). Giả thiết cơ bản của phương pháp lọc cộng tác là nếu một người A có cùng quan điểm với người B về một vấn đề, thì A có nhiều khả năng có ý kiến ​​của B về một vấn đề khác hơn là một người được chọn ngẫu nhiên. Thuật toán này đã thu hút được rất nhiều sức hút trong cộng đồng khoa học dữ liệu sau khi nó được sử dụng bởi đội chiến thắng Giải thưởng Netflix .

Thuật toán CF cũng đã được triển khai trong Spark MLlib [3]  với mục đích giải quyết việc thực thi nhanh chóng trên các tập dữ liệu rất lớn. Nền tảng phân tích KNIME với Tiện ích mở rộng dữ liệu lớn cung cấp nó trong nút Spark Collaborative Filtering. Chúng tôi sẽ sử dụng nó ở đây để giới thiệu phim cho người dùng mới trong quá trình triển khai KNIME của giải pháp lọc cộng tác được cung cấp trong  bài đăng trên blog Infofarm [4] .

Những gì bạn cần để bắt đầu

  • Tập dữ liệu chung với xếp hạng phim của người dùng

Đối với trường hợp sử dụng này, chúng tôi đã sử dụng tập dữ liệu MovieLens lớn (20M) . Tập dữ liệu này chứa một số tệp khác nhau, tất cả đều liên quan đến phim và xếp hạng phim. Ở đây chúng tôi sẽ sử dụng các tệp tin rating.csv và movies.csv.

Tập dữ liệu trong tệp rating.csv chứa 20 triệu xếp hạng phim của khoảng 130.000 người dùng và nó được tổ chức dưới dạng movieID, userID, xếp hạng và dấu thời gian.

Mỗi hàng chứa xếp hạng cho từng phim, được xác định bởi movieID, bởi một trong những người dùng, được xác định bởi userID.

Tập dữ liệu trong tệp phim.csv chứa khoảng 27.000 phim, được sắp xếp dưới dạng movieID, tiêu đề và thể loại.

Sở thích Phim của Người dùng Hiện tại

Ý tưởng của thuật toán ALS là tìm những người dùng khác trong tập huấn luyện có các sở thích tương tự như người dùng được chọn hiện tại. Các đề xuất cho người dùng hiện tại sau đó được tạo dựa trên sở thích của các cấu hình tương tự như vậy. Điều này có nghĩa là chúng tôi cần một hồ sơ cho người dùng hiện tại để khớp với hồ sơ của những người dùng hiện tại khác trong nhóm đào tạo.

Giả sử rằng bạn là người dùng hiện tại với userID được chỉ định = 9999. Có thể, tập dữ liệu MovieLens không có dữ liệu về tùy chọn phim của riêng bạn. Do đó, để đưa ra một số đề xuất phim, trước tiên chúng tôi sẽ xây dựng hồ sơ sở thích phim của bạn. Chúng tôi sẽ bắt đầu quy trình làm việc bằng cách yêu cầu bạn xếp hạng 20 phim, được trích xuất ngẫu nhiên từ danh sách phim trong tệp phim.csv. Xếp hạng trong khoảng từ 0 đến 5 (0 phim kinh khủng; phim 5 tuyệt vời). Bạn có thể sử dụng xếp hạng -1 nếu bạn chưa xem bộ phim được đề xuất. Phim có xếp hạng -1 sẽ bị xóa khỏi danh sách ưu tiên của bạn, trong khi phim có xếp hạng khác sẽ trở thành tài liệu tập huấn.

Trang web bên dưới là kết quả của nút "Đầu ra văn bản" và nút "Trình chỉnh sửa bảng (JavaScript)" bên trong siêu mẫu được bao bọc được thực thi trên KNIME WebPortal . Xếp hạng của bạn có thể được chèn thủ công vào cột cuối cùng bên phải.

Đề xuất phim với tính năng lọc cộng tác Spark

Hình 1 Phỏng vấn người dùng hiện tại (userID = 9999) về xếp hạng phim của riêng họ. Chúng tôi cần thông tin này để khớp hồ sơ của người dùng hiện tại với hồ sơ của những người dùng khác có sẵn trong bộ đào tạo. Tùy chọn từ những người dùng tương tự có thể cung cấp các đề xuất phim cho người dùng hiện tại của chúng tôi.

Bối cảnh Spark

Thuật toán CF-ALS có sẵn trong Nền tảng phân tích KNIME thông qua nút Người học lọc cộng tác Spark. Nút này thuộc Phần mở rộng dữ liệu lớn của nền tảng dành cho Apache Spark . Tiện ích mở rộng này cần được cài đặt trên nền tảng để tiếp tục triển khai trường hợp sử dụng này.

Nút thực thi trong ngữ cảnh Spark, có nghĩa là bạn cũng cần một môi trường dữ liệu lớn có sẵn. Yêu cầu này đôi khi có thể là một điểm dừng hiển thị do sự phức tạp và chi phí tiềm ẩn của việc cài đặt một môi trường dữ liệu lớn tại cơ sở hoặc trên đám mây, đặc biệt nếu dự án chỉ là một bằng chứng về khái niệm. Cài đặt trên đám mây cũng có thể mang lại các chi phí bổ sung không lường trước được.

Đề xuất phim với tính năng lọc cộng tác Spark

Hình 2 Nút này tạo một phiên bản đơn giản cục bộ của Spark, Hive và HDFS. Mặc dù nó có thể không cung cấp khả năng mở rộng và hiệu suất mong muốn, nhưng nó rất hữu ích cho việc tạo mẫu và phát triển ngoại tuyến.

Nút "Tạo môi trường dữ liệu lớn cục bộ" không có cổng đầu vào vì nó không cần dữ liệu đầu vào và nó tạo ra ba đối tượng đầu ra:

  • Cổng cơ sở dữ liệu màu đỏ để kết nối với phiên bản Hive cục bộ
  • Cổng kết nối HDFS màu xanh nhạt để truy cập hệ thống tệp cục bộ qua HDFS
  • Một cổng Spark màu xám để kết nối với ngữ cảnh Spark cục bộ

Theo mặc định, các phiên bản Spark, Hive và HDFS cục bộ sẽ bị xử lý khi ngữ cảnh Spark bị hủy hoặc khi Nền tảng phân tích KNIME đóng. Trong trường hợp này, ngay cả khi quy trình làm việc đã được lưu với trạng thái "đã thực thi", kết quả trung gian của các nút Spark sẽ bị mất.

Đề xuất phim với tính năng lọc cộng tác SparkHình 3 Cửa sổ cấu hình của nút Tạo môi trường dữ liệu lớn cục bộ. Các cài đặt liên quan đến: các hành động cần thực hiện "khi xử lý", cài đặt Spark tùy chỉnh, hỗ trợ SQL, thư mục tùy chỉnh Hive và các tùy chọn cảnh báo.

Cửa sổ cấu hình của nút "Tạo môi trường dữ liệu lớn cục bộ" bao gồm một khung với các tùy chọn liên quan đến hành động "khi xử lý", được kích hoạt khi dòng công việc đóng:

  1. "Hủy bỏ bối cảnh Spark" sẽ phá hủy bối cảnh Spark và tất cả các tài nguyên được phân bổ; đây là tùy chọn phá hủy nhất, tuy nhiên sạch sẽ nhất.
  2. "Delete Spark DataFrames" xóa các kết quả trung gian của các nút Spark trong quy trình làm việc nhưng vẫn mở ngữ cảnh Spark để được sử dụng lại.
  3. "Không làm gì" giữ cho cả Spark DataFrames và bối cảnh sống động. Nếu bạn lưu quy trình công việc đã được thực thi và mở lại sau đó, bạn vẫn có thể truy cập vào kết quả trung gian của các nút Spark bên trong. Đây là tùy chọn bảo thủ nhất nhưng cũng giữ cho không gian và bộ nhớ bận rộn trên máy thực thi.

Tùy chọn số 2 được đặt làm mặc định như một sự thỏa hiệp giữa tiêu thụ tài nguyên và tái sử dụng.

Quy trình làm việc để xây dựng công cụ đề xuất với tính năng lọc cộng tác

Trong quy trình làm việc này, chúng tôi sử dụng triển khai Spark MLlib của thuật toán lọc cộng tác, trong đó người dùng và sản phẩm được mô tả bằng một nhóm nhỏ các yếu tố tiềm ẩn. Các yếu tố tiềm ẩn này sau đó có thể được sử dụng để dự đoán các mục nhập bị thiếu trong tập dữ liệu. Spark MLlib sử dụng thuật toán bình phương nhỏ nhất xen kẽ để phân tích nhân tử của ma trận để tìm hiểu các yếu tố tiềm ẩn.

Lưu ý: Điều cần thiết là sở thích phim của người dùng hiện tại là một phần của tập huấn luyện. Đây là lý do tại sao chúng tôi yêu cầu người dùng hiện tại xếp hạng 20 phim ngẫu nhiên để lấy mẫu theo sở thích của họ.

Kỹ thuật lọc cộng tác được triển khai và đào tạo trong nút Spark Collaborative Filtering Learner, nút này chạy trên một cụm Spark. Nút nhận tại cổng đầu vào một số bản ghi với sản phẩm, người dùng và xếp hạng tương ứng. Tại cổng đầu ra, nó tạo ra mô hình đề xuất và xếp hạng dự đoán cho tất cả các hàng dữ liệu đầu vào, bao gồm cả người dùng và đối tượng.

Lưu ý: Mô hình thừa số hóa ma trận do nút xuất ra chứa các tham chiếu đến Spark DataFrames / RDDs được sử dụng trong quá trình thực thi, và do đó nó không được khép kín. Các Spark DataFrames / RDD được tham chiếu sẽ bị xóa, giống như đối với bất kỳ nút Spark nào khác, khi nút được đặt lại hoặc dòng công việc bị đóng. Do đó, mô hình không thể được sử dụng lại trong bối cảnh khác trong quy trình làm việc khác.

Tập dữ liệu xếp hạng phim ban đầu được chia thành tập huấn luyện và tập thử nghiệm. Tập hợp đào tạo được sử dụng để xây dựng các đề xuất với nút Người học lọc số cộng tác Spark và tập hợp kiểm tra để đánh giá chất lượng của chúng bằng nút "Dự đoán tia lửa" chung, theo sau là nút "Người ghi điểm số Spark".

Giống như nút "Máy ghi điểm số" gốc KNIME, nút "Máy ghi điểm số" tính toán một số chỉ số lỗi số giữa các giá trị ban đầu - trong trường hợp này là xếp hạng - và các giá trị dự đoán. Xếp hạng nằm trong khoảng từ 0 đến 5, là số sao được người dùng gán cho một bộ phim. Xếp hạng dự đoán cố gắng dự đoán xếp hạng ban đầu từ 0 đến 5.

Các chỉ số lỗi trên bộ thử nghiệm hiển thị sai số tuyệt đối trung bình là 0,6 và sai số bình phương trung bình gốc là 0,8. Về cơ bản, xếp hạng dự đoán có thể sai lệch so với xếp hạng ban đầu +/- 0,6, đủ gần cho mục đích đề xuất của chúng tôi.

Đề xuất phim với tính năng lọc cộng tác Spark

Hình 4 Các chỉ số lỗi số được tính toán dựa trên xếp hạng phim gốc và xếp hạng phim dự đoán bằng nút Spark Numeric Scorer.

Triển khai

Trước đây, chúng tôi đã yêu cầu người dùng hiện tại xếp hạng 20 bộ phim được chọn ngẫu nhiên. Các xếp hạng này đã được thêm vào tập huấn luyện. Sử dụng nút Spark Predictor chung, giờ đây chúng tôi ước tính xếp hạng của người dùng hiện tại (ID = 9999) trên tất cả các phim chưa được xếp hạng còn lại. Sau đó, các bộ phim được sắp xếp theo xếp hạng dự đoán và 10 phim hàng đầu được đề xuất cho người dùng hiện tại trên trang web thông qua KNIME WebPortal. Vì tôi tình nguyện trở thành người dùng hiện tại cho thử nghiệm này, dựa trên xếp hạng của tôi trên 20 bộ phim được chọn ngẫu nhiên, tôi đã nhận lại được danh sách 10 bộ phim được đề xuất được hiển thị bên dưới. Tôi chưa nhìn thấy hầu hết trong số họ, tuy nhiên, một số trong số họ tôi biết và đánh giá cao. Bây giờ tôi sẽ thêm "xem phim được đề xuất" vào danh sách những việc cần làm trong tháng tới.

Đề xuất phim với tính năng lọc cộng tác Spark

Hình 5 Danh sách cuối cùng gồm 10 bộ phim được đề xuất hàng đầu dựa trên xếp hạng trước đó của tôi về 20 bộ phim được chọn ngẫu nhiên.

Ghi chú. Xin lưu ý rằng đây là một trong những trường hợp hiếm hoi khi đào tạo và triển khai được bao gồm trong cùng một quy trình làm việc.

Thật vậy, mô hình lọc cộng tác do nút "Spark Collaborative Filtering Learner" tạo ra không tự chứa mà phụ thuộc vào Spark DataFrame / RDDs được sử dụng trong quá trình thực thi đào tạo và do đó, không thể sử dụng lại sau này trong một quy trình triển khai riêng biệt.

Thuật toán lọc cộng tác không nặng về tính toán và không mất nhiều thời gian để thực thi. Vì vậy, bao gồm giai đoạn đào tạo vào quy trình triển khai không cản trở đáng kể đến hiệu suất đề xuất.

Tuy nhiên, nếu hiệu suất đề xuất thực sự là vấn đề, quy trình công việc có thể được thực thi một phần trên Nền tảng phân tích KNIME hoặc Máy chủ KNIME cho đến khi tạo mô hình lọc cộng tác và sau đó phần còn lại của quy trình làm việc được thực thi theo yêu cầu đối với từng người dùng hiện có trong khóa đào tạo bộ.

Dòng công việc cuối cùng khả dụng trên máy chủ KNIME EXAMPLES trong: EXAMPLES / 10_Big_Data / 02_Spark_Executor / 10_Recommendation_Engine_w_Spark_Collaborative_Filtering

Đề xuất phim với tính năng lọc cộng tác Spark

Hình 6 Quy trình làm việc Đề xuất Phim.

EXAMPLES / 10_Big_Data / 02_Spark_Executor / 10_Recommendation_Engine_w_Spark_Collaborative_Filtering trước tiên yêu cầu người dùng hiện tại xếp hạng 20 phim được chọn ngẫu nhiên qua trình duyệt web và với dữ liệu này, đào tạo mô hình lọc cộng tác, đánh giá hiệu suất mô hình thông qua một số chỉ số lỗi số và cuối cùng đề xuất danh sách trong số 10 phim được đề xuất hàng đầu dựa trên xếp hạng đã thu thập trước đó.

Người giới thiệu

[1] "Lọc cộng tác", Wikipedia https://en.wikipedia.org/wiki/Collaborative_filtering

[2] Y. Koren, R. Bell, C. Volinsky, "Kỹ thuật thừa số hóa ma trận cho các hệ thống khuyến nghị", trong Tạp chí Máy tính, Tập 42 Số 8, Tháng 8 năm 2009, Trang 30-37 https://dl.acm.org/ citation.cfm? id = 1608614

[3] "Lọc cộng tác. API dựa trên RDD" Triển khai Spark MLlib http://spark.apache.org/docs/latest/mllib-collaborative-filtering.html

[4] "Thuật toán hình vuông nhỏ nhất thay thế trong RecommenderLab" Bài đăng trên blog Infofarm của Bregt Verreet vào ngày 16 tháng 9 năm 2016 https://www.infofarm.be/articles/alternating-least-squares-algorithm-recommenderlab

2 hữu ích 0 bình luận 8.2k xem chia sẻ

Có thể bạn quan tâm

loading