Saat ini saya sedang membangun mesin pencari in-house kecil berdasarkan Apache Lucene. Tujuannya sederhana - berdasarkan beberapa kata kunci, ini akan menyarankan beberapa artikel yang ditulis secara internal di dalam perusahaan kami. Saya menggunakan skor TF-IDF yang cukup standar sebagai metrik dasar dan membangun mekanisme penilaian saya sendiri di atasnya. Semua ini tampaknya berfungsi sangat baik kecuali untuk beberapa kasus sudut di mana peringkat tampaknya kacau.
Jadi apa yang saya rencanakan untuk dilakukan adalah menambahkan tautan Relevan / Tidak Relevan kecil ke halaman hasil pencarian sehingga pengguna dapat mengklik salah satu dari mereka tergantung pada persepsi mereka tentang apakah hasil itu harus dimasukkan di tempat pertama.
Ide saya
- Perlakukan ini Relevan / Tidak Relevan sebagai label dan buat data pelatihan.
- Gunakan data ini untuk melatih classifier (seperti SVM)
- Masukkan model ini ke mesin pencari, yaitu, setiap hasil baru akan melewati pengklasifikasi dan akan diberi label apakah itu relevan atau tidak.
Pendekatan ini tampaknya intuitif bagi saya tetapi saya tidak yakin apakah itu akan berhasil dalam praktiknya. Saya punya dua pertanyaan spesifik:
- Apa semua fitur yang harus saya ekstrak?
- Apakah ada cara yang lebih baik untuk mengintegrasikan komponen pembelajaran mesin ke mesin pencari? Tujuan akhir saya adalah "mempelajari" fungsi peringkat berdasarkan logika bisnis dan umpan balik pengguna.
Jawaban:
Pertama, sadari bahwa Anda tidak mengklasifikasikan dokumen. Anda mengklasifikasikan pasangan (dokumen, kueri), jadi Anda harus mengekstrak fitur yang menyatakan seberapa cocok mereka.
Pendekatan standar dalam belajar menentukan peringkat adalah menjalankan kueri terhadap berbagai pengaturan mesin pencari (mis. Tf-idf, BM-25, dll.) Dan kemudian melatih model pada skor kesamaan, tetapi untuk SE kecil, khusus domain, Anda dapat memiliki fitur seperti
Ini adalah pertanyaan yang sangat luas, dan jawabannya tergantung pada seberapa banyak upaya yang ingin Anda lakukan. Peningkatan pertama yang muncul di benak Anda adalah bahwa Anda tidak boleh menggunakan penilaian relevansi biner dari pengklasifikasi, tetapi fungsi keputusannya yang bernilai nyata, sehingga Anda benar-benar dapat melakukan pemeringkatan bukan hanya penyaringan. Untuk SVM, fungsi keputusan adalah jarak masuk ke hyperplane. Paket pembelajaran mesin yang baik memiliki antarmuka untuk mendapatkan nilai itu.
Di luar itu, lihatlah pembelajaran berpasangan dan searah dengan daftar peringkat; apa yang Anda sarankan adalah apa yang disebut pendekatan pointwise. IIRC, berpasangan bekerja jauh lebih baik dalam latihan. Alasannya adalah bahwa dengan peringkat berpasangan, Anda perlu lebih sedikit klik: daripada membuat pengguna label dokumen sebagai relevan / tidak relevan, Anda hanya memberi mereka tombol "relevan". Kemudian Anda mempelajari classifier biner pada tiga kali lipat (document1, document2, query) yang memberi tahu apakah document1 lebih relevan dengan query daripada document2, atau sebaliknya. Ketika seorang pengguna memberi label, ucapkan, dokumentasikan 4 pada peringkat sebagai relevan, yang memberi Anda enam sampel untuk dipelajari:
sehingga Anda mendapatkan negatif secara gratis.
(Ini semua hanya saran, saya belum mencoba semua ini. Kebetulan saya pernah bekerja di sebuah kelompok penelitian di mana orang-orang menyelidiki pembelajaran peringkat. Saya pernah melakukan presentasi makalah orang lain untuk kelompok membaca sekali, mungkin slide dapat membantu.)
sumber