Perhatikan bahwa saya melakukan semuanya dalam R.
Masalahnya sebagai berikut:
Pada dasarnya, saya memiliki daftar riwayat hidup (CV). Beberapa kandidat akan memiliki pengalaman kerja sebelumnya dan beberapa tidak. Tujuannya di sini adalah untuk: berdasarkan teks pada CV mereka, saya ingin mengklasifikasikan mereka ke dalam sektor pekerjaan yang berbeda. Saya khususnya dalam kasus-kasus itu, di mana para kandidat tidak memiliki pengalaman / adalah seorang mahasiswa, dan saya ingin membuat prediksi untuk mengklasifikasikan sektor pekerjaan mana yang kemungkinan besar dimiliki oleh kandidat ini setelah lulus.
Pertanyaan 1: Saya tahu algoritma pembelajaran mesin. Namun, saya belum pernah melakukan NLP sebelumnya. Saya menemukan alokasi Latent Dirichlet di internet. Namun, saya tidak yakin apakah ini adalah pendekatan terbaik untuk mengatasi masalah saya.
Gagasan asli saya: jadikan ini masalah belajar yang diawasi . Misalkan kita sudah memiliki sejumlah besar data berlabel, artinya kita telah dengan benar memberi label pada sektor pekerjaan untuk daftar kandidat. Kami melatih model menggunakan algoritme ML (yaitu tetangga terdekat ...) dan memasukkan data tidak berlabel tersebut , yang merupakan kandidat yang tidak memiliki pengalaman kerja / siswa, dan mencoba memprediksi sektor pekerjaan mana yang akan menjadi bagian mereka.
Perbarui Pertanyaan 2: Apakah ide yang baik untuk membuat file teks dengan mengekstraksi semuanya dalam resume dan mencetak data ini dalam file teks, sehingga setiap resume dikaitkan dengan file teks, yang berisi string tidak terstruktur, dan kemudian kami teknik penambangan teks yang diterapkan ke file teks dan membuat data menjadi terstruktur atau bahkan untuk membuat matriks frekuensi istilah yang digunakan dari file teks? Misalnya, file teks mungkin terlihat seperti ini:
I deployed ML algorithm in this project and... Skills: Java, Python, c++ ...
Inilah yang saya maksud dengan 'tidak terstruktur', yaitu menciutkan semuanya menjadi satu baris string.
Apakah pendekatan ini salah? Harap perbaiki saya jika Anda menganggap pendekatan saya salah.
Pertanyaan 3: Bagian yang sulit adalah: bagaimana cara mengidentifikasi dan mengekstrak kata kunci ? Menggunakan tm
paket dalam R? berdasarkan algoritma apa tm
paket itu? Haruskah saya menggunakan algoritma NLP? Jika ya, algoritma apa yang harus saya perhatikan? Tolong tunjukkan saya ke beberapa sumber daya yang baik untuk melihat juga.
Ide apa pun akan bagus.
sumber
Cukup ekstrak kata kunci dan latih pengelompokan kata kunci pada mereka. Itu saja, sungguh.
Sebagian besar teks dalam CV sebenarnya tidak terkait dengan keterampilan. Misalnya, pertimbangkan kalimat "Saya berpengalaman dan sangat efisien di Jawa". Di sini hanya 1 dari 7 kata yang merupakan nama skill, sisanya hanya suara yang akan menurunkan akurasi klasifikasi Anda.
Sebagian besar CV tidak benar-benar terstruktur. Atau terstruktur terlalu bebas. Atau gunakan nama yang tidak biasa untuk bagian. Atau format file yang tidak mempertahankan struktur saat diterjemahkan ke teks. Saya memiliki pengalaman mengekstraksi tanggal, waktu, nama, alamat dan bahkan orang yang bermaksud dari teks yang tidak terstruktur, tetapi bukan daftar keterampilan (atau universitas atau apa pun), bahkan tidak dari dekat.
Jadi cukup tokenize (dan mungkin batang ) CV Anda, pilih hanya kata-kata dari daftar yang telah ditentukan (Anda dapat menggunakan LinkedIn atau sesuatu yang serupa untuk ambil daftar ini), buat vektor fitur dan coba beberapa pengklasifikasi (katakanlah, SVM dan Naif Bayes) .
(Catatan: Saya menggunakan pendekatan serupa untuk mengklasifikasikan profil LinkedIn menjadi lebih dari 50 kelas dengan akurasi> 90%, jadi saya cukup yakin bahkan implementasi naif akan bekerja dengan baik.)
sumber
Ini masalah yang sulit. Ada banyak cara untuk menanganinya. Saya kira, resume dapat diperlakukan sebagai dokumen semi-terstruktur. Terkadang, menguntungkan memiliki beberapa struktur minimal dalam dokumen. Saya percaya, dalam resume Anda akan melihat beberapa data tabular. Anda mungkin ingin memperlakukan ini sebagai pasangan nilai atribut. Misalnya, Anda akan mendapatkan daftar istilah untuk atribut "Skill set".
Gagasan utamanya adalah mengonfigurasi daftar frasa kunci secara manual seperti "skill", "pendidikan", "publikasi" dll. Langkah selanjutnya adalah mengekstraksi istilah yang berkaitan dengan frasa kunci ini baik dengan mengeksploitasi struktur dengan cara tertentu (seperti sebagai tabel) atau dengan memanfaatkan kedekatan istilah di sekitar frasa kunci ini, mis. fakta bahwa kata "Jawa" sangat dekat dengan istilah "keterampilan" mungkin menunjukkan bahwa orang tersebut terampil di Jawa.
Setelah Anda mengekstrak informasi ini, langkah selanjutnya adalah membangun vektor fitur untuk masing-masing frase kunci ini. Anda kemudian dapat mewakili dokumen sebagai vektor dengan bidang yang berbeda (masing-masing untuk frasa kunci). Sebagai contoh, perhatikan dua resume berikut diwakili dengan dua bidang, yaitu proyek dan pendidikan .
Doc1: {project: (java, 3) (c, 4)}, {pendidikan: (komputer, 2), (fisika, 1)}
Doc2: {project: (java, 3) (python, 2)}, {pendidikan: (matematika, 3), (komputer, 2)}
Dalam contoh di atas, saya menunjukkan istilah dengan frekuensi. Tentu saja, saat mengekstraksi istilah yang Anda butuhkan untuk membendung dan menghapus kata-kata henti. Jelas dari contoh-contoh bahwa orang yang resumenya adalah Doc1 lebih terampil dalam C daripada D2. Dari segi implementasi, sangat mudah untuk merepresentasikan dokumen sebagai vektor lapangan di Lucene.
Sekarang, langkah selanjutnya adalah mengambil daftar peringkat resume yang diberikan spesifikasi pekerjaan. Bahkan, itu cukup mudah jika Anda mewakili kueri (spesifikasi pekerjaan) sebagai vektor bidang juga. Anda hanya perlu mengambil daftar peringkat kandidat (resume) menggunakan Lucene dari koleksi resume yang diindeks.
sumber
Saya bekerja untuk situs pekerjaan online dan kami membangun solusi untuk merekomendasikan pekerjaan berdasarkan resume. Pendekatan kami adalah judul pekerjaan seseorang (atau jabatan yang diinginkan jika seorang siswa dan dikenal), bersama dengan keterampilan yang kami ekstrak dari resume mereka, dan lokasi mereka (yang sangat penting bagi kebanyakan orang) dan menemukan kecocokan dengan pekerjaan berdasarkan itu.
dalam hal klasifikasi dokumen, saya akan mengambil pendekatan serupa. Saya akan merekomendasikan menghitung matriks idf untuk setiap resume sebagai model tas standar kata-kata, mengekstraksi hanya judul pekerjaan dan keterampilan seseorang (yang Anda perlu menentukan daftar keterampilan yang harus dicari), dan memasukkannya ke dalam ML algoritma Saya akan merekomendasikan mencoba knn, dan SVM, yang terakhir bekerja sangat baik dengan data teks dimensi tinggi. SVM linear cenderung lebih baik daripada non-linear (mis. Menggunakan kernel RBf). Jika Anda memiliki hasil keluaran yang masuk akal, saya kemudian akan bermain dengan mengekstraksi fitur menggunakan parser bahasa alami \ chunker, dan juga beberapa frasa yang dibuat khusus yang cocok dengan regex's.
sumber