Sử dụng AI hay trong đề tài này là máy học, chúng em mong muốn giải quyết những nhu cầu cơ bản của con người, mà cụ thể trong trường hợp này, đó chính là dự đoán mức lương cho một công v
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
mức lương cho ứng viên xin việc làm
GIẢNG VIÊN GIẢNG DẠY NGUYỄN HỒNG THUỶ
Trang 23.2 Thực hiện huấn luyện mô hình máy học 17
Trang 3DANH MỤC HÌNH ẢNH
Hình 1: Logo của scikit-learn 7
Hình 2: Import package 9
Hình 3: Giao diện trang vieclam24h 10
Hình 4: Khám phá các thành phần của trang web 10
Hình 5: Lấy dữ liệu dựa trên thẻ HTML 11
Hình 6: Tách dữ liệu từ chuỗi salary 11
Hình 7: Lưu dữ liệu vừa lấy được 12
Hình 8: Giao diện trang careerlink.vn 12
Hình 9: Hàm chuyển đổi đơn vị tiền tệ 13
Hình 10: Hàm tách một số từ chuỗi 13
Hình 11: Hàm tách hai số từ một chuỗi, và trả về giá trị trung bình 14
Hình 12: Xử lý trường dữ liệu lương 14
Hình 13: Import thư viện và mở các file csv 15
Hình 14: Loại bỏ các dữ liệu rỗng 15
Hình 15: Loại bỏ các dữ liệu lặp 15
Hình 16: Tách một hàng chứa nhiều giá trị 15
Hình 17: Chuẩn hoá cách ghi tên địa điểm 16
Hình 18: Import thư viện 17
Hình 19: Nạp dữ liệu 17
Hình 20: Chuyển chữ cái hoa thành chữ cái thường 18
Hình 21: Loại bỏ ký tự đặc biệt 18
Hình 22: Vector hoá dữ liệu 18
Hình 23: Tạo tập dữ liệu đầu vào 18
Hình 24: Tạo tập dữ liệu đầu ra 18
Hình 25: Tách bộ dữ liệu 19
Hình 26: Huấn luyện mô hình decision_dataset1 19
Hình 27: Lưu mô hình decision_dataset1 19
Hình 28: Tính toán RMSE và MAPE của decision_dataset1 20
Hình 29: RMSE và MAPE của decision_dataset1 20
Hình 30: Huấn luyện mô hình decision_dataset2 21
Hình 31: RMSE và MAPE của decision_dataset2 21
Hình 32: RMSE và MAPE của forest_dataset1 21
Hình 33: RMSE và MAPE của forest_dataset2 21
Hình 34: Giao diện trang web thực hiện dự đoán 22
Trang 4Chương 1 GIỚI THIỆU CHUNG
1.1 Lý do chọn đề tài
Theo dòng chảy của cuộc cách mạng 4.0, trí tuệ nhân tạo (AI) ngày càng được phổ biến và ứng dụng rộng rãi trong mọi lĩnh vực của cuộc sống, mặc dù được John McCarthy – nhà khoa học máy tính người Mỹ đề cập lần đầu tiên vào những năm
1950 nhưng đến ngày nay thuật ngữ trí tuệ nhân tạo mới thực sự được biết đến rộng rãi và được các “ông lớn” của làng công nghệ chạy đua phát triển
AI là công nghệ sử dụng đến kỹ thuật số có khả năng thực hiện những nhiệm vụ mà bình thường phải cần tới trí thông minh của con người, được xem là phổ biến nhất Đặc trưng của công nghệ AI là năng lực “tự học” của máy tính, do đó có thể tự phán đoán, phân tích trước các dữ liệu mới mà không cần sự hỗ trợ của con người, đồng thời có khả năng xử lý dữ liệu với số lượng rất lớn và tốc độ cao Trí tuệ nhân tạo là một lĩnh vực liên quan đến chuyên ngành khoa học máy tính và công nghệ thông tin, bản chất của trí tuệ nhân tạo vẫn do con người làm ra, họ xây dựng các thuật toán, lập trình bằng các công cụ phần mềm công nghệ thông tin, giúp các máy tính
có thể tự động xử lý các hành vi thông minh như con người
Sử dụng AI hay trong đề tài này là máy học, chúng em mong muốn giải quyết những nhu cầu cơ bản của con người, mà cụ thể trong trường hợp này, đó chính là
dự đoán mức lương cho một công việc Đề tài này sẽ giúp ích cho những người cần tìm kiếm việc làm và mong muốn biết thêm được mức lương phù hợp với công việc
đó
1.2 Tóm tắt đồ án
Trong đồ án này, chúng em thực hiện công việc kéo dữ liệu từ các trang web tuyển dụng việc làm như vieclam24h, sau đó sử dụng các dữ liệu vừa thu thập được cho vào các mô hình máy học, cuối cùng là dựa theo kết quả của các mô hình vừa rồi để gợi ý mức lương phù hợp cho người dùng khi họ cần đi ứng tuyển việc làm
Trang 5Chương 2 CƠ SỞ LÝ THUYẾT
2.1 Data Scraping
Lấy dữ liệu (Data Scraping) là quá trình thu thập dữ liệu và thông tin website nhằm phục vụ nhiều mục đích khác nhau Các phần mềm lấy dữ liệu truy cập vào website bằng giao thức HTTP hoặc bằng trình duyệt web để lấy ra các dữ liệu mà người thực hiện quan tâm Quá trình này có thể được thực hiện thủ công bằng cách sử dụng phần mềm, tuy nhiên phần lớn khi nhắc đến scraping tương đương với quá trình thu thập dữ liệu tự động được triển khai bằng bot hoặc các web crawler
Khi thực hiện lấy dữ liệu, mã HTML bên dưới trang web được trích xuất bởi trình lấy dữ liệu (data scraper) và được lưu trữ trong cơ sở dữ liệu Web scraping được sử dụng trong nhiều loại hình kinh doanh kỹ thuật số dựa vào việc thu thập dữ liệu Một số trường hợp sử dụng hợp pháp bao gồm:
• Các bot của công cụ tìm kiếm thu thập thông tin của một website, phân tích nội dung của nó và sau đó xếp hạng nó
• Các trang web so sánh giá triển khai bot để tự động tìm giá và mô tả sản phẩm cho các seller trên website
• Các công ty nghiên cứu thị trường sử dụng scraper để lấy dữ liệu từ các forum
và phương tiện truyền thông xã hội
Cách thức hoạt động của một Web Scraping:
• Đầu tiên, trình duyệt web sẽ được cung cấp một hoặc nhiều URL để tải trước khi scrape Sau đó, scraper sẽ tải toàn bộ HTML cho trang được đề cập Các công cụ scraper nâng cao hơn sẽ hiển thị toàn bộ trang web, bao gồm cả các phần tử CSS và Javascript
• Sau đó, scraper sẽ trích xuất tất cả dữ liệu trên trang hoặc dữ liệu cụ thể được người dùng chọn trước khi chạy project
Trang 6• Người dùng sẽ được trải qua quá trình chọn dữ liệu cụ thể mà họ muốn chọn
từ website Ví dụ: có thể muốn scrape trang Amazon để biết giá cả và mẫu mã nhưng không nhất thiết phải quan tâm đến các bài đánh giá sản phẩm
• Cuối cùng, web scraper sẽ output tất cả dữ liệu đã được thu thập sang một định dạng có ích hơn cho người dùng
Hầu hết các web scraper sẽ output dữ liệu sang CSV hoặc Excel spreadsheet Trong khi các scraper nâng cao sẽ hỗ trợ các định dạng như JSON để có thể sử dụng được cho một API
Cũng giống như cách mọi người có thể xây dựng một trang web, bất kỳ ai cũng có thể xây dựng web scraper của riêng mình Tuy nhiên, các công cụ có sẵn để xây dựng web scraper vẫn yêu cầu một số kiến thực lập trình nâng cao Phạm vi của kiến thức cũng tăng lên theo số lượng các tính năng muốn có cho scraper của người lập trình Mặt khác, có rất nhiều công cụ web scraper pre-built mà có thể dễ dàng tải xuống và chạy ngay lập tức Một trong số này cũng sẽ được bổ sung các tùy chọn nâng cao như scrape scheduling, xuất JSON và GoogleSheets…
2.2 Beautiful Soup
BeautifulSoup là một thư viện Python dùng để lấy dữ liệu ra khỏi các file HTML và XML Nó hoạt động cùng với các parser (trình phân tích cú pháp) cung cấp các cách để điều hướng, tìm kiếm và chỉnh sửa trong parse tree (cây phân tích được tạo
từ parser) Nhờ các parser này nó đã giúp các lập trình viên tiết kiệm được nhiều giờ làm việc
Một số tính năng chính của BeautifulSoup có thể kể đến bao gồm:
• BeautifulSoup cung cấp các phương thức đơn giản và kiểu từ vựng của Python
để điều hướng, tìm kiếm và sửa đổi cây phân tích cú pháp: một bộ công cụ để chia nhỏ một văn bản HTML và chỉ lấy ra những gì cần thiết, tất cả đều gói gọn trong một vài dòng code
Trang 7• BeautifulSoup tự động chuyển đổi tài liệu đầu vào thành Unicode và tài liệu đầu ra sang UTF-8, vì thế việc mã hoá là không cần thiết, trừ khi trong tài liệu không có cách mã hoá cụ thể mà BeautifulSoup có thể nhận dạng được
• BeautifulSoup có thể hoạt động với các parser như lxml và html5lib, cho phép chúng ta thử nhiều cách khác nhau để parse đoạn văn bản
So với một số công cụ lấy dữ liệu khác như Selenium hay Scrapy thì BeautifulSoup
có một số ưu điểm nhất định như dễ học, dễ sử dụng, và thân thiện với người dùng Phiên bản mới nhất của BeautifulSoup là phiên bản 4.x, trong đó phiên bản cuối cùng còn hỗ trợ Python 2.7 là BeautifulSoup 4.9.3
2.3 Hồi quy (Regression)
Trong máy học, hồi quy là một phương pháp học có giám sát (Supervised learning)
và là quá trình tìm kiếm mối liên hệ giữa các biến phụ thuộc và độc lập Hồi quy được dùng để dự đoán một chuỗi những giá trị liên tục như dự đoán giá nhà, dự báo thời tiết, …
Trong hồi quy, chúng ta vẽ một biểu đồ giữa các biến phù hợp nhất với các điểm dữ liệu đã cho, và dựa vào biểu đồ này, mô hình học máy có thể đưa ra dự đoán về dữ liệu Nói một cách đơn giản, “Hồi quy hiển thị một đường thẳng hoặc đường cong
đi qua tất cả các điểm dữ liệu trên biểu đồ dự đoán mục tiêu theo cách sao cho khoảng cách dọc giữa các điểm dữ liệu và hồi quy là nhỏ nhất.” Khoảng cách giữa các điểm dữ liệu và đường thẳng cho biết liệu mô hình đó có dự đoán gần đúng với giá trị thực tế không
Có nhiều thuật toán hồi quy khác nhau được sử dụng trong khoa học dữ liệu và học máy Mỗi loại có tầm quan trọng riêng đối với các tình huống khác nhau, nhưng cốt lõi, tất cả các phương pháp hồi quy đều phân tích ảnh hưởng của biến độc lập đối với các biến phụ thuộc Một số thuật toán hồi quy bao gồm:
Linear Regression: Là một phương pháp thống kê để hồi quy dữ liệu với biến phụ
thuộc có giá trị liên tục trong khi các biến độc lập có thể có một trong hai giá trị liên
Trang 8tục hoặc là giá trị phân loại Nói cách khác "Hồi quy tuyến tính" là một phương pháp để dự đoán biến phụ thuộc (Y) dựa trên giá trị của biến độc lập (X) Nó có thể được sử dụng cho các trường hợp chúng ta muốn dự đoán một số lượng liên tục Ví
dụ, dự đoán giao thông ở một cửa hàng bán lẻ, dự đoán thời gian người dùng dừng lại một trang nào đó hoặc số trang đã truy cập vào một website nào đó, …
Linear Regression là thuật toán hồi quy đơn giản nhất nên thường được sử dụng rộng rãi Tuy nhiên, Linear Regression có một số nhược điểm như rất nhạy với nhiễu, không thể biểu diễn được các mô hình phức tạp, …
Support Vector Machine (SVM): SVM là thuật toán có thể sử dụng cho cả bài
toán Phân loại và Hồi quy Mục tiêu của thuật toán SVM là tìm một hyperplane trong không gian N chiều phân loại rõ ràng các điểm dữ liệu Kích thước của
hyperplane phụ thuộc vào số lượng feature, nếu số feature đầu vào là hai, thì
hyperplane chỉ là một đường thẳng, còn nếu số lượng feature đầu vào là ba, thì hyperplane được biểu diễn dưới dạng một mặt phẳng hai chiều
SVM có một số ưu điểm như: hoạt động tốt trong trường hợp số chiều (dimension) nhiều hơn số mẫu (sample), sử dụng một tập hợp các điểm training trong hàm quyết định (được gọi là support vector) nên tiết kiệm bộ nhớ Nhưng cũng có một số hạn chế nhất định, như khó tránh khỏi overfitting nếu số feature nhiều hơn số mẫu, và SVM không đưa ra giá trị dự đoán xác suất, mà được tính toán bằng cách sử dụng xác thực chéo năm lần (five-fold cross-validation)
Decision Tree: Tương tự như SVM, Cây quyết định là thuật toán có thể sử dụng
cho cả bài toán Phân loại và Hồi quy Thuật toán này sử dụng mô hình quyết định dạng cây để dự đoán giá trị (Hồi quy) hoặc dự đoán một lớp các giá trị (Phân loại) Quá trình phân tách để tạo cây bắt đầu tại nút gốc và được theo sau bởi một cây phân nhánh cuối cùng dẫn đến một nút lá (nút đầu cuối) có chứa dự đoán hoặc kết quả cuối cùng của thuật toán Việc xây dựng cây quyết định thường hoạt động từ trên xuống, bằng cách chọn một biến ở mỗi bước để phân chia sao cho hợp lý nhất tập hợp các mục Mỗi cây con của mô hình cây quyết định có thể được biểu diễn
Trang 9dưới dạng cây nhị phân trong đó một nút quyết định chia thành hai nút tuỳ thuộc vào các điều kiện
Cây nhị phân có thể được biểu diễn một cách trực quan, dễ hiểu, và có thể xử lý cả hai loại dữ liệu là số và chữ Nhưng cây nhị phân cũng rất dễ bị overfitting, và các cây nhị phân cũng không ổn định bởi vì các biến có giá trị nhỏ trong tập dữ liệu có thể sinh ra một cây mới hoàn toàn
Random Forest: Như tên gọi, Random Forest là thuật toán chứa một số lượng cây
quyết định trên các tập hợp con khác nhau của tập dữ liệu đã cho và lấy giá trị trung bình để cải thiện độ chính xác cho dự đoán cuối cùng của tập dữ liệu đó Thay vì dựa vào một cây quyết định, Random Forest lấy dự đoán từ mỗi cây và tuỳ thuộc vào mục tiêu, mô hình sẽ dự đoán kết quả cuối cùng hoặc một tập các kết quả Vì được dựa trên Cây quyết định nên thuật toán này có thể sử dụng cho cả bài toán Phân loại và Hồi quy
Random Forest có ưu điểm là có thể đưa ra kết quả có độ chính xác rất cao, và có thể xử lý các bộ dữ liệu có kích thước lớn Nhưng cũng có một số nhược điểm, như tiêu tốn nhiều tài nguyên, và cần thời gian dài để huấn luyện mô hình
2.4 Scikit-learn
Trang 10Hình 1: Logo của scikit-learn
Scikit-learn (Sklearn) là thư viện mạnh mẽ nhất dành cho các thuật toán học máy được viết trên ngôn ngữ Python Thư viện cung cấp một tập các công cụ xử lý các bài toán machine learning và statistical modeling gồm: classification, regression, clustering, và dimensionality reduction Scikit-learn hỗ trợ mạnh mẽ trong việc xây dựng các sản phẩm Nghĩa là thư viện này tập trung sâu trong việc xây dựng các yếu tố: dễ sử dụng, dễ code, dễ tham khảo, dễ làm việc, hiệu quả cao
Mặc dù được viết cho Python nhưng thực tế, các thư viện nền tảng của scikit-learn lại được viết dưới các thư viện của C để tăng hiệu suất làm việc Ví dụ như: Numpy (Tính toán ma trận), LAPACK, LibSVM và Cython
Thư viện được cấp phép bản quyền chuẩn FreeBSD và chạy được trên nhiều nền tảng Linux Scikit-learn có thể được sử dụng như một tài liệu để học tập
Khi cài đặt scikit-learn, một số thư viện khác cũng có thể được cài đặt chung để có thể kết hợp được với nhau, bao gồm:
• Numpy: Gói thư viện xử lý dãy số và ma trận nhiều chiều
• SciPy: Gói các hàm tính toán logic khoa học
• Matplotlib: Biểu diễn dữ liệu dưới dạng đồ thị 2 chiều, 3 chiều
• IPython: Notebook dùng để tương tác trực quan với Python
Trang 11• SymPy: Gói thư viện các kí tự toán học
• Pandas: Xử lý, phân tích dữ liệu dưới dạng bảng
Các thư viện này, kể cả scikit-learn, đều có được cài đặt một cách dễ dàng nhờ vào PyPI (Python Package Manager) với cú pháp pip hoặc Anaconda
Trang 12Chương 3 QUÁ TRÌNH THỰC HIỆN
3.1 Chuẩn bị dữ liệu
3.1.1 Lấy dữ liệu từ web
Trước khi bắt đầu, chúng ta cần tải về các package hỗ trợ việc lấy dữ liệu
Cài đặt BeautifulSoup 4 và html5lib bằng PyPI:
pip install bs4
pip install html5lib
Ngoài ra, để tránh trường hợp các ký tự tiếng Việt không thể được lưu trong csv, chúng ta cài đặt thêm unidecode để chuyển tất cả ký tự tiếng Việt sang ký tự Latin không dấu:
pip install unidecode
Nếu như trong môi trường chưa có package requests thì chúng ta tải về Tuy nhiên, nếu như đang sử dụng Python 3.7 trở lên, chúng ta không cần tải nữa vì trong Python đã được cài sẵn requests:
pip install requests
Sau khi cài đặt, chúng ta import vào chương trình:
Để bắt đầu, chúng ta tìm hiểu chút về trang vieclam24h Tìm kiếm cho tất cả công việc, chúng ta thấy kết quả hiện ra theo các trang, mỗi trang chứa tối đa 30 thông tin việc làm:
Hình 2: Import package
Trang 13Hình 3: Giao diện trang vieclam24h
Chúng ta tìm hiểu phần dữ liệu cần lấy bằng cách nhần chuột phải vào tên công việc, chọn “Inspect”:
Có rất nhiều mục khác nhau, ở đây chúng ta chỉ quan tâm đến tên công việc, tên công ty, nơi làm việc, và mức lương
Tuy nhiên trong số các công việc được liệt kê, những công việc có gắn nhãn “hot”
sử dụng thẻ HTML khác với những thẻ tên còn lại, thế nên phải lấy cả những thẻ tên đó
Hình 4: Khám phá các thành phần của trang web
Trang 14Hình 5: Lấy dữ liệu dựa trên thẻ HTML
Sau khi lấy được các thông tin cần thiết, chúng ta xem qua một chút các giá trị trong mục lương Có ba kiểu ghi khác nhau, bao gồm “Trên X triệu”, “X – Y
triệu”, và “Thoả thuận”
Để đơn giản hoá công việc cho mô hình máy học, chúng ta sẽ gộp các giá trị lương lại thành một giá trị duy nhất là mức lương trung bình (nếu như lương nằm trong khoảng), và chỉ lưu trữ giá trị hàng triệu về trước (ví dụ như 6,000,000 đồng thì lưu lại trong tập dữ liệu là 6):
Cuối cùng, chúng ta lưu các dữ liệu vừa thu thập được vào một dictionary, và lưu các dictionary đó vào file csv:
Hình 6: Tách dữ liệu từ chuỗi salary