Alternatif untuk TF-IDF dan Cosine Similarity ketika membandingkan dokumen dengan format berbeda

12

Saya telah mengerjakan proyek kecil pribadi yang membutuhkan keterampilan kerja pengguna dan menyarankan karier yang paling ideal bagi mereka berdasarkan keterampilan itu. Saya menggunakan database daftar pekerjaan untuk mencapai ini. Saat ini, kodenya berfungsi sebagai berikut:

1) Memproses teks dari setiap daftar pekerjaan untuk mengekstrak keterampilan yang disebutkan dalam daftar

2) Untuk setiap karier (mis. "Analis Data"), gabungkan teks yang diproses dari daftar pekerjaan untuk karier itu ke dalam satu dokumen

3) Hitung TF-IDF dari setiap keterampilan dalam dokumen karir

Setelah ini, saya tidak yakin metode mana yang harus saya gunakan untuk menentukan peringkat karier berdasarkan daftar keterampilan pengguna. Metode paling populer yang pernah saya lihat adalah untuk memperlakukan keterampilan pengguna sebagai dokumen juga, kemudian menghitung TF-IDF untuk dokumen keterampilan, dan menggunakan sesuatu seperti cosinus similarity untuk menghitung kesamaan antara dokumen keterampilan dan masing-masing dokumen karir.

Ini sepertinya bukan solusi ideal bagi saya, karena kesamaan cosinus paling baik digunakan ketika membandingkan dua dokumen dengan format yang sama. Dalam hal ini, TF-IDF sepertinya bukan metrik yang tepat untuk diterapkan pada daftar keterampilan pengguna sama sekali. Misalnya, jika pengguna menambahkan keterampilan tambahan ke daftar mereka, TF untuk setiap keterampilan akan turun. Pada kenyataannya, saya tidak peduli berapa frekuensi keterampilan dalam daftar keterampilan pengguna - Saya hanya peduli bahwa mereka memiliki keterampilan tersebut (dan mungkin seberapa baik mereka mengetahui keterampilan itu).

Sepertinya metrik yang lebih baik adalah melakukan hal berikut:

1) Untuk setiap keterampilan yang dimiliki pengguna, hitung TF-IDF keterampilan itu dalam dokumen karier

2) Untuk setiap karier, jumlah hasil TF-IDF untuk semua keterampilan pengguna

3) Rangking karier berdasarkan jumlah di atas

Apakah saya berpikir di garis yang benar di sini? Jika demikian, apakah ada algoritma yang bekerja di sepanjang baris ini, tetapi lebih canggih dari jumlah yang sederhana? Terima kasih untuk bantuannya!

Richard Knoche
sumber
3
Lihat Doc2vec, Gensim memiliki implementasinya
Blue482

Jawaban:

1

Mungkin Anda bisa menggunakan kata embeddings untuk lebih mewakili jarak antara keterampilan tertentu. Misalnya, "Python" dan "R" harus lebih dekat daripada "Python" dan "Manajemen waktu" karena keduanya merupakan bahasa pemrograman.

Seluruh ide adalah bahwa kata-kata yang muncul dalam konteks yang sama harus lebih dekat.

Setelah Anda memiliki embeddings ini, Anda akan memiliki seperangkat keterampilan untuk kandidat, dan set keterampilan dari berbagai ukuran untuk pekerjaan. Anda kemudian bisa menggunakan Earth Mover's Distance untuk menghitung jarak antar set. Ukuran jarak ini agak lambat (waktu kuadratik) sehingga mungkin tidak skala dengan baik jika Anda memiliki banyak pekerjaan yang harus dilalui.

Untuk mengatasi masalah skalabilitas, Anda mungkin bisa menentukan peringkat pekerjaan berdasarkan berapa banyak keterampilan yang dimiliki kandidat pada awalnya, dan mendukung pekerjaan ini.

Valentin Calomme
sumber
1

Metode umum dan sederhana untuk mencocokkan "dokumen" adalah dengan menggunakan bobot TF-IDF, seperti yang telah Anda jelaskan. Namun, saat saya memahami pertanyaan Anda, Anda ingin menentukan peringkat setiap karier (-dokumen) berdasarkan seperangkat keterampilan pengguna.

Jika Anda membuat "vektor kueri" dari skill, Anda dapat mengalikan vektor dengan matriks term-career Anda (dengan semua bobot tf-idf sebagai nilai). Vektor yang dihasilkan akan memberi Anda skor peringkat per dokumen karier yang dapat Anda gunakan untuk memilih karier top-k untuk serangkaian "keterampilan kueri".

Misalnya, jika vektor kueri Anda terdiri dari nol dan satu, dan berukuran, Dan jangka dokumen Anda matriks adalah ukuran, maka akan menghasilkan vektor ukurandengan elemen yang setara dengan jumlah bobot TF-IDF dari setiap istilah kueri per dokumen karir. 1×| terms| M| terms| ×| documents| ˉ v M1×| documents|q¯1×|terms|M|terms|×|documents|v¯M1×|documents|

Metode peringkat ini adalah salah satu variasi paling sederhana dan ada. Entri TF-IDF di Wikipedia juga menjelaskan metode peringkat ini secara singkat. Saya juga menemukan T&J ini di SO tentang dokumen yang cocok.

KorkiBuziek
sumber
Anehnya, rata-rata sederhana kata embeddings sering sebagus rata-rata embeddings dilakukan dengan bobot Tf-Idf.
wacax
0

Anda dapat mencoba menggunakan "gensim". Saya melakukan proyek serupa dengan data tidak terstruktur. Gensim memberikan skor lebih baik daripada TFIDF standar. Itu juga berlari lebih cepat.

Harsha Reddy
sumber