s1 s2 s3 s4 s5 s6 s7 s8 S9 ua 4 1 3 5 2 0 0 1 1 u1 5 2 4 5 1 0 0 0 3 u2 0 7 1 0 5 4 0 0 3 u3 0 4 0 0 0 2 3 0 0 u4 2 0 6 0 0 0 0 3 0 u5 0 0 1 0 0 0 3 0 0 u6 0 0 2 4 0 3 0 0 1 totalus 7 2 12 9 1 3 0 3 4
Ta có: totalus là một mảng chứa tất cả các tổng rate của si trên tập k người dùng (3 người dùng u1,u4,u6)
avguslà giá trị trung bình của các tổng rate si trên tập k người dùng
avgus =(7+2+12+9+1+3+0+3+4)/9=4.6
Tốp N mục tin tư vấn cho u1 chính là các mục có tổng totalus > avgus
Ta có tốp N mục tin bộ lọc dành cho ua là: tốp N={s1,s3,s4} có tổng rate lần lượt là: 7;12;9 lớn hơn 4.6. Vậy bộ lọc tin trả lại kết quả gợi cho ua là 3 bài tin s1,s3,s4.
4.4. Môi trường thực nghiệm bộ lọc
Quá trình thử nghiệm bộ lọc được tiến hành trên máy tính cá nhân có cấu hình và yêu cầu chương trình hỗ trợ sau:
- CPU: Core™ i5-2430M CPU 2* 2.40GHz - RAM: 2GB
- OS: Windows 7 - Bộ nhớ ngoài: 160GB - Cơ sở dữ liệu: MySQL - Ngôn ngữ: PHP
- Ngôn ngữ truy vấn MySQL
4.5. Mô tả và chuyển đổi dữ liệu diễn đàn
Một số hoạt động chính giữa người dùng và diễn đàn Tuệ Tĩnh liên quan đến luận văn
- Một người dùng muốn đọc, bình luận (comment), gửi (post) nhiều bài tin ở nhiều chủ đề khác nhau thì nên đăng ký một tài khoản. Do đó, thường mỗi khách đến diễn đàn đều có tài khoản trong CSDL.
- Một người dùng có thể chỉ đọc mà không bình luận bài tin nào hoặc có thể bình luận hay đưa (up) bài tin lên các chủ đề cho phép.
- Một bài tin bất kỳ được một người dùng nào đó up lên thì thường được comment, do đó số lượt comment, số người dùng comment là một thông tin quan trọng để dùng cho bài toán.
Mô tả một số bảng trong CSDL diễn đàn Tuệ Tĩnh liên quan đến bộ lọc
Hệ thống CSDL của diễn đàn bao gồm 164 bảng, do yêu cầu bài toán ta phân tích chỉ có 5 bảng liên quan sau: (Sơ đồ liên kết các bảng hình 5.1)
1/ Bảng user_profile
Thể hiện các thông tin hồ sơ cứng của người dùng như ngày sinh (dob_day), tháng sinh (dob_month), năm sinh (dob_year), nơi sinh ( location,) nghề nghiệp
(occupation)
Các thông tin này chỉ mang tính chất liệt kê thông tin người dùng cụ thể trong quá trình tư vấn. Nó cũng có thể là dữ liệu quan trọng để làm cơ sở để tìm cộng đồng tương tự áp dụng cho người dùng mới tham gia diễn đàn nhằm giải quyết vấn đề hạn chế „người dùng mới“ trong lọc cộng tác.
2/ Bảng user
Thể hiện các thông tin hồ sơ người dùng liên quan trong quá trình tương tác với trang web. Như message_count là tổng số lượt comment mà người dùng tham gia vào toàn bộ các bài tin của diễn đàn
3/ Bảng xf_thread
Cho biết một bài tin (thread_id) n thuộc chủ đề (node_id) có số lượt được comment là bao nhiêu, số lần đọc (view_count) là bao nhiêu, và do ai (user_id) là người tạo ra. Thông tin này có thể giúp người dùng nhận được tiêu đề các bài tin mà hệ thống tư vấn.
4/ Bảng xf_thread_read
Cho biết user_id A nào đó đã đọc các bài tin nào (thread_id). Vậy từ bảng dữ liệu này ta có thể có một thông tin quan trọng đó là loại tương tác “đọc” giữa một người dùng A với một bài tin i nào đó hay không? Nếu bảng này tồn tại cặp (user_id,thread_id) thì chứng tỏ giữa user_id và thread_id đó tồn tại tương tác “đọc”. Tương tác này là một trong những tiêu chí quan trọng để tính ra được rate (đánh giá) của người dùng u với bản tin i. Trong luận văn này tôi chỉ định có tồn tại tương tác đọc thì rate được cộng thêm 1 điểm.
5/ Bảng xf_thread_user_post
Cho biết một bài tin (thread_id) đã được comment bởi người dùng nào, với số lượt comment (post_count) bởi họ là bao nhiêu. Đây là tiêu chí quan trọng thứ hai để tính rate giữa người dùng và mục tin. Mỗi lần comment rate được cộng thêm một điểm. Nếu người dùng A comment bài tin i 2 lần (post_count=2) thì điểm mà A đánh
giá cho i được cộng thêm 2. Điểm đánh giá giữa người dùng A và mục tin i được tính là tổng của điểm đọc thông qua bảng xf_thread_read và điểm comment thông qua bảng xf_thread_user_post.
Các bước chuyển đổi dữ liệu
s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 ... sj ... sm ua 4 1 3 5 2 0 0 1 1 4 ... 0 ... 0 u1 5 2 4 5 1 0 0 0 3 5 … 5 … 1 u2 0 4 5 1 0 0 0 0 2 2 … 2 … 2 u3 0 3 4 1 0 1 0 0 1 0 … 1 … 0 u4 2 0 0 1 1 3 0 1 4 3 … 4 … 3 u5 3 2 1 5 1 0 2 0 2 1 … 2 … 3 …. … … … … … … … ui 3 2 1 5 1 0 2 0 1 3 … rui,sj … 1 un-1 1 0 1 1 2 3 0 1 0 0 ... 0 ... 1
Hình 4.2. Quá trình chuyển đổi dữ liệu của bộ lọc
Dưới đây là chi tiết các bước của quá trình chuyển đổi dữ liệu
B1. Tạo ra bảng dữ liệu bảng user_read chứa user_id (mã user), thread_id (mã bài tin), post_count (số lần comment), thread_read_date (ngày đọc) trích lọc từ hai bảng xf_thread_read và xf_thread_user_post
∞
p item
n user User item rate
ua s1 4 ua s2 1 ua s3 3 ua s4 5 ua … … u1 s1 5 u1 s2 2 …. …. … u1 s9 3 … …. ….
Bảng user_read lấy tất cả bài tin ở bảng xf_thread_read có cùng mã thread_id; user_id với bảng xf_thread_user_post và không cùng mã thì lấy giá trị ở bảng xf- thread_read vì bảng xf_ thread_read có thể chứa xf_thread_user_post hoặc ngược lại. Tức là một người dùng comment bài tin nào đó mà không đọc hoặc đọc mà không comment hoặc đã đọc thì sẽ comment. Do đó sẽ tồn tại những giá trị NULL thì kết quả sẽ trả lại là 0.
B2. Tạo ra bảng dữ liệu user_rate chứa user_id (mã người dùng), thread_id (mã bài tin), rate. Giá trị rate này được tạo ra theo quy luật vừa mô tả ở trên. Rate là tổng điểm thu được bởi hai loại tương tác đọc và comment.
Vậy với đặc điểm dữ liệu như trên tác giả sẽ xây dựng được bảng rate như hình 4.2. Trong đó, mỗi dòng thể hiện rate của một cặp user-item phản ánh điểm của người dùng dành cho mục tin. Qua đây ta cũng thấy được một người dùng nào đó tương tác với bao nhiêu bài tin, với những bài nào và được hệ thống tính toán ra điểm đánh giá là bao nhiêu. Đây là bảng khá quan trọng được truy vấn từ dữ liệu gốc của diễn đàn Tuệ Tĩnh để từ đây bằng việc dùng code ta chuyển các giá trị thread_id thành một hàng và giá trị cột rate là giao giữa hàng user và cột thread_id thu được ma trận rate cuối cùng bảng 4.1 là đầu vào của thuật toán CF mà luận văn nghiên cứu.
4.6. Thực nghiệm và đánh giá kết quả 4.6.1. Độ đo đánh giá bộ lọc tin diễn đàn 4.6.1. Độ đo đánh giá bộ lọc tin diễn đàn
Có nhiều độ đo đánh giá có thể sử dụng để đánh giá các thuật toán trong hệ tư vấn như: MAE (Mean Absolute Error), coverage, EU (Expected Utility) nhưng độ chính xác (Precision) và độ hồi tưởng (recall) là những độ đo phổ biến nhất trong tìm kiếm thông tin được kế tục nghiên cứu bởi Sarwar và Billsus và Pazzani [21,23]. Độ đo này phù hợp để đánh giá những bài toán như tốp N gợi ý bằng việc xem xét điểm đánh giá các mục tin. Theo Herlicker chúng ta phải xem xét:
- Một lượng lớn các mục tin thường xuyên được đánh giá bởi người dùng nhỏ hơn các mục tin có sẵn trong tập dữ liệu
- Số các mục tin có liên quan trong tập test có thể nhỏ hơn nhiều so với toàn bộ dữ liệu.
Vì vậy, giá trị của độ chính xác và độ hồi tưởng phụ thuộc rất nhiều vào số lượng các mục tin đánh giá bởi mỗi người dùng, do đó giá trị của họ không nên được hiểu là biện pháp tuyệt đối.
Vấn đề tư vấn lấy tốp N (top-N) mục tin cho người dùng, đầu ra của hệ thống là một danh sách các mục tin mà người dùng hài lòng. Điểm quan trọng chủ yếu trong việc đánh giá hệ thống như vậy là chúng ta muốn tìm hiểu xem người sử dụng sẽ quan tâm đánh giá một số hoặc tất cả các mục tin trong danh sách tốp N mục tin. Từ nhiều nghiên cứu chỉ ra rằng chất lượng của bộ lọc cộng tác lấy tốp N gợi ý cũng được thể
hiện qua 3 tiêu chí: độ chính xác, độ hồi tưởng và tiêu chuẩn đánh giá (F1) tổng hợp từ độ chính xác và độ hồi tưởng [21,23,25].
Độ chính xác là tỉ lệ các mục tin được hệ thống đánh giá là “có liên quan” (gợi ý ra cho người dùng) được người dùng phản hồi là gợi ý chính xác trên tổng số mục tin mà hệ tư vấn cho là tốt. Còn độ hồi tưởng là phần trăm các mục tin người dùng cho là “có liên quan” (đến sở thích, đặc điểm đọc của họ) đồng thời hệ thống cũng đã đưa vào kết quả gợi ý cho người dùng đó trên tổng số mục tin mà người dùng đọc.
Để hiểu rõ hơn sự vận dụng độ đánh giá này vào bộ lọc ta gọi:
+ Nr: tổng số các mục tin người dùng quan tâm thực sự (người dùng cho là tốt với họ) trên toàn bộ dữ liệu.
+ Ns: Số các mục tin mà hệ thống gợi ý cho người dùng (bộ lọc đánh giá là tốt). + Nrs: Số mục tin mà bộ lọc gợi ý và được người dùng cho là phù hợp với họ.