Thiết kế các chức năng gợi ý học bổng du học

Một phần của tài liệu Xây dựng hệ thống gợi ý và hỗ trợ tìm kiếm học bổng du học (Trang 80)

Các chức năng gợi ý học bổng du học sử dụng phương pháp gợi ý dựa trên nội dung (Content-based Recommendation) bởi vì:

- Hệ thống xây dựng mới nên không có dữ liệu tương tác từ người dùng đủ lớn và cũng không thể trích rút được tương tác người dùng đối với học bổng từ những trang web vì phần lớn dữ liệu này đều được che giấu. Chính vì vậy không thể áp dụng phương pháp gợi ý dựa trên lọc cộng tác (Collaborative Recommendation ).

- Mục đích của mỗi người dùng khi truy cập hệ thống gợi ý học bổng này phần lớn để chọn ra cho mình một học bổng phù hợp nên việc áp dụng phương pháp gợi ý dựa trên tri thức là không cần thiết.

- Từ dữ liệu lấy được từ các trang web, các học bổng được bóc tách một cách có cấu trúc, các thuộc tính học bổng được lấy rõ ràng, cụ thể, chính xác phù hợp để triển khai phương pháp gợi ý dựa trên nội dung.

Hệ thống cung cấp 3 chức năng chính để gợi ý học bổng là: - Gợi ý học bổng dựa trên hồ sơ người dùng

- Gợi ý học bổng tương tự với học bổng đang xem

- Gợi ý học bổng dựa trên phiên phản hồi của người dùng Gợi ý dựa trên hồ sơ người dùng

a) Kịch bản gợi ý

Đối với người dùng mới: Người dùng sau khi đăng ký, tiến hành đăng nhập vào hệ thống. Dựa trên những thông tin mà người dùng cung cấp khi đăng ký hệ thống sẽ đưa ra danh sách gợi ý học bổng được hiển thị ở màn hình “Trang chủ”.

Đối với người dùng cũ: Dựa trên thông tin hồ sơ người dùng đã được cải thiện để đưa ra danh sách HB phù hợp.

b) Các bước xây dựng

1. Thu thập hồ sơ (sở thích) người dùng

Ban đầu, sở thích người dùng được lấy từ thông tin người dùng nhập khi đăng ký bao gồm:

- Cấp học (Level) mà người dùng mong muốn - Quốc gia (Country) mà người dùng muốn theo học - Trường học (School) thuộc quốc gia

- Ngành học (Major) mà người dùng thích - Thời gian (Deadline) là phù hợp để nộp đơn Cập nhật sở thích người dùng bằng cách:

- Thêm vào hồ sơ sở thích các thuộc tính quốc gia/ trường học/ ngành học/ cấp học/ thời hạn khi người dùng tự thêm một quốc gia/ trường học/ ngành học/ cấp học/ thời hạn vào danh sách yêu thích tương ứng. Sở thích này là sở thích công khai, người dùng có thể chỉnh sửa được.

- Thêm vào hồ sơ sở thích các thuộc tính của HB mà người dùng chọn “Apply” hoặc HB mà người dùng thêm vào danh sách yêu thích. Đây là sở thích ngầm hiểu, người dùng sẽ không thấy.

2. Truy vấn danh sách học bổng từ CSDL Học bổng được truy vấn là học bổng:

- Vẫn còn thời hạn nộp so với thời gian hiện tại khi gợi ý. - Học bổng mới mà người dùng chưa xem trước đó.

3. Vector hóa

Các thuộc tính dùng để vector hóa là 6 chiều của vector: - Bậc học (Level)

- Quốc gia (Country), - Trường học (School) , - Ngành học (Major), - Thời gian (Deadline) - Tài trợ (Money)

Hồ sơ sở thích của người dùng có dạng:

{country: [4,5], school: [1,4,6], major: [3,6], level: [Bachelor], time : [1970-01-01]}

Tiếp theo, sử dụng one-hot-endcoding để đưa hồ sơ sơ thích về dạng vector. Mỗi thuộc tính sẽ có một từ điển riêng và độ dài của của mỗi chiều là kích thước của từ điển của từng chiều đó.

Thuộc tính (chiều) Quốc gia sẽ có độ dài 204 vì trên thế giới có tổng cộng 204 quốc gia.

Thuộc tính (chiều) Trường học và Ngành học sẽ có độ dài 500 là một giá trị max mặc định mà số lượng trường học, ngành học sẽ không vượt qua.

Thuộc tính (chiều) Tài trợ có độ dài là 2: [0,1] tương đương với hỗ trợ một phần và hỗ trợ toàn phần.

Thuộc tính (chiều) Bậc học có độ dài 7 vì có 7 giá trị bậc học là: STT Tên loại bậc học 1 Bachelor 2 Fellowship 3 Master 4 PHD 5 Postdoctoral 6 Postgraduate 7 Research

Riêng thuộc tính Thời hạn được mã hóa theo năm với giá trị = y + m/12 + d/365. Có nghĩa 1/6/2019 trở thành 2019,5.

Ví dụ country: [4,5] có nghĩa là người dùng yêu thích 2 trường có id =4 và id=5 (id trong bảng csdl country).

 Mã hóa vector có dạng [0,0,0,1,1,0,…,0] (dấu … là 197 giá trị 0) Tương tự với mã hóa Trường học và ngành học.

Ví dụ: level: [Bachelor] có nghĩa người dùng yêu thích bậc học là Bachelor. Dựa vào bảng level ở trên. Vector mã hóa có dạng: [1,0,0,0,0,0,0,0]

Sau khi mã hóa vector cho từng chiều thì vector cuối thu được là gộp của các vector thuộc tính lại.

Một điểm cần lưu ý khi xây dựng vector của ngành học: Khi truy vấn sở thích người dùng về ngành học hệ thống sẽ lấy thêm cả các ngành học cha và các ngành học con của ngành học hiện tại. Như vậy các ngành học có mối quan hệ với nhau khi so sánh sẽ có độ tương đồng lớn hơn những ngành học không có quan hệ gì và đây cũng là mục đích để xây dựng chức năng Phân loại ngành học dành cho Quản trị viên.

Để tính vector cho học bổng cũng tương tự như tính vector cho người dùng, chỉ khác là mỗi học bổng chỉ có 1 giá trị đất nước và 1 giá trị trường học, nên vector đất nước và trường học sẽ chỉ có một giá trị 1.

4. Tính độ tương tự

Sử dụng độ tương đồng cosine để tính độ tương tự giữa vector người dùng với vector của từng học bổng cho từng thuộc tính:

Trong đó:

- a là thuộc tính thuộc A = {country, school, level, major, money} - 𝒖⃗ là vector của thuộc tính a lấy từ vector người dùng

- 𝒔⃗ là vector của thuộc tính a lấy từ vector của học bổng

- 𝒔𝒊𝒎(𝒖⃗, 𝒔⃗ )𝒂∈𝑨 gọi là độ tương tự của người dùng u và học bổng s với thuộc

tính a

Trường hợp tính độ tương tự đối với thuộc tính thời hạn nộp đơn. Như trình bày ở trên, các thuộc tính thời hạn này được quy về theo giá trị năm có nghĩa là y1- y2=1 thì y1 cách y2 một năm. Vì vậy các tính độ tương tự của em như sau:

𝒔𝒊𝒎(𝒖, 𝒔 )𝒂 𝒅𝒆𝒂𝒅𝒍𝒊𝒏𝒆 = |𝒖 − 𝒔| 𝒊𝒇 |𝒖 − 𝒔| ≤ 𝟏𝟎 𝒊𝒇 |𝒖 − 𝒔| > 𝟏

Vì mỗi thuộc tính của học bổng có mức độ quan trọng khác nhau trong việc tính ra độ tương tự, trong hệ thống này, có sử dụng trọng số (%) cho từng giá trị thuộc tính (dựa trên hiểu biết của bản thân em) như sau:

weight_country: 0.2 weight_school: 0.2 weight_major: 0.3 weight_level: 0.2 weight_money: 0.05 weight_time: 0.05

Sau khi tính độ tương tự cho từng thuộc tính sẽ lấy giá trị độ tương tự nhân với trọng số của từng thuộc tính tương ứng, cuối cùng nhận được một giá trị:

𝒔𝒊𝒎(𝒖⃗, 𝒔⃗ ) = 𝒔𝒊𝒎(𝒖⃗, 𝒔⃗ )𝒂∈𝑨∗ 𝒘𝒆𝒊𝒈𝒉𝒕𝒂

𝒂∈𝑨

Từ danh sách kết quả độ tương tự của từng người dùng se lấy ra n=6 học bổng có độ tương tự lớn nhất để gợi ý cho người dùng.

Gợi ý dựa trên học bổng đang xem a) Kịch bản gợi ý

Người dùng sẽ xem được gợi ý học bổng tương tự ở màn hình xem chi tiết một học bổng nào đó.

Hình 4.6 Mô hình gợi ý dựa trên học bổng đang xem

Các bước xây dựng tương đối giống với Gợi ý dựa trên hồ sơ người dùng. Trong kịch bản gợi ý này các thuộc tính trong hồ sơ người dùng thay bằng các thuộc tính của học bổng đang xem.

Gợi ý dựa trên phản hồi a) Kịch bản gợi ý

Tại màn hình Xem chi tiết học bổng, người dùng cũng có thể chọn dislike một giá trị của thuộc tính nào đó, thêm mới giá trị vào thuộc tính theo ý muốn của mình và ấn chọn “See more based on feedback” để nhận được gợi ý của những học bổng gợi ý dựa trên phản hồi.

Hình 4.7 Hội thoại dựa trên phản hồi b) Các bước xây dựng

Hình 4.8 Mô hình gợi ý dựa trên phản hồi Phản hồi của người dùng trả về bao gồm:

- Giá trị dislike: Ví dụ dislike thuộc tính Country = Denmark - Giá trị thay thế và thêm mới của thuộc tính dislike:

Ví dụ thay thế Country = [ US , Canada ]

Gọi học bổng đang xét là S. Dựa vào các giá trị thuộc tính của học bổng S sẽ loại bỏ, thay thế các thuộc tính, thêm mới các thuốc tính dựa trên thông tin phản hồi từ người dùng, trở thành học bổng S’. Sau đó xây dựng vector học bổng S’.và thực hiện so sánh độ tương tự của học bổng S’ với các học bổng khác để chọn ra danh sách học bổng gợi ý có độ tương tự lớn nhất.

Kịch bản gợi ý này đã khai thác được sở thích ngắn hạn của người dùng thông qua các phản hồi để tính lại các giá trị gợi ý trong phiên hiện tại, cải thiện được kết quả gợi ý và giúp trải nghiệm của người dùng có chiều sâu hơn.

CHƯƠNG 5. CÀI ĐẶT HỆ THỐNG 5.1 Các công nghệ sử dụng

Công cụ thu thập và trích xuất dữ liệu Scrapy.

Scrapy [2] là một framework để thu thập dữ liệu các trang web và trích xuất dữ liệu có cấu trúc có thể được sử dụng cho nhiều ứng dụng hữu ích, như khai thác dữ liệu, xử lý thông tin hoặc lưu trữ lịch sử.

Scrapy cung cấp rất nhiều tính năng mạnh mẽ để làm cho việc thu thập dữ liệu dễ dàng và hiệu quả, trong đồ án này đã sử dụng các tính năng như:

- Tích hợp chọn và trích xuất dữ liệu từ các nguồn HTML / XML bằng cách sử dụng bộ chọn CSS mở rộng và biểu thức XPath, với các phương thức trợ giúp để trích xuất bằng biểu thức chính quy.

- Tích hợp để export dữ liệu ra nhiều định dạng (JSON, CSV, XML) và lưu trữ chúng trong nhiều phụ trợ (FTP, S3, hệ thống tệp cục bộ).

- Hỗ trợ mã hóa mạnh mẽ và tự động phát hiện, để xử lý các khai báo mã hóa ngoại lai, không chuẩn.

- Hỗ trợ khả năng mở rộng mạnh mẽ , cho phép bạn cắm vào chức năng của riêng mình bằng cách sử dụng các tính năng middlewares, extensions, and pipelines, …

- Một loạt các tiện ích mở rộng và phần mềm trung gian được tích hợp sẵn để xử lý: cookie và xử lý phiên ,các tính năng HTTP như nén, xác thực, bộ nhớ đệm , giả mạo tác nhân người dùng …

- Cung cấp giao diện điều khiển như một Python console chạy bên trong quá trình Scrapy, để quan sát và gỡ lỗi.

Spring Boot

Spring Boot [1] là một dự án được xây dựng dựa trên Spring Framework. Nó cung cấp một cách dễ dàng và nhanh chóng để thiết lập, cấu hình và chạy các ứng dụng web một cách đơn giản giúp tăng hiệu suất và giảm thời gian phát triển.

Spring Boot cung cấp một cách linh hoạt để định cấu hình Java Beans, cấu hình XML và Giao dịch cơ sở dữ liệu linh hoạt. Nó cũng cung cấp xử lý hàng loạt mạnh mẽ, quản lý các API RESTful, tích hợp các ứng dụng Spring dựa trên @Anotation, dễ dàng quản lý sự phụ thuộc (dependence)

Spring Boot Framework cho phép tích hợp các framework của java như JPA/Hibernate ORM, … cho phép tích hợp các Spring project khác như Spring Security hỗ trợ xác thực và phân quyền người dùng một cách linh hoạt.

Trong đồ án đã vận dụng những ưu điểm của framework Springboot để xây dựng backend cho hệ thống, cung cấp các RESTful Api trên một cổng riêng biệt và phân quyền cho từng tác nhân người dùng khác nhau.

Vuejs và cách tiếp cận với Client-side rendering

Trước đây, để hiển thị một trang web, ở phía server phải chuẩn bị nội dung HTML để gửi tới trình duyệt, các nội dung này sau đó sẽ được render cùng với CSS trong trình duyệt. Ngày nay, sự phát triển của các framework Javascript đem tới một cách tiếp cận hoàn toàn mới cho việc phát triển web, có khả năng giảm bớt gánh nặng cho phía server. Với các framework Javascript, việc render HTML, CSS sẽ được thực hiện tại trình duyệt, phía server chỉ cần phục vụ các nội dung mà trình duyệt yêu cầu. Sự thay đổi này giúp cho trải nghiệm người dùng liền mạch và giảm thời gian tải lại các trang web. Và nói được gọi là Client- side rendering.

Trong đồ án này đã sử dụng một framework Javascript rất quen thuộc là Vuejs. Vuejs [5] được nói đến là một framework chịu học hỏi những gì tốt nhất từ các hệ thống khác vì ra đời sau nhưng có độ phủ lớn nhất hiện nay. Vuejs Component là ý tưởng chính của Vuejs giúp module hóa trong việc lập trình web tạo ra các khối giao diện người dùng có thể tái sử dụng. Nếu nắm được các kiến thức về HTML, CSS và Javascript thì cũng không khó để tiếp cận và xây dựng một ứng dụng sử dụng Vuejs một cách nhanh chóng với tài liệu dễ học, đơn giản.

FastApi

FastAPI [6] là một framework xây dựng API hiệu năng cao, đơn giản dành cho Python 3.6+ dựa trên các tiêu chuẩn của Python. Các tính năng chính của FastAPI là :

- Nhanh: hiệu suất thực thi rất cao, có thể cạnh tranh được với Nodejs và Go - Phát triển nhanh: nâng cao tốc độ lập trình từ 200% đến 300%

- Ít lỗi: giảm 40% lỗi do tích hợp ràng buộc dữ liệu khá tốt - Dễ dàng: Được thiết kế để đơn giản cho việc học và sử dụng

- Trực quan: Cung cấp giao diện SwaggerUI để để quản lý và test api và các tài liệu api tương ứng.

Trong đồ án đã sử dụng FastApi để gọi các yêu cầu trích rút tự động và tính toán gợi ý được code bằng ngôn ngữ Python.

Giao diện /docs của FastApi trong đồ án:

Các công nghệ khác

MySQL [7] là hệ quản trị cơ sở dữ liệu quan hệ được sử dụng rất rộng rãi với nhiều ưu điểm, trong đồ án đã sử dụng các thư viện của MySQL để liên kết với các ngôn ngữ như mysql.connector dành cho python và java.

Ngoài ra, để sử dụng các framework, đồ án yêu cầu thành thạo đối với các ngôn ngữ lập trình như: Java, Python, Javascript, Html, Css.

5.2 Kết quả cài đặt hệ thống

Kết quả đạt được là một hệ thống dạng website có hỗ trợ các chức năng như tìm kiếm học bổng, so sánh học bổng, các chức năng của người dùng, chức năng quản lý của quản trị viên và đặc biệt là chức năng gợi ý học bổng cho người dùng. Chức năng gợi ý với 3 kịch bản gợi ý, kịch bản đầu tiên trợ giúp người dùng tiếp cận với những học bổng phù hợp với sở thích dài hạn (sở thích do người dùng tự cài đặt, người dùng thêm vào yêu thích), kịch bản thứ 2 người dùng có thể tiếp cận với các học bổng tương tự với học bổng người dùng đang xem. Kịch bản thứ 3 khai thác sở thích ngắn hạn của người dùng, cho người dùng cơ hội để đánh giá, phản hồi về học bổng đã được gợi ý ở 2 kịch bản trước để tính lại gợi ý, cải thiện kết quả gợi ý trở nên chính xác hơn.

Minh họa các chức năng chính như sau:

Hình 5.5 Màn hình gợi ý học bổng dựa trên phản hồi người dùng

Hình 5.6 Màn hình so sánh học bổng

Hình 5.8 Màn hình quản lý danh sách yêu thích

Hình 5.9 Màn hình đăng nhập

Hình 5.11 Màn hình đăng ký – 2

Hình 5.12 Màn hình đăng ký – 3

Hình 5.14 Màn hình Phân loại ngành học

Hình 5.16 Màn hình quản lý tài khoản QTV 5.3 Kết quả kiểm thử

STT Tên chức năng Thành công Thất bại Chưa kiểm thử Tổng cộng

1 Đăng nhập 5 0 0 5 2 Đăng ký 5 0 0 5 3 Đăng xuất 1 0 0 1 4 Tìm kiếm 8 0 0 8 5 So sánh 2 0 0 2

Một phần của tài liệu Xây dựng hệ thống gợi ý và hỗ trợ tìm kiếm học bổng du học (Trang 80)