Condividi tramite


Recupero dell’informazione

Nel passaggio precedente della soluzione Retrieval-Augmented Generation (RAG) hai generato gli embedding per i tuoi segmenti. In questo passaggio viene generato l'indice nel database vettoriale ed è possibile sperimentare per determinare le ricerche ottimali. Questo articolo illustra le opzioni di configurazione per un indice di ricerca, i tipi di ricerche e le strategie di reranking.

Questo articolo fa parte di una serie. Leggi l'introduzione .

Configurare l'indice di ricerca

Nota

Questa sezione descrive raccomandazioni specifiche per Ricerca di intelligenza artificiale di Azure. Se utilizzi un negozio diverso, esamina la documentazione appropriata per trovare le configurazioni chiave per quel servizio.

L'indice di ricerca nel negozio include una colonna per ogni campo nel dato. Gli archivi di ricerca supportano solitamente tipi di dati non vettoriali, ad esempio string, boolean, integer, single, double e datetime. Supportano anche raccolte, ad esempio raccolte a tipo singolo e tipi di dati vettoriali . Per ogni colonna, è necessario configurare le informazioni, ad esempio il tipo di dati e se il campo è filtrabile, recuperabile o ricercabile.

Si considerino le seguenti configurazioni di ricerca vettoriale che è possibile applicare ai campi vettoriali:

  • Algoritmo di ricerca vettoriale: L'algoritmo di ricerca vettoriale cerca corrispondenze relative. La ricerca AI ha un'opzione di algoritmo di forza bruta, denominata esaustiva k-nearest neighbors (KNN), che scansiona l'intero spazio vettoriale. Dispone anche di un'opzione di algoritmo più efficiente, denominata HNSW (Hierarchical Navigable Small World), che esegue una ricerca vicina più vicina (ANN) approssimativamente più vicina.

  • metrica di somiglianza: L'algoritmo usa una metrica di somiglianza per calcolare la prossimità. I tipi di metriche nella ricerca di intelligenza artificiale includono coseno, prodotto punto ed euclideo. Se si usano i modelli di embedding del servizio Azure OpenAI, scegli coseno.

  • Parametro efConstruction: Questo parametro viene usato durante la costruzione di un indice HNSW. Determina il numero di vicini più vicini connessi a un vettore durante l'indicizzazione. Un valore efConstruction maggiore restituisce un indice di qualità migliore rispetto a un numero minore. Tuttavia, un valore più grande richiede più tempo, archiviazione e calcolo. Per un numero elevato di blocchi, impostare il valore efConstruction più alto. Per un numero basso di blocchi, impostare il valore inferiore. Per determinare il valore ottimale, provare i dati e le query previste.

  • Il parametro efSearch: Questo parametro viene usato durante la query per impostare il numero di vicini più vicini o blocchi simili usati dalla ricerca.

  • Il parametro m: Questo parametro è il conteggio dei collegamenti bidirezionali. L'intervallo è compreso tra 4 e 10. I numeri inferiori restituiscono meno rumore nei risultati.

In Ricerca di intelligenza artificiale le configurazioni vettoriali vengono incapsulate in una configurazione di vectorSearch. Quando si configurano le colonne vettoriali, si fa riferimento alla configurazione appropriata per tale colonna vettoriale e si imposta il numero di dimensioni. L'attributo dimensioni della colonna vettoriale rappresenta il numero di dimensioni generate dal modello di incorporamento. Ad esempio, il modello text-embedding-3-small ottimizzato per l'archiviazione genera 1,536 dimensioni.

Scegliere l'approccio di ricerca

Quando si eseguono query dal gestore di orchestrazione del prompt nell'archivio di ricerca, tenere in considerazione i seguenti fattori:

  • Tipo di ricerca da eseguire, ad esempio vettore, parola chiave o ibrido

  • Se desideri eseguire una query su una o più colonne

  • Se si desidera eseguire manualmente più query, ad esempio una query con parole chiave e una ricerca vettoriale

  • Se è necessario suddividere la query in sottoquery

  • Indica se usare il filtro nelle query

L'orchestratore di prompt potrebbe utilizzare un approccio statico o un approccio dinamico che combina vari metodi basati su indizi contestuali dal prompt. Le sezioni seguenti illustrano queste opzioni per trovare l'approccio appropriato per il carico di lavoro.

Tipi di ricerca

Le piattaforme di ricerca supportano in genere ricerche full-text e vettoriali. Alcune piattaforme, ad esempio Ricerca di intelligenza artificiale, supportano le ricerche ibride.

Ricerche vettoriali confronta la somiglianza tra la query vettorializzata (prompt) e i campi vettoriali. Per altre informazioni, vedere Scegliere un servizio di Azure per le ricerche vettoriali.

Importante

Prima di incorporare la query, è necessario eseguire le stesse operazioni di pulizia eseguite su blocchi. Ad esempio, se hai messo in minuscolo ogni parola nel blocco incorporato, dovresti mettere in minuscolo ogni parola nella query prima dell'incorporamento.

Nota

È possibile eseguire una ricerca vettoriale su più campi vettoriali nella stessa query. In Ricerca di intelligenza artificiale questa procedura è considerata una ricerca ibrida. Per ulteriori informazioni, vedere Ricerca Ibrida.

Il codice di esempio seguente esegue una ricerca vettoriale sul campo 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"],
)

Il codice che incorpora la query esegue prima di tutto la pre-elaborazione della query. Tale pre-elaborazione deve essere lo stesso codice che pre-elabora i blocchi prima dell'incorporamento. È necessario usare lo stesso modello di incorporamento che ha incorporato i blocchi.

Le ricerche a testo completo corrispondono a testo semplice archiviato in un indice. È prassi comune estrarre parole chiave da una query e usare tali parole chiave estratte in una ricerca full-text su una o più colonne indicizzate. È possibile configurare le ricerche full-text per restituire corrispondenze se sono presenti termini o tutti i termini corrispondenti.

Sperimentare per determinare i campi in cui eseguire ricerche a testo completo. Come descritto nell'articolo fase di arricchimento, è consigliabile usare campi di metadati di parole chiave ed entità per ricerche full-text in scenari in cui il contenuto ha un significato semantico simile, ma le entità o le parole chiave differiscono. Altri campi comuni da considerare per la ricerca full-text includono titolo, riepilogo e testo in blocchi.

Il codice di esempio seguente esegue una ricerca full-text sui campi titolo, contenuto e riepilogo.

formatted_search_results = []

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

formatted_search_results = format_results(results)

La AI Search supporta query ibride che contengono una o più ricerche di testo e una o più ricerche con vettori. La piattaforma esegue ogni query, ottiene i risultati intermedi, classifica i risultati usando Reciprocal Rank Fusione restituisce i primi N risultati.

Il codice di esempio seguente esegue una ricerca full-text sui campi titolo, contenuto e riepilogo. Esegue anche ricerche vettoriali sui campi contentVector e questionVector. La ricerca con intelligenza artificiale viene eseguita in parallelo per tutte le query, riordina i risultati e restituisce i primi 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"],
)

Eseguire manualmente più query

È possibile eseguire più query, ad esempio una ricerca vettoriale e una ricerca full-text con parole chiave, manualmente. Si aggregano i risultati, riesetuire i risultati manualmente e restituire i risultati principali. Prendi in considerazione i seguenti casi d'uso per più query manuali:

  • Si usa una piattaforma di ricerca che non supporta le ricerche ibride. Usi query multiple manuali per eseguire la tua propria ricerca ibrida.

  • Si vogliono eseguire ricerche testuali complete su diverse query. Ad esempio, è possibile estrarre parole chiave dalla query ed eseguire una ricerca full-text sul campo dei metadati delle parole chiave. È quindi possibile estrarre le entità ed eseguire una query sul campo dei metadati delle entità.

  • Vuoi controllare il processo di riorganizzazione.

  • La query richiede l'esecuzione di sottoquery scomposte per recuperare i dati di base da più origini.

Traduzione di query

La traduzione di query è un passaggio facoltativo nella fase di recupero delle informazioni di una soluzione RAG. Questo passaggio trasforma o converte una query in un modulo ottimizzato per recuperare risultati migliori. I metodi di traduzione delle query includono l'aumento, la scomposizione, la riscrittura e gli incorporamenti ipotetici dei documenti (HyDE).

Aumento delle query

L'aumento delle query è un passaggio di traduzione che rende la query più semplice e utilizzabile e migliora il contesto. È consigliabile valutare l'aumento se la query è piccola o vaga. Si consideri ad esempio la query "Confrontare gli utili di Microsoft". La query non include intervalli di tempo o unità temporali da confrontare e specifica solo gli utili. Si consideri una versione aumentata della query, ad esempio "Confrontare gli utili e i ricavi di Microsoft nell'anno corrente rispetto all'ultimo anno per trimestre". La nuova query è chiara e specifica.

Quando si amplia una query, si mantiene la query originale ma si aggiunge altro contesto. Non rimuovere o modificare la query originale e non modificare la natura della query.

È possibile utilizzare un modello linguistico per incrementare una query. Ma non è possibile aumentare tutte le query. Se si dispone di contesto, è possibile passarlo al modello linguistico per aumentare la query. Se non si dispone di contesto, è necessario determinare se il modello linguistico contiene informazioni che è possibile usare per aumentare la query. Ad esempio, se si usa un modello linguistico di grandi dimensioni, ad esempio un modello GPT, è possibile determinare se le informazioni sulla query sono facilmente disponibili su Internet. In tal caso, è possibile usare il modello per aumentare la query. In caso contrario, non è consigliabile aumentare la query.

Nel prompt seguente, un modello linguistico arricchisce una query. Questo prompt includa esempi per quando la query ha contesto e quando no. Per altre informazioni, vedere repository GitHub dell'acceleratore di esperimenti RAG.

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:

Decomposizione

Le query complesse richiedono più di una raccolta di dati per ancorare il modello. Ad esempio, la query "Come funzionano le automobili elettriche e come si confrontano con veicoli a combustione interna (ICE)?" richiede probabilmente dati di base da più origini. Una fonte potrebbe descrivere il funzionamento delle automobili elettriche, dove un'altra li confronta con i veicoli ICE.

La scomposizione è il processo di suddivisione di una query complessa in più sottoquery più piccole e più semplici. Ogni query scomposta viene eseguita in modo indipendente, aggregando i risultati principali di tutte le query scomposte come contesto accumulato. Si esegue quindi la query originale, che passa il contesto accumulato al modello linguistico.

È necessario determinare se la query richiede più ricerche prima di eseguire ricerche. Se sono necessarie più sottoquery, è possibile eseguire query multiple manualmente per ciascuna delle query. Usare un modello linguistico per determinare se risultano consigliate più sottoquery.

Il prompt seguente classifica una query come semplice o complessa. Per ulteriori informazioni, consulta il repository GitHub dell'acceleratore di esperimenti RAG .

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

È anche possibile usare un modello linguistico per scomporre una query complessa. Il prompt seguente scompone una query complessa. Per altre informazioni, vedere repository GitHub dell'acceleratore di esperimenti RAG.

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}

Riscrittura

Una query di input potrebbe non essere nel formato ottimale per recuperare i dati fondamentali. È possibile usare un modello linguistico per riscrivere la query e ottenere risultati migliori. Riscrivere una query per risolvere i problemi seguenti:

  • Vaghezza
  • Parole chiave mancanti
  • Parole non necessarie
  • Semantica non chiara

Il prompt seguente usa un modello linguistico per riscrivere una query. Per ulteriori informazioni, vedere il repository GitHub dell'Acceleratore di Esperimenti RAG .

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}

La tecnica HyDE

HyDE è una tecnica alternativa di recupero delle informazioni per le soluzioni RAG. Anziché convertire una query in incorporamenti e usare tali incorporamenti per trovare le corrispondenze più vicine in un database vettoriale, HyDE usa un modello linguistico per generare risposte dalla query. Queste risposte vengono convertite in embedding e usate per trovare le corrispondenze più vicine. Questo processo consente a HyDE di eseguire ricerche di incorporamento di risposte-similitudini.

Combinare le traduzioni delle query in una pipeline

È possibile usare più traduzioni di query. È anche possibile usare tutte e quattro queste traduzioni insieme. Il diagramma seguente illustra un esempio di come combinare queste traduzioni in una pipeline.

Diagramma che mostra una pipeline RAG con trasformatori di interrogazioni.

La pipeline prevede i passaggi seguenti:

  1. Il passaggio facoltativo di aumento delle query riceve la query originale. Questo passaggio restituisce la query originale e la query aumentata.

  2. Il passaggio facoltativo di scomposizione della query riceve la query aumentata. Questo passaggio restituisce la query originale, la query aumentata e le query scomposte.

  3. Ogni query scomposta esegue tre sottopassaggi. Dopo che tutte le query scomposte passano attraverso i sottopassaggi, l'output include la query originale, la query aumentata, le query scomposte e un contesto accumulato. Il contesto accumulato include l'aggregazione dei migliori N risultati di tutte le query scomposte che passano attraverso i sottopassaggi. I passaggi secondari includono le attività seguenti:

    1. Il riscrittore di query facoltativo riscrive la query scomposta.

    2. L'indice di ricerca elabora la query riscritta o la query originale. Esegue la query utilizzando tipi di ricerca, come vettoriale, testo completo, ibrido o manuale multipla. L'indice di ricerca può anche usare funzionalità di query avanzate, ad esempio HyDE.

    3. I risultati vengono riclassificati. I primi N nuovi risultati classificati vengono aggiunti al contesto accumulato.

  4. La query originale, insieme al contesto accumulato, attraversa gli stessi tre subpassaggi di ogni query scomposta. Tuttavia, solo una query passa attraverso i passaggi e il chiamante riceve i primi N risultati.

Passare immagini nelle query

Alcuni modellimultidimensionali, ad esempio GPT-4V e GPT-4o, possono interpretare le immagini. Se si usano questi modelli, è possibile evitare la suddivisione in blocchi delle immagini e passare l'immagine come parte della richiesta al modello multifunzionale. È consigliabile sperimentare per determinare il modo in cui questo approccio viene eseguito rispetto alla suddivisione in blocchi delle immagini con e senza passare un contesto aggiuntivo. È anche consigliabile confrontare la differenza di costo ed eseguire un'analisi dei costi-benefit.

Filtrare query

Per filtrare le query, è possibile usare i campi nell'archivio di ricerca configurati come filtrabili. Valutare la possibilità di filtrare parole chiave ed entità per le query che usano tali campi per limitare il risultato. Usare il filtro per eliminare i dati irrilevanti. Recuperare solo i dati che soddisfano condizioni specifiche da un indice. Questa procedura migliora le prestazioni complessive della query e fornisce risultati più pertinenti. Per determinare se il filtro offre vantaggi allo scenario, eseguire esperimenti e test. Si considerino fattori come le query che non hanno parole chiave o contengono parole chiave, abbreviazioni o acronimi imprecisi.

Campi di ponderazione

In Ricerca di intelligenza artificiale è possibile ponderare i campi per influenzare la classificazione dei risultati in base ai criteri.

Nota

Questa sezione descrive le funzionalità di ponderazione della ricerca di intelligenza artificiale. Se si usa una piattaforma dati diversa, cercare le funzionalità di ponderazione di tale piattaforma.

Ricerca di intelligenza artificiale supporta i profili di assegnazione dei punteggi che contengono parametri per i campi ponderati e le funzioni per i dati numerici. I profili di punteggio si applicano solo ai campi non vettoriali. Il supporto per la ricerca ibrida e vettoriale è disponibile in anteprima. È possibile creare più profili di punteggio in un indice e, facoltativamente, sceglierne uno per ogni query.

I campi che si ponderano dipendono dal tipo di query e dal caso d'uso. Ad esempio, se la query è incentrata sulle parole chiave, ad esempio "Dove si trova la sede centrale di Microsoft?", si vuole un profilo di punteggio che pondera i campi di entità o parole chiave più alti. È possibile utilizzare profili diversi per utenti diversi, consentire agli utenti di scegliere il loro focus o selezionare i profili in base all'applicazione.

Nei sistemi di produzione è consigliabile gestire solo i profili usati attivamente nell'ambiente di produzione.

Usare il riordinamento

Usare reranking per eseguire una o più query, aggregare i risultati e classificarli. Si considerino gli scenari seguenti che traggono vantaggio dal reranking dei risultati della ricerca:

  • Hai eseguito più ricerche manualie vuoi aggregare i risultati e classificarli.

  • Le ricerche vettoriali e di parole chiave non sono sempre accurate. Si vuole aumentare il conteggio dei documenti restituiti dalla ricerca, che può includere risultati validi che potrebbero altrimenti essere ignorati e usare il reranking per valutare i risultati.You want to increase the count of documents that you return from your search, that can include valid results that might be ignored, and use reranking to evaluate the results.

È possibile usare un modello linguistico o un codificatore incrociato per eseguire il reranking. Alcune piattaforme, come AI Search, hanno metodi proprietari per riordinare i risultati. È possibile valutare queste opzioni per i dati per determinare il funzionamento migliore per lo scenario in uso. Le sezioni seguenti forniscono informazioni dettagliate su questi metodi.

Riordinamento del modello linguistico

Il prompt del modello linguistico di esempio seguente riordina i risultati. Per altre informazioni, vedere acceleratore dell'esperimento 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"
    }
}

Reranking tra codificatori

L'esempio seguente usa un codificatore incrociato fornito da Hugging Face per caricare il modello Roberta. Scorre ogni blocco e usa il modello per calcolare la somiglianza, che fornisce un valore. Ordina i risultati e restituisce i primi N risultati. Per altre informazioni, vedere repository GitHub dell'acceleratore di esperimenti RAG.

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

Classificazione semantica

Ricerca di intelligenza artificiale ha una funzionalità proprietaria denominata classificazione semantica . Questa funzionalità usa modelli di Deep Learning adattati da Microsoft Bing che promuovono i risultati più rilevanti semanticamente. Per ulteriori informazioni, vedere Come funziona il ranker semantico.

Prendere in considerazione altre indicazioni per la ricerca

Quando si implementa la soluzione di ricerca, prendere in considerazione le indicazioni generali seguenti:

  • Restituisce il titolo, il riepilogo, l'origine e i campi di contenuto non puliti non elaborati da una ricerca.

  • Determinare in anticipo se è necessario suddividere una query in sottoquery.

  • Eseguire query vettoriali e di testo su più campi. Quando si riceve una query, non si sa se la ricerca vettoriale o la ricerca di testo è migliore. E non sai i campi ideali per la ricerca vettoriale o la ricerca per parole chiave. È possibile eseguire ricerche in più campi, potenzialmente con più query, riesezionare i risultati e restituire i risultati con i punteggi più alti.

  • Filtrare in base ai campi di parole chiave ed entità per restringere i risultati.

  • Usare parole chiave insieme alle ricerche vettoriali. Le parole chiave filtrano i risultati in un subset più piccolo. L'archivio vettoriale funziona con tale subset per trovare le corrispondenze migliori.

Valutare i risultati della ricerca

Nella fase di preparazione hai raccolto le query di prova insieme alle informazioni sui documenti di prova. È possibile usare le informazioni seguenti raccolte in tale fase per valutare i risultati della ricerca:

  • Query: Query di esempio
  • Contesto: la raccolta di tutto il testo presente nei documenti di test che affrontano la query di esempio

Per valutare la soluzione di ricerca, è possibile usare i metodi di valutazione di recupero ben consolidati seguenti:

  • Precisione al K: La percentuale di elementi pertinenti correttamente identificati sul totale dei risultati di ricerca. Questa metrica è incentrata sull'accuratezza dei risultati della ricerca.

  • Richiamo a K: Percentuale di elementi rilevanti nella parte superiore K rispetto ai possibili elementi relativi totali. Questa metrica è incentrata sulla copertura dei risultati della ricerca.

  • rango reciproco medio (MRR): La media dei ranghi reciproci della prima risposta rilevante nei risultati della ricerca classificati. Questa metrica è incentrata sulla posizione in cui si verifica il primo risultato pertinente nei risultati della ricerca.

È consigliabile testare esempi positivi e negativi. Per gli esempi positivi, si vuole che le metriche siano il più vicino possibile a 1. Per gli esempi negativi, in cui i dati non devono essere in grado di risolvere le query, si vuole che le metriche siano il più vicino possibile a 0. È consigliabile testare tutte le query di test. Calcola la media dei risultati delle query positive e dei risultati delle query negative per capire come si comportano complessivamente i risultati di ricerca.

Passaggio successivo