Bagikan melalui


Pencarian hibrid menggunakan vektor dan teks lengkap di Azure AI Search

Pencarian hibrid adalah permintaan kueri tunggal, dikonfigurasi untuk pencarian teks lengkap dan vektor, yang dijalankan terhadap indeks pencarian yang berisi konten teks biasa yang dapat dicari dan penyematan yang dihasilkan. Untuk tujuan kueri, pencarian hibrid adalah:

  • Satu permintaan kueri yang menyertakan search parameter kueri dan vectors
  • Menjalankan secara paralel
  • Dengan hasil gabungan dalam respons kueri, dinilai menggunakan Reciprocal Rank Fusion (RRF)

Artikel ini menjelaskan konsep, manfaat, dan batasan pencarian hibrid. Tautan di akhir memberikan instruksi dan langkah berikutnya. Anda juga dapat menonton video yang disematkan ini untuk penjelasan tentang bagaimana pengambilan hibrid berkontribusi pada aplikasi RAG berkualitas tinggi.

Bagaimana cara kerja pencarian hibrid?

Di Azure AI Search, bidang vektor yang berisi penyematan dapat hidup bersama bidang tekstual dan numerik, memungkinkan Anda merumuskan kueri hibrid yang dijalankan secara paralel. Kueri hibrid dapat memanfaatkan fungsionalitas berbasis teks yang ada seperti pemfilteran, faset, pengurutan, profil penilaian, dan peringkat semantik pada bidang teks Anda, sambil menjalankan pencarian kesamaan terhadap vektor, semuanya dalam satu permintaan pencarian.

Pencarian hibrid menggabungkan hasil dari kueri teks lengkap dan vektor, yang menggunakan fungsi peringkat yang berbeda seperti BM25 untuk teks, dan Hierarkis Navigable Small World (HNSW) dan K Nearest Neighbors (eKNN) lengkap untuk vektor. Algoritma Reciprocal Rank Fusion (RRF) menggabungkan hasil. Respons kueri hanya menyediakan satu kumpulan hasil, menggunakan RRF untuk memberi peringkat hasil terpadu.

Struktur kueri hibrid

Pencarian hibrid diprediksikan memiliki indeks pencarian yang berisi bidang dari berbagai jenis data, termasuk teks dan angka biasa, koordinat geografis jika Anda ingin pencarian geospasial, dan vektor untuk representasi matematika dari potongan teks. Anda dapat menggunakan hampir semua kemampuan kueri di Azure AI Search dengan kueri vektor, kecuali untuk interaksi sisi klien teks murni seperti lengkapi otomatis dan saran.

Kueri hibrid perwakilan mungkin sebagai berikut (perhatikan bahwa kueri vektor memiliki nilai tempat penampung untuk brevity):

POST https://{{searchServiceName}}.search.windows.net/indexes/hotels-vector-quickstart/docs/search?api-version=2024-07-01
  content-type: application/JSON
{
    "count": true,
    "search": "historic hotel walk to restaurants and shopping",
    "select": "HotelId, HotelName, Category, Description, Address/City, Address/StateProvince",
    "filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 300",
    "vectorFilterMode": "postFilter",
    "facets": [ "Address/StateProvince"], 
    "vectorQueries": [
        {
            "kind": "vector",
            "vector": [ <array of embeddings> ]
            "k": 50,
            "fields": "DescriptionVector",
            "exhaustive": true,
            "oversampling": 20
        },
        {
            "kind": "vector",
            "vector": [ <array of embeddings> ]
            "k": 50,
            "fields": "Description_frVector",
            "exhaustive": false,
            "oversampling": 10
        }
    ],
    "skip": 0,
    "top": 10,
    "queryType": "semantic",
    "queryLanguage": "en-us",
    "semanticConfiguration": "my-semantic-config"
}

Poin-poin penting meliputi:

  • search menentukan satu kueri pencarian teks lengkap.
  • vectorQueries untuk kueri vektor, yang bisa beberapa, menargetkan beberapa bidang vektor. Jika ruang penyematan menyertakan konten multibahasa, kueri vektor dapat menemukan kecocokan tanpa penganalisis bahasa atau terjemahan yang diperlukan. Jika Anda juga menggunakan ranker semantik, atur k ke 50 untuk memaksimalkan inputnya.
  • select menentukan bidang mana yang akan dikembalikan dalam hasil, yang seharusnya merupakan bidang teks yang dapat dibaca manusia jika Anda menampilkannya kepada pengguna atau mengirimkannya ke LLM.
  • filters dapat menentukan pencarian geospasial atau kriteria yang disertakan dan dikecualikan lainnya, seperti apakah parkir disertakan. Kueri geospasial dalam contoh ini menemukan hotel dalam radius 300 kilometer dari Washington D.C. Anda bisa menerapkan filter di awal atau akhir pemrosesan kueri. Jika Anda menggunakan peringkat semantik, Anda mungkin ingin pasca-pemfilteran sebagai langkah terakhir tetapi Anda harus menguji untuk mengonfirmasi perilaku mana yang terbaik untuk kueri Anda.
  • facets dapat digunakan untuk menghitung wadah faset atas hasil yang dikembalikan dari kueri hibrid.
  • queryType=semantic memanggil pemeringkat semantik, menerapkan pemahaman pembacaan mesin untuk menampilkan hasil pencarian yang lebih relevan. Peringkat semantik bersifat opsional. Jika Anda tidak menggunakan fitur tersebut, hapus tiga baris terakhir kueri hibrid.

Filter dan faset menargetkan struktur data dalam indeks yang berbeda dari indeks terbalik yang digunakan untuk pencarian teks lengkap dan indeks vektor yang digunakan untuk pencarian vektor. Dengan demikian, ketika filter dan operasi tersaring dijalankan, mesin pencari dapat menerapkan hasil operasional ke hasil pencarian hibrid dalam respons.

Perhatikan bagaimana tidak orderby ada dalam kueri. Urutan pengurutan eksplisit mengambil alih hasil berpangkat relevansi, jadi jika Anda menginginkan kesamaan dan relevansi BM25, hilangkan pengurutan dalam kueri Anda.

Respons dari kueri di atas mungkin terlihat seperti ini:

{
    "@odata.count": 3,
    "@search.facets": {
        "Address/StateProvince": [
            {
                "count": 1,
                "value": "NY"
            },
            {
                "count": 1,
                "value": "VA"
            }
        ]
    },
    "value": [
        {
            "@search.score": 0.03333333507180214,
            "@search.rerankerScore": 2.5229012966156006,
            "HotelId": "49",
            "HotelName": "Swirling Currents Hotel",
            "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
            "Category": "Luxury",
            "Address": {
                "City": "Arlington",
                "StateProvince": "VA"
            }
        },
        {
            "@search.score": 0.032522473484277725,
            "@search.rerankerScore": 2.111117362976074,
            "HotelId": "48",
            "HotelName": "Nordick's Valley Motel",
            "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer.  Hiking? Wine Tasting? Exploring the caverns?  It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.",
            "Category": "Boutique",
            "Address": {
                "City": "Washington D.C.",
                "StateProvince": null
            }
        }
    ]
}

Pencarian hibrid menggabungkan kekuatan pencarian vektor dan pencarian kata kunci. Keuntungan dari pencarian vektor adalah menemukan informasi yang secara konseptual mirip dengan kueri pencarian Anda, bahkan jika tidak ada kecocokan kata kunci dalam indeks terbalik. Keuntungan dari kata kunci atau pencarian teks lengkap adalah presisi, dengan kemampuan untuk menerapkan peringkat semantik opsional yang meningkatkan kualitas hasil awal. Beberapa skenario - seperti mengkueri kode produk, jargon, tanggal, dan nama orang yang sangat khusus - dapat berkinerja lebih baik dengan pencarian kata kunci karena dapat mengidentifikasi kecocokan yang tepat.

Pengujian tolok ukur pada himpunan data dunia nyata dan tolok ukur menunjukkan bahwa pengambilan hibrid dengan peringkat semantik menawarkan manfaat signifikan dalam relevansi pencarian.

Video berikut menjelaskan bagaimana pengambilan hibrid memberi Anda data grounding yang optimal untuk menghasilkan respons AI yang berguna.

Lihat juga