Tổng quan về Recommendation Systems – Phần 1

by Quang Dao
2.4K views

Tổng quan về Recommendation Systems – Phần 1

Recommendation Systems

Xin chào mọi người, đây là bài đầu tiên của mình về chủ đề Machine Learning và cũng là bài đầu tiên về Series Recommendation Systems này, mặc dù chủ đề này không có liên quan đến công việc của mình nhưng do sở thích hay đi đọc block dạo và cũng muốn thử học hỏi thêm tý kiến thức khác nên mình quyết định viết lên series này vì vậy sẽ có nhiều thiếu sót nên mong các anh em có thể góp ý cho mình , gạch đá như nào mình gom hết về xây nhà, nhà em cũng đang thiếu ít gạch

Nội dung trong phần này

Trong phần này mình sẽ giới thiệu chung về hệ thống Recommendation và hai nhóm chính của RS, ở bài viết sau mình sẽ đi chi tiết và những nhóm chính để mọi người có thể có cái nhìn chi tiết nhất, bài đầu này như kiểu món tráng miệng cho anh em thôi.

Giới thiệu về hệ thống

Mình tin chắc rằng những anh(chị) em ở đây đã gặp phải 1 trong những trường hợp này thường xuyên trong cuộc sống:

  • Khi xem hết 1 video trên youtube hoặc sắp hết sẽ có 1 loạt các gợi ý các video tiếp theo cho bạn xem kể bạn có là chiếu mới khi xem youtube thì họ vẫn có thể đưa cho bạn 1 list video và tất nhiên sẽ có cái mà bạn thích
  • Đắng lòng hơn là khi bạn lỡ nói hoặc tìm kiếm cái gì đó trên google thì khi bạn sử dụng dịch vụ của Google hay lướt news trên Facebook thì sẽ có hàng loạt các gợi ý về sản phẩm tương tự cho bạn , hoặc lỡ bạn có like 1 vài item nào đó trên nên tảng của họ thì bạn cũng sẽ nhận được 1 rổ gợi ý về các loại item đấy cho bạn
  • Trên các sàn thương mại điện tử thì càng ác liệt hơn khi đây chính là cách mà họ moi tiền trong thẻ tín dụng của bạn, nhất là các ông lớn như Amazon , Shopee , Lazada. Mỗi khi bạn mua 1 sản phẩm nào đó thì họ sẽ yêu cầu bạn đánh giá sản phẩm ý để lấy rating ( cái để phục vụ cho họ để đưa ra gợi ý chính xác nhất ) nếu bạn không Rating thì họ sẽ gửi mail , bật thông báo để đòi bạn bao giờ rating mới thôi thế nên mình toàn rating cho có .

Còn rất nhiều các ví dụ khác mà hệ thống có khả năng tự gợi ý cho người dùng những sản phẩm họ có thể thích đây chính là lý do vì sao mà anh em ta đi mua đồ trên các trang web hay thương mại điện tử thường vượt quá budget. Bằng cách quảng cáo đúng tim đen của người dùng thì doanh thu cũng tăng lên và những thuật toán đằng sau những ứng dụng này là những thuật toán Machine Learning có cách gọi chung là Recommendation Systems – Hệ thống gợi ý

Recommemdation Systems là 1 trong những mảng tương đối lớn của Machine Learning và có tuổi đời đã khá lớn khi lần đầu tiên được đề cập trong 1 báo cáo kĩ thuật năm 1990 bởi Jussi Karlgren tại Đại Học Columbia và được triển khai quy mô lớn từ năm 1994 trở đi bởi Jussi Karlgren . RS là 1 giải pháp thay thế cho các thuật toán tìm kiếm ví chúng giúp người dùng có thế thấy được các item mà họ có thể thích kể cả họ có tìm tiếm hay không.

Các thực thể chính trong hệ thống

Như anh em đã biết thì để làm việc hay xây dựng lên 1 hệ thống thì điều đầu tiên chúng ta cần xác minh là cần những thành phần nào để tạo ra hệ thống. Nói đến hệ thống gợi ý thì chúng ta cần phải có tối thiểu 2 yếu tố sau:

  • User : Rõ ràng luôn, không có người dùng thì gợi ý cho vong ỏ? các đặc điểm của User thường được sử dụng trong gợi ý kết bạn điển hình là Facebook.
  • Item : Nó lại là 1 điều hiển nhiên luôn vì có người dùng mà k có sản phẩm thì gợi ý cho nhau à? Đúng , nếu không có 1 item cụ thể nào đó mà chỉ có người dùng thì chỉ có thể gợi ý người dùng khác cho nhau và các anh em biết cái ứng dụng nào đang sử dụng rồi đó , chính là Tinder nhưng trong trường hợp này User lại tính là 1 item trong bài toán gợi ý kết bạn hay kết nối với nhau.
  • Rating : Thực ra đây là 1 yếu tố mình nghĩ trong 1 vài hệ thống gợi ý sẽ không cần đến nhưng đa số thì đây là 1 yếu tố rất quan trọng để đưa ra gợi ý chính xác nhất cho người dùng. Vì rating hay feedback rất quan trọng , nó mô tả sự quan tâm của 1 người dùng nào đó đến với 1 item nó đó qua đó có thể đưa ra những gợi ý chính xác nhất cho khách hàng.

Và sau đây mình sẽ đề cập đến 2 nhóm chính trong RS, tất nhiên trong Recommendation Systems có rất nhiều nhóm khác nữa nhưng những nhóm ý chúng ta sẽ đi ở các bài viết khác nhé vì chúng khác là trừu tượng và dài.

Hai nhóm chính của Recommendation Systems

Các hệ thống gợi ý (RS) thường được chia làm 2 nhóm chính lớn:

  • Content-based systems: Hệ thống sẽ quan tâm đến đặc điểm của mục tiêu ví dụ như khi bạn nghe Lạc Trôi , Em của ngày hôm qua , Nắng ấm xa dần thì hệ thống sẽ phân tích ra các bài hát bạn vừa nghe là của Sơn Tùng thì hệ thống sẽ chuẩn đoán bạn đích thực là 1 SKY rồi thế là nhồi cho bạn 1 list nhạc của MTP luôn , User cũng tương tự trong bài toán gợi ý kết bạn hay lướt tinder ví dụ bạn hay thả tym cho các cô gái 1m5-1m6 tuổi 18-20 , nhà Tây Hồ đi Mer thì Hệ thống sẽ đề xuất cho bạn làm trạn vương
  • Collaborative filtering: Nhóm này thì đẳng cấp hơn khi gợi ý các item dựa trên sự tương quan (similarity) giữa các User và(hoặc) Item, hơi khó hiểu nhỉ để dễ hình dùng hơn là nhóm này gợi ý dựa trên rating của User với Item hay được recommended tới User dự trên những User có hành vi tương tự. Ví dụ: Có 4 cô A,B,C,D đều thích nhạc của Sơn Tùng và là SKY chân chính luôn. Ngoài ra hệ thống còn có thông tin 2 cô A,B đều ghét nhạc của JACK mà k biết 2 cô kia thế nào? Dựa trên phán đoán của hệ thống có thể đề xuất cả 2 cô còn lại đều ghét nhạc của JACK bằng cách rating 1 sao hoặc dislike nhạc và không bao giờ gợi ý nhạc JACK cho 2 cô còn lại . Trong CF này còn được chia ra làm 3 cách khách nhau như NCF (Neural Collaborative Filtering) , NBCF (Neighborhood-Based Collaborative Filtering) , MF(Matrix Factorization Collaborative Filtering) về chi tiết 3 cách này mình sẽ đi vào chi tiết ở các bài viết tới.

Vậy chúng ta nên sử dụng phương pháp nào cho ứng dụng của mình?

Có một điều dễ nhận thấy là nếu chúng ta sử dụng Collaborative filtering thì rõ ràng là chúng ta đã có 1 lượng data khá ổn định về rating , feedback của khách hàng để đưa ra đề xuất hợp lí và chính xác nhất chính vì vậy cách này được sử dụng khi bạn đã có 1 lượng thông tin đủ dày rồi nhưng cách này lại đưa ra đề xuất 1 cách chính xác hơn nhưng nếu bạn chưa có đủ lượng data cần thiết thì cách Content-based lại khá hữu ích khi bạn chưa có được lượng data về rating hay feedback mà chỉ có thông tin item mà User quan tâm. Chính vì vậy tùy vào tình huống , trường hợp của mỗi ứng dụng mà chúng ta sẽ sử dụng cách nào.

Utility matrix

Như đã đề cập, có hai thực thể chính trong các Recommendation Systems là users và items. Mỗi user sẽ có mức độ quan tâm (degree of preference) tới từng item khác nhau. Mức độ quan tâm này, nếu đã biết trước, được gán cho một giá trị ứng với mỗi cặp user-item. Giả sử rằng mức độ quan tâm được đo bằng giá trị user rate cho item, ta tạm gọi giá trị này là rating. Tập hợp tất cả các ratings, bao gồm cả những giá trị chưa biết cần được dự đoán, tạo nên một ma trận gọi là utility matrix. Xét vị dụ:

Ví dụ về utility matrix

Hình 1: Ví dụ về utility matrix với hệ thống Gợi ý.

Các item được người dùng đánh giá từ 1 đến 5. Các dấu ‘?’ ứng với việc dữ liệu chưa tồn tại trong cơ sở dữ liệu. Nhiệm vụ của RS là phải tự điền các giá trị và các ô còn thiếu này và từ đó đưa ra gợi ý cho người dùng.

Thông thường, có rất nhiều users và items trong hệ thống, và mỗi user thường chỉ rate một số lượng rất nhỏ các item, thậm chí có những user không rate item nào (với những users này thì cách tốt nhất là gợi ý các items phổ biến nhất). Vì vậy, lượng ô ‘?’ của utility matrix trong các bài toán đó thường là rất lớn, và lượng các ô đã được điền là một số rất nhỏ.

Rõ ràng rằng càng nhiều ô được điền thì độ chính xác của hệ thống sẽ càng được cải thiện. Vì vậy, các hệ thống luôn luôn hỏi người dùng về sự quan tâm của họ tới sản phẩm, và muốn người dùng đánh giá càng nhiều sản phẩm càng tốt. Việc đánh giá các sản phẩm, vì thế, không những giúp các người dùng khác biết được chất lượng sản phẩm mà còn giúp hệ thống biết được sở thích của người dùng, qua đó có chính sách quảng cáo hợp lý.

Không có utility matrix gần như là không thể đưa ra gợi ý chính xác tới người dùng cũng có thể đưa ra các sản phẩm phổ biến nhất. Vì vậy trong các Recommendation Systems, việc hoàn thiện hay xây dựng utility matrix là điều rất cần thiết nhưng việc xây dựng nó lại rất khó khăn vì khách hàng thường mua hàng xong là mất hút luôn mà k để lại bất kì dạng feedback gì cả chính vì vậy mà các ông lớn đã tìm ra rất nhiều cách để lấy cái feedback này của khách hàng và mình đúc kết lại có 3 cách chính sau để lấy rating của khách hàng:

  • Yêu cầu người dùng Rating sản phẩm, các ông lớn như Amazon, Alibaba , Shopee thường sẽ gửi mail liên tục nếu bạn không rating sẩn phẩm của họ hoặc thông báo đến bạn và rất nhiều trang thương mại điện tử cũng làm theo các cách này để lấy được rating của khách hàng nhưng nó lại khá là gây ức chế cho người dùng và dễ gây ra rating chống đối, không đúng mong muốn
  • Cách thứ hai đó là dựa theo hành vi người dùng , cách này khá là có triển vọng vì dựa vào hành vì chúng ta có thể kết luận được mức độ quan tâm của 1 user đến 1 item nào đó. Ví dụ bạn xem 1 video trên youtube rất nhiều lần thì có thể kết luận rằng bạn thích xem video đó hay là dựa vào các hành vi khách như Like , thả Tym trên facebook , mua 1 món đồ nào đó nhiều lần … Tất cả các hành vi của bạn đều phản ánh sự quan tâm của bạn đến 1 item nào đó vì trả ai ngáo đến nỗi xem đi xem lại 1 thứ nhiều lần trong khi rất ghét nó
  • Lấy rating từ 1 nguồn khác , điển hình là Facebook và Google , chắc chắn bạn đã thấy khi search google 1 cái gì đó hoặc tìm mua 1 món đồ nào đó trên các trang thương mại điện tử khác thì chỉ 1 lúc sau trên facebook bạn sẽ tràn ngập quảng cáo món đồ đó vì Facebook họ dùng 1 cái là Pixel. Anh em có thể hiểu nôm na là 1 đoạn mã nhỏ gắn vào cách website. Đoạn mã này hiểu nôm na nó cho Facebook biết ai là người đang sử dụng ứng dụng nào và cho Facebook biết các trạng thái của bạn như xem , tìm kiếm , thêm vào giỏ hàng , thanh toán … để đưa ra chính sách quảng cáo phù hợp . Kĩ thuật này còn gọi là Retargeting

Có nhiều người thường cho rằng mấy ông lớn đang nghe lén bạn, nếu có thế thật thì chắc mấy ông lớn phải tìm hành tinh khác để lưu trữ dữ liệu và 1 thuật toán thần thánh nào đó để phân tích đống dữ liệu kia đủ nhanh

Tản mạn đến đây thôi, ở bài viết sau mình sẽ đề cập chi tiết đến CBF, 1 trong cách nhánh chính của RS.Tấm chiếu mới trong viết bài về công nghệ như mình sẽ không tránh khỏi sai sót trong kiến thức, mong các huynh đệ có thể góp ý để có gạch xây nhà

Tài liệu mình hay tham khảo

  1. Khá hay và nhiều kiến thức của các pháp sư US-UK AWS Machine Learning Blog

  2. Kho Dataset cho anh em GroupLens

  3. Mình cũng hay tham khảo ở đây TensorFlowBlog

Còn rất nhiều Blog hay về AI , Machine Learning , Data Science nhưng khi nói về phần nào mình sẽ share về phần ý cho anh đỡ phân tâm nhé. Hẹn anh em ở bài viết lần sau nhé , mọi người có thể gọi mình là Yonko

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

You may also like