Skapa en fråga som anropar semantisk rangordning och returnerar semantiska undertexter

Viktigt

Semantisk sökning är i offentlig förhandsversion under kompletterande användningsvillkor. Den är tillgänglig via Azure Portal, förhandsversion av REST API och beta-SDK:er. Dessa funktioner kan faktureras. Mer information om finns i Tillgänglighet och priser.

Semantisk sökning är en premiumfunktion i Azure Cognitive Search som anropar en semantisk rangordningsalgoritm över en resultatuppsättning och returnerar semantiska undertexter (och eventuellt semantiska svar), med höjdpunkter över de mest relevanta termerna och fraserna. Både undertexter och svar returneras i frågebegäranden som formulerats med hjälp av den "semantiska" frågetypen.

Bildtexter och svar extraheras ordagrant från text i sökdokumentet. Det semantiska undersystemet avgör vilken del av innehållet som har egenskaperna för en beskrivning eller ett svar, men det skapar inte nya meningar eller fraser. Därför fungerar innehåll som innehåller förklaringar eller definitioner bäst för semantisk sökning.

Krav

  • En Cognitive tjänsten Search på en standardnivå (S1, S2, S3) eller lagringsoptimerad nivå (L1, L2), som finns i någon av följande regioner: Australien, östra, USA, östra, USA, östra 2, USA, norra centrala, USA, södra centrala, USA, västra, USA, västra 2, Europa, norra, Storbritannien, södra, Europa, västra. Om du har en befintlig S1- eller större tjänst i någon av dessa regioner kan du aktivera semantisk sökning i tjänsten utan att behöva skapa en ny.

  • Semantisk sökning aktiverad i söktjänsten.

  • Ett befintligt sökindex med innehåll på ett språk som stöds. Semantisk sökning fungerar bäst på innehåll som är informations- eller beskrivande.

  • En sökklient för att skicka frågor.

    Sökklienten måste ha stöd för REST-API:er för förhandsversion på frågebegäran. Du kan använda Postman, Visual Studio Code eller kod som gör REST-anrop till förhandsversions-API:erna. Du kan också använda Sökutforskaren i Azure Portal för att skicka en semantisk fråga eller använda Azure.Search.Documents 11.4.0-beta.5.

  • En sökklient för att uppdatera index.

    Sökklienten måste ha stöd för REST-API:er för förhandsversion på frågebegäran. Du kan använda Azure Portal, Postman, Visual Studio Code eller kod som gör REST-anrop till förhandsversions-API:erna. Du kan också använda Azure.Search.Documents 11.4.0-beta.5.

  • En frågebegäran måste innehålla queryType=semantic och andra parametrar som beskrivs i den här artikeln.

Vad är en semantisk frågetyp?

I Cognitive Search är en fråga en parametriserad begäran som avgör frågebearbetning och formen på svaret. En semantisk fråga har parametrar som anropar den semantiska omrankningsmodellen som kan utvärdera kontexten och innebörden av matchande resultat, höja upp mer relevanta matchningar överst och returnera semantiska svar och undertexter.

Metoden för att lista fält i prioritetsordning har ändrats nyligen, med semanticConfiguration som ersätter searchFields. Om du för närvarande använder searchFields uppdaterar du koden till API-versionen 2021-04-30-Preview och använder semanticConfiguration i stället.

Följande begäran är representativ för en minimal semantisk fråga (utan svar).

POST https://[service name].search.windows.net/indexes/[index name]/docs/search?api-version=2021-04-30-Preview      
{    
    "search": " Where was Alan Turing born?",    
    "queryType": "semantic",  
    "semanticConfiguration": "my-semantic-config",
    "queryLanguage": "en-us"  
}

Precis som med alla frågor i Cognitive Search är begäran inriktad på dokumentsamlingen för ett enda index. Dessutom genomgår en semantisk fråga samma sekvens av parsning, analys, genomsökning och bedömning som en icke-semantisk fråga.

Skillnaden ligger i relevans och bedömning. Enligt definitionen i den här förhandsversionen är en semantisk fråga en fråga vars resultat rangordnas om med hjälp av en semantisk språkmodell, vilket ger ett sätt att visa de matchningar som anses mest relevanta av den semantiska rankningen, i stället för poängen som tilldelas av standardalgoritmen för likhetsrankning.

Endast de 50 bästa matchningarna från de första resultaten kan rangordnas semantiskt, och alla resultat innehåller undertexter i svaret. Du kan också ange en answer parameter för begäran för att extrahera ett potentiellt svar. Mer information finns i Semantiska svar.

Skapa en semantisk konfiguration

Anteckning

Semantiska konfigurationer är ett nytt tillägg till API:et 2021-04-30-Preview och krävs nu för semantiska frågor. Om du använder 2020-06-30-Preview används searchFields i stället för semanticConfiguration. Vi rekommenderar att du uppgraderar till 2021-04-30-Preview och använder semanticConfiguration för bästa resultat.

För att få bästa resultat från semantisk sökning är det viktigt att ge underliggande modeller tips om vilka fält i ditt index som är viktigast för semantisk rangordning, undertexter, höjdpunkter och svar. Om du vill ange den informationen måste du skapa en semantisk konfiguration.

En semantisk konfiguration innehåller egenskaper för att lista tre olika typer av fält, som mappar tillbaka till de indata som de underliggande modellerna för semantisk sökning förväntar sig:

  • Rubrikfält – Ett rubrikfält ska vara en kortfattad beskrivning av dokumentet, helst en sträng som är under 25 ord. Det kan vara rubriken på dokumentet, namnet på produkten eller objektet i sökindexet. Om du inte har någon rubrik i sökindexet lämnar du fältet tomt.
  • Innehållsfält – Innehållsfält bör innehålla text i naturligt språk. Vanliga exempel på innehåll är texten i ett dokument, beskrivningen av en produkt eller annan fritext.
  • Nyckelordsfält – Nyckelordsfält ska vara en lista över nyckelord, till exempel taggarna i ett dokument eller en beskrivande term, till exempel kategorin för ett objekt.

Du kan bara ange ett enskilt rubrikfält som en del av din semantiska konfiguration, men du kan ange hur många innehålls- och nyckelordsfält du vill. Det är dock viktigt att du listar innehålls- och nyckelordsfälten i prioritetsordning eftersom fält med lägre prioritet kan trunkeras. Fält som anges först får högre prioritet.

Du behöver bara ange ett fält mellan titleField, prioritizedContentFieldsoch prioritizedKeywordsFields, men det är bäst att lägga till fälten i din semantiska konfiguration om de finns i ditt sökindex.

Precis som med bedömningsprofiler är semantiska konfigurationer en del av indexdefinitionen och kan uppdateras när som helst utan att ditt index återskapas. När du utfärdar en fråga lägger du till semanticConfiguration som anger vilken semantisk konfiguration som ska användas för frågan.

  1. Logga in på Azure Portal och navigera till en söktjänst som har semantisk sökning aktiverad.

  2. Öppna ett index.

  3. Välj Semantiska konfigurationer och välj sedan Lägg till semantisk konfiguration.

    Sidan Ny semantisk konfiguration öppnas med alternativ för att välja ett rubrikfält, innehållsfält och nyckelordsfält. Se till att lista innehållsfält och nyckelordsfält i prioritetsordning.

    Spara ändringarna genom att välja OK .

    Skärmbild som visar hur du skapar en semantisk konfiguration i Azure Portal.

Om du vill se ett exempel på hur du skapar en semantisk konfiguration och använder den för att utfärda en semantisk fråga kan du titta på Postman-exemplet för semantisk sökning.

Tillåtna datatyper

När du väljer fält för din semantiska konfiguration väljer du endast fält för följande datatyper som stöds. Om du råkar inkludera ett ogiltigt fält finns det inget fel, men de fälten används inte i semantisk rangordning.

Datatyp Exempel från hotels-sample-index
Edm.String HotelName, Kategori, Beskrivning
Edm.ComplexType Address.StreetNumber, Address.City, Address.StateProvince, Address.PostalCode
Collection(Edm.String) Taggar (en kommaavgränsad lista med strängar)

Anteckning

Underfält för samlingsfält (Edm.ComplexType) stöds för närvarande inte av semantisk sökning och används inte för semantisk rangordning, undertexter eller svar.

Fråga i Azure Portal

Sökutforskaren har uppdaterats med alternativ för semantiska frågor. Följ stegen nedan för att skapa en semantisk fråga i portalen:

  1. Öppna Azure Portal och navigera till en söktjänst som har semantisk sökning aktiverad.

  2. Klicka på Sökutforskaren överst på översiktssidan.

  3. Välj ett index som har innehåll på ett språk som stöds.

  4. I Sökutforskaren anger du frågealternativ som aktiverar semantiska frågor, semantiska konfigurationer och stavningskorrigering. Du kan också klistra in de obligatoriska frågeparametrarna i frågesträngen.

Skärmbild som visar frågealternativ i Sökutforskaren.

Fråga med REST

Använd sökdokumenten (REST-förhandsversion) för att formulera begäran programmatiskt. Ett svar innehåller undertexter och markeringar automatiskt. Om du vill ha stavningskorrigering eller svar i svaret lägger du till speller eller answers i begäran.

I följande exempel används hotels-sample-index för att skapa en semantisk frågebegäran med stavningskontroll, semantiska svar och undertexter:

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2021-04-30-Preview      
{
    "search": "newer hotel near the water with a great restaurant",
    "queryType": "semantic",
    "queryLanguage": "en-us",
    "semanticConfiguration": "my-semantic-config",
    "speller": "lexicon",
    "answers": "extractive|count-3",
    "captions": "extractive|highlight-true",
    "highlightPreTag": "<strong>",
    "highlightPostTag": "</strong>",
    "select": "HotelId,HotelName,Description,Category",
    "count": true
}

I följande tabell sammanfattas de parametrar som används i en semantisk fråga. En lista över alla parametrar i en begäran finns i Sök dokument (REST-förhandsversion)

Parameter Typ Beskrivning
queryType Sträng Giltiga värden är enkla, fullständiga och semantiska. Värdet "semantik" krävs för semantiska frågor.
queryLanguage Sträng Krävs för semantiska frågor. Lexikonet som du anger gäller lika för semantisk rangordning, undertexter, svar och stavningskontroll. Mer information finns i språk som stöds (REST API-referens).
semanticConfiguration Sträng Krävs för semantiska frågor. Namnet på din semantiska konfiguration.

Till skillnad från enkla och fullständiga frågetyper avgör ordningen i vilken fälten visas prioritet. Fler användningsinstruktioner finns i Skapa en semantisk konfiguration.
Speller Sträng Valfri parameter, som inte är specifik för semantiska frågor, som korrigerar felstavade termer innan de når sökmotorn. Mer information finns i Lägga till stavningskorrigering i frågor.
svar Sträng Valfria parametrar som anger om semantiska svar ingår i resultatet. För närvarande implementeras endast "extractive". Svar kan konfigureras för att returnera högst tio. Standardvärdet är ett. Det här exemplet visar antalet tre svar: extractive|count-3. Mer information finns i Returnera semantiska svar.
captions Sträng Valfria parametrar som anger om semantiska undertexter ingår i resultatet. För närvarande implementeras endast "extractive". Undertexter kan konfigureras för att returnera resultat med eller utan markeringar. Standardvärdet är att markeringar returneras. Det här exemplet returnerar undertexter utan markeringar: extractive|highlight-false. Mer information finns i Returnera semantiska svar.

Formulera begäran

I det här avsnittet beskrivs frågeformulering.

Steg 1: Ange queryType och queryLanguage

Lägg till följande parametrar i resten. Båda parametrarna krävs.

"queryType": "semantic",
"queryLanguage": "en-us",

QueryLanguage måste vara ett språk som stöds och måste vara konsekvent med alla språkanalysverktyg som tilldelats fältdefinitioner i indexschemat. Du indexerade till exempel franska strängar med hjälp av ett franskt språkanalysverktyg (till exempel "fr.microsoft" eller "fr.lucene"), och sedan ska queryLanguage också vara fransk språkvariant.

Om du även använder stavningskorrigering i en frågeförfrågan gäller det queryLanguage som du anger lika för stavning, svar och undertexter. Det finns ingen åsidosättning för enskilda delar. Stavningskontroll stöder färre språk, så om du använder den funktionen måste du ange queryLanguage till ett från den listan.

Även om innehåll i ett sökindex kan bestå på flera språk är frågeindata troligtvis i ett. Sökmotorn söker inte efter kompatibilitet för queryLanguage, språkanalys och det språk som innehållet består på, så se till att omfångsfrågorna omfångsbegränsas för att undvika felaktiga resultat.

Steg 2: Ange semanticConfiguration

Lägg till en semanticConfiguration i begäran. En semantisk konfiguration krävs och är viktig för att få bästa resultat från semantisk sökning.

"semanticConfiguration": "my-semantic-config",

Den semantiska konfigurationen används för att berätta för semantiksökningens modeller vilka fält som är viktigast för att ändra rangordning av sökresultat baserat på semantisk likhet.

Steg 3: Ta bort eller hakparentes för frågefunktioner som kringgår relevansbedömning

Flera frågefunktioner i Cognitive Search genomgår inte relevansbedömning och vissa kringgår sökmotorn med fulltext helt och hållet. Om din frågelogik innehåller följande funktioner får du inte relevanspoäng eller semantisk rangordning för dina resultat:

  • Filter, fuzzy-sökfrågor och reguljära uttryck itererar över orörd text och söker efter ordagranna matchningar i innehållet. Sökpoängen för alla ovanstående frågeformulär är enhetliga 1.0 och ger inte meningsfulla indata för semantisk rangordning.

  • Sortering (orderBy-satser) för specifika fält åsidosätter även sökpoäng och semantisk poäng. Med tanke på att semantisk poäng används för att beställa resultat, inklusive explicit sorteringslogik, returneras ett HTTP 400-fel.

Steg 4: Lägga till svar och undertexter

Du kan också lägga till "svar" och "undertexter" om du vill inkludera ytterligare bearbetning som ger ett svar och undertexter. Mer information om den här parametern finns i Så här anger du semantiska svar.

"answers": "extractive|count-3",
"captions": "extractive|highlight-true",

Svar (och undertexter) extraheras från avsnitt som finns i fält som anges i den semantiska konfigurationen. Det är därför du vill inkludera innehållsrika fält i prioriteringenContentFields i en semantisk konfiguration, så att du kan få de bästa svaren och beskrivningarna i ett svar. Svar garanteras inte för varje begäran. För att få ett svar måste frågan se ut som en fråga och innehållet måste innehålla text som ser ut som ett svar.

Steg 5: Lägg till andra parametrar

Ange eventuella andra parametrar som du vill ha i begäran. Parametrar som stavning, val och antal förbättrar kvaliteten på begäran och läsbarheten för svaret.

"speller": "lexicon",
"select": "HotelId,HotelName,Description,Category",
"count": true,
"highlightPreTag": "<mark>",
"highlightPostTag": "</mark>",

Markeringsformat tillämpas på undertexter i svaret. Du kan använda standardformatet eller om du vill anpassa markeringsformatet som används för undertexter. Undertexter använder markeringsformatering över nyckelavsnitt i dokumentet som sammanfattar svaret. Standardvärdet är <em>. Om du vill ange formateringstyp (till exempel gul bakgrund) kan du ange highlightPreTag och highlightPostTag.

Fråga med Azure SDK:er

Betaversioner av Azure SDK:er innehåller stöd för semantisk sökning. Eftersom SDK:erna är betaversioner finns det ingen dokumentation eller några exempel, men du kan läsa avsnittet REST API ovan för insikter om hur API:erna ska fungera.

Utvärdera svaret

Som med alla frågor består ett svar av alla fält som markerats som hämtningsbara, eller bara de fält som anges i select-parametern. Den innehåller den ursprungliga relevanspoängen och kan även innehålla ett antal, eller batchbaserade resultat, beroende på hur du formulerade begäran.

I en semantisk fråga har svaret ytterligare element: en ny semantiskt rangordnad relevanspoäng, bildtexter i oformaterad text och med markeringar och eventuellt ett svar.

I en klientapp kan du strukturera söksidan så att den innehåller en beskrivning som matchningsbeskrivning i stället för hela innehållet i ett visst fält. Detta är användbart när enskilda fält är för kompakta för sökresultatsidan.

Svaret för exempelfrågan ovan returnerar följande matchning som det översta valet. Undertexter returneras automatiskt med oformaterad text och markerade versioner. Svar utelämnas från exemplet eftersom det inte gick att fastställa något för just den här frågan och corpus.

"@odata.count": 35,
"@search.answers": [],
"value": [
    {
        "@search.score": 1.8810667,
        "@search.rerankerScore": 1.1446577133610845,
        "@search.captions": [
            {
                "text": "Oceanside Resort. Luxury. New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
                "highlights": "<strong>Oceanside Resort.</strong> Luxury. New Luxury Hotel. Be the first to stay.<strong> Bay</strong> views from every room, location near the pier, rooftop pool, waterfront dining & more."
            }
        ],
        "HotelName": "Oceanside Resort",
        "Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
        "Category": "Luxury"
    },

Nästa steg

Kom ihåg att semantisk rangordning och svar skapas över en första resultatuppsättning. All logik som förbättrar kvaliteten på de första resultaten överförs till semantisk sökning. Som ett nästa steg granskar du de funktioner som bidrar till inledande resultat, inklusive analysverktyg som påverkar hur strängar tokeniseras, bedömningsprofiler som kan finjustera resultat och standardrelevansalgoritmen.