Job2Skills: ระบบ Job Recommendation ของ LinkedIn

Pined Laohapiengsak
AIResearch.in.th
Published in
4 min readJul 17, 2020

อย่างที่เราทราบกันดี LinkedIn เป็น social platform ในการหางาน หาคนทำงาน หรือ ข่าวเกี่ยวกับบริษัท ที่ใหญ่อันดับหนึ่งของโลก และเค้าได้มีการตีพิมพ์งานวิจัยเกี่ยวกับ Job Recommendation เรียกว่า Job2Skill ซึ่งได้ทำการทดลองบน production เรียบร้อยแล้ว

โดย Baoxu Shi, Feng Guo, Jaewon Yang และ Qi He ได้ทำการตีพิมพ์งานวิจัยที่ชื่อว่า

Salience and Market-aware Skill Extraction for Job Targeting

ซึ่งเป็นเป็นงานตีพิมพ์ที่พูดถึงเรื่องการสร้าง Job2Skill และ Evaluation

เริ่มต้นจากปัญหาทางธุรกิจ

ใน LinkedIn มีระบบการหางานอยู่ 2 แบบ คือ reactive Job Search กับ proactive Job You May Be Interested In (JYMBII) ซึ่งแน่นอนว่าทั้งสองระบบนี้ ใช้ลักษณะในการหางานที่เหมาะสมกับผู้สมัคร และ ผู้ว่าจ้าง

กล่าวคือ ทาง LinkedIn จะมีระบบในการทำ skill extraction ของผู้ว่าจ้าง (Job Post) และ ผู้สมัคร (Applicant) และ นำ skill ของทั้งสองมาดูว่ามีความคลายกัน หรือ มีความต้องการเหมือนกันไหม

ตัวอย่าง Job Post หา Machine Learning Engineer

ตัวอย่าง Job Post ด้าน Deep Learning

Job Post นี้ สิ่งที่จะถูก Extract ออกมาก็คือสิ่งที่ถูกตีกรอบไว้นั้นเอง และก็จะถูกนำไปแนะนำให้กับผู้สมัคร ที่มีความสามารถประมาณนี้

แล้วปัญหาอยู่ที่ไหน?

ปัญหาการทำ skill extraction ด้วย text-based เพียวๆ แบบนี้ทำให้ เราไม่ทราบถึง “ความสำคัญ” (Salience) และ “ความต้องการของตลาด” (Market-aware) ของ skill ที่ถูก extract ออกมา

กลับไปที่ตัวอย่างของเรา ที่ Job Post นั้นต้องการ Machine Learning Engineer และ skill ที่ถูก extract ออกคือ Machine Learning, Deep Learning, Keres, Tensorflow, PyTorch, Python, Communication Skills, and etc

ที่นี้หากเป็น ระบบแบบ text-based ธรรมดา สิ่งที่เกิดขึ้นก็คือ เมื่อเราหา Machine Learning Engineer คำว่า “Deep Learning” และ “Communication Skills” จะมี น้ำหนักเท่ากัน ทำให้ Machine Learning Engineer อาจจะไปโผล่ให้กับ ผู้สมัครสาย Sale หรือ Marketing ด้วย เพราะเค้ามี “Communication Skills” ซึ่งก็คงไม่เป็นผลดีกับบริษัทแน่นอน

เริ่มต้นแก้ปัญหาด้วยการสร้าง Dataset

เมื่อทางบริษัททราบปัญหาที่ ต้องการแก้ที่ชัดเจนคือ การระบุความสำคัญของ skill ในงานนั้นๆ (Salience) และ ความต้องการของตลาด (Market-aware) สิ่งที่ขาดไปสำหรับการแก้ปัญหานี้คือ Dataset

การเก็บ Dataset นี้ก็ไม่ใช้เรื่องง่ายอีกเช่นกัน เพราะว่า การที่จะระบุว่า skill ไหนสำคัญไม่สำคัญ นั้นจำเป็นต้องผู้ใช้เชี่ยวชาญ แต่ในทางกลับกัน dataset นี้จำเป็นต้องมีขนาดใหญ่ และ มีความหลากหลาย จึงจำเป็นต้องใช้ weak signal ของตลาดงานเข้ามาช่วยด้วย

Job Targeting Skill (JT) Dataset เป็น Dataset จากผู้เชี่ยวชาญ โดยการให้ผู้เชี่ยวชาญสร้าง positive skillset ขึ้นมา และ negative skillset สำหรับ Job นั้นๆขึ้นมา

แม้ว่าข้อมูลจากผู้เชี่ยวชาญนั้นจะเป็นข้อมูลที่คุณภาพสูง แต่ในทางกลับกันก็มีจำนวนน้อยและขาดความหลากหลายเมื่อเทียบกับตลาดงานทั้งหมด ดังนั้น ทาง LinkedIn จึงต้องสร้าง dataset อีกชุดที่เป็นการใช้ สัญญาจากตลาดแทน (weak label using job market signal)

Quality Applicant Skill (QA) Dataset เป็น Dataset ที่ทาง LinkedIn เก็บข้อมูลโดยใช้สัญญาณจากตลาดเข้าช่วย คือ การที่ทาง LinkedIn ได้ดูที่ Job Post (p) และผู้สมัคร A (A คือผู้สมัครที่ได้รับการตอบรับที่ดีจาก Job Post นั้น ซึ่งมีหลายคน) ก็จะสามารถสร้าง Positive Skillset และ Negative Skillset ได้

Positive Skillsets
Negative Skillsets

Positive skillset คือ Skill ที่ ผู้สมัครหลายคนมีเหมือนกัน และ มีบอกอยู่ใน Job Post

Negative skillset คือ Skill ที่มีบอกอยูใน Job Post แต่ผู้สมัครมีไม่เหมือนกัน (คือบางคนมี บางคนไม่มี)

เมื่อได้ Dataset มาแล้วก็ต้องสกัด features เพิ่ม

ปกติแล้ว Job Post นั้นจะมีหลาย section (เช่น Company Summary, benefit, requirements, และอื่นๆ) ซึ่งการที่จะประเมินว่า skill ไหนสำคัญไม่สำคัญ ต้องมีการดหลายส่วน ใน paper จึงเสนอสิ่งที่เรียกว่า

Multi-resolution Skill Salience Feature ซึ่งเป็นการดูความสำคัญของ skill ไม่เพียงแต่ text แต่ดูทั้ง sentence และ segment ของ job post นั้นๆเมื่อเทียบกับ skill ของผู้สมัคร โดยจะแบ่งเป็นสาม level

สีฟ้า (Skill Candidate) คือ skill ผู้สมัคร

สีเทา (Job Posting) คือ Skill ที่ถูก mention ใน Job Post

Sentence-Level Salience

Sentence-Level Salience: การดูในระดับ sentence คือการเอาประโยคที่มีการ mention ถึง skill เช่น (Experience in Machine Learning techniques) ทั้งประโยค ใส่เข้าไปใน BERT model (และอื่นๆเช่น fastText, Universal Sentence Encoder)และ ดึงเอาเฉพาะของ Embedding token ของ [CLS] เป็น encoder output

Segment-Level Salience

Segment-level Salience: การดูระดับนี้คือการเอา segment (เช่น requirement หรือ company summary) ทั้งมาดู แต่โดยปกติแล้ว Neural Network จะเหมาะสมกับประโยคสั้นๆ มากกว่าทั้ง segment ดังนั้นแทนที่จะใช้ Neural Network ทาง LinkedIn จึงเลือกใช้ entity embedding เป็นการ represent segment แทน เมื่อได้ embedding มา และนำไปหา similarity กับ skill ของผู้สมัคร

Job-Level Salience

Job-level Salience: เป็นการหา similarity ของผู้สมัคร (ถ้ามีหลาย skill ก็ใช้ average) เพื่อหา skill similarity กับ Job Post นั้นๆ

นอกจาก Salience features แล้ว ทาง LinkedIn ยังสนใจ Market-aware features อีกด้วย

ถึงเวลาสร้าง Model (Job2Skill)

จาก features ต่างๆ ที่เราได้มาจากขั้นตอนก่อนหน้า เราสามารถสร้าง binary classification model ที่ บอกว่า skill (s) นั้นมี Salience และ/หรือMarket-aware กับ Job Post (p) ไหม

โดย model ที่ทาง LinkedIn เลือกใช้คือ XGBoost โดยเค้าให้เหตุผลว่า มันเร็วและสามารถเข้าใจผลลัพธ์ของมันได้ รวมไปถึงการใช้ computation ที่น้อยทำให้สามารถ deploy งานบน production โดยไม่กระทบงานเดิมมากนัก

การวัดผล

ส่วนของการวัดผลใน paper นี้มีทั้งสองส่วนคือการทำ offline evaluation กับ online evaluation

Offline evaluation: คือการวัดผลกับข้อมูลในอดีต (การทำ train-test-validation set) โดยเป็นการวัด AUROC เทียบกับ model ใน production ในปัจจุบัน

Offline Evaluation

จากผลลัพธ์จะเห็นได้ว่า Dataset ที่มาจากคนอย่างเดียว (Job Targeting Skills) นั้นจะให้ผลลัพธ์ที่ดีในส่วนของ Salience ส่วน dataset Quality Applicant Skill นั้นจะดีกว่าในเรื่องของ Market-aware และเมื่อเทรน Model จากทั้งสอง Dataset นั้น Job2Skills จะ ดีกว่าทั้งคู่

Online evaluation: เมื่อมั่นใจใน offline evaluation แล้ว สิ่งที่จะบอกได้จริงๆว่างานชิ้นนี้สร้างประโยชน์แก่บริษัทจริงๆ รึเปล่า คือการนำไป deploy บน production และวัดผลด้วยการทำ A/B Testing ซึ่งในที่นี้เค้าแบ่ง Traffic มา 20% และ ทดลองเป็น เวลา 7 วัน

Online Evaluation

ซึ่งจากตารางข้างบนจะเห็นว่า การ apply งานเพิ่มขึ้น 1.92% มีการ save งานเก็บไว้เพิ่มขึ้น 2.66% และ นอกเหนือไปกว่านั้นเป็นการเพิ่ม coverage คนที่เข้าถึงงานนั้นๆ ได้อีก 6.71% แน่นอนว่าตัวเลขเหล่านี้หมายถึงกำไรที่เพิ่มขึ้นของ LinkedIn

การหา Insight จาก model เพิ่มเติม

นอกจากจะวัดผลด้วยตัวเลขแล้ว paper นี้ยังได้ ทำการดู skill insight จากทั้ง baseline model และ Job2Skill ในการเปรียบเทียบว่า อาชีพแต่ละอาชีพ มี skill ไหนที่สำคัญ ทั้ง เหมือน หรือ แตกต่างกันบ้าง

Example of skill insight

จะเห็นได้ว่า อย่าง Software Engineer นั้นสิ่งที่ Job2Skill ให้ความสำคัญ เช่น Java, C, Javascript นั้นเป็น skill ที่บริษัทต้องการจริงๆ และมีความต้องการของตลาดที่สูงด้วย

บทส่งท้ายจากผู้เขียน

ส่วนตัวคิดว่างานนี้เป็นงานที่น่าสนใจมากๆเนื่องจาก การใช้ Name-Entity-Recognition (NER) เพียงอย่างเดียวนั้น อาจจะไม่สามารถแก้ปัญหาทั้งหมดได้ หากเราไม่ทราบความสำคัญว่าแต่ละ Entity นั้นมีความสำคัญ ขนาดไหนของแต่ละ Document (ในที่นี้คือ Job Post)

อีกอย่างหนึ่งที่น่าสนใจของ paper นี้คือ แม้ว่าจะใช้เทคนิคอย่าง deep learning เข้ามาช่วยในการสกัด features เพิ่มเติม แต่แนวทางการคิดเกิดจาก Domain Expert ที่เข้าใจในปัญหาและวิธีการจริงๆ

ซึ่งผมคิดว่า เทคนิคนี้ สามารถนำไปแก้ปัญหาโจทย์ทางอุตสาหกรรมได้อีกหลายๆปัญหาเลยทีเดียว

บทความนี้จัดทำโดยสถาบันวิจัยปัญญาประดิษฐ์ประเทศไทย (AIResearch)

Facebook & Medium: AIResearch.in.th

Reference

  1. Baoxu Shi, Feng Guo, Jaewon Yang, Qi He, et al. 2020. Salience and Market-aware Skill Extraction for Job Targeting. arXiv preprint arXiv:2005.13094v1(2020)

--

--