Dela via


Hybridsökning med hjälp av vektorer och fulltext i Azure AI Search

Hybridsökning är en kombination av fulltext- och vektorfrågor som körs mot ett sökindex som innehåller både sökbart oformaterat textinnehåll och genererade inbäddningar. I frågesyfte är hybridsökning:

  • En enskild frågebegäran som innehåller både search frågeparametrar och vectors frågeparametrar
  • Köra parallellt
  • Med sammanfogade resultat i frågesvaret, poängsatt med Reciprocal Rank Fusion (RRF)

Den här artikeln beskriver begrepp, fördelar och begränsningar för hybridsökning. Titta på den här inbäddade videon för en förklaring och korta demonstrationer av hur hybridhämtning bidrar till chatt- och andrepilotappar av hög kvalitet.

Hur fungerar hybridsökning?

I Azure AI Search kan vektorfält som innehåller inbäddningar finnas tillsammans med text- och numeriska fält, så att du kan formulera hybridfrågor som körs parallellt. Hybridfrågor kan dra nytta av befintliga funktioner som filtrering, fasettering, sortering, bedömningsprofiler och semantisk rangordning i en enda sökbegäran.

Hybridsökning kombinerar resultat från både fulltext- och vektorfrågor, som använder olika rangordningsfunktioner som BM25, HNSW och EKNN. En RRF-algoritm (Reciprocal Rank Fusion) sammanfogar resultatet. Frågesvaret ger bara en resultatuppsättning med hjälp av RRF för att rangordna de enhetliga resultaten.

Struktur för en hybridfråga

Hybridsökning bygger på att ha ett sökindex som innehåller fält med olika datatyper, inklusive oformaterad text och siffror, geo-koordinater om du vill ha geospatial sökning och vektorer för en matematisk representation av ett textsegment. Du kan använda nästan alla frågefunktioner i Azure AI Search med en vektorfråga, förutom ren textinteraktioner på klientsidan, till exempel automatisk komplettering och förslag.

En representativ hybridfråga kan vara följande (observera att vektorfrågorna har platshållarvärden för korthet):

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",
    "facets": [ "Address/StateProvince"], 
    "vectors": [
        {
            "value": [ <array of embeddings> ]
            "k": 7,
            "fields": "DescriptionVector"
        },
        {
            "value": [ <array of embeddings> ]
            "k": 7,
            "fields": "Description_frVector"
        }
    ],
    "queryType": "semantic",
    "queryLanguage": "en-us",
    "semanticConfiguration": "my-semantic-config"
}

Viktiga punkter är:

  • search anger en enda fulltextsökningsfråga.
  • vectors för vektorfrågor, som kan vara flera, som riktar sig mot flera vektorfält. Om inbäddningsutrymmet innehåller flerspråkigt innehåll kan vektorfrågor hitta matchningen utan att språkanalyserare eller översättning krävs.
  • select anger vilka fält som ska returneras i resultat, vilket ska vara textfält som är läsbara för människor.
  • filters kan ange geospatial sökning eller andra inkludera och exkludera kriterier, till exempel om parkering ingår. Den geospatiala frågan i det här exemplet hittar hotell inom en radie på 300 kilometer från Washington D.C.
  • facets kan användas för att beräkna fasetter över resultat som returneras från hybridfrågor.
  • queryType=semantic anropar semantisk ranker och tillämpar maskinläsningsförståelse för att visa mer relevanta sökresultat. Semantisk rangordning är valfritt. Om du inte använder den funktionen tar du bort de tre sista raderna i hybridfrågan.

Filtrerar och fasetterar måldatastrukturer i indexet som skiljer sig från de inverterade index som används för fulltextsökning och de vektorindex som används för vektorsökning. När filter och fasetterade åtgärder körs kan sökmotorn därför tillämpa det operativa resultatet på hybridsökresultatet i svaret.

Observera hur det inte finns något orderby i frågan. Explicita sorteringsordningar åsidosätter relevansrankade resultat, så om du vill ha likhet och BM25-relevans utelämnar du sortering i frågan.

Ett svar från ovanstående fråga kan se ut så här:

{
    "@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": "Old Carrabelle 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 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
            }
        }
    ]
}

Hybridsökning kombinerar fördelarna med vektorsökning och nyckelordssökning. Fördelen med vektorsökning är att hitta information som konceptuellt liknar din sökfråga, även om det inte finns några nyckelordsmatchningar i det inverterade indexet. Fördelen med nyckelords- eller fulltextsökning är precision, med möjlighet att tillämpa valfri semantisk rangordning som förbättrar kvaliteten på de första resultaten. Vissa scenarier – till exempel frågor om produktkoder, högspecialiserad jargong, datum och namn – kan fungera bättre med nyckelordssökning eftersom det kan identifiera exakta matchningar.

Benchmark-testning på verkliga datamängder och benchmark-datamängder indikerar att hybridhämtning med semantisk ranker ger betydande fördelar i sökrelevansen.

I följande video förklaras hur hybridhämtning ger dig optimala jordningsdata för att generera användbara AI-svar.

Se även

Outperform-vektorsökning med hybridhämtning och rangordning (Tech-blogg)