Apache Mahout và ứng dụng của nó

Đôi Nét Về Học Máy

Học máy (tiếng Anh: machine learning) là một lĩnh vực của trí tuệ nhân tạo liên quan đến việc nghiên cứu và xây dựng các kĩ thuật cho phép các hệ thống "học" tự động từ dữ liệu để giải quyết những vấn đề cụ thể. Ví dụ như các máy có thể "học" cách phân loại thư điện tử xem có phải thư rác (spam) hay không và tự động xếp thư vào thư mục tương ứng. Học máy có liên quan lớn đến thống kê, vì cả hai lĩnh vực đều nghiên cứu việc phân tích dữ liệu, nhưng khác với thống kê, học máy tập trung vào sự phức tạp của các giải thuật trong việc thực thi tính toán. Nhiều bài toán suy luận được xếp vào loại bài toán NP-khó, vì thế một phần của học máy là nghiên cứu sự phát triển các giải thuật suy luận xấp xỉ mà có thể xử lý được.

Apache Mahout

mahout_hadoop.png

Apache Mahout là một dự án mã nguồn mở mới của Apache Software Foundation (ASF-Quỹ phần mềm Apache) với mục tiêu chính là tạo các thuật toán học máy có khả năng mở rộng, các thuật toán này là miễn phí sử dụng theo giấy phép Apache. Dự án này đang bước vào năm thứ hai của mình, với bản phát hành công khai trong phạm vi của nó. Mahout bao gồm các việc thực hiện để phân cụm, phân loại, CF và lập trình tiến hóa. Hơn nữa, nó khéo léo sử dụng thư viện Apache Hadoop để cho phép Mahout mở rộng hiệu quả trong đám mây này. Đặc điểm chính:

  • Đây là một dự án của nền tảng phần mềm Apache.
  • Là một thư viện học máy khả năng mở rộng:
    • Thi hành MapReduce theo quy mô đường thẳng với dữ liệu
    • Thuật toán tuần tự nhanh ( quá trình thi hành không phụ thuộc vào kích thước của tập dữ liệu )
  • Chủ yếu là các thuật toán phân nhóm, phân loại, và khuyến nghị (lọc cộng tác).
  • Thuật toán học máy có thể được thi hành tuần tự: (in-memory mode) or distributed mode (MapReduce được kích hoạt)
  • Hầu hết các thuật toán được thực hiện bằng cách mô hình hóa MapReduce.
  • Chạy trên nền tảng Hadoop cho việc mở rộng.
  • Dữ liệu được lưu trữ trong HDFS (data storage) hoặc trong bộ nhớ.
  • Nó là một thư viện Java (không có giao diện người dùng).
  • Phiên bản mới nhất là 0.12.2.
  • Là một thư viện dùng chung.

Lịch Sử Apache Mahout

mahout_history.jpg

Dự án Mahout được bắt đầu bởi một số người tham gia vào cộng đồng Apache Lucene (tìm kiếm mã nguồn mở) với một sự quan tâm tích cực trong việc học máy và mong muốn về tính thực hiện mạnh mẽ, có đầy đủ các tài liệu cần thiết, có khả năng mở rộng của các thuật toán học máy phổ biến cho việc phân cụm và phân loại. Thuật toán này ban đầu được gọi là "Map-Reduce for Machine Learning on Multicore" (Map-Reduce cho học máy theo đa lõi) nhưng sau phát triển để trình bày các cách tiếp cận học máy rộng hơn. Mahout cũng nhằm mục đích:

  • Xây dựng và hỗ trợ một cộng đồng những người dùng và những người đóng góp sao cho mã này vượt trên bất kỳ tác động nào của người đóng góp cụ thể, bất kỳ công ty, hoặc quỹ tài trợ đại học. Tập trung vào trường hợp sử dụng thực tế, thế giới thực, đối lập với nghiên cứu hay các kĩ thuật mới.
  • Cung cấp các tài liệu và ví dụ chất lượng.

Các đặc tính

Mặc dù tương đối mới trong thuật ngữ mã nguồn mở, Mahout đã có một số lượng lớn các chức năng, đặc biệt liên quan đến việc phân cụm và lọc cộng tác (Collaborative filtering-CF). Các đặc tính chính của Mahout là:

  • Taste CF. Taste là một dự án mã nguồn mở cho CF được khởi đầu bởi Sean Owen trên SourceForge và được tặng cho Mahout vào năm 2008.
  • Một số việc thực hiện phân cụm của Map-Reduce có sẵn, gồm k-Means, fuzzy k-Means, Canopy, Dirichlet và Mean-Shift.
  • Thực hiện phân loại Naive Bayes phân tán và Naive Bayes phụ.
  • Phân phổi các hàm chức năng phù hợp cho công việc lập trình.
  • Thư viện ma trận và vectơ.

Kiến trúc Apache Mahout

Kiến trúc chung: Bảng dưới đây thể hiện các thiết kế cao cấp của một Mahout:

mahout_achitecture.png

-Ứng dụng học máy truy cập API, cung cấp hỗ trợ triển khai kỹ thuật như: như phân cụm (Clustering), phân loại(Classification), và khuyến nghị (Recommendation) .

-Text Preprocessing: Ứng dụng đòi hỏi bộ tiền xử lý (như ngăn chặn loại bỏ từ) để nhập văn bản, nó có thể đạt được với Apache Lucene. Apache Hadoop cung cấp cách xử lý dữ liệu và lưu trữ để cho phép khả năng mở rộng. Ngoài ra, việc tối ưu hóa hiệu suất bằng cách sử dụng Java Collections va bộ thư viện: Mahout-Math. Thư viện: Mahout-integration chứa các tiện ích như là hiển thị dữ liệu và kết quả.

Khi nào nên sử dụng Apache Mahout

Nên sử dụng Apache Mahout khi những nhu cầu bên dưới cần được đáp ứng:

  • Bạn đang tìm kiếm là một thuật toán học mát cho ngành công nghiệp dùng với hiệu năng như một yếu tố đánh giá quan trọng.
  • Bạn đang tìm kiếm là một giải pháp mã nguồn mở và miễn phí.
  • Các tập dữ liệu ngày càng lớn và phát triển với tốc độ đáng báo động (MATLAB, Weka, Octave, R có thể được dùng để xử lý những dữ liệu lớn: KBs và MBs, nhưng nếu lượng dữ liệu của bạn lớn lên đến mức GB thì bạn nên sử dụng Mahour.
  • Nhu cầu xử lý dữ liệu hàng loạt với xử lý dữ liệu thời gian thực.
  • Nhu cầu tìm kiếm một thư viện hoàn chỉnh.

Cần cài đặt những gì để sử dụng Apache Mahout

-Bắt đầu và thực hiện với Mahout là tương đối đơn giản. Để khởi động, bạn cần phải cài đặt các điều kiện cần trước sau đây:

  • JDK 1.6 hoặc phiên bản cao hơn
  • Ant 1.7 hoặc phiên bản cao hơn
  • Maven 2.0.9 hoặc 2.0.10, nếu muốn xây dựng mã nguồn Mahout.

-Download bản Mahout mới nhất: https://mahout.apache.org/general/downloads.html . Thực hiện các bước sau để cài đặt:

  • unzip sample.zip
  • cd apache-mahout-examples
  • ant install

-Setting up a Maven project: http://maven.apache.org/

-Xây dựng mahout: https://mahout.apache.org/developers/buildingmahout.html -Mahout command-line launcher ở thư mục: bin/mahout

Bộ công cụ khuyến nghị với Apache Mahout

-Hệ thống khuyến nghị là kỹ thuật cung cấp những gợi ý cho nhu cầu về một sản phẩm, dịch vụ nào đó trên Internet cho người sử dụng. Những gợi ý được cung cấp là nhằm mục đích hỗ trợ người sử dụng trong quá trình ra quyết định lựa chọn sản phẩm, dịch vụ, chẳng hạn như những sách nào có thể người dùng muốn mua, những bài hát nào có thể người dùng thích nghe, hoặc tin tức nào người dùng muốn đọc. Một vài ứng dụng nổi tiếng về hệ thống khuyến nghị như: khuyến nghị sản phầm của Amazon.com [paper của amazon], hệ tư vấn phim của NetFlix…[paper của về Netflix] Hệ thống khuyến nghị đã chứng minh được ý nghĩa to lớn: giúp cho người sử dụng trực tuyến đối phó với tình trạng quá tải thông tin.

-Mahout hiện đang cung cấp các công cụ để xây dựng một máy bình luận thông qua các thư viện Taste — một máy nhanh và linh hoạt cho Lọc cộng tác (Collaborative filtering-CF). Taste hỗ trợ bình luận dựa vào người dùng và dựa vào mục và đi kèm với nhiều sự lựa chọn xây dựng các bình luận, cũng như các giao diện cho bạn để định nghĩa riêng của bạn. Taste gồm năm thành phần chính để làm việc với User (người dùng), Item (các mục) và Preference (ratings):

  • DataModel: Lưu trữ cho các User, các Item, và các Preference.
  • UserSimilarity: Giao diện định nghĩa sự tương tác giữa hai người dùng.
  • ItemSimilarity: Giao diện định nghĩa sự tương tác giữa hai mục.
  • Recommender: Giao diện để cung cấp các bình luận.
  • UserNeighborhood: Giao diện để tính toán một vùng lân cận của những người dùng tương tự có thể được Recommender (Những người bình luận) sử dụng.

-Các thành phần này và các việc thực hiện của chúng giúp cho nó có thể xây dựng các hệ thống bình luận phức tạp cho hoặc các bình luận dựa trên thời gian thực hoặc các bình luận ngoại tuyến (offline). Các bình luận dựa trên thời gian thực thường có thể làm việc với vài nghìn người dùng, trong khi các bình luận ngoại tuyến có thể mở rộng lớn hơn nhiều. Taste thậm chí đi kèm với các công cụ có sử dụng Hadoop để tính toán các bình luận ngoại tuyến. Trong nhiều trường hợp, đây là một tiếp cận hợp lý để cho phép bạn đáp ứng các yêu cầu của một hệ thống lớn có rất nhiều người dùng, các mục và ratings.

mahout_recomender.png

Biểu đồ này cho thấy mối quan hệ giữa các thành phần trong xây dựng hệ thống recommender dựa trên người dùng trên Mahout. Một hệ thống khuyến nghị dựa trên item là tương tự ngoại trừ việc không có thuật toán Neighborhood liên quan.

  • a. Recommender: Là phần cốt lõi trong việc xây dựng hệ thống khuyến nghị. Từ 1 datamodel, từ đó có thể tạo ra hệ thống khuyến nghị. Ứng dụng được sử dụng là: GenericUserBasedRecommender hoặc GenericItemBasedRecommender hoặc được thay thế bằng CachingRecommender.
  • b. Mô hình dữ liệu (Datamodel): Là giao diện với những thông tin về sở thích của người dùng. Có thể thực hiện một số bài phóng sự thực tế để rút ra được dữ liệu này từ bất kì nguồn nào, 1 databases
  • c. UserSimilarity: 1 UserSimilarity định nghĩa một giao diện thể hiện sự tương tác giữa hai người dùng. Đây cũng là một phần quan trọng trong hệ thống khuyến nghị. Nó được gắn kèm khi UserNeighborhood thực hiện. ItemSimilarity cũng định nghĩa tương tự, nó là giao diện định nghĩa sự tương tác giữa hai mục.
  • d. UserNeighborhood: Trong hệ thống khuyến nghị dựa trên người dùng (User-based), hệ thống được tạo ra bằng cách tính toán những vùng lân cận (Neighborhood) của một người dùng này với người dùng khác. Để hoạt động thì UserSimilarity là 1 phần không thể thiếu.

Phân cụm với Mahout

a. Các ứng dụng của phân cụm: Clustering có nhiều ứng dụng trong các lĩnh vực khác nhau, chẳng hạn như sinh học, kinh doanh…

mahout_business.png

b. Phân loại: Dựa theo những tiêu chí khác nhau, có những loại phân cụm sau:

-Phân cụm cứng và phân cụm mềm(Hard clustering versus soft clustering)

-Phân cụm phẳng và phân cụm phân cấp(Flat clustering versus hierarchical clustering).

-Phân cụm K-Means: là một thuật toán phân cụm đơn giản và nhanh chóng mà đã được rộng rãi áp dụng ở nhiều lĩnh vực vấn đề. Phân cụm K-Means chỉ định các điểm dữ liệu để k số cụm (centroids cluster) bằng cách giảm thiểu khoảng cách từ các điểm dữ liệu để các trọng tâm cluster.

-Mahout hỗ trợ một số việc thực hiện thuật toán phân cụm, tất cả đều được viết bằng Map - Reduce, mỗi lần thực hiện có tập riêng của nó về các mục tiêu và tiêu chuẩn:

  • Canopy: Một thuật toán phân cụm nhanh thường được sử dụng để tạo ra các phôi ban đầu cho các thuật toán phân cụm khác.
  • K-Means (và Fuzzy K-Means): Phân cụm các mục thành k nhóm dựa trên khoảng cách các mục từ trọng tâm hoặc trung tâm của lần lặp lại trước.
  • Mean-Shift: Thuật toán không yêu cầu bất kỳ kiến thức cần có trước về số lượng các nhóm và có thể tạo ra các nhóm có dạng tùy ý.
  • Dirichlet: Phân cụm dựa trên sự pha trộn của nhiều mô hình xác suất cung cấp cho nó lợi thế là không cần phải ghi nhớ trước một khung nhìn cụ thể của các nhóm.

-Mahout hiện đang hỗ trợ hai phương pháp tiếp cận liên quan đến việc phân loại/sắp xếp có hệ thống nội dung dựa trên số liệu thống kê Bayesian. Cách tiếp cận đầu tiên là một trình phân loại Naive Bayes kích hoạt Map-Reduce đơn giản. Các trình phân loại Naive Bayes được biết là nhanh và khá chính xác, mặc dù các giả định rất đơn giản (và thường không chính xác) của chúng về cácdữ liệu hoàn toàn độc lập. Các trình phân loại Naive Bayes thường không hoạt động khi kích thước của các ví dụ huấn luyện cho mỗi lớp không được cân bằng hoặc khi dữ liệu đủ độc lập. Phương pháp thứ hai, được gọi là Naive Bayes phụ, cố gắng chỉnh sửa một số vấn đề với cách tiếp cận Naive Bayes trong khi vẫn duy trì tính đơn giản và tốc độ của nó.

Một số tài liệu tham khảo

  1. https://mahout.apache.org/
  2. Machine learning: https://vi.wikipedia.org/wiki/Học_máy