Dice Tech Jobs - Gudang Dice.com untuk membangun 'Mesin Pencari Konseptual', oleh Simon Hughes (Ilmuwan Data Dice). Repositori ini berisi kode Python untuk melatih model Word2Vec Thomas Mikolov pada sekumpulan dokumen. Output dari proses ini kemudian dapat tertanam dalam solr (atau mesin pencari lainnya) menggunakan file sinonim yang dikombinasikan dengan beberapa plug-in solr untuk menyediakan fungsionalitas pencarian konseptual dalam mesin pencari. Outputnya juga dapat digunakan dalam mesin pencari lain, asalkan mesin tersebut mendukung file sinonim. Pencarian konseptual juga dikenal sebagai pencarian semantik, dan belajar mencocokkan seluruh konsep dalam suatu domain, bukan kata kunci, untuk meningkatkan ingatan.
Silakan periksa juga repo 'Vektor dalam Pencarian' saya, yang memperluas pekerjaan ini. Ini berisi link ke slide dan video dari pembicaraan itu juga.
Skrip tersebut menyertakan kode untuk melakukan pra-proses dan memberi token pada dokumen, mengekstrak istilah dan frasa umum berdasarkan frekuensi dokumen, melatih model word2vec menggunakan implementasi gensim, dan mengelompokkan vektor kata yang dihasilkan menggunakan pustaka pengelompokan sci-kit learn. Skrip python menampilkan sejumlah file sinonim solr yang dapat digunakan untuk mengaktifkan fungsionalitas pencarian konseptual dalam solr bila dikombinasikan dengan beberapa plugin solr dadu khusus.
Lihat https://github.com/DiceTechJobs/SolrPlugins untuk mengetahui plugin solr guna memanfaatkan vektor yang dipelajari dan file sinonim dalam mesin pencari Apache Solr
Lihat https://github.com/DiceTechJobs/SolrConfigExamples untuk contoh entri konfigurasi solr untuk mengonfigurasi pencarian konseptual dalam solr, termasuk menyiapkan plugin.
Skripnya berbentuk notebook Jupyter python, untuk dijalankan secara berurutan (1,2,3 dan salah satu dari 4), dan sebagai skrip baris perintah terpisah (lihat di bawah) jika Anda tidak ingin menggunakan Jupyter. Skrip python lebih bersih, dan berbagi file konfigurasi umum dengan semua pengaturan yang diperlukan, dan dirancang untuk dijalankan dari shell, jadi ini mungkin lebih mudah untuk memulai . Buku catatan dan skrip ini akan memproses dokumen terlebih dahulu, dan melatih model Word2Vec. Folder ./Settings berisi contoh file konfigurasi untuk setiap skrip, dengan deskripsi setiap pengaturan di komentar. Untuk memanggil skrip baris perintah, masukkan file konfigurasi terkait sebagai satu-satunya parameter, misalnya
python pre_process_documents.py ./Settings/pre_process_documents.cfg
Skrip baris perintah harus dijalankan secara berurutan:
pre_process_documents.py - ini diperlukan untuk menghapus beberapa karakter tanda baca (koma, tanda hubung, dll), mengurai html jika diperlukan, dan memisahkan kalimat dalam dokumen. Jika Anda ingin melewati langkah ini dan melanjutkan ke 2 atau 3, berikan satu set file ke langkah 2 dan 3 dengan tanda baca apa pun yang ingin Anda hapus, dan dengan setiap kalimat baru di baris terpisah.
ekstrak_kata kunci.py - (opsional) Jika Anda tidak memiliki kumpulan frasa kunci yang baik dan ekstensif dari domain Anda (misalnya, 5.000 kata kunci dan frasa penelusuran teratas, frasa menjadi bagian penting) atau Anda ingin meningkatkan cakupan di luar daftar ini, jalankan skrip ini untuk mengekstrak semua kata kunci dan frasa di atas ambang frekuensi dokumen yang ditentukan.
train_word2vec_model.py - Melatih dan menyimpan model Word2Vec pada dokumen yang telah diproses sebelumnya dari 1. Menggunakan sekumpulan kata kunci dan frasa, seperti keluaran dari 2. Harap diperhatikan - Model ini sangat cepat, tetapi memerlukan kompiler C untuk dapat tersedia dan pra-instal untuk menggunakan versi C secara tersembunyi, jika tidak, implementasi python yang jauh lebih lambat akan digunakan. Jika ini tidak tersedia, Anda akan mendapatkan peringatan run-time saat model dilatih pertama kali.
Langkah ini berisi banyak file tergantung pada solusi yang diinginkan (lihat pembicaraan saya):
Keluaran vektor - SEGERA HADIR! Lihat Buku Catatan Jupyter 4.a
generate_topn_synonyms_file.py - Menghasilkan n sinonim teratas untuk setiap kata kunci atau frasa target. Ini menghasilkan 2 file, satu file dengan payload, dan satu file tanpa payload. Kasus penggunaan paling sederhana adalah menggunakan file tanpa payload. Performa yang lebih baik dapat diperoleh dengan menggunakan file payload untuk memberi bobot pada sinonim berdasarkan kesamaan. Ini dapat dilakukan pada waktu kueri menggunakan parser queryboost. Perhatikan bahwa untuk melakukan ini, Anda perlu memberi token pada koma dan spasi pada waktu kueri karena kami mengganti spasi dengan koma untuk mengatasi masalah sinonim multi-kata. Alternatifnya (dan disarankan) gunakan perluasan sinonim pada waktu indeks, bersama dengan parser kueri PayloadEdismax, kelas PayloadAwareDefaultSimilarity (gunakan sebagai kesamaan default atau gunakan kesamaan skema untuk mengonfigurasi per bidang), dan pastikan fieldType untuk bidang ini berisi istilah 'payload' atau 'vektor'.
generate_cluster_synonyms_file.py - Menghasilkan k cluster dari vektor kata yang dihasilkan pada langkah sebelumnya. Ini dapat disematkan langsung di solr melalui file sinonim - tidak diperlukan plugin khusus. Saya akan merekomendasikan untuk membuat sejumlah cluster sinonim yang berbeda dengan ukuran yang berbeda-beda, dan mengonfigurasinya sebagai bidang terpisah dengan bobot bidang yang lebih tinggi yang diterapkan pada cluster kecil (yaitu dihasilkan dengan nilai k yang lebih besar).
Dibangun menggunakan python 2.7.10. Belum diuji dengan python 3
Implementasi Word2Vec adalah paket gensim yang luar biasa. Berisi implementasi cepat LSA, LDA, Word2Vec dan beberapa algoritma pembelajaran mesin lainnya.
https://radimrehurek.com/gensim/models/word2vec.html
Ini adalah paket yang bagus untuk pemodelan topik, dan mempelajari representasi semantik dari dokumen dan kata.
Google merilis serangkaian vektor kata terlatih, yang dilatih pada 100 miliar kata di korpus berita Google. Bagi Anda yang tidak fokus pada domain khusus tetapi pada kumpulan dokumen yang sangat luas, seperti perusahaan yang membangun mesin pencari berita (seperti Reuters, Bloomberg, lembaga Pemerintah, dll), Anda bisa menggunakan model terlatih ini alih-alih. Kemudian Anda dapat melewati 3 langkah pertama, dan langsung menggunakan salah satu skrip langkah 4 di atas yang menggunakan model terlatih dan menghitung file sinonim keluaran, dan hanya itu yang Anda perlukan. Posting ini menjelaskan di mana mendapatkan vektor terlatih: https://groups.google.com/forum/#!topic/gensim/_XLEbmoqVCg. Anda kemudian dapat menggunakan fungsionalitas model.load Word2Vec gensim:
model = Word2Vec . load ( MODEL_FILE )
Jika Anda menggunakan Solr cloud, Zookeeper tidak suka file konfigurasi apa pun berukuran lebih dari 1 juta. Jadi jika file sinonim yang dihasilkan lebih besar dari ini, Anda harus 1) mengubah pengaturan penjaga kebun binatang default, 2) membagi file sinonim menjadi beberapa file dan menerapkan filter sinonim secara berurutan, atau 3) memuat sinonim dari database menggunakan sebuah plugin (misalnya https://github.com/shopping24/solr-jdbc-synonyms)
Para ahli NLP Stanford mengembangkan algoritma pembelajaran vektor kata yang bersaing dengan Word2Vec dengan akurasi yang sama. Jika Anda ingin bereksperimen dengan itu, paket python ini memungkinkan Anda melakukannya: https://github.com/hans/glove.py Namun saya belum mencobanya jadi saya tidak dapat menjaminnya saat ini.
Skrip awal mengharapkan folder yang berisi file mentah *.txt atau html. Jika Anda memiliki konten html, ada logika di dalam skrip untuk mengurai html, tetapi sup yang indah bisa jadi agak tidak stabil, jadi sebaiknya Anda mem-parsingnya terlebih dahulu sebelum memasukkannya ke dalam pipeline. Perhatikan bahwa tidak ada format file khusus, yang tampaknya menjadi masalah kebanyakan orang ketika mencoba menjalankan skrip ini. Jika terjadi kesalahan saat memuat file, saya sarankan menggunakan skrip python bukan notebook dan membuka debugger untuk melihat apa yang terjadi. Selain itu, pastikan Anda menyetel config.file_mask agar sesuai dengan file yang ingin Anda muat, di https://github.com/DiceTechJobs/ConceptualSearch/blob/master/Settings/pre_process_documents.cfg. Defaultnya adalah .*.txt (ini adalah regex, bukan gumpalan file), jadi Anda perlu mengubahnya jika file Anda bukan file .txt.
Silakan kirimkan pertanyaan, bug, atau permintaan fitur apa pun ke daftar masalah, dan sertakan @mention - @simonhughes22 sehingga saya akan menerima email tepat waktu berisi pertanyaan Anda. Ada beberapa orang yang mengirimi saya email langsung berisi pertanyaan tentang repo ini. Meskipun saya tidak keberatan membalas email, harap kirimkan masalah GitHub dan @sebut saya. Dengan begitu, semua orang dapat melihat pertanyaan dan tanggapan saya untuk referensi di masa mendatang.
Saya baru-baru ini memberikan ceramah tentang Pencarian Vektor, kodenya ada di bawah. Ini adalah perpanjangan alami dari pekerjaan pencarian konseptual yang saya lakukan
Silakan periksa plugin Solr kami: