Cara membangun pencarian semantik untuk domain yang diberikan


19

Ada masalah yang kami coba selesaikan di mana kami ingin melakukan pencarian semantik pada set data kami, yaitu kami memiliki data khusus domain (contoh: kalimat yang berbicara tentang mobil)

Data kami hanyalah sekelompok kalimat dan yang kami inginkan adalah memberikan frasa dan mendapatkan kembali kalimat-kalimat yang:

  1. Mirip dengan ungkapan itu
  2. Memiliki bagian kalimat yang mirip dengan frasa
  3. Sebuah kalimat yang memiliki makna yang mirip secara kontekstual


Biarkan saya mencoba memberi Anda sebuah contoh seandainya saya mencari frasa "Pengalaman Membeli", saya harus mendapatkan kalimat seperti:

  • Saya tidak pernah berpikir untuk membeli mobil membutuhkan waktu kurang dari 30 menit untuk menandatangani dan membeli.
  • Saya menemukan mobil yang saya sukai dan proses pembeliannya
    mudah dan mudah

  • Saya benar-benar benci pergi berbelanja mobil, tetapi hari ini saya senang saya melakukannya


Saya ingin menekankan fakta bahwa kami mencari kesamaan kontekstual dan bukan hanya pencarian kata kasar.

Jika kalimat itu menggunakan kata-kata yang berbeda maka juga harus dapat menemukannya.

Hal-hal yang sudah kami coba:

  1. Open Semantic Search , masalah yang kami hadapi di sini adalah menghasilkan ontologi dari data yang kami miliki, atau untuk itu mencari ontologi yang tersedia dari domain berbeda yang kami minati.

  2. Pencarian Elastis (Vektor BM25 + (tf-idf)), kami mencoba ini di mana ia memberikan beberapa kalimat tetapi presisi tidak terlalu bagus. Akurasinya juga buruk. Kami mencoba melawan dataset yang dikuratori manusia, itu hanya bisa mendapatkan sekitar 10% dari kalimat saja.

  3. Kami mencoba berbagai embeddings seperti yang pernah disebutkan dalam transformer kalimat dan juga melalui contoh dan mencoba mengevaluasi terhadap set manusia kami yang dikuratori dan itu juga memiliki akurasi yang sangat rendah.

  4. Kami mencoba ELMO . Ini adalah akurasi yang lebih baik tetapi masih lebih rendah dari yang kami harapkan dan ada beban kognitif untuk memutuskan nilai cosinus di bawah yang kami tidak boleh mempertimbangkan kalimat. Ini bahkan berlaku untuk poin 3.

Bantuan apa pun akan dihargai. Terima kasih banyak atas bantuannya sebelumnya


Pertanyaan yang ditulis dengan baik - dapatkah Anda menambahkan 5 contoh lagi istilah pencarian? Apakah selalu frasa satu hingga tiga kata atau dapatkah istilah pencarian lebih panjang? Anda berada di jalur yang benar
Adnan S

Hai Adnan, istilah pencarian akan selalu menjadi frase satu atau tiga kata. Mis: pengalaman membeli, kenyamanan berkendara, sistem infotainmen, interior, jarak tempuh, kinerja, kenyamanan tempat duduk, perilaku staf.
Jickson

Artikel ini mungkin menarik untuk kasus Anda: elastic.co/blog/… (petunjuk: leverage word2vec)
Val

@ Val Ini sebenarnya menarik bahwa saya akan menyebutkan artikel yang sama yang telah Anda sebutkan dan kemudian melihat komentar Anda. Saya pikir metode ini akan membuat Anda lebih dekat dengan apa yang Anda inginkan.
nima

Anda mungkin ingin melihat kesamaan cosinus. Seperti dijelaskan di bawah, ini melibatkan konversi string menjadi vektor yang dapat direpresentasikan dalam ruang 2D. Sudut cosinus dari kedua vektor dihitung. Sudut ini mewakili "kesamaan" antara 2 string. Inilah artikel yang bagus di media.com/swlh/playing-with-word-vectors-308ab2faa519
sagar1025

Jawaban:


5

Saya sangat menyarankan agar Anda menonton ceramah Trey Grainger tentang cara membangun sistem pencarian semantik => https://www.youtube.com/watch?v=4fMZnunTRF8 . Dia berbicara tentang anatomi sistem pencarian semantik dan masing-masing bagian yang digunakan untuk menyatukan untuk memberikan solusi akhir.

Contoh yang bagus dari kesamaan kontekstual adalah mesin pencari Bing: masukkan deskripsi gambar di sini

Kueri asli memiliki istilah {soda kaleng} dan hasil pencarian bing dapat merujuk ke {soda diet kaleng}, {minuman ringan}, {pop suhu kamar yang belum dibuka} atau {minuman berkarbonasi}. Bagaimana bing melakukan ini ?:

Nah, kata-kata yang memiliki makna yang sama mendapatkan vektor yang sama dan kemudian vektor-vektor ini dapat diproyeksikan ke grafik 2 dimensi agar mudah divisualisasikan. Vektor-vektor ini dilatih dengan memastikan kata-kata dengan makna yang serupa secara fisik saling berdekatan. Anda dapat melatih model berbasis vektor Anda sendiri dengan melatih model GloVemasukkan deskripsi gambar di sini

Semakin dekat jarak vektor satu sama lain, semakin baik. Sekarang Anda dapat mencari kueri tetangga terdekat berdasarkan jarak vektornya. Misalnya, untuk permintaan {cara menghentikan hewan dari menghancurkan kebun saya}, tetangga terdekat memberikan hasil ini:

masukkan deskripsi gambar di sini

Anda dapat mempelajari lebih lanjut di sini. Untuk kasus Anda, Anda dapat menemukan ambang batas untuk jarak maksimum sebuah vektor kalimat dari kueri penelusuran asli agar kalimat tersebut dianggap sebagai kalimat yang serupa secara kontekstual.

Kesamaan kontekstual juga dapat dilakukan dengan mengurangi dimensi kosakata menggunakan sesuatu seperti LSI (Latent Semantic Indexing). Untuk melakukan ini dengan Python, saya sangat menyarankan Anda memeriksa perpustakaan genism untuk python: https://radimrehurek.com/gensim/about.html .


1

Anda mungkin tertarik melihat Weaviate untuk membantu Anda memecahkan masalah ini. Ini adalah grafik pintar berdasarkan vektorisasi objek data .

Jika Anda memiliki bahasa khusus domain (mis., Singkatan), Anda dapat memperluas Weaviate dengan konsep khusus .

Anda mungkin dapat menyelesaikan masalah Anda dengan fitur pencarian semantik (yaitu, Explore{}) atau fitur klasifikasi otomatis.

Jelajahi fungsi

Karena semua objek data mendapatkan vektor, Anda dapat melakukan pencarian semantik seperti berikut (contoh ini berasal dari dokumen , Anda dapat mencobanya di sini menggunakan GraphQL):

{
  Get{
    Things{
      Publication(
        explore: {
          concepts: ["fashion"],
          certainty: 0.7,
          moveAwayFrom: {
            concepts: ["finance"],
            force: 0.45
          },
          moveTo: {
            concepts: ["haute couture"],
            force: 0.85
          }
        }
      ){
        name
      }
    }
  }
}

Jika Anda menyusun skema grafik berdasarkan - sebagai contoh - nama kelas "Kalimat", kueri serupa mungkin terlihat seperti ini:

{
  Get{
    Things{
      Sentence(
        # Explore (i.e., semantically) for "Buying Experience"
        explore: {
          concepts: ["Buying Experience"]
        }
        # Result must include the word "car" 
        where: {
          operator: Like
          path: ["content"]
          valueString: "*car*"
        }
      ){
        content
      }
    }
  }
}

Catatan:
Anda juga dapat menjelajahi grafik secara semantik secara keseluruhan.

Klasifikasi otomatis

Alternatif mungkin bekerja dengan fitur klasifikasi kontekstual atau KNN .

Dalam kasus Anda, Anda dapat menggunakan Kalimat kelas dan menghubungkannya ke kelas yang disebut Pengalaman, yang akan memiliki properti: buying(tentu saja ada banyak konfigurasi dan strategi lain yang dapat Anda pilih).

PS:
Video ini memberikan sedikit lebih banyak konteks jika Anda suka.


0

Sejauh yang saya tahu, saya tidak berpikir ada model teoritis untuk membangun mesin pencari semantik. Namun, saya percaya mesin pencari semantik harus dirancang untuk memenuhi kebutuhan spesifik yang ada. Karena itu, setiap mesin pencari semantik yang berhasil memahami maksud pengguna serta konteks istilah pencarian, perlu bekerja dengan pemrosesan bahasa alami (NLP) dan pembelajaran mesin sebagai blok bangunan.

Meskipun mesin pencari bekerja secara berbeda dari alat pencarian, Anda dapat merujuk ke alat pencarian perusahaan untuk mendapatkan ide tentang model pencarian semantik yang berfungsi. Platform zaman baru seperti Pencarian 3RDi bekerja berdasarkan prinsip-prinsip pencarian semantik dan telah terbukti menjadi solusi ideal untuk data tidak terstruktur yang harus dihadapi perusahaan. Google sangat mungkin bekerja pada model untuk memperkenalkan semantik canggih di mesin pencari.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.