Sdílet prostřednictvím


Vyhledávání informací

V předchozím kroku řešení Retrieval-Augmented Generation (RAG) jste vygenerovali embeddingy pro vaše úseky. V tomto kroku vygenerujete index v vektorové databázi a experimentujete, abyste určili optimální hledání. Tento článek popisuje možnosti konfigurace indexu vyhledávání, typy hledání a strategie opětovného řazení.

Tento článek je součástí série. Přečtěte si úvod.

Konfigurace indexu vyhledávání

Poznámka

Tato část popisuje konkrétní doporučení pro Azure AI Search. Pokud používáte jiné úložiště, projděte si příslušnou dokumentaci a vyhledejte konfigurace klíčů pro danou službu.

Index vyhledávání ve vašem úložišti obsahuje sloupec pro každé pole v datech. Úložiště pro vyhledávání obecně podporují nevektorové datové typy, jako je řetězec, logická hodnota, celé číslo, jednoduchá a dvojitá přesnost a datum a čas. Podporují také kolekce, jako jsou kolekce s jedním typem a datové typy vektorů . Pro každý sloupec musíte nakonfigurovat informace, jako je datový typ a jestli je pole filtrovatelné, zobrazitelné nebo prohledávatelné.

Zvažte následující konfigurace vektorového vyhledávání, které můžete použít u vektorových polí:

  • Vektorový vyhledávací algoritmus: Algoritmus vektorového vyhledávání hledá relativní shody. AI Search má možnost využití algoritmu hrubé síly, označovaného jako kompletní k-nejbližší sousedé (KNN), která prohledává celý vektorový prostor. Má také výkonnější algoritmus, který se nazývá Hierarchical Navigable Small World (HNSW), která provádí přibližný nejbližší soused (ANN) hledání.

  • metrika podobnosti: Algoritmus k výpočtu blízkosti používá metriku podobnosti . Mezi typy metrik ve službě AI Search patří kosinus, tečkovaný produkt a Euclidean. Pokud používáte modely vkládání služby Azure OpenAI, zvolte kosinus.

  • Parametr efConstruction: Tento parametr se používá při vytváření indexu HNSW. Určuje počet nejbližších sousedů, které jsou při indexování připojeny k vektoru. Větší efConstruction hodnota vede k lepšímu indexu kvality než menší číslo. Větší hodnota ale vyžaduje více času, úložiště a výpočetních prostředků. U velkého počtu bloků dat nastavte hodnotu efConstruction vyšší. U nízkého počtu bloků dat nastavte nižší hodnotu. Pokud chcete určit optimální hodnotu, experimentujte s daty a očekávanými dotazy.

  • Parametr efSearch: Tento parametr se používá během dotazu k nastavení počtu nejbližších sousedů nebo podobných bloků dat, které vyhledávání používá.

  • Parametr m: Tento parametr je obousměrný počet odkazů. Rozsah je 4 až 10. Nižší čísla produkují ve výsledcích méně šumu.

Ve službě AI Search jsou konfigurace vektorů zapouzdřené v konfiguraci vectorSearch. Při konfiguraci vektorových sloupců odkazujete na odpovídající konfiguraci pro daný vektorový sloupec a nastavíte počet dimenzí. Atribut dimenzí vektorového sloupce představuje počet dimenzí, které vkládající model vygeneruje. Například model optimalizovaný pro efektivní ukládání, text-embedding-3-small, generuje 1 536 dimenzí.

Volba přístupu pro vyhledávání

Při spouštění dotazů z orchestrátoru promptů proti vašemu vyhledávacímu úložišti zvažte následující faktory:

  • Typ hledání, který chcete provést, například vektor, klíčové slovo nebo hybridní

  • Bez ohledu na to, jestli chcete dotazovat na jeden nebo více sloupců

  • Určuje, jestli chcete ručně spouštět více dotazů, například dotaz klíčového slova a vektorové vyhledávání.

  • Jestli potřebujete rozdělit dotaz do poddotazů

  • Jestli byste v dotazech měli použít filtrování

Orchestrátor výzvy může použít statický přístup nebo dynamický přístup, který kombinuje přístupy na základě kontextových vodítek z výzvy. Následující části řeší tyto možnosti, které vám pomůžou najít správný přístup pro vaši úlohu.

Typy hledání

Vyhledávací platformy obecně podporují fulltextové a vektorové vyhledávání. Některé platformy, jako je AI Search, podporují hybridní vyhledávání.

Vektorové vyhledávání porovnává podobnost mezi vektorizovaným dotazem (prompt) a vektorovými poli. Další informace najdete v tématu Volba služby Azure pro vektorové vyhledávání.

Důležitý

Před vložením dotazu byste měli provést stejné operace čištění , které jste provedli u bloků dat. Například, pokud jste všechna slova ve vloženém bloku psali malými písmeny, měli byste v dotazu před vložením všechna slova také psát malými písmeny.

Poznámka

Ve stejném dotazu můžete provést vektorové vyhledávání s více vektorovými poli. V AI Search se tento postup považuje za hybridní vyhledávání. Další informace najdete v tématu hybridní vyhledávání.

Následující ukázkový kód provede vektorové vyhledávání v poli 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"],
)

Kód, který vkládá dotaz, jej nejprve předzpracovává. Tento předzpracování by měl být stejný kód, který před vložením předzpracuje bloky dat. Musíte použít stejný model vkládání, který vložil bloky dat.

fulltextová vyhledávání odpovídají prostému textu uloženému v indexu. Běžně se používá extrakce klíčových slov z dotazu a použití těchto extrahovaných klíčových slov v fulltextovém vyhledávání v jednom nebo více indexovaných sloupcích. Fulltextové vyhledávání můžete nakonfigurovat tak, aby vracely shody, pokud se shodují nějaké termíny nebo všechny termíny.

Experimentujte, abyste určili, na kterých polích spustit fulltextové hledání. Jak je popsáno v článku o fázi rozšiřování , měli byste pro fulltextová vyhledávání použít pole metadat klíčových slov a entit ve scénářích, kde se obsah podobá sémantickému významu, ale entity nebo klíčová slova se liší. Mezi další běžná pole, která je potřeba zvážit pro fulltextové vyhledávání, patří název, souhrn a část textu.

Následující ukázkový kód provede fulltextové vyhledávání podle názvu, obsahu a souhrnných polí.

formatted_search_results = []

results = client.search(
    search_text=query,
    top=retrieve_num_of_documents,
    select=["title", "content", "summary"],
)

formatted_search_results = format_results(results)

AI Search podporuje hybridní dotazy, které obsahují jedno nebo více hledání textu a jedno nebo více vektorových hledání. Platforma provádí každý dotaz, získá přechodné výsledky, přeřadí výsledky pomocí reciproční fúznía vrátí nejlepší N výsledků.

Následující ukázkový kód provede fulltextové vyhledávání podle názvu, obsahu a souhrnných polí. Provádí také vektorové vyhledávání v polích contentVector a questionVector. AI Search spouští všechny dotazy paralelně, přeuspořádá výsledky a vrátí nejlepší 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"],
)

Ruční zadání více dotazů

Můžete spustit více dotazů, například vektorové vyhledávání a fulltextové vyhledávání klíčových slov, ručně. Výsledky agregujete, přerovnat výsledky ručně a zobrazíte nejlepší výsledky. Zvažte následující případy použití pro ručně prováděné vícečetné dotazy:

  • Používáte vyhledávací platformu, která nepodporuje hybridní vyhledávání. K provedení vlastního hybridního vyhledávání použijete více ručních dotazů.

  • Chcete spouštět fulltextová vyhledávání v různých dotazech. Můžete například extrahovat klíčová slova z dotazu a spustit fulltextové vyhledávání v poli metadat klíčových slov. Pak můžete extrahovat entity a spustit dotaz na pole metadat entit.

  • Chcete řídit proces opětovného řazení.

  • Dotaz vyžaduje spuštění rozdělených poddotazů k načtení podkladových dat z více zdrojů.

Překlad dotazů

Překlad dotazů je volitelný krok ve fázi načítání informací řešení RAG. Tento krok transformuje nebo přeloží dotaz do optimalizované podoby, aby získal lepší výsledky. Metody překladu dotazů zahrnují rozšíření, rozklad, přepisování a hypotetické vkládání dokumentů (HyDE).

Rozšíření dotazů

Rozšíření dotazů je krok překladu, který zjednodušuje dotaz, zvyšuje jeho použitelnost a vylepšuje kontext. Pokud je dotaz malý nebo vágní, měli byste zvážit rozšíření. Představte si například dotaz "Porovnat příjmy Microsoftu". Tento dotaz neobsahuje časové rámce ani časové jednotky pro porovnání a určuje pouze příjmy. Představte si rozšířenou verzi dotazu, například "Porovnání výnosů a výnosů Microsoftu v aktuálním roce a v minulém roce po čtvrtletích". Nový dotaz je jasný a specifický.

Když dotaz rozšíříte, zachováte původní dotaz, ale přidáte další kontext. Neodebívejte ani neměníte původní dotaz a neměňte povahu dotazu.

K rozšíření dotazu můžete použít jazykový model. Nemůžete ale rozšířit všechny dotazy. Pokud máte kontext, můžete ho předat do jazykového modelu a rozšířit tak dotaz. Pokud nemáte kontext, musíte určit, jestli váš jazykový model obsahuje informace, které můžete použít k rozšíření dotazu. Pokud například používáte velký jazykový model, například model GPT, můžete určit, jestli jsou informace o dotazu snadno dostupné na internetu. Pokud ano, můžete tento model použít k rozšíření dotazu. Jinak byste dotaz neměli rozšiřovat.

V následující výzvě jazykový model rozšíří dotaz. Tato výzva obsahuje příklady, kdy má dotaz kontext a ne. Další informace najdete v repozitáři RAG Experiment Accelerator na GitHubu .

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:

Rozklad

Složité dotazy vyžadují k vytvoření modelu více než jednu kolekci dat. Například dotaz "Jak fungují elektrické automobily a jak se porovnávají s vozidly s vnitřním spalovacím motorem (ICE)?" pravděpodobně vyžaduje získání dat z více zdrojů. Jeden zdroj může popsat, jak fungují elektrická vozidla, kde je jiný porovnává s vozidly ICE.

Rozklad je proces rozdělení složitého dotazu na několik menších a jednodušších poddotazů. Každý z rozložených dotazů spustíte nezávisle a agregujete nejvyšší výsledky všech dekompilovaných dotazů jako kumulovaný kontext. Potom spustíte původní dotaz, který předá kumulovaný kontext do jazykového modelu.

Před spuštěním jakéhokoli hledání byste měli určit, jestli dotaz vyžaduje více hledání. Pokud potřebujete více poddotazů, můžete spustit více ručních dotazů pro všechny dotazy. Pomocí jazykového modelu určete, jestli se doporučuje více poddotazů.

Následující výzva kategorizuje dotaz jako jednoduchý nebo složitý. Další informace najdete v úložišti RAG Experiment Accelerator na GitHubu .

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"
}

K dekompilování složitého dotazu můžete použít také jazykový model. Následující výzva rozloží složitý dotaz. Další informace najdete v tématu úložiště RAG Experiment Accelerator na GitHubu.

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}

Přepisování

Vstupní dotaz nemusí být v optimální podobě pro načtení podkladových dat. Jazykový model můžete použít k přepsání dotazu a dosažení lepších výsledků. Přepište dotaz, který řeší následující výzvy:

  • Nejasnost
  • Chybějící klíčová slova
  • Nepotřebná slova
  • Nejasná sémantika

Následující výzva používá jazykový model k přepsání dotazu. Další informace najdete v úložišti RAG Experiment Accelerator na GitHubu.

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}

Technika HyDE

HyDE je alternativní technika načítání informací pro řešení RAG. Místo převodu dotazu na vkládání a použití těchto vkládání k vyhledání nejbližších shod v vektorové databázi používá HyDE jazykový model k vygenerování odpovědí z dotazu. Tyto odpovědi se převedou na vkládání, které slouží k vyhledání nejbližších shod. Tento proces umožňuje HyDE provádět vyhledávání podle podobnosti vložených reprezentací odpovědí.

Kombinování překladů dotazů do zpracovatelského řetězce

Můžete použít více překladů dotazů. Můžete dokonce použít všechny čtyři tyto překlady ve spojení. Následující diagram znázorňuje příklad, jak tyto překlady zkombinovat do pipeline.

diagram znázorňující kanál RAG s transformátory dotazů

Proces má následující kroky:

  1. Krok rozšíření dotazu, který je volitelný, obdrží původní dotaz. Tento krok vypíše původní dotaz a rozšířený dotaz.

  2. Volitelný krok rozkladu dotazu obdrží rozšířený dotaz. Tento krok vypíše původní dotaz, rozšířený dotaz a rozložené dotazy.

  3. Každý rozložený dotaz provádí tři dílčí kroky. Jakmile všechny rozložené dotazy procházejí dílčími kroky, výstup zahrnuje původní dotaz, rozšířený dotaz, dekompilované dotazy a kumulovaný kontext. Kumulovaný kontext zahrnuje agregaci nejvyšších N výsledků ze všech dekompilovaných dotazů, které procházejí dílčími kroky. Mezi dílčí kroky patří následující úlohy:

    1. Volitelný autor dotazu přepíše dekompresovaný dotaz.

    2. Index vyhledávání zpracovává přepsaný dotaz nebo původní dotaz. Spustí dotaz pomocí typů hledání, jako jsou vektorové, fulltextové, hybridní nebo ruční vícečetné. Index vyhledávání může také používat pokročilé možnosti dotazů, jako je HyDE.

    3. Výsledky se přeřadí. Nejlepší výsledky N znovu seřazené se přidají do kumulovaného kontextu.

  4. Původní dotaz spolu s kumulovaným kontextem prochází stejnými třemi dílčími kroky jako každý rozložený dotaz. Pouze jeden dotaz však projde kroky a volající obdrží nejlepší výsledky N.

Předávání obrázků v dotazech

Některé multimodální modely, například GPT-4V a GPT-4o, mohou interpretovat obrázky. Pokud tyto modely používáte, můžete se vyhnout blokům obrázků a předat ho jako součást výzvy multimodálnímu modelu. Měli byste experimentovat, abyste zjistili, jak tento přístup funguje v porovnání s blokováním obrázků a bez předání dalšího kontextu. Měli byste také porovnat rozdíl nákladů a provést analýzu nákladů a přínosů.

Filtrování dotazů

K filtrování dotazů můžete použít pole v úložišti vyhledávání, která jsou nakonfigurovaná jako filtrovatelná. Zvažte filtrování klíčových slov a entit pro dotazy, které používají tato pole, aby se zúžily výsledky. Filtrování použijte k odstranění irelevantních dat. Načtěte pouze data, která splňují konkrétní podmínky z indexu. Tento postup zlepšuje celkový výkon dotazu a poskytuje relevantnější výsledky. Pokud chcete zjistit, jestli filtrování bude pro váš scénář přínosné, proveďte experimenty a testy. Zvažte faktory, jako jsou dotazy, které neobsahují klíčová slova nebo mají nepřesná klíčová slova, zkratky nebo akronymy.

Pole hmotností

Ve vyhledávání AI můžete pole váhovat, aby ovlivnila řazení výsledků na základě kritérií.

Poznámka

Tato část popisuje možnosti váhy vyhledávání AI. Pokud používáte jinou datovou platformu, prozkoumejte možnosti vážení této platformy.

AI Search podporuje bodovací profily, které obsahují parametry pro vážená pole a funkce pro číselná data. Profily bodování se vztahují pouze na nevectorová pole. Podpora vektoru a hybridního vyhledávání je ve verzi Preview. V indexu můžete vytvořit více hodnoticího profilu a volitelně můžete použít jeden z profilů pro jednotlivé dotazy.

Pole, která vážíte, závisí na typu dotazu a případu použití. Pokud je například dotaz zaměřený na klíčové slovo, například "Where is Microsoft headquartered?", chcete profil bodování, který váží entity nebo pole klíčových slov vyšší. Pro různé uživatele můžete použít různé profily, umožnit uživatelům zvolit si jejich fokus nebo zvolit profily na základě aplikace.

V produkčních systémech byste měli udržovat pouze profily, které aktivně používáte v produkčním prostředí.

Použití opětovného pořadí

Pomocí opětovného pořadí můžete spouštět jeden nebo více dotazů, agregovat výsledky a výsledky seřadit. Vezměte v úvahu následující scénáře, které mají výhodu při opětovném řazení výsledků hledání:

  • Provedli jste ručním několikanásobným vyhledáváníma chcete agregovat výsledky a seřadit je.

  • Hledání vektorů a klíčových slov není vždy přesné. Chcete zvýšit počet dokumentů, které se vrací z vyhledávání, což může zahrnovat platné výsledky, které by jinak mohly být ignorovány, a použít přeřazení k vyhodnocení těchto výsledků.

K opětovnému řazení můžete použít jazykový model nebo křížový kodér. Některé platformy, jako je AI Search, mají proprietární metody pro opětovné řazení výsledků. Tyto možnosti můžete vyhodnotit pro svá data a určit, co je pro váš scénář nejvhodnější. Následující části obsahují podrobnosti o těchto metodách.

Změna pořadí jazykových modelů

Následující ukázkový jazykový modelový prompt přeuspořádá výsledky. Další informace najdete v tématu akcelerátor experimentu RAG.

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"
    }
}

Změna pořadí napříč kodéry

Následující příklad používá křížový kodér poskytnutý Hugging Face k načtení modelu RoBERTa. Iteruje přes každý blok dat a používá model k výpočtu podobnosti, která poskytuje hodnotu. Seřadí výsledky a vrátí nejlepší N výsledků. Další informace najdete v úložišti na GitHubu RAG Experiment Accelerator .

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])

Sémantické řazení

AI Search má vlastní funkci s názvem sémantické hodnocení . Tato funkce používá modely hlubokého učení přizpůsobené Microsoft Bingu, které propagují nejrelevantní výsledky. Další informace naleznete v tématu Jak sémantický ranker funguje.

Zvažte další doprovodné materiály k hledání

Při implementaci řešení vyhledávání zvažte následující obecné pokyny:

  • Vrátí pole s názvem, souhrnem, zdrojem a nezpracovaným nečistým obsahem z hledání.

  • Určete předem, jestli potřebujete rozdělit dotaz do poddotazů.

  • Spouštění vektorových a textových dotazů na více polí Když dostanete dotaz, nevíte, jestli je lepší hledání vektorů nebo hledání textu. A neznáte ideální pole, která by měla hledat vektorové hledání nebo hledání klíčových slov. Můžete hledat v několika polích, potenciálně s více dotazy, znovu seřadit výsledky a vrátit výsledky, které mají nejvyšší skóre.

  • Vyfiltrujte pole klíčových slov a entit, abyste zúžili výsledky.

  • Používejte klíčová slova spolu s vektorovými vyhledáváními. Klíčová slova filtrují výsledky na menší podmnožinu. Úložiště vektorů pracuje s danou podmnožinou a hledá nejlepší shody.

Vyhodnocení výsledků hledání

Ve fázi přípravy jste shromáždili testovací dotazy spolu s informacemi o testovacím dokumentu. K vyhodnocení výsledků hledání můžete použít následující informace, které jste v této fázi shromáždili:

  • Dotaz: Ukázkový dotaz
  • Kontext: Kolekce všech textů v testovacích dokumentech, které řeší ukázkový dotaz

K vyhodnocení vašeho vyhledávacího řešení můžete použít následující dobře zavedené metody vyhodnocení načítání:

  • Přesnost v K: Procento správně identifikovaných relevantních položek z celkového počtu výsledků hledání. Tato metrika se zaměřuje na přesnost výsledků hledání.

  • Odvolání na K: Procento relevantních položek v horní K z celkového možného relativního počtu položek. Tato metrika se zaměřuje na pokrytí výsledků hledání.

  • střední reciproční pořadí (MRR): průměr recipročního pořadí první relevantní odpovědi ve výsledcích hledání. Tato metrika se zaměřuje na to, kde se ve výsledcích hledání vyskytuje první relevantní výsledek.

Měli byste testovat pozitivní a negativní příklady. V případě kladných příkladů chcete, aby metriky byly co nejblíže 1. V případě negativních příkladů, kdy by vaše data neměla být schopná řešit dotazy, chcete, aby metriky byly co nejblíže 0. Měli byste otestovat všechny testovací dotazy. Zprůměrujte kladné výsledky dotazu a záporné výsledky dotazu, abyste pochopili, jak výsledky hledání fungují v agregaci.

Další krok