Memahami pencarian semantik

Selesai

Mari kita membahas dasar-dasar pencarian semantik:

  • Perbedaannya dengan pencarian leksikal standar.
  • Apa itu penyematan vektor?
  • Apa yang dilakukan database vektor?

Pencarian leksikal standar, atau pencarian kata kunci, mengkueri dokumen dengan mencocokkan karakter. Misalnya, kueri "cahaya" cocok dengan teks "cahaya terang" karena karakter light muncul di dokumen.

Pencarian leksikal dapat ditambah dengan pencocokan fuzzy; misalnya, kueri "lampu" masih dapat mencocokkan teks "cahaya terang" atau salah eja lihgts karena tergeser satu karakter (hilang s, atau bertukar g dan h). Meskipun pencocokan fuzzy dan teknik lain seperti stemming sangat membantu, teknik ini harus cocok dengan sinonim atau bahasa yang mirip secara semantik: frasa yang berbeda, gaul, kosakata teknis, dll. Untuk memberikan hasil pencarian yang paling relevan dengan pencarian leksikal, penulis perlu menyematkan kata kunci dalam metadata atau teks itu sendiri (yang dapat menjadi pengalaman pengguna yang canggung).

Masukkan pencarian semantik. Pencarian semantik tidak menggunakan kesamaan karakter. Sebaliknya, ia menggunakan representasi numerik dari konsep dalam kata-kata dan frasa. Representasi numerik ini disebut vektor penyematan atau hanya penyematan.

Jika dua embedding secara numerik mirip, maka keduanya juga serupa secara semantik. Kesamaan ini lebih umum daripada menguji tumpang tindih kata kunci karena kurang sensitif terhadap pemilihan atau frasa kata kunci yang tepat.

Untuk melakukan pencarian semantik, pertama-tama hasilkan vektor penyematan kueri. Kemudian, bandingkan vektor itu dengan database vektor. Penyematan yang paling dekat dengan penyematan kueri adalah dokumen yang paling mirip dengan kueri secara semantik.

Sebagian besar kasus penggunaan database relasional tidak melibatkan penyimpanan vektor n-dimensi dan menghitung jarak numerik di antara mereka. Pencarian semantik yang efisien memerlukan fungsionalitas database vektor .

Sebuah diagram yang menunjukkan dokumen dan kueri melalui OpenAI Embeddings API untuk menjadi vektor penyematan. Vektor ini kemudian dibandingkan menggunakan jarak kosinus.

Pemadatan

Sebuah embedding adalah representasi numerik dari makna semantik. Embedding direpresentasikan sebagai vektor n-dimensi: array dari n angka. Setiap dimensi mewakili beberapa kualitas semantik seperti yang ditentukan oleh model penyematan.

Diagram yang memperlihatkan teks input

Jika dua vektor penyematan mengarah ke arah yang sama, mereka mewakili konsep serupa, seperti "cerah" dan "bermatahari." Jika mereka mengarah ke arah yang berlawanan, mereka mewakili konsep yang berlawanan, seperti "sedih" dan "bahagia." Struktur model penyematan dan data pelatihan menentukan apa yang dianggap serupa dan berbeda.

Penyematan dapat diterapkan ke teks dan segala jenis data, seperti gambar atau audio. Bagian penting adalah mengubah data menjadi vektor penyematan n-dimensi berdasarkan beberapa model atau fungsi. Kemiripan numerik dari embedding menggambarkan kemiripan semantik dari data yang berkaitan.

Kesamaan secara numerik dari dua vektor n-dimensiv1 dan v2 diberikan oleh produk titik mereka, ditulis v1·v2. Untuk menghitung produk titik, kalikan masing-masing nilai dimensi secara berpasangan, lalu jumlahkan hasilnya:

dot_product(v1, v2) = SUM(
 v1[0] * v2[0],
 v1[1] * v2[1],
 ...,
 v1[n-1] * v2[n-1],
 v1[n] * v2[n]
)

Karena penyematan adalah vektor unit (vektor panjang satu), produk titik sama dengan kesamaan kosinus vektor, nilai antara -1 (tepat berlawanan arah) dan 1 (arah yang sama persis). Vektor dengan kesamaan kosinus nol adalah ortogonal: secara semantik tidak terkait.

Anda dapat memvisualisasikan ruang n-dimensi dengan memproyeksikannya ke ruang 3 dimensi menggunakan analisis komponen utama (PCA). PCA adalah teknik standar untuk mengurangi dimensi vektor. Hasilnya adalah proyeksi ruang n-dimensi yang disederhanakan tetapi dapat divisualisasikan. Menampilkan penyematan dokumen Anda dengan cara ini akan menunjukkan bahwa dokumen-dokumen yang lebih mirip dikelompokkan dalam kluster, sementara dokumen-dokumen yang lebih berbeda berada lebih jauh.

Mengingat definisi ini, melakukan pencarian semantik kueri terhadap kumpulan penyematan dokumen sangat mudah secara matematis:

  1. Buat embedding kueri menggunakan model bahasa.
  2. Ambil produk titik dari penyematan kueri terhadap setiap penyematan dokumen yang telah dihitung sebelumnya.
  3. Urutkan produk titik, angka dari -1 ke 1.
  4. Dokumen yang paling relevan (semantik serupa) memiliki skor tertinggi, dan dokumen yang paling tidak relevan (secara semantik berbeda) memiliki skor terendah.

Meskipun sederhana secara matematis, ini bukan kueri sederhana atau berkinerja dalam database relasional. Untuk menyimpan dan memproses kueri kesamaan vektor semacam ini, gunakan database vektor.

Database vektor

Database vektor mengoptimalkan penyimpanan dan perhitungan vektor banyak dimensi, seperti penyematan. Secara khusus, database vektor menyediakan perhitungan produk titik yang cepat dan akurat untuk menjalankan kueri kesamaan vektor.

Pencarian kesamaan vektor memiliki beberapa kasus penggunaan:

  • temukan gambar yang mirip dengan penyematan gambar kueri
  • temukan dokumen secara semantik mirip dengan teks kueri
  • menemukan produk dengan fitur dan peringkat serupa untuk sistem rekomendasi

Pencarian semantik menelusuri database vektor untuk kemiripan dari penyematan kueri dengan setiap penyematan yang disimpan. Aplikasi kemudian dapat mengambil data yang sesuai dengan penyematan.

Ada banyak database vektor asli dan ekstensi database untuk dipilih. Layanan Azure berikut ini dapat membantu Anda memenuhi kebutuhan database vektor Anda: