基於關鍵字的求職搜尋通常不能充分傳達求職者意圖。而在人力資源(HR)技術領域,大量含有豐富文字內容提供了更為豐富的資訊。例如,求職者的簡歷中包含了其理想工作的各種指標。這個專案主要演示瞭如何在基於Amazon Web Services (AWS) 的Databricks平臺上利用Analytics Zoo的自然語言文字分析和基於深度學習的推薦模型,根據簡歷內容和工作職位描述,來預測求職者申請工作職位的可能性。
背景
Talroo 面臨基於關鍵字搜尋的挑戰。Talroo是一個高容量、資料驅動的全國性招聘網站,有著豐富的市場合作關係,其網路龐大而有針對性。目前,Talroo大規模的根據求職者輸入的關鍵詞,透過搜尋去匹配和推薦工作。每個月Talroo都會處理百億條招聘廣告和十億條工作查詢的資料,這會導致數以千萬計像點選和轉換的互動事件。這些描述、查詢和互動事件都在AWS上的Databricks平臺上處理,並作為parquet table被儲存到Amazon Simple Storage Service(Amazon S3)上。瞭解更多有關 Talroo *
Talroo碰到的挑戰之一是,較短的招聘週期限制了招聘廣告面向求職者的有效投放。目前,Talroo已有的推薦系統透過關鍵字搜尋來解決這個冷啟動問題。但這個簡短的關鍵詞缺少上下文來源並不能有效描述求職者的意向。相比單純的關鍵詞,個人簡歷在自然語言中提供了更豐富的上下文來源。
新開發的深度神經網路(DNN)已經在捕獲使用者項資料非線性關係的推薦系統中得到成功應用。經驗證據表明,使用更深層次的神經網路可以提供更好的推薦效能2。
因此,將自然語言處理(NLP)和大規模DNN技術結合在AWS Databricks生產平臺上,是完善Talroo推薦系統的關鍵。本專案透過使用基於BigDL1的Analytics Zoo構建了端到端的解決方案。
資料整合
我們直接從Talroo的資料處理過程中提取求職者簡歷和招聘廣告以及相關的資料,用於訓練和測試模型。並透過含有申請、點選和廣告的顯示量的日誌檔案來還原申請職位的過程。基本流程如下:
- 為申請日誌中的每一位求職者生成(Resume, Applied-Job) pair
- 將生成的(Resume, Applied-Job) pair 和點選日誌結合生成點選資訊
- 使用 (Resume, Applied-Job, Click) tuple和廣告顯示日誌匹配得到所有推薦的招聘廣告,不考慮工作是否被申請
該專案應用了包含了查詢、廣告顯示、點選和轉換的5個月簡歷搜尋資料,用於構建解決方案。其中用於模型訓練/測試之間的分配比例為4:1。
將Analytics Zoo的深度學習應用到AWS上的Databricks平臺非常直接。首先透過上傳適當的Java* ARchive檔案包(JARs),將Analytics Zoo APIs載入到 Databricks 平臺的classpath中;然後,我們透過Databricks平臺的Jupyter筆記本介面進行深度學習模型的訓練和迭代,如任何其他機器學習模型一樣。
Analytics Zoo解決方案
Analytics Zoo是Intel開源的一個統一的資料分析和人工智慧平臺,它無縫地將Spark、TensorFlow、Keras和BigDL程式整合到一個整合的流水線中,可以透明地擴充套件到大型Apache Hadoop/Spark叢集中,用於分散式訓練或推理,而無需額外的GPU基礎設施。
此端到端的處理流程執行在已經包含了 Apache Spark 和Analytics Zoo 的Databricks叢集上,整個流程包括了資料採集、 特徵提取、 推薦模型的訓練和評估。推薦系統的輸入是一個簡歷-招聘廣告配對,用來訓練Neural Collaborative Filtering (NCF) 2 模型從而學習工作職位與求職者之間的關係,並預測某些求職者申請特定職位的可能性。在當前版本中,點選表示正樣本,而非點選表示負樣本。下圖 1 顯示了完整的端到端處理流程。
圖 1:基於Analytics Zoo 和 Apache Spark的簡歷推薦系統
第 1 部分
我們首先會讀取Spark中的原始資料作為DataFrames,然後提取用於模型訓練的資料特徵。在原始資料集中,每份簡歷或招聘廣告的文字內容是我們要處理的物件。我們對每一個文字內容來提取一個資料向量表示該文字,用於訓練和測試推薦模型。
在此專案中,我們透過Global Vectors (GloVe)3來得到文件的向量。該資料採用全域對數雙線性迴歸模型的無監督演算法,將每個單詞轉成對應的實數向量。該訓練使用了來自2014年維基百科的單詞與單詞同時出現的統計資料。下載資料地址:zip file from the Stanford NLP Group.
我們將文件分割成詞,清洗,然後根據每個單詞的向量計算加權平均值,從而得到該文件的資料向量,文件的資料向量代表了該文件在向量空間中的線性子結構。
第 2 部分
我們使用Spark 自有的APIs訓練k-Means模型,將簡歷分到了多個組中。瞭解更多K-means++.
<<<<
val kmeans = new KMeans()
.setK(param.kClusters)
.setSeed(1L)
.setInitMode("k-means||")
.setMaxIter(param.numIterations)
.setFeaturesCol("kmeansFeatures")
.setPredictionCol("kth")
val trained: KMeansModel = kmeans.fit(resueDF)
<<<<
第 3 部分
我們進一步處理每個組中的簡歷和招聘廣告,對於每個簡歷-招聘廣告配對,我們將對應的兩個向量連線成一個向量作為資料特徵,將點選或不點選分別轉換表示為正標籤或負標籤。含有資料特徵和標籤的DataFrame被轉換成Sample 的RDD。
第 4 部分
然後,我們用Analytics Zoo APIs為每個組構建NCF推薦模型 (由四個線性層組成,如下所示),並訓練模型。對模型的權重和偏差給與平均值為0且標準偏差為0.1初始值,以得到更快的收斂效果。
<<<<
val model = Sequential[Float]()
model
.add(Linear(100, 40, initWeight = Tensor(40, 100).randn(0, 0.1), initBias = Tensor(40).randn(0, 0.1))).add(ReLU())
.add(Linear(40, 20, initWeight = Tensor(20, 40).randn(0, 0.1), initBias = Tensor(20).randn(0, 0.1))).add(ReLU())
.add(Linear(20, 10, initWeight = Tensor(10, 20).randn(0, 0.1), initBias = Tensor(10).randn(0, 0.1))).add(ReLU())
.add(Linear(10, 2, initWeight = Tensor(2, 10).randn(0, 0.1), initBias = Tensor(2).randn(0, 0.1))).add(ReLU())
.add(LogSoftMax())
<<<<
第 5 部分
我們一共訓練了五個推薦模型,對每個測試記錄根據其對應的推薦模型做出預測,從而得到綜合預測。
模型評估和結果
我們使用兩種離線評估方法,根據一個月的資料來對推薦系統進行評估。一個關注數量和另一個關注模型的質量。
對於數量評估,需要測量求職者選擇的推薦數量。應用準確率4,5公式來測量檢索到的例項中相關例項的分數。準確率是透過模擬點選率來估計點選率(CTR)的一種離線方法。
質量意味著推薦的工作的排名位置準確地反映了他們與簡歷的相關性,這意味著更匹配的工作應該得到更高的排名。因為當前模型是二進位制秩,我們使用Mean reciprocal rank(MRR)4。MRR從多個查詢中計算出第一個相關例項的倒數的平均值,這將給出排名質量的統一衡量標準。
由於求職者的行為通常差異很大,最終的評估圖表對應於工作的百分位數增加。我們沒有使用召回率是因為很難得到真實的假陰性資料。
圖 2 顯示了推薦模型預測和搜尋推薦的對比。橙線表示搜尋的結果,藍線表示 NCF 推薦模型的結果。兩項統計資訊圖表分別是準確率 (圖 2a) 和 MRR (圖 2b) 。透過採用端到端Analytics Zoo解決方案的處理流程,我們看到了相比搜尋推薦有大幅提高,MRR與準確率分別為 10%和6%。
結論
本文簡要介紹了Talroo在使用關鍵字搜尋來推薦工作面臨的挑戰,以及可以利用豐富文字資訊和深度學習來改進推薦系統的可能。我們給出了判斷模型成功的關鍵指標,介紹了整個解決方案。該方案使用Analytics Zoo搭建了端到端的深度學習處理流程,首先透過自然語言分析得到文字向量作為資料特徵,又搭建了深度學習NCF推薦模型,從而預測求職者申請某工作的可能性。我們的方案成功執行在基於AWS的Databricks叢集上。類似的基於深度學習和豐富內容的推薦系統也可以應用到在其他場景中(如Web搜尋和電子商務)併發揮關鍵作用。更多的示例和API請參考Analytics Zoo模型推薦 。
參考資料
- J Dai, Y Wang, X Qiu, etc., 2018, "BigDL: A Distributed Deep Learning Framework for Big Data"
- X He, L Liao, H Zhang, etc., 2015, "Neural Collaborative Filtering"
- J Pennington, R Socher, C Manning, 2014, "GloVe: Global Vectors for Word Representation"
- Evaluation Measures (Information Retrieval)
- P Lak, A Bener, 2017, "Predicting Click Through Rate for Advertisements- Dealing with Imbalanced Data"