Partilhar via


Recuperação de informações

Na etapa anterior da sua solução Retrieval-Augmented Generation (RAG), gerou os embeddings para os seus fragmentos. Nesta etapa, você gera o índice no banco de dados vetorial e experimenta para determinar suas pesquisas ideais. Este artigo aborda opções de configuração para um índice de pesquisa, tipos de pesquisas e estratégias de reclassificação.

Este artigo faz parte de uma série. Leia a introdução.

Configurar o índice de pesquisa

Observação

Esta seção descreve recomendações específicas para o Azure AI Search. Se utilizares uma loja diferente, consulta a documentação apropriada para encontrar as configurações principais para esse serviço.

O índice de pesquisa na sua loja tem uma coluna para cada campo nos seus dados. Os armazenamentos de pesquisa geralmente suportam tipos de dados não vetoriais, como string, booleano, inteiro, único, duplo e datetime. Eles também suportam coleções, como coleções de tipo único e tipos de dados vetoriais . Para cada coluna, você deve configurar informações, como o tipo de dados e se o campo é filtrável, recuperável ou pesquisável.

Considere as seguintes configurações de pesquisa vetorial que você pode aplicar a campos vetoriais:

  • Algoritmo de pesquisa vetorial: O algoritmo de pesquisa vetorial procura correspondências relativas. O recurso AI Search tem uma opção de algoritmo de força bruta, chamada de vizinhos mais próximos k (KNN) exaustivos, que verifica todo o espaço vetorial. Ele também tem uma opção de algoritmo mais eficiente, chamada Hierarchical Navigable Small World (HNSW), que executa uma pesquisa vizinho mais próximo aproximado (ANN).

  • Métrica de similaridade: O algoritmo usa uma métrica de semelhança para calcular a proximidade. Os tipos de métricas no AI Search incluem cosseno, produto ponto e Euclidiano. Se utilizar os modelos de embeddings do Serviço OpenAI do Azure, escolha o cosseno.

  • O parâmetro efConstruction: Este parâmetro é usado durante a construção de um índice HNSW. Ele determina o número de vizinhos mais próximos que estão conectados a um vetor durante a indexação. Um valor de efConstruction maior resulta em um índice de melhor qualidade do que um número menor. Mas um valor maior requer mais tempo, armazenamento e computação. Para um grande número de partes, defina o valor de efConstruction mais alto. Para um número baixo de partes, defina o valor mais baixo. Para determinar o valor ideal, experimente seus dados e consultas esperadas.

  • O parâmetro efSearch: Este parâmetro é usado durante o tempo de consulta para definir o número de vizinhos mais próximos, ou partes semelhantes, que a pesquisa usa.

  • O parâmetro m: Este parâmetro é a contagem de links bidirecionais. O intervalo é de 4 a 10. Números mais baixos produzem menos ruído nos resultados.

No AI Search, as configurações vetoriais são encapsuladas em uma configuração vectorSearch. Ao configurar suas colunas vetoriais, você faz referência à configuração apropriada para essa coluna vetorial e define o número de dimensões. O atributo dimensions da coluna vetorial representa o número de dimensões geradas pelo modelo de incorporação. Por exemplo, o modelo otimizado para armazenamento incorporação de texto 3-pequena gera 1.536 dimensões.

Escolha a sua abordagem de pesquisa

Quando você executa consultas do seu orquestrador de prompt em relação ao seu repositório de pesquisa, considere os seguintes fatores:

  • O tipo de pesquisa que você deseja realizar, como vetor, palavra-chave ou híbrida

  • Se pretendes efetuar consultas em relação a uma ou mais colunas

  • Se você deseja executar manualmente várias consultas, como uma consulta de palavra-chave e uma pesquisa vetorial

  • Se você precisa dividir a consulta em subconsultas

  • Se você deve usar filtragem em suas consultas

O seu orquestrador de prompts pode usar uma abordagem estática ou uma dinâmica que combina diferentes estratégias com base em pistas de contexto do prompt. As seções a seguir abordam essas opções para ajudá-lo a encontrar a abordagem certa para sua carga de trabalho.

Tipos de pesquisa

As plataformas de pesquisa geralmente suportam texto completo e pesquisas vetoriais. Algumas plataformas, como o AI Search, suportam pesquisas híbridas.

Pesquisas vetoriais comparam a semelhança entre a consulta vetorizada (prompt) e os campos vetoriais. Para obter mais informações, consulte Escolher um serviço Azure para pesquisas vetoriais.

Importante

Antes de incorporar a consulta, deves executar as mesmas operações de limpeza que executaste em blocos. Por exemplo, se colocares todas as palavras em minúsculas no teu segmento incorporado, deverás colocar em minúsculas todas as palavras da consulta antes de as incorporar.

Observação

Você pode executar uma pesquisa vetorial em vários campos vetoriais na mesma consulta. No AI Search, essa prática é considerada uma busca híbrida. Para obter mais informações, consulte Pesquisa híbrida.

O código de exemplo a seguir executa uma pesquisa vetorial no 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"],
)

O código que incorpora a consulta pré-processa a consulta primeiro. Esse pré-processo deve ser o mesmo código que pré-processa as partes antes da incorporação. Você deve usar o mesmo modelo de embedding que embebeu os segmentos.

As pesquisas de texto completo correspondem ao texto simples armazenado num índice. É prática comum extrair palavras-chave de uma consulta e usar essas palavras-chave extraídas em uma pesquisa de texto completo em uma ou mais colunas indexadas. Você pode configurar pesquisas de texto completo para retornar correspondências se algum termo ou todos os termos corresponderem.

Experimente determinar em quais campos executar pesquisas de texto completo. Conforme descrito no artigo da fase de enriquecimento de, você deve usar campos de metadados de palavra-chave e entidade para pesquisas de texto completo em cenários em que o conteúdo tem significado semântico semelhante, mas entidades ou palavras-chave diferem. Outros campos comuns a serem considerados para a pesquisa de texto completo incluem título, resumo e texto em partes.

O código de exemplo a seguir executa uma pesquisa de texto completo nos campos título, conteúdo e resumo.

formatted_search_results = []

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

formatted_search_results = format_results(results)

O AI Search suporta consultas híbridas que contêm uma ou mais pesquisas de texto e uma ou mais pesquisas vetoriais. A plataforma executa cada consulta, obtém os resultados intermediários, reclassifica os resultados usando Reciprocal Rank Fusione retorna os principais N resultados.

O código de exemplo a seguir executa uma pesquisa de texto completo nos campos título, conteúdo e resumo. Ele também executa pesquisas vetoriais nos campos contentVector e questionVector. AI Search executa todas as consultas em paralelo, reclassifica os resultados e retorna os principais 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"],
)

Múltiplas consultas manuais

Você pode executar várias consultas, como uma pesquisa vetorial e uma pesquisa de texto completo por palavra-chave, manualmente. Você agrega os resultados, reclassifica os resultados manualmente e retorna os principais resultados. Considere os seguintes casos de uso para consultas múltiplas manuais:

  • Você usa uma plataforma de pesquisa que não suporta pesquisas híbridas. Você usa várias consultas manuais para executar sua própria pesquisa híbrida.

  • Você deseja executar pesquisas de texto completo em consultas diferentes. Por exemplo, você pode extrair palavras-chave da consulta e executar uma pesquisa de texto completo no campo de metadados de palavras-chave. Em seguida, você pode extrair entidades e executar uma consulta no campo de metadados de entidades.

  • Você deseja controlar o processo de reclassificação.

  • A consulta requer que se executem subconsultas decompostas para recuperar dados fundamentais de várias fontes.

Tradução de consultas

A tradução de consultas é uma etapa opcional na fase de recuperação de informações de uma solução RAG. Esta etapa transforma ou traduz uma consulta em um formulário otimizado para obter melhores resultados. Os métodos de tradução de consultas incluem amplificação, decomposição, reescrita e Incorporações Hipotéticas de Documentos (HyDE).

Aumento de consultas

O aumento da consulta é uma etapa de tradução que torna a consulta mais simples e utilizável e melhora o contexto. Você deve considerar o aumento se sua consulta for pequena ou vaga. Por exemplo, considere a consulta "Comparar os ganhos da Microsoft". Essa consulta não inclui períodos de tempo ou unidades de tempo para comparar e apenas especifica os ganhos. Considere uma versão aumentada da consulta, como "Compare os ganhos e a receita da Microsoft no ano atual versus no ano passado por trimestre". A nova consulta é clara e específica.

Ao aumentar uma consulta, você mantém a consulta original, mas adiciona mais contexto. Não remova nem altere a consulta original nem altere a natureza da consulta.

Você pode usar um modelo de linguagem para aumentar uma consulta. Mas não é possível aumentar todas as consultas. Se você tiver contexto, poderá passá-lo para seu modelo de linguagem para aumentar a consulta. Se você não tiver contexto, precisará determinar se seu modelo de linguagem tem informações que podem ser usadas para aumentar a consulta. Por exemplo, se você usar um modelo de linguagem grande, como um modelo GPT, poderá determinar se as informações sobre a consulta estão prontamente disponíveis na Internet. Em caso afirmativo, você pode usar o modelo para aumentar a consulta. Caso contrário, não se deve modificar a consulta.

No prompt a seguir, um modelo de linguagem amplia uma consulta. Esse prompt inclui exemplos de quando a consulta tem contexto e não tem. Para obter mais informações, consulte RAG experiment accelerator GitHub repository.

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:

Decomposição

Consultas complexas exigem mais de uma coleção de dados para fundamentar o modelo. Por exemplo, a consulta "Como funcionam os carros elétricos e como eles se comparam aos veículos com motor de combustão interna (ICE)?" provavelmente requer dados de aterramento de várias fontes. Uma fonte pode descrever como os carros elétricos funcionam, enquanto outra os compara aos veículos ICE.

A decomposição é o processo de dividir uma consulta complexa em várias subconsultas menores e mais simples. Você executa cada uma das consultas decompostas de forma independente e agrega os principais resultados de todas as consultas decompostas como contexto acumulado. Em seguida, execute a consulta original, que passa o contexto acumulado para o modelo de linguagem.

Você deve determinar se a consulta requer várias pesquisas antes de executar qualquer pesquisa. Caso seja necessário realizar várias subconsultas, pode executar várias consultas manuais para todas elas. Use um modelo de linguagem para determinar se várias subconsultas são recomendadas.

O prompt a seguir categoriza uma consulta como simples ou complexa. Para obter mais informações, consulte RAG experiment accelerator GitHub repository.

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

Você também pode usar um modelo de linguagem para decompor uma consulta complexa. O seguinte prompt decompõe uma consulta complexa. Para obter mais informações, consulte RAG experiment accelerator GitHub repository.

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}

Reescrita

Uma consulta de entrada pode não estar na forma ideal para recuperar dados fundamentais. Você pode usar um modelo de linguagem para reescrever a consulta e obter melhores resultados. Reescreva uma consulta para enfrentar os seguintes desafios:

  • Imprecisão
  • Palavras-chave em falta
  • Palavras desnecessárias
  • Semântica pouco clara

O prompt a seguir usa um modelo de idioma para reescrever uma consulta. Para obter mais informações, consulte RAG experiment accelerator GitHub repository.

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}

A técnica HyDE

HyDE é uma técnica alternativa de recuperação de informações para soluções RAG. Em vez de converter uma consulta em incorporações e usar essas incorporações para encontrar as correspondências mais próximas em um banco de dados vetorial, o HyDE usa um modelo de linguagem para gerar respostas a partir da consulta. Essas respostas são convertidas em embeddings, que são usadas para encontrar as correspondências mais próximas. Este processo permite que o HyDE realize buscas de similaridade de embeddings entre respostas.

Combinar traduções de consultas num pipeline

Você pode usar várias traduções de consulta. Você pode até usar todas essas quatro traduções em conjunto. O diagrama a seguir mostra um exemplo de como você pode combinar essas traduções em um pipeline.

Diagrama que mostra um pipeline RAG com transformadores para consulta.

O processo tem as seguintes etapas:

  1. A etapa opcional do aumentador de consultas recebe a consulta original. Esta etapa gera a consulta original e a consulta aumentada.

  2. A etapa opcional do decompositor de consultas recebe a consulta aumentada. Esta etapa gera a consulta original, a consulta aumentada e as consultas decompostas.

  3. Cada consulta decomposta executa três subetapas. Depois que todas as consultas decompostas passam pelas subetapas, a saída inclui a consulta original, a consulta aumentada, as consultas decompostas e um contexto acumulado. O contexto acumulado inclui a agregação dos N principais resultados de todas as consultas decompostas que passam pelas subetapas. As subetapas incluem as seguintes tarefas:

    1. O regravador de consulta opcional regrava a consulta decomposta.

    2. O índice de pesquisa processa a consulta reescrita ou a consulta original. Ele executa a consulta usando tipos de pesquisa, como vetor, texto completo, híbrido ou múltiplo manual. O índice de pesquisa também pode usar recursos avançados de consulta, como HyDE.

    3. Os resultados são reclassificados. Os primeiros N resultados reclassificados são adicionados ao contexto acumulado.

  4. A consulta original, juntamente com o contexto acumulado, passa pelas mesmas três subetapas de cada consulta decomposta. Mas apenas uma consulta passa pelas etapas e quem chama recebe os melhores N resultados.

Passar imagens nas consultas

Alguns modelos multimodais, como GPT-4V e GPT-4o, podem interpretar imagens. Se utilizar estes modelos, poderá evitar fragmentar as imagens e passar a imagem como parte do prompt para o modelo multimodal. Você deve experimentar para determinar como essa abordagem funciona em comparação com a fragmentação das imagens com e sem passar contexto extra. Você também deve comparar a diferença de custo e fazer uma análise de custo-benefício.

Filtrar consultas

Para filtrar consultas, você pode usar campos no repositório de pesquisa configurados como filtráveis. Considere filtrar palavras-chave e entidades para consultas que usam esses campos para ajudar a restringir o resultado. Use a filtragem para eliminar dados irrelevantes. Recupere apenas os dados que satisfazem condições específicas de um índice. Essa prática melhora o desempenho geral da consulta e fornece resultados mais relevantes. Para determinar se a filtragem beneficia seu cenário, faça experimentos e testes. Considere fatores como consultas que não têm palavras-chave ou têm palavras-chave, abreviaturas ou acrônimos imprecisos.

Campos de peso

Na Pesquisa de IA, você pode ponderar campos para influenciar a classificação dos resultados com base em critérios.

Observação

Esta seção descreve as capacidades de ponderação da Pesquisa de IA. Se você usa uma plataforma de dados diferente, pesquise os recursos de ponderação dessa plataforma.

O AI Search suporta perfis de pontuação que contêm parâmetros para campos ponderados e funções para dados numéricos. Os perfis de pontuação só se aplicam a campos não vetoriais. O suporte para pesquisa vetorial e híbrida está em fase de pré-visualização. Você pode criar vários perfis de pontuação em um índice e, opcionalmente, optar por usar um por consulta.

Os campos que você pondera dependem do tipo de consulta e do caso de uso. Por exemplo, se a consulta for centrada em palavras-chave, como "Onde está sediada a Microsoft?", você deseja um perfil de pontuação que pondere mais os campos de entidade ou palavra-chave. Você pode usar perfis diferentes para usuários diferentes, permitir que os usuários escolham seu foco ou escolher perfis com base no aplicativo.

Em sistemas de produção, você só deve manter perfis que você usa ativamente na produção.

Usar reordenação

Use a reclassificação para executar uma ou mais consultas, agregar os resultados e classificá-los. Considere os seguintes cenários que se beneficiam da reclassificação dos resultados da pesquisa:

  • Você realizou várias pesquisas manuais e deseja agregar os resultados e classificá-los.

  • As pesquisas vetoriais e de palavras-chave nem sempre são precisas. Você deseja aumentar a contagem de documentos retornados da sua pesquisa, que podem incluir resultados válidos que, de outra forma, poderiam ser ignorados, e usar a reclassificação para avaliar os resultados.

Você pode usar um modelo de linguagem ou codificador cruzado para executar a reclassificação. Algumas plataformas, como a AI Search, têm métodos proprietários para reclassificar os resultados. Você pode avaliar essas opções para seus dados para determinar o que funciona melhor para seu cenário. As seções a seguir fornecem detalhes sobre esses métodos.

Reclassificação do modelo linguístico

O exemplo de prompt de modelo de linguagem a seguir reclassifica os resultados. Para mais informações, consulte o acelerador de experimentos 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"
    }
}

Reclassificação de codificador cruzado

O exemplo a seguir usa um codificador cruzado de fornecido pelo Hugging Face para carregar o modelo Roberta. Ele itera sobre cada bloco e usa o modelo para calcular a semelhança, que fornece um valor. Ele classifica os resultados e retorna os principais N resultados. Para obter mais informações, consulte RAG experiment accelerator GitHub repository.

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

Classificação semântica

O AI Search tem uma característica proprietária chamada ranking semântico. Esta funcionalidade utiliza modelos de aprendizagem profunda que foram adaptados do Microsoft Bing que promovem os resultados semanticamente mais relevantes. Para obter mais informações, consulte Como funciona o classificador semântico.

Considere outras orientações de pesquisa

Considere as seguintes orientações gerais ao implementar sua solução de pesquisa:

  • Devolver o título, resumo, origem e os campos de conteúdo cru e não processado de uma pesquisa.

  • Determine antecipadamente se você precisa dividir uma consulta em subconsultas.

  • Execute consultas vetoriais e de texto em vários campos. Quando recebe uma consulta, não sabe se a pesquisa vetorial ou a pesquisa de texto é melhor. E você não sabe os campos ideais que a pesquisa vetorial ou a pesquisa por palavra-chave deve pesquisar. Você pode pesquisar em vários campos, potencialmente com várias consultas, reclassificar os resultados e retornar os resultados com as pontuações mais altas.

  • Filtre os campos de palavra-chave e entidade para restringir os resultados.

  • Use palavras-chave juntamente com pesquisas vetoriais. As palavras-chave filtram os resultados para um subconjunto menor. O armazenamento de vetores trabalha sobre esse subconjunto para encontrar as melhores correspondências.

Avalie os resultados da sua pesquisa

Na fase de preparação, você reuniu consultas de teste, juntamente com informações do documento de teste. Pode utilizar as seguintes informações recolhidas nessa fase para avaliar os resultados da pesquisa:

  • A consulta: Consulta de exemplo
  • O contexto: A coleção de todo o texto nos documentos de teste que abordam a consulta de exemplo

Para avaliar sua solução de pesquisa, você pode usar os seguintes métodos de avaliação de recuperação bem estabelecidos:

  • Precisão em K: A percentagem de itens relevantes corretamente identificados do total de resultados de pesquisa. Essa métrica se concentra na precisão dos resultados da pesquisa.

  • Recall em K: A porcentagem de itens relevantes no topo K do total de itens relativos possíveis. Essa métrica se concentra na cobertura de resultados de pesquisa.

  • Classificação Recíproca Média (MRR): A média das classificações recíprocas da primeira resposta relevante nos resultados de pesquisa classificados. Essa métrica se concentra em onde o primeiro resultado relevante ocorre nos resultados da pesquisa.

Você deve testar exemplos positivos e negativos. Para os exemplos positivos, você quer que as métricas sejam o mais próximo possível de 1. Para os exemplos negativos, em que seus dados não devem ser capazes de endereçar as consultas, você deseja que as métricas sejam o mais próximo possível de 0. Você deve testar todas as suas consultas de teste. Calcule a média dos resultados positivos e negativos da consulta para entender o desempenho agregado dos resultados da pesquisa.

Próximo passo