Informationssökning
I föregående steg i din Retrieval-Augmented Generation-lösning (RAG) genererade du inbäddningarna för dina segment. I det här steget genererar du indexet i vektordatabasen och experimenterar för att fastställa dina optimala sökningar. Den här artikeln beskriver konfigurationsalternativ för ett sökindex, typer av sökningar och omrankningsstrategier.
Den här artikeln är en del av en serie. Läs introduktionen.
Konfigurera ditt sökindex
Anmärkning
I det här avsnittet beskrivs specifika rekommendationer för Azure AI Search. Om du använder en annan butik bör du läsa lämplig dokumentation för att hitta de viktigaste konfigurationerna för tjänsten.
Sökindexet i din butik har en kolumn för varje fält i din data. Söklager stöder vanligtvis icke-vektordatatyper, till exempel sträng, boolesk, heltal, enkel, dubbel och datumtid. De stöder också samlingar, till exempel samlingar av en typ och vektordatatyper. För varje kolumn måste du konfigurera information, till exempel datatypen och om fältet är filterbart, hämtningsbart eller sökbart.
Överväg följande vektorsökningskonfigurationer som du kan använda för vektorfält:
Vektorsökningsalgoritm: Vektorsökningsalgoritmen söker efter relativa matchningar. AI Search har ett brute-force-algoritmalternativ, kallat uttömmande k-närmsta grannar (KNN), som genomsöker hela vektorutrymmet. Det har också ett mer högpresterande algoritmalternativ, kallat Hierarchical Navigable Small World (HNSW), som utför en ungefärliga närmaste granne (ANN) sökning.
Likhetsmått: Algoritmen använder ett likhetsmått för att beräkna närhet. Typerna av mått i AI Search är cosinus, dot product och Euclidean. Om du använder inbäddningsmodeller för Azure OpenAI-tjänsten väljer du cosiné.
parametern
efConstruction
: Den här parametern används när ett HNSW-index skapas. Den avgör antalet närmaste grannar som är anslutna till en vektor under indexeringen. Ett störreefConstruction
värde resulterar i ett index av bättre kvalitet än ett mindre tal. Men ett större värde kräver mer tid, lagring och beräkning. För ett stort antal segment anger du värdetefConstruction
högre. För ett lågt antal segment anger du värdet lägre. För att fastställa det optimala värdet experimenterar du med dina data och förväntade frågor.parametern
efSearch
: Den här parametern används under frågetiden för att ange antalet närmaste grannar eller liknande segment som sökningen använder.parametern
m
: Den här parametern är antalet dubbelriktade länkar. Intervallet är 4 till 10. Lägre tal returnerar mindre brus i resultatet.
I AI Search kapslas vektorkonfigurationerna in i en konfiguration av typen vectorSearch
. När du konfigurerar vektorkolumnerna refererar du till lämplig konfiguration för den vektorkolumnen och anger antalet dimensioner. Vektorkolumnens dimensionsattribut representerar antalet dimensioner som din inbäddningsmodell genererar. Till exempel genererar den lagringsoptimerade text-embedding-3-small-modellen 1 536 dimensioner.
Välj sökmetoden
När du kör förfrågningar från din frågehanterare mot din sökdatabas bör du tänka på följande faktorer:
Den typ av sökning som du vill utföra, till exempel vektor, nyckelord eller hybrid
Om du vill köra frågor mot en eller flera kolumner
Om du vill köra flera frågor manuellt, till exempel en nyckelordsfråga och en vektorsökning
Om du behöver dela upp frågan i underfrågor
Om du ska använda filtrering i dina frågor
Din uppmaningsorkestrerare kan använda en statisk metod eller en dynamisk metod som kombinerar metoder baserat på kontextledtrådar från uppmaningen. I följande avsnitt beskrivs de här alternativen för att hjälpa dig att hitta rätt metod för din arbetsbelastning.
Söktyper
Sökplattformar stöder vanligtvis fulltext- och vektorsökningar. Vissa plattformar, till exempel AI Search, stöder hybridsökningar.
Vektorsökning
Vector-sökningar jämför likheten mellan den vektoriserade frågan (prompt) och vektorfält. Mer information finns i Välj en Azure-tjänst för vektorsökningar.
Viktig
Innan du bäddar in frågeställningen bör du utföra samma rensningsåtgärder som du har utfört på delar. Om du till exempel har skrivit varje ord med små bokstäver i ditt inbäddade segment, bör du skriva varje ord i frågan med små bokstäver innan du bäddar in.
Not
Du kan utföra en vektorsökning mot flera vektorfält i samma fråga. I AI Search betraktas den här metoden som en hybridsökning. Mer information finns i Hybridsökning.
Följande exempelkod utför en vektorsökning mot fältet contentVector.
embedding = embedding_model.generate_embedding(
chunk=str(pre_process.preprocess(query))
)
vector = RawVectorQuery(
k=retrieve_num_of_documents,
fields="contentVector",
vector=embedding,
)
results = client.search(
search_text=None,
vector_queries=[vector],
top=retrieve_num_of_documents,
select=["title", "content", "summary"],
)
Koden som bäddar in frågan förbearbetar frågan först. Den förbearbetningen bör vara samma kod som förbearbetar segmenten innan de bäddas in. Du måste använda samma inbäddningsmodell som har inbäddat segmenten.
Fulltextsökning
Fulltextsökningar matchar oformaterad text som lagras i ett index. Det är vanligt att extrahera nyckelord från en fråga och använda de extraherade nyckelorden i en fulltextsökning mot en eller flera indexerade kolumner. Du kan konfigurera fulltextsökningar för att returnera matchningar om några villkor eller alla villkor matchar.
Experimentera för att avgöra vilka fält som fulltextsökningar ska köras mot. Som beskrivs i artikeln berikningsfasbör du använda fält för nyckelords- och entitetsmetadata för fulltextsökningar i scenarier där innehåll har liknande semantisk betydelse men entiteter eller nyckelord skiljer sig åt. Andra vanliga fält att överväga för fulltextsökning är rubrik, sammanfattning och segmenttext.
Följande exempelkod utför en fulltextsökning mot fälten rubrik, innehåll och sammanfattning.
formatted_search_results = []
results = client.search(
search_text=query,
top=retrieve_num_of_documents,
select=["title", "content", "summary"],
)
formatted_search_results = format_results(results)
Hybridsökning
AI Search stöder hybridfrågor som innehåller en eller flera textsökningar och en eller flera vektorsökningar. Plattformen utför varje fråga, hämtar mellanliggande resultat, rangordnar om resultaten med hjälp av Reciprocal Rank Fusionoch returnerar det översta N resultat.
Följande exempelkod utför en fulltextsökning mot fälten rubrik, innehåll och sammanfattning. Den utför också vektorsökningar mot fälten contentVector och questionVector. AI Search kör alla sökfrågor parallellt, omrankar resultaten och returnerar de översta retrieve_num_of_documents.
embedding = embedding_model.generate_embedding(
chunk=str(pre_process.preprocess(query))
)
vector1 = RawVectorQuery(
k=retrieve_num_of_documents,
fields="contentVector",
vector=embedding,
)
vector2 = RawVectorQuery(
k=retrieve_num_of_documents,
fields="questionVector",
vector=embedding,
)
results = client.search(
search_text=query,
vector_queries=[vector1, vector2],
top=retrieve_num_of_documents,
select=["title", "content", "summary"],
)
Manuella multipla sökningar
Du kan köra flera frågor, till exempel en vektorsökning och en fulltextsökning med nyckelord manuellt. Du aggregerar resultaten, rangordnar om resultaten manuellt och returnerar de bästa resultaten. Överväg följande användningsfall för manuella flera frågor:
Du använder en sökplattform som inte stöder hybridsökningar. Du använder flera manuella frågor för att utföra din egen hybridsökning.
Du vill köra fulltextsökningar mot olika frågor. Du kan till exempel extrahera nyckelord från frågan och köra en fulltextsökning mot nyckelordsmetadatafältet. Du kan sedan extrahera entiteter och köra en fråga mot metadatafältet entiteter.
Du vill styra omrankningsprocessen.
Frågan kräver att du kör uppdelade underfrågor för att hämta jordningsdata från flera källor.
Frågeöversättning
Frågeöversättning är ett valfritt steg i hämtningsfasen för information i en RAG-lösning. Det här steget omvandlar eller översätter en fråga till ett optimerat formulär för att hämta bättre resultat. Metoder för frågeöversättning omfattar förstärkning, uppdelning, omskrivning och HyDE (Hypotetiska dokumentinbäddningar).
Förfrågningsutvidgning
Frågeförstoring är ett översättningssteg som gör frågan enklare och mer användbar och förbättrar kontexten. Du bör överväga utökning om sökfrågan är liten eller vag. Tänk till exempel på frågan "Jämför microsofts intäkter". Den frågan innehåller inte tidsramar eller tidsenheter att jämföra och anger bara intäkter. Överväg en förhöjd version av frågan, till exempel "Jämför Microsofts intäkter och intäkter under innevarande år jämfört med förra året efter kvartal.". Den nya frågan är tydlig och specifik.
När du utökar en fråga behåller du den ursprungliga frågan men lägger till mer kontext. Ta inte bort eller ändra den ursprungliga frågan och ändra inte frågans natur.
Du kan använda en språkmodell för att utöka en fråga. Men du kan inte utöka alla frågor. Om du har kontext kan du skicka den vidare till din språkmodell för att utöka frågan. Om du inte har någon kontext måste du avgöra om språkmodellen har information som du kan använda för att utöka frågan. Om du till exempel använder en stor språkmodell, till exempel en GPT-modell, kan du avgöra om information om frågan är lättillgänglig på Internet. I så fall kan du använda modellen för att utöka frågan. Annars bör du inte utöka frågan.
I följande uppmaning utökar en språkmodell en fråga. Den här prompten innehåller exempel på när frågan har kontext och inte har det. Mer information finns i GITHub-lagringsplats för RAG-experimentacceleratorn.
Input Processing:
Analyze the input query to identify the core concept or topic.
Check whether the query provides context.
If context is provided, use it as the primary basis for augmentation and explanation.
If no context is provided, determine the likely domain or field, such as science, technology, history, or arts, based on the query.
Query Augmentation:
If context is provided:
Use the given context to frame the query more specifically.
Identify other aspects of the topic not covered in the provided context that enrich the explanation.
If no context is provided, expand the original query by adding the following elements, as applicable:
Include definitions about every word, such as adjective or noun, and the meaning of each keyword, concept, and phrase including synonyms and antonyms.
Include historical context or background information, if relevant.
Identify key components or subtopics within the main concept.
Request information about practical applications or real-world relevance.
Ask for comparisons with related concepts or alternatives, if applicable.
Inquire about current developments or future prospects in the field.
Other Guidelines:
Prioritize information from provided context when available.
Adapt your language to suit the complexity of the topic, but aim for clarity.
Define technical terms or jargon when they're first introduced.
Use examples to illustrate complex ideas when appropriate.
If the topic is evolving, mention that your information might not reflect the very latest developments.
For scientific or technical topics, briefly mention the level of scientific consensus if relevant.
Use Markdown formatting for better readability when appropriate.
Example Input-Output:
Example 1 (With provided context):
Input: "Explain the impact of the Gutenberg Press"
Context Provided: "The query is part of a discussion about revolutionary inventions in medieval Europe and their long-term effects on society and culture."
Augmented Query: "Explain the impact of the Gutenberg Press in the context of revolutionary inventions in medieval Europe. Cover its role in the spread of information, its effects on literacy and education, its influence on the Reformation, and its long-term impact on European society and culture. Compare it to other medieval inventions in terms of societal influence."
Example 2 (Without provided context):
Input: "Explain CRISPR technology"
Augmented Query: "Explain CRISPR technology in the context of genetic engineering and its potential applications in medicine and biotechnology. Cover its discovery, how it works at a molecular level, its current uses in research and therapy, ethical considerations surrounding its use, and potential future developments in the field."
Now, provide a comprehensive explanation based on the appropriate augmented query.
Context: {context}
Query: {query}
Augmented Query:
Nedbrytning
Komplexa frågor kräver mer än en datainsamling för att grunda modellen. Till exempel kräver frågan "Hur fungerar elbilar och hur jämför de med fordon med förbränningsmotor (ICE) sannolikt jordningsdata från flera källor. En källa kan beskriva hur elbilar fungerar, där en annan jämför dem med ICE-fordon.
Nedbrytning är processen att dela upp en komplex fråga i flera mindre och enklare underfrågor. Du kör var och en av de uppdelade frågorna oberoende av varandra och aggregerar de främsta resultaten av alla de uppdelade frågorna som ackumulerad kontext. Sedan kör du den ursprungliga frågan, som skickar den ackumulerade kontexten till språkmodellen.
Du bör avgöra om frågan kräver flera sökningar innan du kör några sökningar. Om du behöver flera underfrågor kan du köra manuella flera frågor för alla frågor. Använd en språkmodell för att avgöra om flera underfrågor rekommenderas.
Följande fråga kategoriserar en fråga som enkel eller komplex. Mer information finns i GITHub-lagringsplats för RAG-experimentacceleratorn.
Consider the given question to analyze and determine whether it falls into one of these categories:
1. Simple, factual question
a. The question asks for a straightforward fact or piece of information.
b. The answer can likely be found stated directly in a single passage of a relevant document.
c. Breaking the question down further is unlikely to be beneficial.
Examples: "What year did World War 2 end?", "What is the capital of France?", "What are the features of productX?"
2. Complex, multipart question
a. The question has multiple distinct components or asks for information about several related topics.
b. Different parts of the question likely need to be answered by separate passages or documents.
c. Breaking the question down into subquestions for each component provides better results.
d. The question is open-ended and likely to have a complex or nuanced answer.
e. Answering the question might require synthesizing information from multiple sources.
f. The question might not have a single definitive answer and could warrant analysis from multiple angles.
Examples: "What were the key causes, major battles, and outcomes of the American Revolutionary War?", "How do electric cars work and how do they compare to gas-powered vehicles?"
Based on this rubric, does the given question fall under category 1 (simple) or category 2 (complex)? The output should be in strict JSON format. Ensure that the generated JSON is 100% structurally correct, with proper nesting, comma placement, and quotation marks. There shouldn't be a comma after the last element in the JSON.
Example output:
{
"category": "simple"
}
Du kan också använda en språkmodell för att dela upp en komplex fråga. Följande fråga delar upp en komplex fråga. Mer information finns i GITHub-lagringsplats för RAG-experimentacceleratorn.
Analyze the following query:
For each query, follow these specific instructions:
- Expand the query to be clear, complete, fully qualified, and concise.
- Identify the main elements of the sentence, typically a subject, an action or relationship, and an object or complement. Determine which element is being asked about or emphasized (usually the unknown or focus of the question). Invert the sentence structure. Make the original object or complement the new subject. Transform the original subject into a descriptor or qualifier. Adjust the verb or relationship to fit the new structure.
- Break the query down into a set of subqueries that have clear, complete, fully qualified, concise, and self-contained propositions.
- Include another subquery by using one more rule: Identify the main subject and object. Swap their positions in the sentence. Adjust the wording to make the new sentence grammatically correct and meaningful. Ensure that the new sentence asks about the original subject.
- Express each idea or fact as a standalone statement that can be understood with the help of the given context.
- Break down the query into ordered subquestions, from least to most dependent.
- The most independent subquestion doesn't require or depend on the answer to any other subquestion or prior knowledge.
- Try having a complete subquestion that has all information only from the base query. There's no other context or information available.
- Separate complex ideas into multiple simpler propositions when appropriate.
- Decontextualize each proposition by adding necessary modifiers to nouns or entire sentences. Replace pronouns, such as it, he, she, they, this, and that, with the full name of the entities that they refer to.
- If you still need more questions, the subquestion isn't relevant and should be removed.
Provide your analysis in the following YAML format, and strictly adhere to the following structure. Don't output anything extra, including the language itself.
type: interdependent
queries:
- [First query or subquery]
- [Second query or subquery, if applicable]
- [Third query or subquery, if applicable]
- ...
Examples:
1. Query: "What is the capital of France?"
type: interdependent
queries:
- What is the capital of France?
2. Query: "Who is the current CEO of the company that created the iPhone?"
type: interdependent
queries:
- Which company created the iPhone?
- Who is the current CEO of Apple? (identified in the previous question)
3. Query: "What is the population of New York City, and what is the tallest building in Tokyo?"
type: multiple_independent
queries:
- What is the population of New York City?
- What is the tallest building in Tokyo?
Now, analyze the following query:
{query}
Omskrivning
En indatafråga kanske inte är i optimalt format för att hämta jordningsdata. Du kan använda en språkmodell för att skriva om frågan och uppnå bättre resultat. Skriv om en fråga för att hantera följande utmaningar:
- Vaghet
- Nyckelord saknas
- Onödiga ord
- Oklar semantik
Följande fråga använder en språkmodell för att skriva om en fråga. Mer information finns i GITHub-lagringsplats för RAG-experimentacceleratorn.
Rewrite the given query to optimize it for both keyword-based and semantic-similarity search methods. Follow these guidelines:
- Identify the core concepts and intent of the original query.
- Expand the query by including relevant synonyms, related terms, and alternate phrasings.
- Maintain the original meaning and intent of the query.
- Include specific keywords that are likely to appear in relevant documents.
- Incorporate natural language phrasing to capture semantic meaning.
- Include domain-specific terminology if applicable to the query's context.
- Ensure that the rewritten query covers both broad and specific aspects of the topic.
- Remove ambiguous or unnecessary words that might confuse the search.
- Combine all elements into a single, coherent paragraph that flows naturally.
- Aim for a balance between keyword richness and semantic clarity.
Provide the rewritten query as a single paragraph that incorporates various search aspects, such as keyword-focused, semantically focused, or domain-specific aspects.
query: {original_query}
HyDE-tekniken
HyDE är en alternativ informationshämtningsteknik för RAG-lösningar. I stället för att konvertera en fråga till inbäddningar och använda dessa inbäddningar för att hitta de närmaste matchningarna i en vektordatabas använder HyDE en språkmodell för att generera svar från frågan. Dessa svar konverteras till inbäddningar, som används för att hitta de närmaste matchningarna. Den här processen gör det möjligt för HyDE att utföra sökningar med inbäddning och likhet mellan svar och svar.
Kombinera frågeöversättningar till en pipeline
Du kan använda flera frågeöversättningar. Du kan till och med använda alla fyra översättningarna tillsammans. Följande diagram visar ett exempel på hur du kan kombinera dessa översättningar till en pipeline.
Pipelinen har följande steg:
Det valfria steget för frågeutökning mottar den ursprungliga frågan. Det här steget matar ut den ursprungliga frågan och den förhöjda frågan.
Det valfria steget för att bryta ned frågan tar emot den utökade frågan. Det här steget matar ut den ursprungliga frågan, den förhöjda frågan och de uppdelade frågorna.
Varje uppdelad fråga utför tre understeg. När alla de neddelade frågorna går igenom understegen innehåller utdata den ursprungliga frågan, den förhöjda frågan, de uppdelade frågorna och en ackumulerad kontext. Den ackumulerade kontexten inkluderar summan av de översta N- resultaten från alla dekomponerade frågor som går igenom delstegen. Understegen innehåller följande uppgifter:
Den valfria frågeomskrivaren skriver om den uppdelade sökfrågan.
Sökindexet bearbetar den omskrivna frågan eller den ursprungliga frågan. Den kör frågan med hjälp av söktyper, till exempel vektor, fulltext, hybrid eller manuell multipel. Sökindexet kan också använda avancerade frågefunktioner, till exempel HyDE.
Resultaten rangordnas om. De översta N omrankade resultaten läggs till den samlade kontexten.
Den ursprungliga frågan, tillsammans med den ackumulerade kontexten, går igenom samma tre understeg som varje uppdelad fråga. Men bara en sökning går igenom stegen och anroparen får de översta N- resultaten.
Bifoga bilder i frågor
Vissa multimodala modeller, till exempel GPT-4V och GPT-4o, kan tolka bilder. Om du använder dessa modeller kan du undvika att segmentera dina bilder och skicka bilden som en del av uppmaningen till den multimodala modellen. Du bör experimentera för att avgöra hur den här metoden fungerar jämfört med att segmentera bilderna med och utan att skicka extra kontext. Du bör också jämföra kostnadsskillnaden och göra en kostnads-nyttoanalys.
Filtrera frågor
Om du vill filtrera frågor kan du använda fält i sökarkivet som är konfigurerade som filterbara. Överväg att filtrera nyckelord och entiteter för frågor som använder dessa fält för att begränsa resultatet. Använd filtrering för att eliminera irrelevanta data. Hämta endast de data som uppfyller specifika villkor från ett index. Den här metoden förbättrar frågans övergripande prestanda och ger mer relevanta resultat. Utför experiment och tester för att avgöra om filtreringen gynnar ditt scenario. Tänk på faktorer som sökfrågor som inte har nyckelord eller som har felaktiga nyckelord, förkortningar eller akronymer.
Viktfält
I AI Search kan du vikta fält för att påverka rangordningen av resultat baserat på kriterier.
Notera
I det här avsnittet beskrivs funktionerna för AI-sökningsviktning. Om du använder en annan dataplattform kan du undersöka plattformens viktningsfunktioner.
AI Search stöder bedömningsprofiler som innehåller parametrar för viktade fält och funktioner för numeriska data. Bedömningsprofiler gäller endast för icke-vektorfält. Stöd för vektor- och hybridsökning finns i förhandsversion. Du kan skapa flera bedömningsprofiler för ett index och välja att använda en per fråga.
Vilka fält du väger beror på typen av fråga och användningsfallet. Om frågan till exempel är nyckelordscentrerad, till exempel "Var har Microsoft sitt huvudkontor?", vill du ha en bedömningsprofil som viktar entitets- eller nyckelordsfält högre. Du kan använda olika profiler för olika användare, tillåta användare att välja fokus eller välja profiler baserat på programmet.
I produktionssystem bör du endast underhålla profiler som du aktivt använder i produktion.
Använd omrankning
Använd omrankning för att köra en eller flera frågor, aggregera resultaten och rangordna resultaten. Tänk på följande scenarier som drar nytta av att ändra rangordning av sökresultat:
Du har utfört manuella flera sökningaroch vill aggregera resultaten och rangordna dem.
Vektor- och nyckelordssökningar är inte alltid korrekta. Du vill öka antalet dokument som du returnerar från sökningen, vilket kan innehålla giltiga resultat som annars kan ignoreras och använda omrankning för att utvärdera resultaten.
Du kan använda en språkmodell eller korskodare för att utföra omrankning. Vissa plattformar, till exempel AI Search, har egna metoder för att ändra resultat. Du kan utvärdera de här alternativen för dina data för att avgöra vad som fungerar bäst för ditt scenario. Följande avsnitt innehåller information om dessa metoder.
Omrankning av språkmodell
Följande exempel på språkmodellsprompten genererar en ny rangordning av resultaten. Mer information finns i RAG-experimentaccelerator.
Each document in the following list has a number next to it along with a summary of the document. A question is also provided.
Respond with the numbers of the documents that you should consult to answer the question, in order of relevance, and the relevance score as a JSON string based on JSON format as shown in the schema section. The relevance score is a number from 1 to 10 based on how relevant you think the document is to the question. The relevance score can be repetitive. Don't output any other text, explanation, or metadata apart from the JSON string. Just output the JSON string, and strip every other text. Strictly remove the last comma from the nested JSON elements if it's present.
Don't include any documents that aren't relevant to the question. There should be exactly one document element.
Example format:
Document 1:
content of document 1
Document 2:
content of document 2
Document 3:
content of document 3
Document 4:
content of document 4
Document 5:
content of document 5
Document 6:
content of document 6
Question: user-defined question
schema:
{
"documents": {
"document_1": "Relevance",
"document_2": "Relevance"
}
}
Cross-encoder-omrankning
I följande exempel används en korskodare, tillhandahållen av Hugging Face, för att ladda RoBERTa-modellen. Den itererar över varje segment och använder modellen för att beräkna likheter, vilket ger ett värde. Den sorterar resultaten och returnerar de översta N resultat. Mer information finns i GITHub-lagringsplats för RAG-experimentacceleratorn.
from sentence_transformers import CrossEncoder
...
model_name = 'cross-encoder/stsb-roberta-base'
model = CrossEncoder(model_name)
cross_scores_ques = model.predict(
[[user_prompt, item] for item in documents],
apply_softmax=True,
convert_to_numpy=True,
)
top_indices_ques = cross_scores_ques.argsort()[-k:][::-1]
sub_context = []
for idx in list(top_indices_ques):
sub_context.append(documents[idx])
Semantisk rankning
AI Search har en egen funktion som kallas semantisk rangordning. Den här funktionen använder djupinlärningsmodeller som har anpassats från Microsoft Bing som främjar de mest semantiskt relevanta resultaten. Mer information finns i Hur semantisk ranker fungerar.
Överväg andra sökvägledning
Överväg följande allmänna vägledning när du implementerar din söklösning:
Returnera fälten title, summary, source och rå och orensade innehåll från en sökning.
Ta reda på i förväg om du behöver dela upp en fråga i underfrågor.
Kör vektor- och textfrågor i flera fält. När du får en fråga vet du inte om vektorsökning eller textsökning är bättre. Och du vet inte de ideala fält som vektorsökningen eller nyckelordssökningen ska söka efter. Du kan söka i flera fält, eventuellt med flera frågor, ändra rangordning på resultaten och returnera de resultat som har högst poäng.
Filtrera på nyckelords- och entitetsfält för att begränsa resultatet.
Använd nyckelord tillsammans med vektorsökningar. Nyckelorden filtrerar resultatet till en mindre delmängd. Vektorlagret arbetar mot den delmängden för att hitta de bästa matchningarna.
Utvärdera sökresultaten
I förberedelsefasen du samlat in testfrågor tillsammans med testdokumentinformation. Du kan använda följande information som du samlade in i den fasen för att utvärdera sökresultaten:
- Frågan: Exempelfrågan
- Kontexten: Samlingen av all text i testdokumenten som hanterar exempelfrågan
För att utvärdera din söklösning kan du använda följande väletablerade metoder för hämtningsutvärdering:
Precision på K: Procentandelen korrekt identifierade relevanta objekt av det totala antalet sökresultat. Det här måttet fokuserar på noggrannheten i sökresultaten.
Recall at K: Procentandelen relevanta objekt i det översta K av alla möjliga relevanta objekt. Det här måttet fokuserar på sökresultattäckning.
Mean Reciprocal Rank (MRR): Medelvärdet av de ömsesidiga rangordningarna för det första relevanta svaret i dina rankade sökresultat. Det här måttet fokuserar på var det första relevanta resultatet inträffar i sökresultaten.
Du bör testa positiva och negativa exempel. För de positiva exemplen vill du att måtten ska vara så nära 1 som möjligt. För de negativa exemplen, där dina data inte ska kunna hantera frågorna, vill du att måtten ska vara så nära 0 som möjligt. Du bör testa alla dina testfrågor. Genomsnittligt antal positiva frågeresultat och negativa frågeresultat för att förstå hur sökresultaten presterar aggregerat.