基於自然語言處理 (NLP) 和機器學習 (ML) 的履歷篩選專案。核心目標是自動化地將大量履歷文本精準分類到定義的職位類別中,從而顯著提高招聘流程的效率、減少人工審核的負擔,並確保分類結果的一致性。✨
核心功能在於自動化地將履歷(或任何文本形式的簡歷)分類到定義的職位類別中。 具體來說,它的功能體現在以下幾個方面:
-
自動化履歷分類 🤖: 專案的主要目標是取代人工手動閱讀和分類大量履歷的繁瑣工作。當給它一份新的履歷文本時,它就能根據履歷的內容,自動判斷這份履歷最可能屬於哪個職位類別(例如:資料科學、軟體開發、人力資源、會計等)。
-
基於文本內容的智慧判斷 🧠: 它不是簡單的關鍵字匹配,而是透過自然語言處理 (NLP) 技術,理解履歷文本的語義和重要特徵。例如,它會識別出「Python」、「Machine Learning」、「Data Analysis」等詞彙與「資料科學」類別的關聯性,或者「Recruitment」、「Employee Relations」與「人力資源」類別的關聯性。
-
提高招聘效率 ⚡: 對於擁有大量應徵者的公司來說,這個工具可以大大縮短初步篩選的時間。它能快速將履歷分發到正確的部門或招聘人員手中,讓他們專注於評估更符合職位要求的候選人。
-
確保分類一致性 ✅: 機器學習模型會根據訓練數據建立一致的分類規則,避免了不同招聘人員在判斷上的主觀差異,從而保證了篩選標準的統一性。
-
可擴展性和自定義 ⚙️: 這個專案的架構是模組化的,你可以根據需要添加新的職位類別,或者使用不同的機器學習模型來提高分類的準確性,使其適應多變的業務需求。
簡單來說,這個專案就是一個「智慧履歷分揀機」,它能讀懂履歷,並把它們自動歸類到正確的「位置」上。
本專案涵蓋了從資料準備到模型預測的完整機器學習流程,每個步驟都經過精心設計:
-
資料載入與初步探索 📊
- 目標:安全地載入履歷資料集,並對其結構和內容進行初步了解。
- 細節:程式會嘗試從指定的 CSV 檔案 (
SomeoneCV.csv) 載入數據,並透過pandasDataFrame 展示前幾行數據 (.head()) 和整體形狀 (.shape)。 - 視覺化:繪製各職位類別的數量分佈圖 (
seaborn.countplot),幫助我們直觀地了解資料集的類別平衡性,這對於後續的模型訓練至關重要。
-
文本預處理 🧹
- 目標:將原始、非結構化的履歷文本轉換為機器學習模型能夠理解和處理的乾淨、標準化格式。
- 細節:
- 移除特殊符號:自動偵測並移除(URLs)、轉發標記 (RT)、抄送標記 (cc)、哈希標籤 (#)、提及 (@) 等文本特有的非文字內容。
- 格式統一:移除標點符號、數字和非 ASCII 字元,並將所有文本轉換為小寫,確保詞彙的一致性。
- 空格處理:清理多餘的空格,保持文本整潔。
- 停用詞移除:刪除像 "the", "a", "is" 等在英文中頻繁出現但對語義分類貢獻不大的通用詞彙。
- 詞形還原 (Lemmatization):將單詞還原到其基本詞形(例如 "running" 變成 "run", "better" 變成 "good"),這比單純的提取更精確,有助於減少詞彙的維度並提高模型泛化能力。
-
特徵工程 (TF-IDF) ⚙️
- 目標:將清理後的文本數據轉換為機器學習模型可以理解的數值向量表示。
- 細節:採用 TF-IDF (Term Frequency-Inverse Document Frequency) 技術。
- 詞頻 (TF):衡量一個詞在單個履歷中出現的頻率。
- 逆文檔頻率 (IDF):衡量一個詞在整個履歷集合中的稀有程度,越稀有的詞,其 IDF 值越高。
- TF-IDF 結合:給予那些在單個履歷中頻繁出現,但在整個資料集中相對稀有的詞語更高的權重,從而更好地捕捉該詞對特定履歷類別的區分度。
- 實現:使用
sklearn.feature_extraction.text.TfidfVectorizer進行向量化,並可設定max_features來控制最終特徵向量的維度。
-
模型訓練 🧠
- 目標:讓機器學習模型從已特徵化的數據中學習履歷文本與其對應職位類別之間的複雜關係。
- 細節:
- 資料分割:將資料集按比例(預設 80% 訓練集,20% 測試集)分割,並使用
stratify參數確保訓練集和測試集中各類別的比例與原始資料集保持一致,避免因資料分佈不均導致的偏差。 - 模型選擇:採用 多項式(Multinomial Naive Bayes) 分類器,經常能在文本分類的專案中看到,而且計算效率高的模型。
- 訓練過程:模型通過學習訓練集中的文本特徵 (
X_train) 和對應的類別標籤 (y_train) 來建立分類規則。
- 資料分割:將資料集按比例(預設 80% 訓練集,20% 測試集)分割,並使用
-
模型評估 ✅
- 目標:客觀地衡量訓練好的模型在未見過資料上的性能表現。
- 細節:
- 預測:使用訓練好的模型對測試集 (
X_test) 進行類別預測。 - 指標:計算並輸出模型的準確度 (Accuracy),以及更詳細的分類報告 (Classification Report),其中包括每個類別的精確度 (Precision)、召回率 (Recall)、F1 分數 (F1-Score) 和支援數量 (Support)。這些指標對於全面理解模型在不同類別上的表現至關重要,尤其是在類別數量不平衡的情況下。
- 預測:使用訓練好的模型對測試集 (
-
新履歷預測 🔮
- 目標:將訓練好的模型應用於實際場景,對新的、未知的履歷文本進行即時分類。
- 細節:提供一個專門的方法,接收新的履歷文本作為輸入。該方法會自動對新文本執行與訓練數據相同的預處理和特徵化步驟(使用已訓練好的向量化器),然後將其輸入到模型中,輸出預測的職位類別。
本專案主要使用 Python 及其強大的科學計算和機器學習函式庫:
- Python 🐍:主要程式語言。
- Pandas 🐼:用於高效的資料載入、清洗和操作。
- NumPy ✨:提供高性能的數值運算功能,是 Pandas 和 Scikit-learn 的基礎。
- Matplotlib 📈 & Seaborn 🎨:用於創建各種靜態、動畫和互動式視覺化圖表,特別是用於資料探索和結果展示。
- NLTK (Natural Language Toolkit) 📚:Python 中最流行的 NLP 庫之一,用於文本預處理的關鍵步驟,如停用詞管理和詞形還原。
- Scikit-learn 🧠:一個功能全面的機器學習庫,提供了豐富的分類器、特徵提取工具和模型評估指標。
要運行此專案,請按照以下步驟設定您的開發環境:
-
環境準備 (推薦使用虛擬環境):
- 為了避免套件衝突,強烈建議為此專案創建一個 Python 虛擬環境。
- 打開命令提示字元 (CMD) 或 PowerShell,導航到您希望存放專案的目錄(例如
C:\Users\user\Desktop)。 - 創建虛擬環境:
python -m venv venv_resume_screener
- 激活虛擬環境:
- Windows:
.\venv_resume_screener\Scripts\activate
- macOS/Linux:
source venv_resume_screener/bin/activate
- Windows:
- 激活後,您的命令列提示符會顯示
(venv_resume_screener),表示您已進入虛擬環境。
-
複製儲存庫 (如果你是從 GitHub 克隆,而非手動上傳):
- 在激活的虛擬環境中,執行以下命令:
git clone [https://github.com/auhieur/Resume-CVproject.git](https://github.com/auhieur/Resume-CVproject.git) cd Resume-CVproject - 如果您是手動下載或上傳檔案,請確保您的
CVproject.py和SomeoneCV.csv檔案位於同一個資料夾中。
- 在激活的虛擬環境中,執行以下命令:
-
安裝所需的 Python 函式庫:
- 在激活的虛擬環境中,使用
pip安裝所有必要的函式庫:pip install numpy pandas scikit-learn matplotlib seaborn nltk
- 這將確保所有專案依賴項都已正確安裝。
- 在激活的虛擬環境中,使用
-
下載 NLTK 資料:
- NLTK 庫的某些功能需要額外的資料集(如停用詞和 WordNet)才能正常工作。
- 在激活的 Python 虛擬環境中,打開 Python 互動模式:
python
- 然後在
>>>提示符下,一行一行輸入以下命令並按 Enter:import nltk nltk.download('stopwords') nltk.download('wordnet') nltk.download('punkt') exit() # 下載完成後退出 Python 互動模式
本專案的檔案結構簡潔明瞭:
CVproject.py:- 這是專案的核心 Python 腳本。
- 它包含
ResumeScreener類別的定義,該類別封裝了所有資料載入、預處理、特徵方程、模型訓練、評估和預測的功能。 - 主執行區塊 (
if __name__ == "__main__":) 示範了如何實例化和使用ResumeScreener類別來運行整個流程。
SomeoneCV.csv:- 這是專案所使用的履歷資料。
- 它應該包含至少兩列:
Resume(包含履歷的文本內容) 和Category(履歷所屬的職位類別)。 - 重要:請確保此檔案與
CVproject.py位於同一目錄下。
按照以下步驟運行專案並觀察其功能:
-
準備資料集:
- 確保您的履歷資料集檔案已命名為
SomeoneCV.csv。 - 驗證
SomeoneCV.csv檔案中包含Resume和Category兩個必需的欄位。 - 將
SomeoneCV.csv檔案放置在與CVproject.py相同的目錄下。
- 確保您的履歷資料集檔案已命名為
-
運行專案:
- 打開您的命令提示字元 (CMD) 或 PowerShell。
- 激活您的虛擬環境 (如果您在「安裝與設定」步驟中創建了虛擬環境)。
- Windows:
.\venv_resume_screener\Scripts\activate - macOS/Linux:
source venv_resume_screener/bin/activate
- Windows:
- 導航到專案所在的目錄(例如
cd C:\Users\user\Desktop\Resume-CVproject)。 - 執行
CVproject.py腳本:python CVproject.py
- 程式將會依序執行資料載入、預處理、特徵化、模型訓練、模型評估,並輸出範例履歷的預測結果。您將在控制台看到每個步驟的進度訊息和最終的評估報告。
講實在話🤣,履歷分類也不是什麼新發想了,但也是本人花費了蠻多時間練習跟訓練的。
另外本專案提供了一個基礎,但仍有許多方面可以進一步改進和擴展:
- 模型優化與選擇:
- 嘗試其他模型:使用更先進的機器學習模型,目前這模型是監督式模型,更好的方向就是能夠支持向量機 (SVM)、隨機 (Random Forest)、梯度提升 (XGBoost/LightGBM),或深度學習模型(循環神經網路 LSTM、卷積神經網路 TextCNN)。
- 參數調優:使用網格搜索 (Grid Search)、隨機搜索 (Random Search) 或貝葉斯優化等技術,對模型的超參數進行系統性調優,以找到最佳性能配置。
- 更進階的 NLP 技術:
- 嵌入 (Word Embeddings):考慮使用預訓練的詞向量模型,如 Word2Vec、GloVe 或 FastText,它們能捕捉詞語的語義關係,提供更豐富的文本表示。
- 預訓練語言模型 (Pre-trained Language Models):使用 BERT、RoBERTa、GPT 等大型預訓練模型進行微調 (fine-tuning),這些模型在各種 NLP 任務中表現卓越。
- 資料增強 (Data Augmentation):
- 如果你的資料集較小或某些類別的履歷數量不足,可以透過同義詞替換、隨機插入/刪除詞彙、回譯等技術來生成更多樣化的訓練數據,以提高模型的泛化能力。
- 使用者介面 (UI):
- 開發一個簡單的 Web 應用程式 (例如使用 Flask, Django, 或 Streamlit 框架),提供一個更直觀和友好的介面。用戶可以輕鬆上傳履歷文件(如 PDF, DOCX),系統自動提取文本並顯示預測結果。
- 模型部署:
- 將訓練好的模型部署為一個可供外部應用程式調用的 API 服務 (例如使用 Flask, FastAPI)。這樣,其他系統或服務可以透過 HTTP 請求將履歷文本發送給您的模型,並接收分類結果。
- 錯誤處理與日誌:
- 增強程式碼的錯誤處理機制,並加入日誌記錄功能,以便在運行過程中追蹤問題和監控性能。
- 多語言支援:
- 擴展專案以支援不同語言的履歷篩選,這需要相應的語言資料集和多語言 NLP 工具,目前因為從網路上抓取的資料考量, 還是考慮暫時先用英文。
歡迎各位想要加入此專案以及貢獻!如果您有任何改進建議、功能請求或發現了錯誤,請:
- Forks 本儲存庫。
- 創建一個新的 feature branch (
git checkout -b feature/your-feature-name)。 - 提交您的變更 (
git commit -m 'Add new feature')。 - 將您的變更推送到遠端分支 (
git push origin feature/your-feature-name)。 - 提交一個 Pull Request (PR),詳細描述您的變更。
本專案依據 Apache-2.0 License 發布。