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 och HNSW. En RRF-algoritm (Reciprocal Rank Fusion) sammanfogar resultatet. Frågesvaret ger bara en resultatuppsättning med RRF för att välja de mest relevanta matchningarna från varje fråga.

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 för 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 interaktioner på klientsidan, till exempel automatisk komplettering och förslag.

En representativ hybridfråga kan vara följande (observera att vektorn trimmas för korthet):

POST https://{{searchServiceName}}.search.windows.net/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-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 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 kan 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 rangordning och använder maskinläsningsförståelse för att visa mer relevanta sökresultat.

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 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-datauppsättningar indikerar att hybridhämtning med semantisk rangordning 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)