TỔNG QUAN
Một số khái niệm cơ bản
Để sàng lọc CV hiệu quả, trước tiên cần hiểu những khái niệm cơ bản về tầm quan trọng của CV, cấu trúc hợp lý của một CV và cách nhìn nhận của nhà tuyển dụng đối với CV.
2.1.1 Cấu trúc cơ bản của một CV
Trong quy trình tuyển dụng, nhà tuyển dụng thường xem xét CV để đánh giá chất lượng và cách tổ chức của nó Để hiểu rõ những yếu tố quan trọng trong một CV, cần phân tích nội dung và tìm hiểu sâu hơn.
CV là văn bản có cấu trúc, chia thành nhiều phần khác nhau tùy thuộc vào kinh nghiệm và trình độ học vấn của ứng viên Nhà tuyển dụng tìm kiếm thông tin cụ thể để đánh giá năng lực của ứng viên Để hoàn chỉnh bộ định danh, nhà tuyển dụng cần thông tin liên hệ, thông tin cá nhân, kỹ năng, kinh nghiệm làm việc, học vấn, các dự án tham gia, giải thưởng cá nhân, bài báo và chứng chỉ.
• Thông tin liên lạc: dùng để liên lạc với ứng viên
Thông tin cá nhân như ngày sinh, địa chỉ và tài khoản mạng xã hội (LinkedIn hay GitHub) là yếu tố quan trọng giúp nhà tuyển dụng đánh giá ứng viên một cách chi tiết hơn Một số nhà tuyển dụng có thể sử dụng các công cụ để thu thập dữ liệu cá nhân, từ đó khám phá những đặc điểm nổi bật của ứng viên.
• Kỹ năng: Để nhà tuyển dụng có thể có cái nhìn tổng quan về khả năng của ứng viên
• Kinh nghiệm làm việc thực tế: Để có thể đánh giá được ứng viên có kinh nghiệm làm việc liên quan đến công việc đang ứng tuyển hay không
• Học vấn: Để đánh giá xem ứng viên có học vấn và kiến thức về công việc đang ứng tuyển hay không
Các dự án đã tham gia: Tùy thuộc vào việc dự án đó là thực tế hay cá nhân, nó sẽ phản ánh kinh nghiệm và kỹ năng của ứng viên.
• Giải thưởng cá nhân: Dùng để đánh giá xem ứng viên có gì khác biệt so với các ứng viên khác
• Các bài báo: Trong bối cảnh nghiên cứu, nó giúp đánh giá tiềm năng của ứng viên
• Chứng chỉ: Nếu cần cho vị trí ứng tuyển, còn nếu không, nó cũng là một điểm cộng cho ứng viên
2.1.2 Quan điểm của nhà tuyển dụng
Theo một nhà tuyển dụng có hơn 15 năm kinh nghiệm trong lĩnh vực nhân sự tại tập đoàn Thales, chiến lược tuyển dụng của cô ấy bao gồm việc chia công việc thành hai phần: trích xuất thông tin từ tin tuyển dụng và từ CV, sau đó tiến hành so khớp một – một giữa chúng Trong quá trình này, các khía cạnh như kỹ năng và học vấn luôn được chú ý Đặc biệt, quan điểm của các nhà tuyển dụng có thể khác nhau tùy thuộc vào khu vực và công ty.
Hình 2.1: Mô hình so khớp cơ bản
Phát biểu bài toán
Để giải quyết bài toán so khớp CV và JD, ta cần phải giải quyết một số vấn đề sau:
Để phân tách thông tin quan trọng từ một CV dưới dạng tệp PDF hoặc Word, chúng ta cần xác định các yếu tố như học vấn, kinh nghiệm làm việc và kỹ năng Quá trình này bắt đầu bằng việc thu thập dữ liệu từ Internet và chuyển đổi CV thành văn bản Sau đó, chúng ta phân nhóm các chủ đề để xác định những thông tin cần thiết cho việc so khớp Cuối cùng, thông tin đã phân tách sẽ được đưa vào mô hình trích xuất kỹ năng để tạo ra danh sách kỹ năng của CV Đối với JD, thông tin đã được nhà tuyển dụng nhập vào hệ thống, vì vậy chúng ta chỉ cần sử dụng mô hình trích xuất kỹ năng để lấy danh sách kỹ năng mà JD yêu cầu.
Để xây dựng mô hình trích xuất kỹ năng hiệu quả, cần phát triển bộ ontology cho từng lĩnh vực riêng biệt Đồng thời, việc xây dựng và huấn luyện mô hình word2vec là cần thiết để cung cấp dữ liệu cho bộ phân loại CSO, từ đó giúp trích xuất kỹ năng từ CV và JD một cách chính xác.
Vấn đề 3: Cần xây dựng mô hình so khớp giữa CV và JD Nhóm cần tạo đồ thị kỹ năng cho từng bộ kỹ năng đã trích xuất từ CV và JD, nhằm tiến hành so khớp và tính toán độ tương đồng giữa hai đồ thị Sau khi xác định được độ tương đồng, điểm đánh giá sẽ được lưu trữ trong cơ sở dữ liệu, làm cơ sở cho việc xếp hạng CV trong tương lai.
Các nghiên cứu liên quan
Để giải quyết bài toán lớn về sàng lọc CV tự động, nhóm cần tập trung vào việc giải quyết các bài toán nhỏ hơn liên quan Mỗi bài toán nhỏ sẽ được nghiên cứu kỹ lưỡng dựa trên các phương pháp hiện có đã được đề xuất.
Nghiên cứu về phương pháp trích xuất thông tin từ CV
Việc trích xuất thông tin cần thiết từ CV là một thách thức lớn, và nhiều phương pháp đã được đề xuất để giải quyết vấn đề này Andreas Bogstad đã giới thiệu một phương pháp phân nhóm chủ đề trong CV, trong đó phân nhóm chủ đề được hiểu là nhiệm vụ chia văn bản thành các phân đoạn có ý nghĩa Tuy nhiên, việc chia CV thành những phân đoạn có ý nghĩa không phải là điều dễ dàng, vì một CV có thể được cấu trúc thành nhiều phần khác nhau.
• Thông tin liên lạc: phân đoạn về tên tuổi, địa chỉ và các thông tin liên lạc khác của ứng viên
• Học vấn: phân đoạn về trình độ học vấn của ứng viên Ví dụ: tên trường đại học, cao đẳng, chuyên ngành của ứng viên,
• Kinh nghiệm thực tế: phân đoạn về lịch sử làm việc thực tế của ứng viên
• Kỹ năng: phân đoạn liệt kê các kỹ năng của ứng viên Ví dụ: kỹ năng lập trình, kỹ năng mềm,
• Các bài báo: phân đoạn liệt kê những bài báo đã được công bố của ứng viên
Để phân nhóm chủ đề trong văn bản, tác giả áp dụng phương pháp xác định biên của chủ đề thông qua định dạng thẻ BIO (Begin Inside Outside) Mỗi dòng văn bản được gắn thẻ B hoặc I một cách thủ công; dòng chứa câu chuyển chủ đề được gắn thẻ B, trong khi dòng không chứa câu chuyển chủ đề được gắn thẻ I Sau khi gắn thẻ, dữ liệu sẽ được xử lý thành một object, trong đó ký tự cuối cùng của mỗi dòng là thẻ và phần còn lại của câu được tách thành thuộc tính của object Các câu sẽ được mã hóa thành danh sách token, mỗi token sẽ được đưa về dạng gốc bằng stemmer và lưu trữ vào object, sau đó gán nhãn từ loại với PPoS tag Cuối cùng, object này sẽ được đưa vào model trích xuất đặc trưng để chuyển đổi thành vector đặc trưng, nhằm xác định nhãn của vector có phải là biên của chủ đề hay không.
Nghiên cứu về phương pháp trích xuất kỹ năng từ văn bản
Bài toán trích xuất kỹ năng từ văn bản đóng vai trò quan trọng trong việc tự động sàng lọc CV Nghiên cứu của nhóm IBM, do Gugnani và Mirsa thực hiện, đã giới thiệu một phương pháp kết hợp nhiều kỹ thuật xử lý ngôn ngữ tự nhiên nhằm xác định xem một từ hoặc cụm từ có phải là kỹ năng hay không.
The module for skill identification is illustrated in Figure 3.1, where the authors categorize it into four smaller modules: Named Entity Recognition (NER), Part of Speech (POS) tagging, Word2Vec (W2V), and a skill dictionary.
Dữ liệu từ đoạn văn bản thô sẽ được trích xuất qua ba module để tạo thành tập hợp các thuật ngữ cùng với điểm số riêng cho từng module Dựa vào điểm số này, thuật ngữ sẽ được xác định khả năng trở thành kỹ năng, như minh họa trong hình 3.1 Kết hợp điểm số của cả bốn module, tác giả sẽ tính toán điểm tổng quát (“relevance score”) để đánh giá khả năng của một từ hoặc cụm từ là kỹ năng.
Nghiên cứu về phương pháp so khớp CV và JD
Trong bài báo của Gugnani, tác giả đã giới thiệu phương pháp so khớp dựa trên điểm tương thích (“Affinity Score”), giúp đánh giá mức độ phù hợp giữa CV và JD, với giá trị từ 0 đến 1, trong đó 0 là không phù hợp và 1 là rất phù hợp Để tính toán điểm này, Gugnani đã áp dụng thuật toán greedy maximal match cho tập kỹ năng từ nhỏ đến lớn và thực hiện thuật toán maximum matching cho tập kỹ năng từ lớn đến nhỏ.
Trong thuật toán ghép cặp cực đại (greedy maximal match) trên đồ thị hai phía, mục tiêu là đạt được điểm net cao nhất từ trái sang phải Cặp ghép cực đại (maximum match) là cặp ghép có số lượng cạnh lớn nhất có thể, trong khi mọi cặp ghép cực đại đều là cặp ghép tối đại (maximal match), nhưng không phải ngược lại Tác giả đã xem xét các phương pháp phỏng đoán khác nhau để tối ưu hóa quá trình ghép cặp và tạo ra các cạnh cho tập kỹ năng của CV và tập kỹ năng của JD.
Nếu một kỹ năng xuất hiện trong cả hai tập dữ liệu (CV và JD), điểm "Edge Score" sẽ là 1 và chúng sẽ được ghép cặp Tác giả sẽ loại bỏ những kỹ năng chung giữa hai tập dữ liệu, gán một edge-weight giá trị 1 và tính tổng số kỹ năng chung để xác định điểm tương thích Ngoài ra, tác giả cũng nhận thấy mối tương quan mạnh mẽ giữa các yếu tố sau khi so sánh các kỹ năng, đặc biệt là độ tương đồng cosine.
Bài viết đề cập đến ba yếu tố quan trọng trong việc tính toán trọng số của cạnh (edge-weight): a) sử dụng W2V, b) tần suất xuất hiện của kỹ năng trong văn bản, và c) việc thúc đẩy dựa trên kỹ năng tường minh hoặc không tường minh Các yếu tố này được kết hợp để xác định trọng số của cạnh khi tìm thấy cặp ghép thành công, với công thức cụ thể được trình bày trong bài.
Trong bài viết này, Y đại diện cho trọng số của cạnh, trong khi 𝐸 1 là độ tương tự cosine giữa kỹ năng từ mô hình W2V và 𝐸 2 là điểm tần suất của kỹ năng, được tính bằng tổng tần suất của kỹ năng đó trên toàn bộ văn bản chia cho số lượng văn bản Đối với 𝐸 3, giá trị sẽ là 1 nếu kỹ năng là tường minh và 0.5 nếu không tường minh Cuối cùng, Y được tính với 𝜔 1 là 0.5, 𝜔 2 là 0.2 và 𝜔 3 là 0.3, và điểm tương thích giữa CV và JD được xác định bằng cách tính trung bình trọng số các cạnh mà nó có.
PHƯƠNG PHÁP THỰC HIỆN
Cơ sở lý thuyết
Word Embedding là một không gian vector dùng để biểu diễn dữ liệu, giúp mô tả mối liên hệ và sự tương đồng về ngữ nghĩa, ngữ cảnh của dữ liệu Trong không gian này, các từ có cùng ngữ cảnh hoặc ngữ nghĩa sẽ nằm gần nhau Chẳng hạn, trong hai câu “Hôm nay ăn táo” và “Hôm nay ăn xoài”, khi tạo Word Embedding, “táo” và “xoài” sẽ có vị trí gần nhau trong không gian vector do chúng có vai trò tương tự trong câu.
3.1.1.2 Phương pháp biểu diễn Word Embedding
Có hai phương pháp chính để tính toán Word Embedding: phương pháp dựa trên tần số (Count-based method) và phương pháp dự đoán (Predictive method) Cả hai phương pháp này đều dựa trên giả thuyết rằng các từ xuất hiện trong cùng một ngữ cảnh sẽ nằm gần nhau trong không gian được biến đổi.
Phương pháp này xác định mức độ liên quan ngữ nghĩa giữa các từ thông qua việc thống kê tần suất xuất hiện của chúng Ví dụ, với hai câu “Mèo ăn cơm” và “Mèo ăn cá”, ta có thể xây dựng ma trận đồng xuất hiện từ, cho thấy rằng “cơm” và “cá” có ý nghĩa tương đồng và do đó sẽ nằm gần nhau trong không gian vector biểu diễn.
Phương pháp này có nhược điểm là khi xử lý dữ liệu lớn, một số từ có tần suất xuất hiện cao nhưng không cung cấp nhiều thông tin, chẳng hạn như các từ như "a", "an", "the" trong tiếng Anh Việc thống kê số lượng từ này có thể dẫn đến kết quả không chính xác về tần suất thực sự của các từ có ý nghĩa.
Phương pháp dựa trên tần suất từ (count-based method) có thể làm giảm giá trị của những từ mang nhiều thông tin nhưng ít gặp Để khắc phục vấn đề này, một giải pháp hiệu quả là điều chỉnh trọng số dữ liệu phù hợp với bài toán, trong đó thuật toán TF-IDF thường được sử dụng TF (tần suất từ) đo lường số lần xuất hiện của một từ trong văn bản, trong khi IDF (hệ số tần suất ngược) giúp giảm trọng số của những từ thường gặp trong văn bản Nhờ vậy, phương pháp TF-IDF có khả năng giảm bớt trọng số của những từ xuất hiện nhiều nhưng không cung cấp nhiều thông tin.
Word2Vec là một phương pháp tính toán sự tương đồng ngữ nghĩa giữa các từ để dự đoán từ tiếp theo Phương pháp này sử dụng mạng nơ-ron với một hoặc nhiều lớp, dựa trên các từ xung quanh (context word) làm đầu vào Một context word có thể là
15 một hoặc nhiều từ Có hai phương pháp tạo word2vec phổ biến là Continuous Bag- of-words (CBOW) và Skip-gram
Mô hình CBOW (Continuous Bag of Words) là một phương pháp trong xử lý ngôn ngữ tự nhiên, sử dụng một hoặc nhiều từ ngữ bối cảnh để dự đoán từ mục tiêu Qua việc đánh giá lỗi đầu ra so với từ mục tiêu ở dạng one-hot, mô hình điều chỉnh trọng số để học được vector biểu diễn cho từ mục tiêu Quá trình này bao gồm việc chuyển đổi từ đầu vào thành dạng one-hot, đi qua một tầng ẩn và áp dụng softmax để phân loại, từ đó dự đoán từ tiếp theo.
Mô hình Skip-gram sử dụng từ mục tiêu (target word) để dự đoán các từ hàng xóm (neighbor words) của nó, trái ngược với mô hình CBOW Các từ hàng xóm được xác định thông qua tham số kích thước cửa sổ (window size) Chẳng hạn, trong câu "Tôi đang học ở Đại học Công nghệ Thông tin" với từ mục tiêu "học" và kích thước cửa sổ là 2, các từ hàng xóm sẽ là (tôi, đang, ở, Đại) Từ đó, chúng ta tạo ra 4 cặp input-output: (học, tôi), (học, đang), (học, ở), và (học, Đại), trong quá trình huấn luyện mô hình, các từ hàng xóm được coi là tương đương.
Trong triết học, "ontology" hay "bản thể học" xuất phát từ tiếng Hy Lạp, nghiên cứu về sự tồn tại Hiện nay, ontology được áp dụng trong nhiều lĩnh vực như khoa học máy tính, hệ thống kỹ thuật, kỹ thuật phần mềm, tin sinh học, khoa học thư viện, kiến trúc thông tin và web ngữ nghĩa Nhiều định nghĩa về ontology hiện nay đang được sử dụng rộng rãi.
Ontology là một tập hợp từ vựng dành cho các nhà nghiên cứu, giúp họ chia sẻ thông tin trong một lĩnh vực cụ thể Nó bao gồm các định nghĩa về khái niệm cơ bản và mối quan hệ giữa chúng, đảm bảo rằng máy tính có thể hiểu và xử lý thông tin một cách hiệu quả.
Trong lĩnh vực khoa học máy tính, ontology được định nghĩa là một mô hình dữ liệu thể hiện một lĩnh vực cụ thể, cho phép suy luận về các đối tượng cũng như mối quan hệ giữa chúng.
Trong khoa học máy tính, ontology được hiểu là tập hợp các khái niệm và mối quan hệ trong một lĩnh vực cụ thể Nó mô tả rõ ràng các thực thể, khái niệm, ràng buộc và quan hệ ngữ nghĩa, giúp cả con người và máy móc hiểu và suy luận theo ngữ nghĩa trong lĩnh vực đó Chúng tôi sử dụng ontology trong đồ án này vì những lý do quan trọng.
Ontology giúp chia sẻ kiến thức giữa con người và hệ thống bằng cách định nghĩa các khái niệm trong một lĩnh vực cùng với mối quan hệ mà máy tính có thể hiểu Qua đó, nó tạo điều kiện cho việc trao đổi thông tin hiệu quả giữa con người và công nghệ.
Ontology trong lĩnh vực IT cho phép tái sử dụng kiến thức, giúp người khác có thể mở rộng và làm giàu thêm nội dung Ngoài ra, việc tích hợp các ontology có sẵn cũng giúp mô tả nhiều khái niệm thuộc một lĩnh vực nhỏ trong một ontology lớn hơn.
Việc sử dụng ontology thay vì ngôn ngữ lập trình giúp làm rõ các giả định chuyên ngành và dễ dàng điều chỉnh khi kiến thức trong lĩnh vực thay đổi Nếu các giả định này được mã hóa bằng ngôn ngữ lập trình, sẽ gây khó khăn trong việc hiểu và sửa đổi, đặc biệt đối với những người không phải là chuyên gia lập trình.
Công nghệ sử dụng
3.2.1 CSO (Computer Science Ontology) Classifier
CSO Classifier là một phương pháp tự động gán nhãn bài báo dựa trên ontology trong lĩnh vực Khoa học máy tính Phương pháp này áp dụng công nghệ NLP phổ biến, giúp nâng cao khả năng khái quát Nó bao gồm hai thành phần chính: mô đun cú pháp và mô đun ngữ nghĩa.
Mô đun cú pháp sẽ chuyển đổi các n-gram trong văn bản thành các khái niệm, đồng thời loại bỏ các từ dừng (stopword) và thu thập các unigram và bigram.
Mỗi n-gram trong trigrams sẽ được tính toán khoảng cách Levenshtein với nhãn chủ đề trong ontology Độ tương tự tối thiểu được cài đặt thủ công là 0.94, giúp nhận diện sự khác biệt giữa các khái niệm và ontology.
Mô đun ngữ nghĩa được phát triển nhằm xác định các chủ đề có mối quan hệ ngữ nghĩa với từ hoặc văn bản đã cho, ngay cả khi chúng không được đề cập rõ ràng Để thực hiện điều này, mô đun sử dụng kỹ thuật word embedding do word2vec cung cấp, cho phép tính toán sự tương đồng ngữ nghĩa giữa các thuật ngữ trong văn bản và ontology.
Mô hình word embedding trong nghiên cứu này được phát triển bởi CSO thông qua việc sử dụng mô hình word2vec Mô hình này đã được huấn luyện trên một tập dữ liệu phong phú, bao gồm nhiều bài báo trong lĩnh vực khoa học máy tính.
Hình 3.3: Kiến trúc của CSO Classifier
Phương pháp thực hiện
Hiện nay, có rất nhiều bộ dữ liệu miễn phí trên Internet, nhưng việc chọn lựa một bộ dữ liệu phù hợp với nhu cầu và mục đích của dự án là điều quan trọng.
Sau khi xem xét nhiều bộ dữ liệu trên Kaggle nhưng không tìm thấy dữ liệu phù hợp, nhóm chúng tôi quyết định tự phát triển công cụ thu thập dữ liệu tự động từ các trang web tuyển dụng lớn như TopCV và Dice Để thực hiện việc này một cách nhanh chóng và hiệu quả, chúng tôi đã tìm hiểu và cài đặt module crawler bằng Puppeteer.
Puppeteer là một thư viện Node.js cho phép người dùng điều khiển Chrome headless Tất cả các thao tác trên Chrome đều có thể thực hiện được qua Puppeteer Một số ưu điểm nổi bật của Puppeteer đã khiến chúng tôi chọn công cụ này.
So với các công cụ crawl dữ liệu cũ như HTML Agility Pack chỉ thu thập được HTML thuần, Puppeteer nổi bật hơn nhờ khả năng lấy dữ liệu từ các trang web sử dụng Javascript và Ajax Điều này cho phép Puppeteer thu thập thông tin cần thiết ngay cả khi trang yêu cầu đăng nhập hoặc sử dụng AJAX để giao tiếp với backend, mang lại hiệu quả cao hơn trong việc thu thập dữ liệu.
Puppeteer có khả năng vượt qua Google reCaptcha, một công cụ xác thực giúp phân biệt người dùng thực và bot, cho phép nhóm thu thập dữ liệu một cách không bị hạn chế.
Chúng em chọn Puppeteer vì nó sử dụng ngôn ngữ Javascript, một ngôn ngữ mà nhóm đã quen thuộc, giúp tiết kiệm thời gian trong việc học hỏi thêm.
Sau khi cài đặt thuật toán crawl dữ liệu, nhóm tiến hành thu thập được khoảng 4000
TopCV cung cấp CV cho nhiều lĩnh vực khác nhau như Frontend, Backend, iOS và Android Đội ngũ của chúng tôi cũng liên tục thu thập thông tin tuyển dụng từ nhiều lĩnh vực trên Dice.com Chúng tôi đặt mục tiêu thu thập 10,000 tin tuyển dụng cho mỗi lĩnh vực mà chúng tôi muốn phát triển trong hệ thống, và với mỗi tin tuyển dụng, nhóm sẽ tiến hành phân tích chi tiết.
Nhóm nghiên cứu đã tiến hành làm sạch dữ liệu từ tin tuyển dụng để đưa vào mô hình Word2vec, đồng thời thu thập và xây dựng một bộ từ điển kỹ năng nhằm hỗ trợ việc tạo các ontology, như đề xuất bởi Gugnani Bộ từ điển này được hình thành từ dữ liệu thu thập trên nhiều website chuyên về làm giàu dữ liệu kỹ năng trong lĩnh vực IT, như ESCO và Stackshare Sau khi xử lý, nhóm đã tạo ra một bộ từ điển với hơn 30.000 tên kỹ năng và các tên đồng nghĩa.
3.3.2 Tạo ontology Để có thể sử dụng CSO Classifier cho những domain khác ngoài khoa học máy tính
The team needs to develop an ontology framework for specialized skills tailored to various domains, including Frontend Developer, Backend Developer, Fullstack Developer, DevOps Engineer, iOS Developer, Android Developer, Data Science, and AI Engineer.
Chúng tôi đã thu thập 10,000 tin tuyển dụng cho từng lĩnh vực cụ thể như Frontend Developer và lọc ra danh sách từ khóa liên quan Sau khi loại bỏ các stopword và từ khóa không liên quan, chúng tôi tạo ra một tập kỹ năng từ các từ khóa này Tiếp theo, chúng tôi kết hợp tập từ khóa với tập kỹ năng thu thập từ Stackshare để xây dựng một bộ kỹ năng hoàn chỉnh Cuối cùng, với dữ liệu đã có, chúng tôi sử dụng phần mềm Protegé để tạo ontology.
Ontology này cần phải có một số quan hệ sau để có thể đưa vào CSO làm mô hình dữ liệu:
Quan hệ "superTopicOf" được sử dụng để xác định kỹ năng nào là chủ đề rộng hơn của một kỹ năng khác, thể hiện mối quan hệ cha – con giữa các kỹ năng Chẳng hạn, Semantic Web là chủ đề rộng hơn của Linked Data.
• preferentialEquivalent : quan hệ này dùng để liên kết các kỹ năng có nhiều nhãn với một nhãn chính của nó
Bên cạnh tạo các domain ontology, việc train là một trong hai phần chính để có thể áp dụng CSO Classifier ở domain khác [15]
3.3.3.1 Tiền xử lý dữ liệu
Dữ liệu từ các nguồn khác nhau như ESCO, Stackoverflow, Wikipedia và Dice.com có cấu trúc không đồng nhất, do đó quy trình tiền xử lý cũng sẽ khác nhau Cụ thể, dữ liệu từ ESCO bao gồm tên kỹ năng, các tên thay thế và mô tả kỹ năng Tên kỹ năng cùng với các tên thay thế được kết hợp thành một câu, phân cách bằng dấu phẩy, tương tự như phương pháp được đề xuất trong xây dựng Skill2Vec.
Sau đó lưu vào tệp với mỗi hàng là một câu đã được tạo như trên và các mô tả về kỹ năng
Dữ liệu thu thập từ Stackoverflow, Wikipedia và Dice.com đã được làm sạch các thẻ HTML bằng BeautifulSoup Sau đó, thư viện spaCy được sử dụng để tách đoạn văn thành từng câu và lưu trữ mỗi câu trên một hàng riêng biệt Nhằm tạo ra bộ dữ liệu training liên quan đến ngành IT, nhóm đã thực hiện lọc câu dựa trên sự xuất hiện của các từ ngữ trong từ điển.
Sau khi có tập dữ liệu là tệp chứa các câu, ta xử lý mỗi câu tuần tự theo các bước như sau:
• Xoá các kí tự đặc biệt, tuy nhiên giữ lại một số các kí tự thường xuất hiện trong ngôn ngữ lập trình như “+”, “#” trong “C++”, “C#”
• Xoá stop words (ví dụ như: and, or, it, the, if, a,…) thường được xuất hiện trong văn bản tiếng anh mà không mang đến ý nghĩa cho skill-tems
• Đưa các từ về định dạng gốc (Lemmatization)
Sau cùng, nhóm có được tập dữ liệu gồm 1.9 triệu câu sẵn sàng cho việc training Word2Vec model
Nhóm nghiên cứu đã sử dụng Gensim, một thư viện với API thân thiện cho người không chuyên về NLP, để hỗ trợ việc huấn luyện mô hình Word2Vec Do tên kỹ năng có thể bao gồm một hoặc nhiều từ liên tiếp, hay còn gọi là n-gram, nhóm đã thực hiện việc nhận diện và đánh dấu các từ này bằng cách thay thế khoảng trống bằng dấu gạch nối (ví dụ: ruby_on_rails) thông qua Gensim Phrases package Số lượng từ liên tiếp được giới hạn tối đa là 3, chỉ áp dụng cho bigram và trigram.
Sau đó, ta tiến thành việc train mô hình với các tham số được gợi ý từ team phát triển CSO Classifier như bảng sau: min-count threshold
Bảng 3.1: Các tham số cho Gensim Phrase để nhận diện bigram và trigram method emb size window size min count cutoff skipgram 128 10 10
Bảng 3.2: Các tham số cho Gensim để nhận train Word2vec model
Sau 75 phút training, nhóm thu về được Word2Vec model có dung lượng gần 100MB Sẵn sàng để sử dụng cho CSO Classifier module Dưới đây là một số ví dụ để kiểm tra kết quả của model
Hình 3.4: Top 10 từ/ cụm từ liên quan gần nhất với từ khoá reactjs
Hình 3.5: Top 10 từ/ cụm từ liên quan gần nhất với từ khoá oop
3.3.4 Áp dụng CSO Ontology để trích xuất kỹ năng
3.3.4.1 Tạo cached model cho CSO Classifier
CÀI ĐẶT HỆ THỐNG
Thiết kế hệ thống
4.1.1.1 Các sơ đồ use case
Use case mức tổng quát:
Hình 4.1: Biểu đồ use case mức tổng quát Use case Chưa đăng nhập:
• Mục đích: trải nghiệm ứng dụng trước khi quyết định sử dụng ứng dụng
• Tác nhân: người dùng chưa đăng nhập(Ứng viên)
• Mô tả: người dùng chưa đăng nhập chỉ sử dụng được các tính năng như: Tìm kiếm danh sách và xem chi tiết việc làm, đăng ký tài khoản
Hình 4.2: Biểu đồ use case Chưa đăng nhập Use case Đăng nhập
• Mục đích: đảm bảo xác thực thông tin người dùng và an toàn bảo mật hệ thống
• Tác nhân: Ứng viên và nhà tuyển dụng
Nhà tuyển dụng có thể đăng nhập vào ứng dụng để đăng tải thông tin tuyển dụng và tìm kiếm ứng viên phù hợp, trong khi ứng viên cũng đăng nhập để ứng tuyển công việc và đăng tải thông tin tìm kiếm việc làm, bao gồm cả CV.
Hình 4.3: Biểu đồ use case Đăng nhập Use case Nhà tuyển dụng đăng ký tài khoản:
• Mục đích: Tạo tài khoản cho nhà tuyển dụng có thể đăng nhập vào hệ thống
• Tác nhân: Nhà tuyển dụng
Để sử dụng các chức năng đăng thông tin tuyển dụng và tìm kiếm ứng viên, nhà tuyển dụng cần phải đăng ký tài khoản Sau khi hoàn tất đăng ký, họ cần xác nhận tài khoản qua email để kích hoạt và sử dụng các tính năng này.
Hình 4.4: Biểu đồ use case Đăng ký tài khoản Use case Ứng viên đăng ký tài khoản
• Mục đích: Tạo tài khoản cho ứng viên có thể đăng nhập vào hệ thống
Để truy cập các chức năng ứng tuyển và đăng tải thông tin tìm kiếm việc làm, bao gồm CV, ứng viên cần thực hiện việc đăng ký tài khoản Sau khi hoàn tất đăng ký, hãy xác nhận tài khoản qua email để kích hoạt.
Hình 4.5: Biểu đồ use case ứng viên đăng ký tài khoản Use case Xem danh sách việc làm
• Mục đích: Giúp ứng viên có thể xem các việc làm đang được tuyển dụng
• Mô tả: Không cần đăng nhập, ứng viên vào để xem danh sách tất cả các việc làm, tìm kiếm và xem chi tiết của từng việc làm
Hình 4.6: Biểu đồ use case Xem danh sách việc làm Use case Upload sơ yếu lý lịch:
• Mục đích: Ứng viên có thể tải lên hồ sơ sơ yếu lý lịch để lưu lại
Sau khi đăng nhập, ứng viên có thể dễ dàng tải lên CV của mình Đồng thời, họ có thể ứng tuyển bằng cách xem chi tiết các vị trí việc làm phù hợp với hồ sơ của mình.
Hình 4.7: Biểu đồ use case Upload sơ yếu lý lịch Use case Quản lý thông tin cá nhân
Mục đích của việc ứng viên quản lý thông tin cá nhân là giúp người dùng nắm rõ thông tin của bản thân và thông tin trong CV, từ đó có thể chỉnh sửa hợp lý nếu cần thiết.
• Mô tả: Sau khi đăng nhập, ứng viên có xem thông tin cá nhân, chỉnh sửa thông tin cá nhân nếu cần và xóa CV (nếu có)
Hình 4.8: Biểu đồ use case Quản lý thông tin cá nhân Use case Tìm kiếm việc làm:
• Mục đích: Giúp ứng viên tìm kiếm việc làm mong muốn
• Mô tả: Ứng viên không cần đăng nhập vẫn có thể tìm việc làm mong muốn bằng từ khóa cần tìm
Hình 4.9: Biểu đồ use case Tìm kiếm việc làm Use case Quản lý thông tin tuyển dụng:
• Mục đích: Nhà tuyển dụng quản lý thông tin tuyển dụng
• Tác nhân: Nhà tuyển dụng
• Mô tả: Sau khi đăng nhập vào ứng dụng, nhà tuyển dụng tiến hành cập nhật danh sách thông tin tuyển dụng của mình
Hình 4.10: Biểu đồ use case Quản lý thông tin tuyển dụng Use case Xem danh sách ứng tuyển:
• Mục đích: Xem danh sách ứng viên ứng tuyển
• Tác nhân: Nhà tuyển dụng
Nhà tuyển dụng có khả năng xem danh sách các ứng viên đã nộp hồ sơ cho vị trí công việc đã đăng, bao gồm thông tin cá nhân và CV của từng ứng viên.
Hình 4.11: Biểu đồ use case Xem danh sách ứng tuyển Use case Tìm kiếm ứng viên
• Mục đích: Tìm ứng viên phù hợp
• Tác nhân: Nhà tuyển dụng
• Mô tả: Nhà tuyển dụng lọc ra danh sách ứng viên phù hợp thông qua các tiêu chí đề ra
Hình 4.12: Biểu đồ use case Tìm kiếm ứng viên Use case Thêm ứng viên vào danh sách ứng viên tiềm năng
• Mục đích: Đánh dấu ứng viên có tiềm năng phù hợp với công việc
• Tác nhân: Nhà tuyển dụng
Nhà tuyển dụng xác định ứng viên phù hợp với công việc thông qua việc xem xét danh sách ứng tuyển và danh sách tìm kiếm ứng viên.
Hình 4.13: Biểu đồ use case Thêm ứng viên tiềm năng
1 Nhà tuyển dụng Nhà tuyển dụng có tài khoản riêng để đăng nhập vào ứng dụng
Nhà tuyển dụng có khả năng khai thác các tính năng trong quy trình tuyển dụng, bao gồm việc xem danh sách ứng viên, quản lý thông tin tuyển dụng, thêm ứng viên mới, lọc hồ sơ và đăng tin tuyển dụng.
2 Ứng viên Ứng viên là người có tài khoản riêng và đăng nhập vào ứng dụng
Khách hàng có thể tận dụng nhiều tính năng của ứng dụng, bao gồm tải lên CV, quản lý thông tin cá nhân, ứng tuyển, lưu việc làm, chỉnh sửa thông tin cá nhân và CV, cũng như xem chi tiết về các vị trí tuyển dụng.
Bảng 4.1: Danh sách các actors
4.1.1.3 Danh sách các use case
STT Tên use case Ý nghĩa
1 Use case Mức tổng quát Đưa ra các actor có trong hệ thống quản lý, và chức năng chính của mỗi actor
2 Use case Chưa đăng nhập Đánh giá mức độ yêu thích ứng dụng của người dùng (quyết định tiếp tục sự dụng ứng dụng hay không)
3 Use case Đăng nhập Yêu cầu đăng nhập để xác thực trong ứng dụng
4 Use case Nhà tuyển dụng đăng ký tài khoản Đăng ký tài khoản để có thể sử dụng chức năng tuyển dụng ứng viên
5 Use case Ứng viên đăng ký tài khoản Đăng ký tài khoản để có thể sử dụng chức năng tìm kiếm việc làm
6 Use case Xem danh sách việc làm
Giúp ứng viên có thể xem các việc làm đang được tuyển dụng
7 Use case Upload sơ yếu lý lịch: Ứng viên có thể tải lên hồ sơ sơ yếu lý lịch để lưu lại thông tin
Quản lý thông tin cá nhân giúp ứng viên theo dõi và chỉnh sửa thông tin của mình cùng với nội dung CV một cách hợp lý, đảm bảo người dùng nắm rõ các thông tin cần thiết.
9 Use case Tìm kiếm việc làm
Giúp ứng viên tìm kiếm việc làm mong muốn
10 Use case Quản lý thông tin tuyển dụng
Quản lý thông tin tuyển dụng tốt hơn(đảm bảo tính công bằng, tiện lợi)
11 Use case Xem danh sách ứng tuyển
Xem danh sách các ứng viên ứng tuyển, dễ dàng sàng lọc
12 Use case Tìm kiếm ứng viên
Lọc ra danh sách ứng viên 1 cách dễ dàng, nhanh chóng
13 Use case Thêm ứng viên tiềm năng
Dánh dấu các ứng viên tìm năng phù hợp với công việc Dễ dành xem lại các ứng viên này Bảng 4.2: Danh sách các use case
Mô tả sơ đồ lớp
STT Tên lớp Mô tả
1 RECRUITER_SAVE_RESUMES Lớp NTD theo dõi CV
2 CANDIDATE_SAVE_JP Lớp ứng viên lưu tin tuyển dụng
6 FILTER_CANDIDATES Lớp bộ lọc ứng viên
7 JOB_POSTS Lớp tin tuyển dụng
8 JOB_RESUME_SUBMISSIONS Lớp đăng ký ứng tuyển
9 RECRUITERS Lớp nhà tuyển dụng
10 RESUMES Lớp sơ yếu lý lịch
11 JOB_DOMAINS Lớp chuyên ngành
Bảng 4.3: Các lớp của sơ đổ lớp
4.1.3 Phân tích và thiết kế cơ sở dữ liệu
Dựa trên việc xác định và phân tích yêu cầu, website của nhóm bao gồm các đối tượng sau đây:
STT Tên đối tượng Thuộc tính
ID, RECRUITER_ID, RESUME_ID, TIMESTAMP
2 CANDIDATE_SAVE_JP ID, CAND_ID, JOB_POST_ID,
3 EDUCATION ID, RESUME_ID, SCHOOL_NAME,
DEGREE_LEVEL, MAJOR, START_DATE, GRADUATION_DATE
4 CANDIDATES ID, EMAIL, PASSWORD_HASH,
PHONE, FULL_NAME, GENDER, DATE_OF_BIRTH, STATUS, PROVINCE_ID, REGISTER_ON, CONFIRMED, CONFIRMED_ON
5 COMPANIES ID, NAME, LOCATION, PHONE,
EMAIL, LOGO, WEBSITE, DESCRIPTION, BACKGROUND
6 FILTER_CANDIDATES ID, NAME, JOB_DOMAINS,
PROVINCES, ATLEAST_SKILLS, REQUIRED_SKILLS,
NOT_ALLOWED_SKILLS, MIN_YEAR, MAX_YEAR, GENDER,
MONTHS_OF_EXPERIENCE, RECRUITER_ID
7 JOB_POSTS ID, RECRUITER_ID, FULL_TEXT,
DESCRIPTION_TEXT, REQUIREMENT_TEXT, BENEFIT_TEXT, TECHNICAL_SKILLS, SOFT_SKILLS, TOTAL_VIEWS,
DEALINE, CLOSED_IN, POST_IN, LAST_EDIT, JOB_DOMAIN,
JOB_TITLE, LAST_EDIT, MAX_SALARY, MIN_SALARY,
POSTED_IN, AMOUNT, CLOSED_IN, CONTRACT_TYPE,
ID, RESUME_ID, JOB_POST_ID, SUBMIT_DATE, PROCESS_STATUS, IS_CALCULATING, SCORE_ARRAY, SCORE_EXPLANATION_ARRAY
9 RECRUITERS ID, EMAIL, PASSWORD_HASH,
PHONE, FULL_NAME, GENDER, STATUS, COMPANY_ID
10 RESUMES ID, MONTH_OF_EXPERIENCE,
CAND_ID, CAND_PICTURE, CAND_LINKEDIN, CAND_GITHUB, CAND_FACEBOOK, CAND_TWITTER, CAND_BLOG, CAND_MAIL,
CAND_PHONE, SOFT_SKILLS, TECHNICAL_SKILLS, STORE_ID, STORE_URL, TOTAL_VIEWS, EDUCATIONS, EXPERIENCES, JOB_DOMAIN_ID
11 JOB_DOMAINS ID, NAME, ALTERNATIVE_NAME
Bảng 4.4: Các đối tượng và thuộc tính của đối tượng
4.1.3.1 Bảng NTD theo dõi CV
Bảng NTD theo dõi CV lưu thông tin NTD và danh sách CV mà NTD đó đang theo dõi
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT Primary key Mã hoạt động
RECRUITER_ID INT Foreign key Mã nhà tuyển dụng
RESUME_ID INT Foreign key Mã sơ yếu lý lịch
TIMESTAMP DATETIME Null Thời gian diễn ra
Bảng 4.5: Bảng NTD theo dõi CV
4.1.3.2 Bảng ứng viên lưu tin tuyển dụng
Bảng ứng viên lưu tin tuyển dụng lưu các thông tin việc làm mà người tìm việc đang muốn xem lại sau
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT Primary key Mã đánh dấu
CAND_ID INT Foreign key Mã ứng viên
JOB_POST_ID INT Foreign key Mã tin tuyển dụng
TIMESTAMP DateTime Not Null Thời gian
Bảng 4.6: Bảng ứng viên lưu tin tuyển dụng
Bảng học vấn lưu các thông tin về bằng cấp, trình độ của ứng viên
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT Primary key Mã tham số
RESUME_ID INT Foreign key Tên tham số
DEGREE_LEVEL INT Not null Bằng cấp
START_DATE DATETIME Not null Ngày bắt đầu
GRADUATION_DATE DATETIME Null Ngày tốt nghiệp
Bảng ứng viên lưu các thông tin cơ bản của ứng viên như thông tin đăng nhập, thông tin cá nhân
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT Primary key Mã ứng viên
PHONE VARCHER(15) Not null Số điện thoại
FULL_NAME VARCHER(80) Not null Họ và tên
GENDER BIT Not null Giới tính
DATE_OF_BIRTH DATETIME Not null Ngày sinh
STATUS INT Not null Trạng thái tài khoản
PROVINCE_ID INT Null Mã tỉnh nơi ở
Bảng công ty lưu các thông tin của công ty nơi nhà tuyển dụng làm việc
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT Primary key Mã công ty
NAME VARCHAR(80) Unique Tên công ty
LOCATION VARCHAR(180) Not null Địa chỉ
PHONE VARCHAR(15) Not null Số điện thoại
EMAIL VARCHAR(255) Not null Email liên lạc
LOGO VARCHAR(255) Not null Địa chỉ liên kết ảnh đại diện WEBSITE VARCHAR(255) Not null Địa chỉ liên kết trang chủ DESCRIPTION VARCHAR(255) Not null Mô tả
BACKGROUND VARCHAR(512) Not null Địa chỉ liên kết ảnh bìa
4.1.3.6 Bảng bộ lọc ứng viên
Bảng bộ lọc ứng viên lưu trữ thông tin giúp nhà tuyển dụng lọc ra danh sách ứng viên nhanh nhất
Tên trường Kiểu dữ liệu Ràng buộc
JOB_DOMAINS VARCHAR(100) Null Vị trí công việc
PROVINCES VARCHAR(100) Null Tỉnh thành
ATLEAST_SKILLS VARCHAR(300) Null Các kĩ năng tối thiểu REQUIRED_SKILLS VARCHAR (300) Null Các kĩ năng yêu cầu
NOT_ALLOWED_SKILLS VARCHAR (300) Null Không cho phép kĩ năng
MIN_YEAR VARCHAR (10) Null Số năm tối thiểu
MAX_YEAR VARCHAR(10) Null Số năm tối đa
GENDER INT(11) Null Giới tính
INT(11) Null Số tháng kinh nghiệm
RECRUITER_ID INT(11) Foreign key
Mã của nhà tuyển dụng
Bảng 4.10: Bảng bộ lọc ứng viên
Bảng tin tuyển dụng lưu trữ các thông tin chi tiết về một bài tuyển dụng để người dùng có thể xem một cách chi tiết
Tên trường Kiểu dữ liệu Ràng buộc
Mã bài đăng tuyển dụng công việc
RECRUITER_ID INT(11) Foreign key
FULL_TEXT VARCHAR(256) Not null Nội dung
DESCRIPTION_TEXT TEXT Not null Phần mô tả công việc REQUIREMENT_TEXT TEXT Not null Thông tin yêu cầu BENEFIT_TEXT TEXT Not null Thông tin về quyền lợi
TECHNICAL_SKILLS VARCHAR(500) Null Các kỹ năng công nghệ
SOFT_SKILLS VARCHAR(500) Null Các kỹ năng mềm
TOTAL_VIEWS INT(11) Null Tổng lượt xem
DEALINE DATETIME Not null Hạn chót
CLOSED_IN DATETIME Not null Ngày đóng
POST_IN DATETIME Not null Ngày đăng
LAST_EDIT DATETIME Not null Thời gian chỉnh sửa cuối cùng JOB_DOMAIN VARCHAR(128) Not null Miền công việc
JOB_TITLE VARCHAR(200) Not null Tiêu đề của công việc
LAST_EDIT DATETIME Not null Lần chỉnh sửa cuối cùng
MAX_SALARY FLOAT Null Lương tối đa
MIN_SALARY FLOAT Null Lương tối thiểu
POSTED_IN DATETIME Not null Ngày đăng
AMOUNT INT(11) Not null Số lượng
CLOSED_IN DATETIME Null Ngày đóng
CONTRACT_TYPE INT(11) Not null Loại hợp đồng
EDUCATION_LEVEL INT Null Kỹ năng về vị trí công việc
PROVINCE_ID INT(11) Null Mã tỉnh thành
Bảng 4.11: Bảng tin tuyển dụng
4.1.3.8 Bảng đăng ký ứng tuyển
Bảng đăng ký ứng tuyển lưu trữ các thông tin ứng tuyển công việc của ứng viên JOB_RESUME_SUBMISSIONS
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
RESUME_ID INT(11) Foreign key Mã hồ sơ công việc JOB_POST_ID INT(11) Foreign key Mã bài đăng tuyển dụng
SUBMIT_DATE DATETIME Null Ngày đăng ký
PROCESS_STATUS BOOLEAN Null Trạng thái xử lý dữ liệu
IS_CALCULATING BOOLEAN Null Trạng thái tính điểm tương thích hoàn thành hay chưa
Null Danh sách điểm tương thích
Null Danh sách chú thích tương ứng cho score Bảng 4.12: Bảng đăng ký ứng tuyển
Bảng nhà tuyển dụng lưu trữ thông tin của nhà tuyển dụng giúp thể hiện rõ thông tin của nhà tuyển dụng
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT(11) Primary key Mã nhà tuyển dụng
EMAIL VARCHAR(255) Foreign key Email
PASSWORD_HASH VARCHAR(128) Null Mật khẩu
PHONE VARCHAR(15) Null Số điện thoại
FULL_NAME VARCHAR(80) Null Họ và tên
GENDER GENDER Not null Giới tính
STATUS INT(11) Null Trạng thái hoạt động
COMPANY_ID INT(11) Foreign key Mã công ty
Bảng 4.13: Bảng nhà tuyển dụng
4.1.3.10 Bảng sơ yếu lý lịch
Bảng sơ yếu lý lịch lưu trữ thông tin hồ sơ của ứng viên, giúp nhận biết cụ thể các thông tin của hồ sơ yếu lý lịch
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT(11) Primary key Mã đơn sơ yếu lý lịch
INT(11) Null Số tháng kinh nghiệm
CAND_ID INT(11) Foreign key Mã ứng viên
CAND_PICTURE VARCHAR(200) Null Ảnh đại diện
CAND_LINKEDIN VARCHAR(200) Null Linkedin
CAND_GITHUB VARCHAR(200) Null Github
CAND_FACEBOOK VARCHAR(200) Null Facebook
CAND_TWITTER VARCHAR(200) Null Twitter
CAND_BLOG VARCHAR(200) Null Trang giới thiệu
CAND_MAIL VARCHAR(200) Null Email
CAND_PHONE VARCHAR(15) Null Số điện thoại
SOFT_SKILLS VARCHAR(500) Null Kỹ năng mềm
TECHNICAL_SKILLS VARCHAR(500) Null Kỹ năng công nghệ
STORE_ID INT Not null Mã lưu trữ
STORE_URL VARCHAR(200) Not null Link lưu trữ
RESUME_FILENAME VARCHAR(200) Not null Tên của tệp tải lên
VARCHAR(10) Not null Định dạng của tệp tải lên
EDUCATIONS TEXT Null Thông tin học vấn của ứng viên trích xuất ra từ tệp tải lên
EXPERIENCES TEXT Null Thông tin kinh nghiệm làm việc của ứng viên trích xuất ra từ tệp tải lên
JOB_DOMAIN_ID INT Not null Mã chuyên ngành
Bảng 4.14: Bảng sơ yếu lý lịch
Bảng chuyên ngành lưu trữ thông tin của chuyên ngành hẹp của ngành IT
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT Primary key Mã chuyên ngành
NAME VARCHAR(100) Not null Tên chuyên ngành
VARCHAR(100) Null Tên gọi khác của chuyên ngành Bảng 4.15: Bảng chuyên ngành
Kiến trúc hệ thống
Hình 4.15: Kiến trúc hệ thống
Hệ thống được thiết kế để tự động sàng lọc CV dựa trên các tiêu chí đánh giá, từ đó xếp hạng CV theo điểm trọng số do nhà tuyển dụng điều chỉnh Chúng tôi tập trung vào bốn tiêu chí đánh giá: Học vấn (dựa trên trình độ cao nhất của ứng viên), Kỹ năng chung, Kỹ năng chuyên ngành theo yêu cầu của JD, và Kỹ năng mềm Kiến trúc của hệ thống bao gồm các thành phần chính như đã mô tả trong hình 5.
CV parser là công cụ giúp nhận diện và xử lý CV từ ứng viên, chuyển đổi chúng thành văn bản dễ đọc và trích xuất các thông tin quan trọng.
• Extracting skills module: chức năng chính là nhận vào một đoạn văn bản, sau đó trả về danh sách kỹ năng có trong văn bản
• Matching module: chức năng chính là nhận vào danh sách kỹ năng từ CV và
JD và trả về độ tương đồng giữa chung
Sau khi so khớp và xác định điểm tương thích, toàn bộ điểm tính toán sẽ được lưu trữ trong cơ sở dữ liệu của hệ thống Cuối cùng, nhà tuyển dụng sẽ nhận được danh sách xếp hạng CV dựa trên điểm trọng số cho từng mức độ tương thích.
Cài đặt hệ thống
4.3.1 Tổng quan về công nghệ
Flask là một framework web nhẹ được viết bằng Python, giúp lập trình viên dễ dàng xây dựng các API nhỏ và ứng dụng web Nó hỗ trợ nhiều thành phần mở rộng như tích hợp cơ sở dữ liệu, xác thực biểu mẫu, xử lý upload, và các công nghệ xác thực khác Với Flask, người dùng có thể nhanh chóng phát triển ứng dụng web từ đầu và mở rộng quy mô theo yêu cầu.
Flask dựa trên bộ công cụ Werkzeug WSGI và Jinja2 và đều là dự án của Pocco
WSGI, hay Giao diện cổng máy chủ web, là tiêu chuẩn quan trọng cho việc phát triển ứng dụng web bằng Python Nó tạo ra một giao diện phổ biến giữa máy chủ web và các ứng dụng, giúp tối ưu hóa khả năng tương tác và hiệu suất của các ứng dụng web.
Werkzeug là một bộ công cụ WSGI quan trọng, giúp xử lý các yêu cầu và phản hồi đối tượng, cùng với nhiều chức năng tiện ích khác Flask dựa vào Werkzeug như một trong những nền tảng chính của nó.
Jinja2 là một công cụ tạo mẫu giao diện phổ biến cho Python, cho phép kết hợp mẫu với nguồn dữ liệu để tạo ra các trang web động.
Một số tính năng nổi bật của Flask:
• Tài liệu mở rộng, dễ dàng tìm hiểu
• Dễ dàng cài đặt, triển khai
Flask cung cấp các thành phần cốt lõi thiết yếu cho phát triển ứng dụng web, bao gồm URL routing, đối tượng request và response, cùng với template, thay vì cung cấp tất cả các tính năng.
4.3.1.2 Hệ quản trị cơ sở dữ liệu MySQL
MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở hàng đầu thế giới, được ưa chuộng trong phát triển ứng dụng nhờ tốc độ cao, tính ổn định và dễ sử dụng Nó có khả năng thay đổi mô hình sử dụng linh hoạt theo điều kiện công việc và hoạt động trên nhiều hệ điều hành, cung cấp một bộ hàm tiện ích mạnh mẽ.
MySQL là một hệ quản trị cơ sở dữ liệu mạnh mẽ, lý tưởng cho các ứng dụng truy cập dữ liệu qua Internet nhờ tốc độ nhanh và tính bảo mật cao Người dùng có thể tải MySQL miễn phí từ trang chủ cho nhiều hệ điều hành khác nhau, bao gồm Windows, Linux, Mac OS, Unix, FreeBSD và NetBSD.
MySQL là một hệ quản trị cơ sở dữ liệu có cấu trúc và cách truy xuất tương tự như ngôn ngữ SQL Được phát hành từ những năm 90 của thế kỷ 20, MySQL mang lại nhiều ưu điểm cho người dùng.
MySQL là một cơ sở dữ liệu nhanh chóng và ổn định, dễ dàng sử dụng và tương thích với nhiều hệ điều hành khác nhau.
MySQL cung cấp tính bảo mật cao, phù hợp cho các ứng dụng cần truy cập cơ sở dữ liệu qua internet, nhờ vào nhiều tính năng bảo mật, bao gồm cả bảo mật cấp cao.
MySQL là một hệ quản trị cơ sở dữ liệu quan hệ đa tính năng, hỗ trợ nhiều chức năng SQL cả trực tiếp và gián tiếp.
• Khả năng mở rộng mạnh mẽ: Công cụ MySQL có khả năng xử lý khối dữ liệu lớn và có thể mở rộng khi cần thiết
• Tương thích trên nhiều hệ điều hành
• Cho phép khôi phục: MySQL cho phép các transaction được khôi phục, cam kết và phục hồi sự cố
Firebase là nền tảng phát triển ứng dụng di động và web dựa trên đám mây, với hệ thống máy chủ mạnh mẽ của Google Nền tảng này cung cấp dịch vụ đa năng và bảo mật cao, hỗ trợ cả Android và iOS Firebase Storage cho phép lưu trữ nhiều loại dữ liệu như tệp tin, hình ảnh và video một cách dễ dàng, đồng thời tích hợp tính năng bảo mật của Google để thuận tiện trong việc tải lên và tải về ứng dụng.
Dịch vụ lưu trữ đối tượng này cho phép bạn lưu trữ hình ảnh, âm thanh, video và nội dung do người dùng tạo ra, mang lại giải pháp mạnh mẽ, đơn giản và tiết kiệm chi phí.
Firebase Storage, được Google hỗ trợ, là nền tảng lưu trữ mạnh mẽ với quy mô toàn cầu, phục vụ cho các doanh nghiệp lớn và ứng dụng có hàng triệu người dùng Người dùng có thể sử dụng dịch vụ miễn phí trong một giới hạn nhất định và có tùy chọn nâng cấp lên các gói cao cấp nếu cần.
Trong ứng dụng này, nhóm sử dụng dịch vụ Firebase Storage để lưu CV của khách hàng, các tập tin thông tin người dùng,
Nhóm thiết kế API dựa trên tiêu chuẩn Restful API [23] với base URL: /api
• POST: /company ̶ Header: Authorization: Bearer token ̶ Thông số truyền vào:
Tên Kiểu dữ liệu Mô tả name String Tên công ty location String Địa chỉ của công ty email String Email của công ty
60 logo File Logo của công ty background File Hình nền của công ty website String Website của công ty description String Mô tả công ty
API POST: /company cho phép nhà tuyển dụng tạo mới một công ty với đầy đủ thông tin nếu công ty chưa tồn tại trong cơ sở dữ liệu Kết quả trả về sẽ thông báo việc thêm công ty thành công hoặc thất bại.
• GET: /company ̶ Header: Authorization: Bearer token ̶ Thông số truyền vào:
Tên Kiểu dữ liệu Mô tả name String Tên công ty page Int Số trang
Bảng 4.17: Thông số truyền vào của API GET: /company ̶ Kết quả:
Đánh giá
Nhóm đã tiến hành đánh giá kết quả trích xuất từ mô hình và tập dữ liệu đã được tạo trước đó Để thực hiện việc này, nhóm sử dụng một độ đo nhằm kiểm tra độ chính xác của kết quả.
Bài viết này trình bày về việc đánh giá hiệu quả của các phương pháp dựa trên kỹ năng tự động và thủ công, sử dụng các chỉ số như độ chính xác (precision), độ phủ (recall) và chỉ số F1-score Các chỉ số này được áp dụng để phân tích dữ liệu thực tế, giúp xác định mức độ hiệu quả của các kỹ thuật được sử dụng.
• TP: là tổng số lượng kỹ năng được trích xuất được xác định là đúng
• FP: là tổng số lượng kỹ năng được trích xuất được xác định là sai
• FN: là tổng số lượng kỹ năng được xác định là không liên quan
4.4.2 Kết quả đánh giá Để có thể tiến hành đánh giá, nhóm sử dụng bộ dữ liệu thực tế được thu thập từ trang web tuyển dụng và sau đó tiến hành gán nhãn bổ sung cho các kỹ năng bị liệt kê thiếu từ JD Sau đó, nhóm tiến hành trích xuất kỹ năng của tập dữ liệu đó bằng mô hình đã xây dựng được và so sánh với các kỹ năng được gán nhãn thủ công rồi sử dụng độ đo Precision, Recall và F1-score để đánh giá độ hiệu quả của phương pháp Kết quả thu được là độ chính xác (Precision) là 24.29% và độ phủ (Recall) là 78.17% và cuối cùng là F1-score là 36.71%
Kết quả thực nghiệm cho thấy sự khác biệt rõ rệt giữa các kỹ năng được rút trích từ mô hình và các kỹ năng được gán nhãn thủ công Giá trị Precision tương đối thấp có thể được chấp nhận do một số lý do nhất định.
Mô hình mà nhóm áp dụng bao gồm cả module phân tích ngữ nghĩa, giúp nâng cao khả năng thông minh của mô hình và cho phép trích xuất các kỹ năng liên quan đến những kỹ năng trong JD mà không xuất hiện trực tiếp Tuy nhiên, điều này cũng ảnh hưởng đáng kể đến giá trị đo lường, dẫn đến độ chính xác (Precision) thấp hơn mong đợi, nhưng vẫn trong mức chấp nhận được.
Việc xác định kỹ năng bằng cách gán nhãn thủ công trong một số lượng lớn JD khiến cho việc sai sót xảy ra là điều không tránh khỏi
4.4.3 Đánh giá kết quả xếp hạng danh sách CV Đối với việc đánh giá xếp hạng danh sách CV, nhóm chọn ngẫu nhiên 10 CVs đang tìm việc ở vị trí Frontend Developer và một JD ngẫu nhiên từ ITviec Sau đó cho chạy hệ thống và cho ra kết quả sau đây
CV ID Domain Score General Score Soft Skill Score Overall Score
Bảng 4.49: Bảng xếp hạng danh sách 10 CV với 1 JD cho vị trí Frontend Developer
Theo bảng trên, các CV ở hàng đầu có khả năng được chọn cao hơn so với các CV ở hàng sau Nhóm sẽ lựa chọn đại diện là CV_2 và CV_1 để so sánh điểm số của Domain Score, nhằm giải thích lý do tại sao CV_2 lại đạt điểm cao hơn.
Bên dưới là hình ảnh đồ thị biểu diễn danh sách kỹ năng được trích xuất từ JD, CV_2 và CV_1
Hình 4.42: Đồ thị biểu diễn kỹ năng cho JD
Hình 4.43: Đồ thị biểu diễn kỹ năng cho CV_2
Hình 4.44: Đồ thị biểu diễn kỹ năng cho CV_1
Từ đồ thị CV_2 sang
• Update: reac hook -> jquery, algorithms -> api, https -> code review, oop -> responsive, three -
• Insert: wireframes, sass, bitbucket, sourcetree, svn, testing, modernizr
Từ đồ thị CV_1 sang
• Update: reactjs -> bootstrap, redux -> jquery, https -> code review, oop -> responsive, restful -
• Insert: sass, scss, css preprocessors, bitbucket, git, github, sourcetree, svn, source control, testing, modernizr, tools
Bảng 4.50: Các bước chuyển đổi từ đồ thị CV_1, CV_2 sang đồ thị JD
Dựa vào việc phân tích đồ thị và các bước chuyển đổi, rõ ràng số bước chuyển đổi của CV_1 vượt trội hơn so với CV_2 Điều này dẫn đến việc CV_2 có mức độ phù hợp với JD cao hơn CV_1, do đó, việc CV_2 có domain score cao hơn là hoàn toàn hợp lý.
4.4.4 Đánh giá thực nghiệm Để đánh giá được hệ thống một cách trực quan, nhóm sẽ tiến hành so sánh tương quan ưu nhược điểm của hệ thống so với một vài website lớn về lĩnh vực tuyển dụng hiện có trên thị trường như Itviec – một website hàng đầu về lĩnh vực tuyển dụng chuyên cho ngành IT
ITviec cung cấp hệ thống đánh giá CV của ứng viên trước khi gửi cho nhà tuyển dụng, dựa trên các tiêu chuẩn của Itviec Điều này giúp nhà tuyển dụng dễ dàng tiếp cận và lựa chọn những ứng viên tiềm năng nhất.
Hệ thống sàn lọc và xếp hạng CV tự động giúp nhà tuyển dụng nhanh chóng xác định ứng viên phù hợp dựa trên các tiêu chí quan trọng Điều này không chỉ tiết kiệm thời gian mà còn nâng cao hiệu quả trong việc xử lý lượng CV lớn.
- Cung cấp đánh giá công ty và môi trường làm việc cho ứng viên tìm nơi phù hợp
- Việc đăng ký tài khoản tuyển dụng hoàn toàn miễn phí
Nhược điểm - Thời gian duyệt CV trong vòng
12 tiếng vào các ngày trong tuần
- Chưa hỗ trợ sắp xếp danh sách
CV theo mức độ phù hợp với JD của nhà tuyển dụng
- Việc đăng ký tài khoản nhà tuyển dụng cần liên hệ với ITviec để xét duyệt
- Chưa có chức năng đánh giá công ty
- Số lượng lĩnh vực trong ngành IT được hỗ trợ việc tìm kiếm và sàn lọc, sắp xếp còn hạn chế
Bảng 4.51: Ưu nhược điểm của hệ thống so với Itviec