Mahout - Khuyến nghị

Chương này trình bày về kỹ thuật học máy phổ biến được gọi là recommendation, cơ chế của nó và cách viết một ứng dụng triển khai đề xuất Mahout.

sự giới thiệu

Đã bao giờ bạn tự hỏi làm cách nào Amazon đưa ra danh sách các mặt hàng được đề xuất để thu hút sự chú ý của bạn đến một sản phẩm cụ thể mà bạn có thể quan tâm!

Giả sử bạn muốn mua cuốn sách “Mahout in Action” từ Amazon:

Cùng với sản phẩm đã chọn, Amazon cũng hiển thị danh sách các mặt hàng được đề xuất liên quan, như hình dưới đây.

Danh sách đề xuất như vậy được tạo ra với sự trợ giúp của recommender engines. Mahout cung cấp các công cụ giới thiệu gồm một số loại như:

  • người giới thiệu dựa trên người dùng,
  • những người giới thiệu dựa trên mặt hàng và
  • một số thuật toán khác.

Mahout Recommender Engine

Mahout có một công cụ giới thiệu không phân phối, không dựa trên Hadoop. Bạn nên chuyển một tài liệu văn bản có tùy chọn người dùng cho các mục. Và đầu ra của công cụ này sẽ là sở thích ước tính của một người dùng cụ thể đối với các mặt hàng khác.

Thí dụ

Xem xét một trang web bán hàng tiêu dùng như điện thoại di động, thiết bị và phụ kiện của chúng. Nếu chúng tôi muốn triển khai các tính năng của Mahout trong một trang web như vậy, thì chúng tôi có thể xây dựng một công cụ giới thiệu. Công cụ này phân tích dữ liệu mua hàng trước đây của người dùng và đề xuất các sản phẩm mới dựa trên đó.

Các thành phần do Mahout cung cấp để xây dựng công cụ giới thiệu như sau:

  • DataModel
  • UserSimilarity
  • ItemSimilarity
  • UserNeighborhood
  • Recommender

Từ kho dữ liệu, mô hình dữ liệu được chuẩn bị và được chuyển làm đầu vào cho bộ máy khuyến nghị. Công cụ Recommender tạo các đề xuất cho một người dùng cụ thể. Dưới đây là kiến ​​trúc của công cụ giới thiệu.

Kiến trúc của Công cụ giới thiệu

Xây dựng Đề xuất bằng Mahout

Dưới đây là các bước để phát triển một giới thiệu đơn giản:

Bước 1: Tạo đối tượng DataModel

Người xây dựng PearsonCorrelationSimilaritylớp yêu cầu đối tượng mô hình dữ liệu, đối tượng này chứa một tệp chứa chi tiết Người dùng, Mục và Tùy chọn của một sản phẩm. Đây là tệp mô hình dữ liệu mẫu:

1,00,1.0
1,01,2.0
1,02,5.0
1,03,5.0
1,04,5.0

2,00,1.0
2,01,2.0
2,05,5.0
2,06,4.5
2,02,5.0

3,01,2.5
3,02,5.0
3,03,4.0
3,04,3.0

4,00,5.0
4,01,5.0
4,02,5.0
4,03,0.0

Các DataModelđối tượng yêu cầu đối tượng tệp, chứa đường dẫn của tệp đầu vào. TạoDataModel đối tượng như hình dưới đây.

DataModel datamodel = new FileDataModel(new File("input file"));

Bước 2: Tạo đối tượng UserSimilarity

Tạo nên UserSimilarity đối tượng sử dụng PearsonCorrelationSimilarity lớp như hình dưới đây:

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

Bước 3: Tạo đối tượng UserNeighborhood

Đối tượng này tính toán một "vùng lân cận" của người dùng như một người dùng nhất định. Có hai loại vùng lân cận:

  • NearestNUserNeighborhood- Lớp này tính toán một vùng lân cận bao gồm n người dùng gần nhất với một người dùng nhất định. "Gần nhất" được xác định bởi UserSimilarity đã cho.

  • ThresholdUserNeighborhood- Lớp này tính toán một vùng lân cận bao gồm tất cả những người dùng có điểm tương đồng với người dùng đã cho đáp ứng hoặc vượt quá một ngưỡng nhất định. Tương tự được xác định bởi UserSimilarity đã cho.

Ở đây chúng tôi đang sử dụng ThresholdUserNeighborhood và đặt giới hạn ưu tiên thành 3.0.

UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);

Bước 4: Tạo đối tượng giới thiệu

Tạo nên UserbasedRecomendervật. Truyền tất cả các đối tượng đã tạo ở trên vào phương thức khởi tạo của nó như hình dưới đây.

UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);

Bước 5: Đề xuất các mặt hàng cho người dùng

Đề xuất sản phẩm cho người dùng bằng phương thức recommend () của Recommendergiao diện. Phương thức này yêu cầu hai tham số. Đầu tiên đại diện cho id người dùng của người dùng mà chúng tôi cần gửi đề xuất và thứ hai đại diện cho số lượng đề xuất sẽ được gửi. Đây là cách sử dụng củarecommender() phương pháp:

List<RecommendedItem> recommendations = recommender.recommend(2, 3);

for (RecommendedItem recommendation : recommendations) {
   System.out.println(recommendation);
 }

Example Program

Dưới đây là một chương trình ví dụ để thiết lập đề xuất. Chuẩn bị các đề xuất cho người dùng với id người dùng 2.

import java.io.File;
import java.util.List;

import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;

import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;

import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;

import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class Recommender {
   public static void main(String args[]){
      try{
         //Creating data model
         DataModel datamodel = new FileDataModel(new File("data")); //data
      
         //Creating UserSimilarity object.
         UserSimilarity usersimilarity = new PearsonCorrelationSimilarity(datamodel);
      
         //Creating UserNeighbourHHood object.
         UserNeighborhood userneighborhood = new ThresholdUserNeighborhood(3.0, usersimilarity, datamodel);
      
         //Create UserRecomender
         UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, userneighborhood, usersimilarity);
        
         List<RecommendedItem> recommendations = recommender.recommend(2, 3);
			
         for (RecommendedItem recommendation : recommendations) {
            System.out.println(recommendation);
         }
      
      }catch(Exception e){}
      
   }
  }

Biên dịch chương trình bằng các lệnh sau:

javac Recommender.java
java Recommender

Nó sẽ tạo ra kết quả sau:

RecommendedItem [item:3, value:4.5]
RecommendedItem [item:4, value:4.0]