collaborative filtering la gi

Bài 15 - collaborative và content-based filtering

04 Nov 2019 - phamdinhkhanh

Bạn đang xem: collaborative filtering la gi


1. Thuật toán recommendation

Tại sao trái đất lại cần thiết recommendation

Recommendation hiểu một cơ hội giản dị và đơn giản là khuyến nghị một thành phầm cho tới đích thị người cần thiết mua sắm. Gỉa sử doanh nghiệp lớn của chúng ta sinh hoạt ở VN. Điều bại không tồn tại nghĩa rằng 95 triệu con người Việt tiếp tục mua sắm và chọn lựa của doanh nghiệp lớn chúng ta tuy nhiên có một phần vô số bại mong muốn. Trong số những người tiêu dùng mong muốn thì ko nên ai cũng tiếp tục mua sắm toàn bộ những thành phầm của doanh nghiệp lớn mà người ta với Khi chỉ mua sắm một vài ba thành phầm mà người ta quan hoài.

Một doanh nghiệp lớn nếu còn muốn tối nhiều hóa lợi tức đầu tư thì điều cần thiết nhất bọn họ nên nắm vững người tiêu dùng bọn họ cần thiết gì? Recommendation là 1 trong thuật toán kì lạ rất có thể giúp cho bạn tiến hành vấn đề đó.

Hãy tưởng tượng tình hình sale tiếp tục đi ra sao nếu như không tồn tại thuật toán này? Một loạt những hệ ngược tuy nhiên tớ rất có thể tưởng tượng ra:

  • Công ty ko thể tìm kiếm được đích thị người tiêu dùng tiềm năng Khi người mong muốn so với một thành phầm lại ko được rao bán. Người ko mong muốn lại bị tiếp cận chào kính chào. Như vậy tạo nên tiêu tốn lãng phí thời hạn và dẫn cho tới mất mặt thiện cảm của không giống sản phẩm về công ty của doanh nghiệp lớn.

  • Hiệu ngược marketing gần như là là ko đáng chú ý nếu như không dò la đích thị tập luyện người tiêu dùng. Ngân sách chi tiêu lăng xê, ngân sách mang đến nhân viên cấp dưới sale tạo thêm tuy nhiên lệch giá vẫn thế. Theo một nghiên cứu và phân tích, một trong những công ty sẵn sàng chi ra kể từ 30-40% lợi tức đầu tư mang đến việc marketing. Đây là 1 trong ngân sách rất cao tuy nhiên nhằm tồn bên trên bọn họ ko thể ngừng nhen nhóm chi phí. Cuối nằm trong người hưởng thụ tối đa lại là google, facebook.

Chính vì thế thể thời nay thuật toán recommendation được cải cách và phát triển và phần mềm rộng thoải mái trong vô số công ty nằm trong nhiều chủng loại những nghành không giống nhau như thương nghiệp năng lượng điện tử, tài chủ yếu, ngân hàng, sale, nhỏ lẻ, phim hình ảnh,….

Các cách thức recommendation

Đối với những chúng ta vẫn thân thuộc với recommendation thì những cách thức tôi chuẩn bị trình làng tiếp tục không thể mới nhất kỳ lạ, so với những chúng ta mới nhất xúc tiếp trên đây có lẽ rằng là những vấn đề hữu ích. Lịch sử Thành lập và hoạt động sau mạng internet, recommendation mới chỉ xuất hiện nay và cải cách và phát triển cách đó khoảng chừng 10 năm. Mặc dù cho có tuổi thọ còn tương đối trẻ em tuy nhiên recommendation là 1 trong nghành cải cách và phát triển đặc biệt nhanh chóng, với con số bài bác báo khoa học tập rộng lớn và hấp dẫn được rất nhiều căn nhà nghiên cứu và phân tích. Theo phe cánh machine learning cổ xưa, recommendation tiếp tục bao hàm 2 nhánh chính:

  • content-based: Đưa đi ra những khuyến nghị mua sắm bán ra cho người tiêu dùng dựa vào nội dung tương quan cho tới thành phầm. Chẳng hạn một bài bác hát với những điểm lưu ý như: người trình diễn - Xuân Mai, năm phát triển - 2002, phân mục nhạc thiếu thốn nhi tiếp tục phù phù hợp với những nhỏ nhắn học tập mầm non. Một thành phầm với quánh điểm: là xì gà, Brand Name - Habanos, vương quốc phát hành - Cuba tiếp tục phù phù hợp với những người dân nam nữ nam giới, với thu nhập cao và sành hút thuốc lá lá.

  • collaborative filtering: Hay hay còn gọi là thanh lọc tương tác, dùng sự tương tác tương hỗ vô hành động sắm sửa trong số những người tiêu dùng nhằm dò la đi ra sở trường của một người tiêu dùng thay đổi với 1 thành phầm. Hầu không còn những hành động hoặc sở trường của người xem đều sở hữu những điểm lưu ý công cộng và rất có thể group lại trở nên những group tương đương. Một phụ nữ giới A nếu như cho tới khu chợ mua sắm dầu chiên thông thường mua sắm tăng nước tương và nước mắm nam ngư. Hành vi này tái diễn so với 100 lượt sắm sửa là 90 phiên thì kĩ năng cao một phụ nữ giới B nếu như mua sắm dầu chiên cũng tiếp tục mua sắm tăng nước tương và nước mắm nam ngư. Từ này sẽ khuyến nghị thành phầm mang đến người tiêu dùng dựa vào hành động của những người tiêu dùng không giống tương quan nhất.

  • kết ăn ý cả hai phương pháp: Hình như tất cả chúng ta cũng rất có thể dùng phối kết hợp cả hai cách thức bên trên sẽ tạo trở nên một thuật toán phối kết hợp. Ưu điểm của cách thức này này là vừa vặn tận dụng tối đa được những vấn đề kể từ phía thành phầm và những vấn đề về hành động sắm sửa của người tiêu dùng.

Về thao diễn giải thuật toán 2 cách thức này tôi thấy những nội dung bài viết kể từ 23 cho tới 25 bên trên machine learning cơ phiên bản là cụ thể và chuẩn chỉnh mực nhất. Để hiểu cặn kẽ về thuật toán những bạn cũng có thể xem thêm những nội dung bài viết này.

Ngoài đi ra, nếu như bạn là 1 trong tình nhân quí deep learning, sẽ sở hữu được tăng thật nhiều những cách thức không giống được phần mềm vô recommendation mang đến hiệu quả cực tốt bại là:

  • Thuật toán LSTM Dự kiến thành phầm với kĩ năng mua sắm tiếp theo sau của người tiêu dùng phụ thuộc lịch sử dân tộc sắm sửa.

  • Sử dụng những thuật toán NLP (Natural language processing - Xử lý ngữ điệu tự động nhiên) nhằm phân tách những vấn đề như phần thương hiệu thành phầm, tế bào mô tả thành phầm, comment người tiêu dùng về thành phầm nhằm dò la đi ra thành phầm tương đương.

  • Sử dụng AutoEncoder nhằm dò la tìm kiếm thành phầm tương đương, người tiêu dùng tương đương. Về tự động hóa encoder rất có thể coi tăng bên trên Bài 3 - Mô hình Word2Vec.

  • Các khối hệ thống tìm kiếm engine dựa vào hình hình ảnh của thành phầm.

  • Sử dụng reignforcement learning nhằm recommend thành phầm dựa vào những dự đoán về hành động tiếp theo sau của người tiêu dùng.

  • Sử dụng LDA nhằm clustering những group thành phầm với công cộng điểm lưu ý và rất có thể thay cho thế được lẫn nhau.

  • Thuật toán association nhằm dò la những thành phầm hoặc group người tiêu dùng với côn trùng contact vô hành động sắm sửa trải qua một chỉ số là levarage.

Và thời điểm hiện tại những thuật toán về recommendation vẫn đang được kế tiếp cải cách và phát triển mạnh mẽ và tự tin bên trên những doanh nghiệp lớn và lab nghiên cứu và phân tích bên trên toàn trái đất.

Recommendation mang lại lợi ích gì mang đến quầy bán hàng của bạn?

Gỉa sử chúng ta với 1 quầy bán hàng rất rộng, rất có thể chứa chấp cho tới vài ba ngàn thành phầm. Theo nguyên tắc pareto thì 20% những thành phầm cần thiết nhất tiếp tục mang đến 80% lệch giá, trong những lúc không khí trưng bày là hạn chế nên chúng ta ko thể show đi ra không còn 100% những thành phầm chúng ta với. Một cơ hội thường thì nhất tuy nhiên tất cả chúng ta thông thường nghĩ về cho tới bại là:

  • Trưng bày những thành phầm thịnh hành hoặc hút khách nhất bên trên địa điểm dễ dàng tiếp cận nhất.
  • Gom những thành phầm với hiệu quả tương tự động nhau trở nên những group thành phầm và trưng bày một không nhiều thành phầm trong những group cho tới người tiêu dùng.

Tuy nhiên việc này còn có điểm yếu là ko nên 100% những người tiêu dùng tìm về đều mong muốn mua sắm những thành phầm thịnh hành nhất. Do bại cần phải có một thuật toán nắm vững với từng group người tiêu dùng với điểm lưu ý ví dụ tiếp tục mua sắm gì? siêu thị cần thiết bày trí những thành phầm nào? bên trên đâu? so với người tiêu dùng nào? thì tiếp tục tối ưu được lệch giá, tận dụng tối đa được mối cung cấp sản phẩm sẵn với và ngày càng tăng kĩ năng bán sản phẩm.

Đây đó là một trong mỗi nguyên tố then chốt tạo ra sự khác lạ trong số những sàn thương nghiệp năng lượng điện tử vì thế số số lượng hàng hóa của một sàn thương nghiệp năng lượng điện tử rất có thể lên đến vài ba triệu tuy nhiên hình mẫu chỉ được chấp nhận hiển thị một trong những lượng không nhiều những thành phầm. Vấn đề cá thể hóa (personalization) để mang đi ra những hiển thị thành phầm phù hợp nhất cho tới từng cá thể người tiêu dùng được xem là vấn đề tuy nhiên từng sàn thương nghiệp năng lượng điện tử luôn luôn dò la cơ hội nâng cấp. Có nhiều phương pháp để tiến hành việc cá thể hóa người tiêu dùng và recommendation tiếp tục giúp cho bạn tiến hành việc bại.

Bên bên dưới tất cả chúng ta tiếp tục theo lần lượt trải qua những thuật toán này nhằm làm rõ rộng lớn về cách thức, chế độ sinh hoạt của chính nó.

2.1. Content-based filtering

Về cách thức của content-based filtering và được trình diễn đặc biệt cụ thể bên trên Bài 23: Content-based Recommendation Systems. Tôi tiếp tục trình làng bao quát nhất về thuật toán này.

Đối với từng một item tất cả chúng ta tiếp tục dò la cơ hội khởi tạo nên một item profile bằng phương pháp tích lũy những ngôi trường vấn đề tương quan cho tới item. Mỗi một item profile được đại diện thay mặt vì chưng một véc tơ đặc thù $\mathbf{x}$. Gọi $S_i$ là tụ hợp những thành phầm tuy nhiên người tiêu dùng $i$ vẫn rating và độ quý hiếm rating là véc tơ $\mathbf{y_i}$. Khi bại tất cả chúng ta cần thiết dò la thông số $\mathbf{w_i}$ là véc tơ cột chứa chấp những thông số hồi qui thể hiện nay cường độ yêu thương quí của người tiêu dùng $i$ so với từng một chiều của thành phầm.

Hàm loss function so với những thành phầm tuy nhiên người tiêu dùng $i$ vẫn rating sẽ sở hữu được dạng:

\[\mathcal{L_i}(\mathbf{x_j}; \mathbf{y_i}| j \in S_{i}) = \frac{1}{2 s_i} \sum_{j \in S_i}{(\mathbf{x_jw_i} + b_i - y_{ij})^{2}}\]

Trong bại $y_{ij}$ là 1 trong thành phần của véc tơ $\mathbf{y_i}$, $b_i$ là thông số tự tại vô phương trình hồi qui tuyến tính và $s_i$ là con số thành phầm tuy nhiên người tiêu dùng $i$ vẫn review.

Nếu tớ trích xuất đi ra quái trận con cái $\mathbf{X_i}$ bao gồm những thành phầm tuy nhiên người tiêu dùng $i$ vẫn rating. Mỗi loại của quái trận là 1 trong véc tơ những đặc thù ứng với 1 thành phầm. Khi bại hàm loss function rất có thể được viết lách gọn gàng lại thành:

\[\mathcal{L_i}(\mathbf{X_i}; \mathbf{y_i}) = \frac{1}{2 s_i}{||\mathbf{X_iw_i} + b_i \mathbf{e_i} - \mathbf{y_i}||_2^{2}}\]

Với $\mathbf{e_i}$ là véc tơ cột bao gồm $s_i$ phần kể từ vì chưng 1.

Để rút gọn gàng không chỉ có thế hàm loss function tớ trình diễn nó đưới dạng phương trình của quái trận há rộng:

\[\mathcal{L_i}(\mathbf{X_i}; \mathbf{y_i}) = \frac{1}{2 s_i} ||\mathbf{\bar{X_i} \bar{w_i}} - \mathbf{y_i}||_2^{2}\]

Ở trên đây quái trận $\mathbf{\bar{X_i}}$ là quái trận không ngừng mở rộng của $\mathbf{X_i}$ bằng phương pháp thêm 1 véc tơ cột vì chưng 1 ở cuối. $\mathbf{\bar{w_i}}$ cũng chính là véc tơ không ngừng mở rộng của $\mathbf{w_i}$ Khi tăng thành phần 1 ở cuối.

Đây là 1 trong phương trình hồi qui tuyến tính thân thuộc cho nên việc giải nó khá dễ dàng. Trong một trong những tình huống nhằm tách overfiting thì tớ tiếp tục tăng bộ phận trấn áp (regularization term) theo đòi norm chuẩn chỉnh bậc 2 của $\mathbf{w_i}$ với trọng số là $\lambda$ (thường có mức giá trị đặc biệt nhỏ). Hàm loss function với bộ phận trấn áp tiếp tục như sau:

\[\mathcal{L_i}(\mathbf{X_i}; \mathbf{y_i}) = \frac{1}{2 s_i} ||\mathbf{\bar{X_i}\bar{w_i}} - \mathbf{y_i}||_2^{2} + \frac{\lambda}{2 s_i}||\mathbf{\bar{w_i}}||_2^{2}\]

Ưu điểm của cách thức này là sự phân loại hoặc dự đoán rating của những user tiếp tục song lập nhau. Điểm rating của một người tiêu dùng A lên thành phầm P.. tiếp tục không xẩy ra dựa vào vì chưng những user không giống tuy nhiên chỉ tùy theo những điểm lưu ý tương quan cho tới thành phầm P.. Do bại quality dự đoán sẽ tiến hành tạo thêm Khi tài liệu được tích lũy về thành phầm là những ngôi trường với cần thiết tác động cho tới sở trường của người tiêu dùng.

2.2. Collaborative filtering

Collaborative filtering là thuật toán thanh lọc tương tác tức là dò la đi ra thành phầm tuy nhiên người tiêu dùng với kĩ năng ưa quí nhất phụ thuộc những thành phầm tuy nhiên những người tiêu dùng không giống với hành động tương tự động vẫn lựa lựa chọn. Thuật toán sẽ không còn cần dùng vấn đề thành phầm là nguồn vào mang đến dự đoán rating. Đầu vô của thuật toán là 1 trong ma trận tiện ích (ultility matrix) chứa chấp độ quý hiếm rating của những cặp (user, item). Mỗi cột là những rating tuy nhiên một user vẫn rate và từng loại là những rating của một item được rate. Có 2 cách thức chủ yếu được dùng vô collaborative filtering gồm những: Neighborhood-based collaborative Filtering và Matrix Fractorization.

2.2.1. Neighborhood-based collaborative Filtering

Ở cách thức này tớ tiếp tục cần thiết xây đắp quái trận thông số đối sánh tương quan của véc tơ rating của những users nhằm dò la đi ra group users với nằm trong sở trường. Hệ số đối sánh tương quan trong số những users càng rộng lớn thì sở trường của mình càng giống như nhau và ngược lại thì bọn họ càng với sở trường khác lạ. Thuật toán tiếp tục Dự kiến độ quý hiếm rating bên trên một cặp (user, item) không được rate bằng phương pháp tính tổng với trọng số những độ quý hiếm rating của $k$ users đối sánh tương quan nhất với user này mà vẫn rate item bên trên. Trọng số thường thì tiếp tục bẳng chủ yếu thông số đối sánh tương quan.

Để xây đắp một thuật toán Neighborhood-based collaborative Filtering tất cả chúng ta cần thiết trải qua loa công việc cơ phiên bản bên dưới. Để giản dị và đơn giản hóa quy trình đo lường và tính toán, tôi van phép tắc lấy hình vẽ minh họa kể từ blog machine learning cơ phiên bản.

Hình 1: Sơ thiết bị công việc tiến hành thuật toán Neighborhood-based collabrative Filtering (source - Bài 24: Neighborhood-Based Collaborative Filtering). Bao bao gồm những bước: a) Lấy khoảng những cột, b) Chuẩn hóa quái trận bằng phương pháp trừ lên đường khoảng, c) Tính thông số đối sánh tương quan của quái trận chuẩn chỉnh hóa, d) Dự đoán bên trên quái trận chuẩn chỉnh hóa những địa điểm không được rate, e) Diễn giải công thức dự đoán rating, f) Chuyển thay đổi quý phái độ quý hiếm rating thực tiễn.

Thuật toán tiếp tục trải qua loa theo lần lượt những step sau đây:

  1. Chuẩn hóa tài liệu ở quái trận tiện nghi $\mathbf{Y}$ bằng phương pháp trừ lên đường ở từng cột (là những rating của nằm trong 1 user) khoảng độ quý hiếm rating của cột. Việc này là nhằm vô hiệu hóa sự khác lạ về cường độ mang đến điểm của những user. Vì ví dụ: Có một trong những user khó tính khó nết rất có thể mang đến điểm tối đa là 3 tuy nhiên user dễ dàng tính thì điểm thấp nhất là 3. Khi bại nếu như nhận định và đánh giá user khó tính khó nết ko quí item (nếu tớ coi 3 là vấn đề thấp) hoặc user dễ dàng tính yêu thương quí item (nếu tớ coi 3 là vấn đề cao) là ko chuẩn chỉnh xác. Chuẩn hóa độ quý hiếm rating nhằm mục đích mục tiêu fake khoảng rating của những user sau khoản thời gian chuẩn chỉnh hóa về 0. Gía trị rating dương thể hiện nay user ưa quí item và ngược lại âm được xem là ko quí, vì chưng 0 là trung lập.

  2. Tính quái trận thông số đối sánh tương quan trong số những véc tơ cột. Ma trận đối sánh tương quan thể hiện nay sự tương đương vô hành động sắm sửa trong số những user. Từ quái trận đối sánh tương quan tớ rất có thể xác lập đi ra những users với sở trường tương tương đồng với 1 user xác lập. Hệ số đối sánh tương quan dương và càng ngay gần 1 chứng minh 2 users với sở trường giống như nhau. Hệ số đối sánh tương quan âm là 2 users với hành động ngược ngược.

  3. Dự báo rating của một user $u$ cho 1 item $i$ bằng phương pháp xác lập bên trên quái trận thông số đối sánh tương quan một tập luyện $\mathcal{S}(u, k | i)$ bao gồm $k$ users có mức giá trị đối sánh tương quan lớn số 1 so với user $u$ vẫn rate item $i$. Gía trị dự đoán rating của user $u$ sẽ tiến hành tính vì chưng tổng với trọng số của những rating vô tập luyện $k$ users đối sánh tương quan nêu bên trên theo đòi công thức mặt mày dưới: \(\hat{y}_{i, u} = \frac{\sum_{u_j \in \mathcal{S}(u, k|i)} \bar{y}_{i, u_j} \text{sim}(u, u_j)}{\sum_{u_j \in \mathcal{S}(u, k|i)} |\text{sim}(u, u_j)|}\)

  4. Chuyển độ quý hiếm dự đoán ở quái trận chuẩn chỉnh hóa quý phái độ quý hiếm dự đoán rating bằng phương pháp với những độ quý hiếm ở quái trận chuẩn chỉnh hóa với độ quý hiếm khoảng của từng cột.

Hạn chế của cách thức collaborative filtering:

Xem thêm: be yeu truyen

  • Thường nên lưu một quái trận thông số đối sánh tương quan với độ cao thấp rất rộng. Việc này dẫn cho tới tốn khoáng sản tàng trữ và thời hạn đo lường và tính toán.

  • Ở bên trên tớ vẫn lựa lựa chọn việc chuẩn chỉnh hóa theo hướng user. Hình như, tớ cũng rất có thể lựa lựa chọn chuẩn chỉnh hóa theo hướng item tuy nhiên ko thực hiện thay cho thay đổi cách thức bằng phương pháp fake vị quái trận tiện tích $\mathbf{Y}$. Việc lựa lựa chọn chuẩn chỉnh hóa theo hướng này tiếp tục địa thế căn cứ bên trên độ cao thấp theo hướng này là to hơn. Thông thông thường con số user tiếp tục nhiều hơn thế item. Khi bại chuẩn chỉnh hóa theo đòi item sẽ sở hữu được ưu thế rộng lớn bởi: Kích thước quái trận thông số đối sánh tương quan trong số những user là nhỏ rộng lớn nên tốn không nhiều khoáng sản. Thêm nữa Khi một user rating một item mới nhất thì độ quý hiếm thay cho thay đổi về khoảng bên trên từng cột item là nhỏ rộng lớn đối với tình huống chuẩn chỉnh hóa theo đòi user. Như vậy dẫn cho tới quái trận thông số đối sánh tương quan không nhiều thay cho thay đổi rộng lớn và gia tốc update cũng thấp hơn.

Bên cạnh thuật toán Neighborhood-based collaborative Filtering, một thuật toán không giống cũng nằm trong lớp những vấn đề collabrative filtering này là matrix fractorization. Thuật toán này thông thường mang đến phỏng đúng đắn cao hơn nữa và mặt khác đòi hỏi không nhiều khoáng sản tàng trữ rộng lớn. Cụ thể về mặt mày mũi thuật toán thế nào hãy coi phần trình làng bên dưới.

2.2.2. Matrix fractorization

Ngoài đi ra còn một cách thức collaborative filtering không giống dựa vào một phép tắc phân tan quái trận (matrix fractorization). Tức là tất cả chúng ta tiếp tục phân tách quái trận tiện nghi kết quả của những quái trận items và quái trận users.

\[\begin{equation} \mathbf{Y} \approx \left[ \begin{matrix} \mathbf{x}_1\mathbf{w}_1 & \mathbf{x}_1\mathbf{w}_2 & \dots & \mathbf{x}_1 \mathbf{w}_M\\ \mathbf{x}_2\mathbf{w}_1 & \mathbf{x}_2\mathbf{w}_2 & \dots & \mathbf{x}_2 \mathbf{w}_M\\ \dots & \dots & \ddots & \dots \\ \mathbf{x}_N\mathbf{w}_1 & \mathbf{x}_N\mathbf{w}_2 & \dots & \mathbf{x}_N \mathbf{w}_M\\ \end{matrix} \right] = \left[ \begin{matrix} \mathbf{x}_1 \\ \mathbf{x}_2 \\ \dots \\ \mathbf{x}_N \\ \end{matrix} \right] \left[ \begin{matrix} \mathbf{w}_1 & \mathbf{w}_2 & \dots & \mathbf{w}_M \end{matrix} \right] = \mathbf{XW} \end{equation}\]

Khi bại từng loại của quái trận $\mathbf{X}$ đại diện thay mặt cho 1 véc tơ yếu tố ẩn của một item, này là những yếu tố bất kì, đặc biệt trừu tượng tuy nhiên tất cả chúng ta ko nên được sắp xếp thương hiệu mang đến bọn chúng. Mỗi cột của quái trận $\mathbf{W}$ đại diện thay mặt cho 1 véc tơ những thông số thể hiện nay cường độ yêu thương quí của user so với những yếu tố ẩn. Số lượng yếu tố ẩn thường thì là một trong những có mức giá trị đặc biệt nhỏ đối với con số user và item nên dung tích cần thiết tàng trữ so với 2 quái trận $\mathbf{X}$ và $\mathbf{W}$ là đặc biệt nhỏ đối với tàng trữ toàn cỗ quái trận $\mathbf{Y}$.

Sau Khi tìm kiếm được những quái trận items $\mathbf{X}$ và quái trận users $\mathbf{W}$, độ quý hiếm ước tính rating của một user $j$ lên một item $i$ tiếp tục chủ yếu vì chưng tích: \(\hat{y_{ij}} = \mathbf{x_i}^T\mathbf{w_j}\) Như vậy độ quý hiếm dự đoán được xem toán giản dị và đơn giản rộng lớn đối với Neighborhood-based collaborative Filtering vì thế chỉ việc tiến hành phép tắc nhân véc tơ tuy nhiên không nhất thiết phải cùng theo với khoảng cột nhằm fake về độ quý hiếm gốc.

Qúa trình dự đoán thông số mang đến quy mô hồi qui của từng user tương tự động như cách thức content-based filtering. Nhưng với sự phối kết hợp thân thuộc dò la nghiệm tối ưu của quái trận items và quái trận users. Qúa trình này được tiến hành đan xen nhau nên không chỉ có tận dụng tối đa được những vấn đề là nguồn vào của users mà còn phải tận dụng tối đa được sự giống như nhau vô sở trường của những users. Chính vì vậy cách thức vừa mới được xếp vô group collaborative filtering.

Thuật toán

Thuật toán này đòi hỏi tớ nên tiến hành tối ưu mặt khác cả hai quái trận users và quái trận items dựa vào hàm mất mặt non. Khi cần thiết tối ưu quái trận users $\mathbf{W}$ tớ tiếp tục thắt chặt và cố định quái trận items $\mathbf{X}$ và dịch fake theo đòi phương gradient descent đạo hàm của $\mathbf{W}$ và ngược lại. Thiết lập hàm loss function và quy trình tối ưu tiếp tục tương tự động như thuật toán content-based Filtering thường thì nước ngoài trừ được thêm bộ phận dò la soát regularization của $\mathbf{X}$ và $\mathbf{W}$ và ko chứa chấp thông số tự tại. Hàm loss function với dạng như sau:

\[\mathcal{L}(\mathbf{X}, \mathbf{W}) = \sum_{i=1}^{N}\frac{1}{2s_i} ||\mathbf{X_iw_i} - \mathbf{y_i}||_2^2 + \frac{\lambda}{2} (||\mathbf{X}||_F^2+||\mathbf{W}||_F^2)\]

Bên bên dưới là hàm mất mặt non của quái trận user $\mathbf{W}$ Khi thắt chặt và cố định quái trận item $\mathbf{X}$.

\[\mathcal{L}(\mathbf{W}) = \sum_{i=1}^{N}\frac{1}{2s_i} ||\mathbf{X_i w_i} - \mathbf{y_i}||_2^2 + \frac{\lambda}{2} ||\mathbf{W}||_F^2\]

Hàm mất mặt non của quái trận item $\mathbf{X}$ Khi thắt chặt và cố định quái trận user $\mathbf{W}$: \(\mathcal{L}(\mathbf{X}) = \sum_{j=1}^{M}\frac{1}{2s_j} ||\mathbf{x_jW_j} - \mathbf{y_j}||_2^2 + \frac{\lambda}{2} ||\mathbf{X}||_F^2\)

Về thực chất vấn đề của tất cả chúng ta rất có thể tạo thành $N$ vấn đề nhỏ và từng vấn đề ứng với đi tìm kiếm nghiệm tối ưu cho 1 user. Khi bại phương trình mất mặt non bên trên một user tiếp tục là:

\[\mathcal{L}(\mathbf{w_i}) = \frac{1}{2s_i} ||\mathbf{X_i w_i} - \mathbf{y_i}||_2^2 + \frac{\lambda}{2} ||\mathbf{w_i}||_F^2 \tag{1}\]

Đạo hàm so với một user tiếp tục là:

\[\frac{\partial \mathcal{L}(\mathbf{w_i})}{\partial \mathbf{w_i}} = \frac{1}{s_i}\mathbf{X_i}^T(\mathbf{X_i}\mathbf{w_i}-\mathbf{y_i}) + \lambda \mathbf{w_i} \tag{2}\]

Một quy trình update nghiệm theo đòi gradient descent sẽ tiến hành tiến hành như sau:

\[\mathbf{w_i} = \mathbf{w_i} - \eta \left(\frac{1}{s_i}\mathbf{X_i}^T (\mathbf{X_i}\mathbf{w_i}-\mathbf{y_i}) + \lambda \mathbf{w_i}\right)\]

Hoàn toàn tương tự động tớ cũng suy đi ra phương trình update nghiệm theo đòi gradient descent bên trên $\mathbf{x_j}$:

\[\mathbf{x_j} = \mathbf{x_j} - \eta \left(\frac{1}{s}(\mathbf{x_j}\mathbf{W_j}-{\mathbf{y_j}})\mathbf{W_j}^T + \lambda \mathbf{x_j}\right)\]

Qúa trình đào tạo và huấn luyện theo đòi gradient descent sẽ tương đối lâu vì thế vận tốc quy tụ tùy theo learning rate. Trong Khi tớ nhận ra hàm loss function bên trên từng user hoặc item rất có thể đo lường và tính toán được nghiệm tối ưu trải qua giải phương trình đạo hàm. Qúa trình quy tụ đan xen $\mathbf{X}$ và $\mathbf{W}$ Khi tính theo đòi phương trình nghiệm tiếp tục nhanh chóng rộng lớn thật nhiều đối với gradient descent. Phương pháp này mang tên là ALS (Alternating Least Square). Giải phương trình đạo hàm so với user loại $i$:

\[\begin{eqnarray}\frac{1}{s_i}\mathbf{X_i}^T(\mathbf{X_i}\mathbf{w_i}-\mathbf{y_i}) + \lambda \mathbf{w_i} & = & 0 \\ (\mathbf{X_i}^T\mathbf{X_i}+\lambda' \mathbf{I})\mathbf{w_i} & = & \mathbf{X_i}^T\mathbf{y_i} \\ \mathbf{w_i} & = & (\mathbf{X_i}^T\mathbf{X_i}+\lambda' \mathbf{I})^{-1}\mathbf{X_i}^T\mathbf{y_i} \end{eqnarray}\]

Với $\lambda’=s_i \lambda$.

Tương tự động, nghiệm tối ưu so với item loại $j$:

\[\mathbf{x_j} = \mathbf{y_j}\mathbf{W_j}^T(\mathbf{W_j}\mathbf{W_j}^T+\lambda' \mathbf{I})^{-1}\]

Chúng tớ tiếp tục tiến hành vòng lặp đan xen như sau:


Khởi tạo $\mathbf{X}, \mathbf{W}$

repeat

for i = 1,2,…,M do

$\mathbf{w_i} = (\mathbf{X_i}^T\mathbf{X_i}+\lambda’ \mathbf{I})^{-1}\mathbf{X_i}^T\mathbf{y_i}$

end for

for j = 1,2,…,N do

$\mathbf{x_j} = \mathbf{y_j}\mathbf{W_j}^T(\mathbf{W_j}\mathbf{W_j}^T+\lambda’ \mathbf{I})^{-1}$

end for


Huẩn luyện quy mô ALS bên trên python

Hiện bên trên trên pyspark vẫn tương hỗ việc đào tạo và huấn luyện quy mô bên dưới dạng những tệp tin RDD (resilient distributed dataset) là 1 trong loại định hình tệp tin tương hỗ tàng trữ phân nghiền. Để hiểu tăng về những mệnh lệnh cơ phiên bản bên trên pyspark những bạn cũng có thể coi tăng bên trên Bài 5 - Model Pipeline - SparkSQL. Mé bên dưới tôi tiếp tục trình làng qua loa phương thức xây đắp và đào tạo và huấn luyện một quy mô recommendation system theo đòi cách thức ALS (Alternating Least Square) bên trên pyspark.

Bước 1: Load tài liệu và phân tách kiểu train/test.

Dữ liệu sẽ tiến hành load bên dưới dạng rdd. Đây là định hình tài liệu Chịu đựng lỗi chất lượng tốt và với kĩ năng phân nghiền hoạt bát trên rất nhiều cụm xử lý của spark. Vì những tiện nghi này bọn chúng thông thường được dùng trong số đo lường và tính toán và đổi khác tài liệu.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from pyspark.ml.evaluation import RegressionEvaluator
from pyspark.ml.recommendation import ALS
from pyspark.sql import Row

# Khởi tạo nên một sparkSession
spark = SparkSession. \
  .builder \
  .appName("ALS recommendation spark session") \
  .getOrCreate()

# Đọc tài liệu kể từ dat file
lines = spark.read.text("data/ml-1m/ratings.dat")
# Sử dụng lazy load nhằm map tài liệu bên dưới dạng rdd
parts = lines.rdd.map(lambda row: row.value.split(":"))
ratingRDD = parts.map(lambda p: Row(userId=int(p[0]), movieId=int(p[1]),
                                    rating=float(p[2]), timestamp=int(p[3])))

# Khởi tạo nên sparkDataFrame kể từ pandas dataFrame
ratings = spark.createDataFrame(ratingsRDD)
# Chia kiểu train, test theo đòi tỷ trọng 0.8/0.2
(trainig, testing) = ratings.randomSplit([0.8, 0.2])

Hiển thị 5 loại trước tiên của tệp tin ratings.dat.

1
2
3
4
5
6
7
8
9
10
+--------------------+
|               value|
+--------------------+
|1::1193::5::97830...|
|1::661::3::978302109|
|1::914::3::978301968|
|1::3408::4::97830...|
|1::2355::5::97882...|
+--------------------+
only showing top 5 rows

Bước 2: Xây dựng và review quy mô ALS bên trên pyspark.

Sử dụng module pyspark.ml.recommendation tớ rất có thể dễ dàng và đơn giản xây đắp một quy mô recommendation theo đòi cách thức ALS. Các thông số Khi khởi tạo nên quy mô bại là:

  • maxIter: Số lượng vòng lặp tối đa
  • regParam: Hệ số trấn áp regularization
  • userCol: thương hiệu cột chứa chấp id của user
  • itemCol: thương hiệu cột chứa chấp id của item
  • ratingCol: thương hiệu cột chứa chấp độ quý hiếm của rating
1
2
3
4
5
6
7
8
9
# Xây dựng quy mô recommendation dùng thuật toán ALS bên trên tập luyện tài liệu huấn luyện

from datetime import datetime
start_time = datetime.now()
als = ALS(maxIter=5, regParam=0.01, userCol="userId", itemCol="movieId", ratingCol="rating")
model = als.fit(training)
end_time = datetime.now()

print('Execute time {}'.format(end_tine - start_time))

Thời gian trá đào tạo và huấn luyện tiếp tục chỉ không còn khoảng chừng 5 phút bên trên PC của tớ trong những lúc đào tạo và huấn luyện những quy mô content-based và collaborative-filtering tuy nhiên tôi đã tiến hành bên trên matrix fractorization movie length-1m bên trên nằm trong cỗ tài liệu không còn ngay gần 2 giờ đồng hồ. Theo bản thân nhận ra ALS training nhanh chóng rộng lớn thật nhiều đối với những dạng thuật toán collaborative và content-based filtering không giống. Cuối nằm trong là review quy mô trải qua chỉ số căn bậc 2 của khoảng sai số dự đoán đối với độ quý hiếm rating bên trên tập luyện test, chỉ số RMSE.

1
2
3
4
5
predictions = model.transform(test)
evaluator = RegressionEvaluator(metricName="rmse", labelCol="rating",
                               predictionCol="prediction")
rmse = evaluator.evaluate(predictions)
print("Root-mean-square error = " + str(rmse))
1
Root-mean-square error = 0.8951146317977956

Giá trị sai số này thấp rộng lớn đối với độ quý hiếm sai số thịnh hành của những thuật toán content-based và collaborative-filtering không giống Khi đa số RMSE đều khoảng chừng 0.9x.

Bước 3: Khuyến nghị thành phầm cho những người sử dụng và khuyến nghị người tiêu dùng mang đến thành phầm.

Thông thông thường những nền tảng recommendation tiếp tục dò la đi ra top 5 hoặc 10 thành phầm nhằm khuyến nghị cho những người sử dụng vì thế đó là con số vừa vặn đầy đủ (không rất nhiều, cũng không thực sự ít) nhằm người tiêu dùng lựa lựa chọn. Trong pyspark, nhằm dò la đi ra top 10 thành phầm nhằm khuyến nghị cho từng một user tớ tiến hành mệnh lệnh recommendForAllUsers(10), đặc biệt giản dị và đơn giản nên không?

1
2
# Tạo đi ra top 10 bộ phim truyền hình khuyến nghị cho từng một user
userRecs = model.recommendForAllUsers(10)

Trong thuật toán thì user và item là đồng đẳng, chỉ việc thiến loại mang đến cột bên trên quái trận tiện nghi là tớ chiếm được thuật toán recommend user mang đến item. Muốn dò la đi ra 10 bộ phim truyền hình nhằm khuyến nghị cho 1 user tớ dùng hàm recommendForAllItems(10).

1
2
# Tạo đi ra top 10 user khuyến nghị cho từng một cỗ phim
movieRecs = model.recommendForAllItems(10)

Ngoài đi ra Khi mong muốn khuyến nghị những bộ phim truyền hình cho 1 group những user ví dụ tất cả chúng ta chỉ việc xác lập những userids và truyền vô hàm recommendForUserSubset(). Thực hiện nay như sau:

1
2
3
4
5
6
# Chúng tớ cũng rất có thể đưa đến top 10 bộ phim truyền hình khuyến nghị cho 1 tợp ăn ý những users xác định
users = ratings.select(als.getUserCol()).distinct().limit(3)
userSubsetRecs = model.recommendForUserSubset(users, 10)
# Hoặc tất cả chúng ta cũng rất có thể đưa đến top 10 users được khuyến nghị cho 1 tợp ăn ý những bộ phim truyền hình xác định
movies = ratings.select(als.getItemCol()).distinct().limit(3)
movieSubSetRecs = model.recommendForItemSubset(movies, 10)

Kết ngược của top 10 users được khuyến nghị mang đến 3 bộ phim truyền hình trước tiên.

Xem thêm: hệt như hàn quang gặp nắng gắt hanul

1
list(movieSubSetRecs.select('recommendations').toPandas()['recommendations'])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[[Row(userId=1341, rating=5.175587177276611),
  Row(userId=2339, rating=5.153608322143555),
  Row(userId=4102, rating=5.109521865844727),
  Row(userId=283, rating=5.0519866943359375),
  Row(userId=784, rating=5.00510311126709),
  Row(userId=2694, rating=4.987912178039551),
  Row(userId=1732, rating=4.95065975189209),
  Row(userId=210, rating=4.94167947769165),
  Row(userId=4755, rating=4.934195518493652),
  Row(userId=215, rating=4.904910087585449)],
 [Row(userId=527, rating=6.74972677230835),
  Row(userId=4565, rating=6.49608850479126),
  Row(userId=2138, rating=6.310940265655518),
  Row(userId=1083, rating=6.221969127655029),
  Row(userId=5240, rating=6.059254169464111),
  Row(userId=3979, rating=5.884949207305908),
  Row(userId=5052, rating=5.7887372970581055),
  Row(userId=1235, rating=5.761867046356201),
  Row(userId=1919, rating=5.707066059112549),
  Row(userId=1576, rating=5.6702494621276855)],
 [Row(userId=4996, rating=6.651019096374512),
  Row(userId=4871, rating=6.003638744354248),
  Row(userId=5022, rating=5.986178398132324),
  Row(userId=1363, rating=5.890908241271973),
  Row(userId=5062, rating=5.882445812225342),
  Row(userId=761, rating=5.85439395904541),
  Row(userId=1557, rating=5.842338562011719),
  Row(userId=768, rating=5.804270267486572),
  Row(userId=5440, rating=5.796679973602295),
  Row(userId=4069, rating=5.729244709014893)]]

Ta nhận ra những user được lựa lựa chọn nhằm khuyến nghị cho 1 bộ phim truyền hình đều sở hữu rating tối đa. Thứ tự động bố trí của rating cũng chính là kể từ cao xuống thấp.

Trên trên đây tôi vẫn trình làng sơ qua loa mang đến chúng ta đa số những cách thức recommendation cổ xưa theo đòi 2 group chủ yếu collaborative filtering và content-based filtering. Các cách thức này lúc bấy giờ không nhiều được dùng vì thế ko đáp ứng nhu cầu được đòi hỏi vận tốc đo lường và tính toán bên trên những khối hệ thống tài liệu càng ngày càng rộng lớn và phỏng đúng đắn cũng kém cỏi rộng lớn đối với những cách thức dùng mạng neural network.

Bài tiếp theo sau tôi tiếp tục dành riêng nhằm viết lách về những cách thức recommendation dùng mạng neural network có tính chuẩn chỉnh xác cao hơn nữa.

3. Tài liệu tham lam khảo

  1. collaborative filtering - wikipedia
  2. content-based filtering - google course
  3. collaborative filtering - google course
  4. content-based filtering - machinelearningcoban
  5. collaborative filtering - machinelearningcoban
  6. ALS - alternative least square - standford