ทางเลือกแทน TF-IDF และ Cosine Similarity เมื่อเปรียบเทียบเอกสารที่มีรูปแบบต่างกัน


12

ฉันทำงานเกี่ยวกับโครงการส่วนตัวขนาดเล็กซึ่งใช้ทักษะการทำงานของผู้ใช้และแนะนำอาชีพที่เหมาะสมที่สุดสำหรับพวกเขาตามทักษะเหล่านั้น ฉันใช้ฐานข้อมูลของรายการงานเพื่อให้ได้สิ่งนี้ ในขณะนี้รหัสทำงานดังนี้:

1) ประมวลผลข้อความของแต่ละรายการงานเพื่อแยกทักษะที่ระบุไว้ในรายการ

2) สำหรับแต่ละอาชีพ (เช่น "นักวิเคราะห์ข้อมูล") ให้รวมข้อความที่ประมวลผลของรายการงานสำหรับอาชีพนั้นไว้ในเอกสารเดียว

3) คำนวณ TF-IDF ของแต่ละทักษะภายในเอกสารประกอบอาชีพ

หลังจากนี้ฉันไม่แน่ใจว่าวิธีการใดที่ฉันควรใช้เพื่อจัดอันดับอาชีพตามรายการทักษะของผู้ใช้ วิธีที่ได้รับความนิยมมากที่สุดที่ฉันเคยเห็นก็คือการใช้ทักษะของผู้ใช้เป็นเอกสารเช่นกันจากนั้นคำนวณ TF-IDF สำหรับเอกสารทักษะและใช้สิ่งที่คล้ายโคไซน์เพื่อคำนวณความคล้ายคลึงกันระหว่างเอกสารทักษะและแต่ละ เอกสารประกอบอาชีพ

ดูเหมือนจะไม่เป็นทางออกที่ดีสำหรับฉันเนื่องจากความคล้ายคลึงกันทางโคไซน์นั้นถูกใช้งานได้ดีที่สุดเมื่อเปรียบเทียบเอกสารสองฉบับในรูปแบบเดียวกัน สำหรับเรื่องนั้น TF-IDF ดูเหมือนจะไม่ตรงกับตัวชี้วัดที่เหมาะสมที่จะนำไปใช้กับรายการทักษะของผู้ใช้เลย ตัวอย่างเช่นหากผู้ใช้เพิ่มทักษะเพิ่มเติมลงในรายการ TF ของแต่ละทักษะจะลดลง ในความเป็นจริงฉันไม่สนใจสิ่งที่ความถี่ของทักษะอยู่ในรายการทักษะของผู้ใช้ - ฉันแค่ใส่ใจว่าพวกเขามีทักษะเหล่านั้น (และบางทีพวกเขารู้ทักษะเหล่านั้นดีแค่ไหน)

ดูเหมือนว่าตัวชี้วัดที่ดีกว่าจะทำสิ่งต่อไปนี้:

1) สำหรับแต่ละทักษะที่ผู้ใช้มีให้คำนวณ TF-IDF ของทักษะนั้นในเอกสารประกอบอาชีพ

2) สำหรับแต่ละอาชีพสรุปผล TF-IDF สำหรับทักษะทั้งหมดของผู้ใช้

3) อันดับอาชีพตามผลรวมข้างต้น

ฉันกำลังคิดตามบรรทัดที่นี่หรือไม่ ถ้าเป็นเช่นนั้นมีอัลกอริทึมใดบ้างที่ใช้งานได้ตามบรรทัดเหล่านี้ แต่มีความซับซ้อนมากกว่าผลรวมแบบง่ายหรือไม่? ขอบคุณสำหรับความช่วยเหลือ!


3
ตรวจสอบ Doc2vec, Gensim มีการนำไปใช้งาน
Blue482

คำตอบ:


1

บางทีคุณอาจใช้คำว่า embeddings เพื่อแสดงระยะห่างระหว่างทักษะบางอย่างได้ดียิ่งขึ้น ตัวอย่างเช่น "Python" และ "R" ควรอยู่ใกล้กันมากกว่า "Python" และ "การจัดการเวลา" เนื่องจากทั้งสองเป็นภาษาโปรแกรม

แนวคิดทั้งหมดคือคำที่ปรากฏในบริบทเดียวกันควรใกล้เคียงกันมากขึ้น

เมื่อคุณมีงานแต่งงานเหล่านี้คุณจะมีชุดทักษะสำหรับผู้สมัครและชุดทักษะต่าง ๆ สำหรับงาน จากนั้นคุณสามารถใช้Earth Mover's Distanceเพื่อคำนวณระยะทางระหว่างชุด การวัดระยะทางนี้ค่อนข้างช้า (เวลากำลังสอง) ดังนั้นจึงอาจไม่ขยายได้ดีหากคุณมีงานมากมายที่ต้องผ่าน

ในการจัดการกับปัญหาเรื่องความสามารถในการขยายคุณอาจจัดอันดับงานตามจำนวนทักษะที่ผู้สมัครมีเหมือนกันในตอนแรกและสนับสนุนงานเหล่านี้


1

วิธีการทั่วไปและง่าย ๆ ในการจับคู่ "เอกสาร" คือการใช้น้ำหนัก TF-IDF ตามที่คุณได้อธิบายไว้ อย่างไรก็ตามเมื่อฉันเข้าใจคำถามของคุณคุณต้องการจัดอันดับอาชีพแต่ละรายการ (- เอกสาร) ตามทักษะของผู้ใช้

หากคุณสร้าง "แบบสอบถามเวกเตอร์" จากทักษะคุณสามารถคูณเวกเตอร์ด้วยเมทริกซ์คำศัพท์เฉพาะอาชีพของคุณ (ด้วยน้ำหนัก tf-idf ทั้งหมดเป็นค่า) เวกเตอร์ที่ได้จะทำให้คุณได้คะแนนการจัดอันดับต่อเอกสารประกอบอาชีพซึ่งคุณสามารถใช้ในการเลือกอาชีพยอดนิยมสำหรับชุดของ "ทักษะการสืบค้น"

q¯1×|terms|M|terms|×|documents|v¯M1×|documents|

วิธีการจัดอันดับนี้เป็นหนึ่งในรูปแบบที่ง่ายที่สุดและมีอยู่มากมาย รายการ TF-IDF ในWikipediaยังอธิบายถึงวิธีการจัดอันดับสั้น ๆ ฉันพบคำถามและคำตอบนี้เกี่ยวกับเอกสารที่ตรงกัน


น่าแปลกที่ค่าเฉลี่ยของงานแต่งงานที่เรียบง่ายมักจะดีเท่ากับงานแต่งงานที่มีน้ำหนักโดยเฉลี่ยของ Tf-Idf
wacax


0

คุณสามารถลองใช้ "gensim" ฉันทำโครงการที่คล้ายกันกับข้อมูลที่ไม่มีโครงสร้าง Gensim ให้คะแนนดีกว่า TFIDF มาตรฐาน มันก็วิ่งได้เร็วขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.