Giải thuật lọc cộng tác (Neighborhood-based Collaborative Filtering)

Một phần của tài liệu Ứng dụng phân hệ gợi ý vào hệ thống thương mại điện tử (Trang 55)

4.3.1.1.!Ý tưởng

Ý tưởng cơ bản của giải thuật lọc cộng tác này là xác định mức độ quan tâm của một người dùng(user) tới một món sản phẩm(item) dựa trên dựa trên các người dùng khác gần giống với người dùng này. Việc gần giống nhau giữa các người dùng có thể được xác định thông qua mức độ quan tâm của các người dùng này tới các sản phẩm khác mà hệ thống đã biết. Ví dụ 2 người dùng A và B đều quan tâm tới sản phẩm iPhone 11 pro max, có số lượt xem, quan tâm đến sản phẩm này cao, ta lại biết them A cũng quan tâm rất nhiều đến sản phẩm Apple Watch Series 5, vậy nhiều khả năng B cũng quan tấm đến sản phẩm Apple Watch Series 5 này.

Để có thể thực hiện giải thuật lọc cộng tác này, ta cần phải:

¥! Xác định được sự giống nhau, tương tự của 2 người dùng.

¥! Dự đoán mức độ quan tâm của người dùng với một sản phẩm cụ thể.

Việc xác định mức độ quan tâm của một người dùng đến một món sản phẩm dựa trên mức độ quan tâm của một số người dùng tương tự tới một món sản phẩm nào đó được gọi là User-user collaborative filtering. Có một hướng tiếp cận khác là Item-item collaborative filtering. Trong hướng tiếp cận này, thay vì xác định mức độ quan tâm của mỗi người dùng, ta sẽ xác định mức độ tương tự của các sản phẩm. Từ đó, hệ thống sẽ

gợi ý những món sản phẩm gần giống với những sản phẩm mà người dùng quan tâm nhiều.

Trong hệ thống của chúng ta, ta sẽ sử dụng thuật toán User-user collaborative filtering để thực hiện gợi ý sản phẩm cho từng người dùng khác nhau. Sau đây ta sẽ đi sâu vào từng bước thực hiện giải thuật này.

4.3.1.2.!Các bước thực hiện

Trước tiên, ta cần phải xác định được sự giống nhau(similarity) giữa 2 người dùng. Dữ liệu duy nhất mà chúng ta có là Utility matrix Y, là ma trận thể hiện mức độ quan tâm của các người dùng đến các món sản phẩm thông qua số lượt xem, tương tác với các món sản phẩm này, vậy nên sự giống nhau này phải được xác định dựa trên các cột tương ứng với 2 người dùng trong ma trận này.

Ta xét ví dụ trong bảng sau đây:

u0 u1 u2 u3 u4 u5 u6 i0 5 5 2 0 1 ? ? i1 3 ? ? 0 ? ? ? i2 ? 4 1 ? ? 1 2 i3 2 2 3 4 4 ? 4 i4 2 0 4 ? ? ? 5

Bảng 4.11: ví dụ về utility matrix dựa trên số lượng tương tác của người dùng

Từ bảng utility matrix trên, ta có thể thấy được hành vi của u0 giống với u1 hơn là u2, u3, u4, u5. u6. Từ đó ta có thể dự đoán rằng u0 sẽ quan tâm tới i2 vì u1 cũng quan tâm tới sản phẩm này. Để dự đoán mức độ quan tâm của các người dùng với các sản phẩm chưa biết, ta sẽ thực hiện theo các bước như sau.

Giả sử ta có các người dùng từ u0 tới u6 và các sản phẩm i0 đến i4, trong đó các số trong mỗi ô vuông thể hiện mức độ quan tâm mà mỗi người dùng đã tương tác cho các sản phẩm, giá trị cao hơn thể hiện mức độ quan tâm cao hơn. Các dấu chấm hỏi là các giá trị mà hệ thống cần dự đoán. Đặt mức độ tương tự của 2 người dùng là ui, uj là sim(ui, uj).

Từ utility matrix trên, ta có thể thấy rằng u0 quan tâm nhiều đến i0, i1 và ít quan tâm hơn đối với i3, i4. Tương tự, ta cũng thấy u1 quan tâm nhiều đến i0, i2 và cũng ít quan tâm đối với i3, i4, trái ngược với các người dùng còn lại. Ta cần có một similarity function thỏa mãn:

0 1 0 i

Từ đó, để xác định mức độ quan tâm của u0 lên i2, chúng ta nên dựa trên hành vi của u1 lên sản phẩm này. Ta thấy rằng u1 quan tâm nhiều đến i2 nên hệ thống cần gợi ý i2 cho u0.

Một trong những điều mà ta cũng cần quan tâm là hàm similarity như thế nào là tốt. Để đo similarity giữa hai người dùng, ta thường xây dựng vector đặc trưng(feature vector) cho mỗi người dùng rồi áp dụng một hàm có khả năng đo mức độ tương tự giữa 2 vector đó. Với mỗi người dùng, thông tin đặc trưng của mỗi người dùng mà chúng ta có chính là mức độ quan tâm của từng người dùng đến tất cả các sản phẩm, được đặc trưng bằng mỗi cột trong utility matrix. Tuy nhiên, khó khăn chúng ta gặp phải chính là các cột thường bị khuyết nhiều giá trị (do trong hệ thống có nhiều sản phẩm, tuy nhiên người dùng chỉ tương tác nhiều với một số sản phẩm), ta cần có một biện pháp để khắc phục nhược điểm này. Cách khắc phụ là bằng một cách nào đó ta giúp hệ thống điền các giá trị này sao cho việc điền không làm ảnh hưởng nhiều đến sự giống nhau giữa hai vector.

Một trong những cách khả thi để thực hiện là ta sẽ lấy trung bình cộng của các số lượt xem mả người dùng tương ứng đã xem.

Ta sẽ đi qua từng bước tính toán:

¥! Bước 1: Tính trung bình cộng số lượt view của mỗi người dùng: u0 u1 u2 u3 u4 u5 u6 i0 5 5 2 0 1 ? ? i1 3 ? ? 0 ? ? ? i2 ? 4 1 ? ? 1 2 i3 2 2 3 4 4 ? 4 i4 2 0 4 ? ? ? 5 Trung bình cộng 3.25 2.75 2.5 1.33 2.5 1.5 3.33

Bảng 4.12: tính trung bình cộng số lượt xem của từng người dùng

¥! Bước 2: ta sẽ trừ giá trị số lượt xem của người dùng đi một lượng bằng giá trị trung bình chúng ta vừa tính được, đồng thời thay các giá trị chưa biết bằng 0, ta sẽ ra được một ma trận utility đã được chuẩn hoá (normalized utility matrix). Khi đó bảng utility matrix: u0 u1 u2 u3 u4 u5 u6 i0 1.75 2.25 -0.5 -1.33 -1.5 0 0 i1 0.75 0 0 -1.33 0 0.5 0 i2 0 1.25 -1.5 0 0 -0.5 -2.33 i3 -1.25 -0.75 0.5 2.67 1.5 0 0.67 i4 -1.25 -2.75 1.5 0 0 0 1.67

o! Việc trừ đi trung bình cộng của mỗi cột khiến trong mỗi cột xuất hiện những giá trị dương và âm. Những giá trị dương tương ứng với việc người dùng thích sản phẩm, những giá trị âm tương ứng với việc người dùng không thích sản phẩm. Những giá trị bằng 0 tương ứng với việc chưa xác định được liệu người dùng có thích sản phẩm đó hay không.

¥! Bước 3: ta sẽ áp dụng hàm cosine similarity để tính độ tương tự giữa các người dùng. Mức độ tương tác của từng người dùng với các sản phẩm được mô hình hoá bằng các vector ui. Độ tương tự của hai người dùng được tính bằng cos của góc hợp bởi 2 vector đặc trưng của 2 người dùng. Cho 2 vector u1 và u2, ta có công thức tính cosine similarity như sau:

sim(ui, uj) u0 u1 u2 u3 u4 u5 u6 u0 1 0.83 -0.58 -0.79 -0.82 0.2 -0.38 u1 0.83 1 -0.87 -0.4 -0.55 -0.23 -0.71 u2 -0.58 -0.87 1 0.27 0.32 0.47 0.96 u3 -0.79 -0.4 0.27 1 0.87 -0.29 0.18 u4 -0.82 -0.55 0.32 0.87 1 0 0.16 u5 0.2 -0.23 0.47 -0.29 0 1 0.56 u6 -0.38 -0.71 0.96 0.18 0.16 0.56 1

Bảng 4.14: kết quả tính toán cosine similarity giữa các người dùng

¥! Bước 4: Ta sẽ dự đoán mức độ quan tâm của người dùng lên một sản phẩm nào đó dựa trên các người dùng gần nhất. Công thức phổ biến để dự đoán mức độ quan tâm của u cho i là:

o! Trong đó N(u, i) là tập hợp k người dùng có similarity cao nhất của u đối với i.

o! Ví dụ: ta sẽ dự đoán mức độ quan tâm của u1 cho i1 dựa trên mức độ quan tâm của 2 người dùng gần nhất. Cách dự đoán như sau: (adsbygoogle = window.adsbygoogle || []).push({});

§! Các người dùng đã tương tác với i1 là u0, u3, u5.

§! Similarity của u1 với các người dùng u0, u3, u5 lần lượt là 0.83, -0.4, -0.23. Chọn ra 2 người dùng có similarity cao nhất là 0.83, -0.4 ứng với u0 và u5. §! Dựa vào bảng utility matrix đã được chuẩn hoá, ta có được giá trị mức độ quan tâm trung bình của u0, u5 với sản phẩm i1, ta có được 2 giá trị mức độ quan tâm lần lượt là: 0.75 và 0.5.

§! Dự đoán kết quả: cosine_similarity( , ) . = T 1 2 1 2 1 2 2 2 u u u u u u j j j i,u j u N(u,i) i,u j u N(u,i) y sim(u, u ) ˆy sim(u, u ) Î Î = å å 1 1 i ,u 0.83 0.75 ( 0.23) 0.5 y 0.48 0.83 0.23 ´ + - ´ = » + -

o! Một cách tương tự, ta sẽ dự đoán kết quả về khả năng quan tâm chưa biết trong bảng 3 như sau:

u0 u1 u2 u3 u4 u5 u6 i0 1.75 2.25 -0.5 -1.33 -1.5 0.18 -0.63 i1 0.75 0.48 -0.17 -1.33 -1.33 0.5 0.05 i2 0.91 1.25 -1.5 -1.84 -1.78 -0.5 -2.33 i3 -1.25 -0.75 0.5 2.67 1.5 0.59 0.67 i4 -1.25 -2.75 1.5 1.57 1.56 1.59 1.67

Bảng 4.15: kết quả dự đoán khả năng quan tâm của người dùng với sản phẩm

o! Các giá trị dự đoán lớn hơn 0 tương ứng với người dùng có khả năng quan tâm đến các sản phẩm tương ứng. Ví dụ, ta dự đoán mức độ quan tâm của u0 với i2 là 0.91 > 0, nghĩa là ta sẽ dự đoán được là khả năng u0 có quan tâm đến i2, vì vậy ta sẽ gợi ý i2 cho u0. Tương tự, ta thấy mức độ quan tâm của người dùng u2 đến i1 là -0.17 < 0, nghĩa là ta sẽ dự đoán được là khả năng u2 không quan tâm đến i1 nên ta sẽ không gợi ý sản phẩm này cho i2.

4.3.2.!Giải thuật lọc dựa trên nội dung (Content-based Recommendation System) 4.3.2.1.!Ý tưởng 4.3.2.1.!Ý tưởng

Mô hình lọc dựa trên nội dung này được sử dụng trong việc đề xuất các sản phẩm tương tự dựa trên một sản phẩm cụ thể nào đó. Ý tưởng chung của hệ thống gợi ý này là nếu một người thích một sản phẩm nào đó, họ cũng sẽ thích một sản phẩm tương tự với nó. Và để gợi ý cho người dùng theo cách thức này, nó sẽ sử dụng thông tin trước đây của người dùng để làm cơ sở đưa ra các gợi ý mà có thể người dùng thích.

Trong hệ thống website của chúng ta, ta sẽ tận dụng mô hình này theo cách là khi một người dùng truy cập và xem một món sản phẩm cụ thể nào đó, nghĩa là ta đã có thông tin về cái sản phẩm mà người dùng đang xem xét, ta sẽ dùng mô hình này để gợi ý ra những sản phẩm gần gũi với sản phẩm này cho người dùng vì có thể người dùng sẽ thích sản phẩm gần gũi với sản phẩm mà người dùng đang xem và có thể phù hợp hơn với nhu cầu sử dụng của người dùng.

Để thực hiện mô hình này, hệ thống sẽ đánh giá các đặc tính của các sản phẩm được gợi ý. Nó sẽ gợi ý các sản phẩm dựa trên hồ sơ của người dùng hoặc dựa vào nội dụng, thuộc tính của những sản phẩm tương tự như sản phẩm mà người dùng đã chọn trong quá khứ.

Ví dụ: khi người dùng xem và quan tâm sản phẩm iPhone XR, hệ thống sẽ gợi ý thêm các sản phẩm tương tự, gần gũi với iPhone XR như iPhone 11 hoặc iPhone 11 pro max chẳng hạn, vì có thể người dùng sẽ quan tâm đến các sản phẩm mà ta gợi ý này hơn vì nó phù hợp hơn với nhu cầu người dùng. Cách tiếp cận này đòi hỏi việc sắp xếp các

sản phẩm vào từng nhóm(ví dụ: điện thoại, laptop, …) hoặc đi tìm các đặc trưng của từng sản phẩm.

4.3.2.2.!Các bước thực hiện

Bước 1: khởi tạo thông tin dữ liệu cho mỗi sản phẩm. Để có thể gợi ý sản phẩm cho người dùng, ta cần phải khởi tạo dữ liệu, xây dựng các thông tin đặc trưng của dữ liệu để từ đó có cơ sở mà sử dụng các thuật toán và gợi ý các sản phẩm tương tự cho người dùng.

Bước 2: thiết lập ma trận TF – IDF:

¥! Như đã đề cập ở trên, chúng ta cần xây dựng một bộ hồ sơ cho mỗi sản phẩm. Các thông tin đặc trưng của hồ sơ được trình bày dưới dạng văn bản, ta cần phải mô hình hoá các thông tin đặc trưng này dưới dạng toán học, mỗi sản phẩm phải là một vector đặc trưng(feature vector).

¥! Ta sẽ biểu diễn mỗi sản phẩm dưới dạng vector đặc trưng TF – IDF, giá trị này là thước đo thống kê đánh giá mức độ liên quan của một từ với một tài liệu trong bộ sưu tập tài liệu.

Bước 3: tính độ tương đồng giữa các sản phẩm:

¥! Ta sẽ sử dụng cosine similarity để tính toán một đại lượng số biểu thị mức độ giống nhau giữa hai sản phẩm.

¥! Ta chọn phương pháp cosine similarity vì nó không phụ thuộc vào độ lớn và tương đối dễ dàng tính toán.

¥! Sau khi mô hình hoá thông tin sản phẩm dưới dạng TF – IDF, khi đó mỗi sản phẩm được mô hình hoá bằng một vector đặc trưng ij nào đó. Giá trị cosine similarity của 2 sản phẩm được tính như sau:

Bước 4: Sau khi đã có ma trận điểm tương đồng của các sản phẩm, chúng ta sẽ lấy ra top các sản phẩm có điểm tương đồng cao nhất so với sản phẩm mà ta đang xem xét và trả về thông tin các sản phẩm có điểm tương đồng cao nhất đó làm sản phẩm gợi ý theo sản phẩm cho người dùng.

4.3.2.3.!Đặc điểm mô hình

Hệ thống gợi ý lọc dựa trên nội dung này chỉ gợi ý các sản phẩm có tính chất tương tự chứ không gợi ý ra những sản phẩm theo những tiêu chí như sản phẩm hot, được người dùng đánh giá cao. Bên cạnh đó, lọc dựa trên nội dung này có các nhược điểm:

¥! Một là, khi xây dựng mô hình gợi ý cho người dùng, hệ thống không tận dụng được các thông tin từ các người dùng khác. Những thông tin này thường rất hữu ích vì hành vi mua hàng của các người dùng thường được nhóm thành vài nhóm

cosine_similarity( , ) . = T 1 2 1 2 1 2 2 2 i i i i i i

đơn giản, nếu biết được hành vi mua hàng của một vài người dùng trong nhóm, hệ thống có thể suy luận ra được hành vi mua hàng của các người dùng còn lại.

¥! Hai là, không phải lúc nào chúng ta cũng có bản mô tả cho mỗi sản phẩm. Vì vậy chúng ta khó có thể biểu diễn chính xác được mức độ tương tự của các sản phẩm để có thể gợi ý sản phẩm một cách phù hợp và chính xác nhất.

Mặc dù mô hình lọc dựa trên nội dung này không tận dụng được hết thông tin tương tác của người dùng nhưng xét ở khía cạnh sản phẩm tương tự, ta có thể tận dụng mô hình này để gợi ý các sản phẩm tương tự với sản phẩm đang xét và có thể sẽ phù hợp hơn với nhu cầu của người dùng về nhiều mặt như giá cả, sở thích, … (adsbygoogle = window.adsbygoogle || []).push({});

4.3.3.!Giải thuật K-nearest Neighbors(KNN)

KNN là một trong những thuật toán học giám sát được sử dụng hiệu quả trong nhiều trường hợp. Khi training, thuật toán này không học một điều gì từ dữ liệu training. Mọi tính toán được thực hiện khi nó cần dự đoán kết quả của dữ liệu mới.

KNN có thể áp dụng được vào cả 2 loại của bài toán học giám sát là phân loại và hồi quy.

Trong hệ thống của chúng ta, chúng ta sẽ sử dụng thuật toán KNN dưới dạng hồi quy. Thuật toán KNN được sử dụng để nhận dạng tin nhắn trò chuyện gửi tới chatbot trong 2 trường hợp(lời chào hay hỏi mua hàng) để từ đó đưa ra các cách hành xử khác nhau trên chatbot. Vì vậy, thuật toán KNN trong trường hợp này được sử dụng theo dạng phân loại.

Trong thuật toán phân loại của KNN, nhãn của một điểm dữ liệu mới có thể được suy diễn từ k điểm dữ liệu gần nhất trong tập huấn luyện. Label của một điểm dữ liệu có thể được quyết định bằng cách bình chọn theo số phiếu giữa các điểm gần nhất, hoặc

Một phần của tài liệu Ứng dụng phân hệ gợi ý vào hệ thống thương mại điện tử (Trang 55)