"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Dominando a resposta a consultas com RAG: superando os principais desafios em dados de reuniões em grande escala

Dominando a resposta a consultas com RAG: superando os principais desafios em dados de reuniões em grande escala

Publicado em 14/01/2025
Navegar:553

Na era digital de sobrecarga de informações, extrair insights acionáveis ​​de grandes conjuntos de dados é mais crucial do que nunca. Recentemente, embarquei em uma jornada para aproveitar a Geração Aumentada de Recuperação (RAG) para enfrentar um grande desafio: fornecer respostas precisas a partir de uma vasta coleção de notas de reuniões. Este blog explora os obstáculos, soluções e conquistas que transformaram meu sistema de resposta a consultas baseado em RAG em uma ferramenta robusta para extrair insights de dados de reuniões não estruturados.

Declaração do problema: Desafios no atendimento de consultas com RAG
Um dos principais desafios foi construir um sistema capaz de processar consultas complexas e específicas em um enorme repositório de notas de reuniões. Os modelos tradicionais de resposta a consultas RAG frequentemente retornavam informações irrelevantes ou incompletas, falhando em capturar a intenção do usuário. A natureza não estruturada dos dados da reunião, combinada com diversos tipos de consulta, exigiu uma solução mais refinada.

Abordagem inicial: estabelecendo as bases para respostas eficazes a consultas
Comecei com um modelo RAG básico projetado para combinar recuperação e geração de resposta. Duas técnicas iniciais utilizadas foram:

  1. Chunking: dividir documentos grandes em segmentos menores por limites de frase melhorou a recuperação ao restringir o escopo da pesquisa.

  2. Incorporação e armazenamento vetorial: Após o chunking, cada segmento foi incorporado e armazenado em um banco de dados vetorial, permitindo pesquisas eficientes.

No entanto, essa configuração tinha limitações. A abordagem inicial de agrupamento muitas vezes levava à recuperação de informações irrelevantes e as respostas geradas careciam de precisão e alinhamento com a intenção de cada consulta.

Desafios no atendimento de consultas RAG em grande escala

  • Tratamento de consultas complexas: certas questões complexas exigiam uma compreensão semântica mais profunda além da pesquisa semântica básica.
  • Incompatibilidades contextuais: os pedaços recuperados geralmente eram contextualmente semelhantes, mas não eram precisos o suficiente para satisfazer os requisitos da consulta.
  • Limitações de precisão de recuperação: a recuperação de um pequeno conjunto de documentos (por exemplo, cinco a dez) geralmente resultava em resultados limitados sem relevância.

Esses desafios ressaltaram a necessidade de uma abordagem mais avançada para melhorar a precisão no atendimento de consultas RAG.

Técnicas avançadas de RAG para maior precisão de consulta (solução)
Para resolver esses problemas, apliquei diversas metodologias avançadas, refinando o sistema de forma iterativa:
Semantic Chunking
Ao contrário do chunking tradicional, o Chunking Semântico prioriza o significado dentro de cada segmento, aumentando a relevância ao alinhar as informações recuperadas com a intenção da consulta.

Mastering Query Answering with RAG: Overcoming Key Challenges in Large-Scale Meeting Data

from langchain_experimental.text_splitter import SemanticChunker
from langchain_openai.embeddings import OpenAIEmbeddings
from langchain.schema import Document

# Initialize OpenAI Embeddings with API key
openai_api_key = ""
embedder = OpenAIEmbeddings(openai_api_key=openai_api_key)
text_splitter = SemanticChunker(embedder)

def prepare_docs_for_indexing(videos):
    all_docs = []

    for video in videos:
        video_id = video.get('video_id')
        title = video.get('video_name')
        transcript_info = video.get('details', {}).get('transcript_info', {})
        summary = video.get('details', {}).get('summary')
        created_at = transcript_info.get('created_at')  # Getting the created_at timestamp

        # Get the full transcription text
        transcription_text = transcript_info.get('transcription_text', '')

        # Create documents using semantic chunking
        docs = text_splitter.create_documents([transcription_text])

        for doc in docs:
            # Add metadata to each document
            doc.metadata = {
                "created_at": created_at,
                "title": title,
                "video_id": video_id,
                "summary": summary
            }
            all_docs.append(doc)

    return all_docs


docs = prepare_docs_for_indexing(videos)

# Output the created documents
for doc in docs:
    print("____________")
    print(doc.page_content)

Recuperação de margem máxima
Este método melhorou a precisão da recuperação ao diferenciar entre dados relevantes e irrelevantes, garantindo que apenas os blocos de dados com melhor correspondência fossem recuperados.

Pontuação Lambda
Usando a pontuação Lambda, pude classificar os resultados com base na relevância, priorizando respostas que se alinhassem mais estreitamente com a intenção da consulta para obter melhor qualidade de resposta.

from langchain_community.vectorstores import OpenSearchVectorSearch
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

docsearch = OpenSearchVectorSearch.from_documents(
    docs, embeddings, opensearch_url="http://localhost:9200"
)

query = "your query"
docs = docsearch.max_marginal_relevance_search(query, k=2, fetch_k=10, lambda_param=0.25)

Multiconsulta e RAG Fusion
Para questões complexas, o sistema gera múltiplas subconsultas. O RAG Fusion então integra diversas respostas em uma resposta única e coesa, melhorando a qualidade da resposta e reduzindo erros.

def generate_multi_queries(question: str):
    # Template to generate multiple queries
    template = """You are an AI language model assistant. Your task is to generate five 
    different versions of the given user question to retrieve relevant documents from a vector 
    database. By generating multiple perspectives on the user question, your goal is to help
    the user overcome some of the limitations of the distance-based similarity search. 
    Provide these alternative questions separated by newlines. Original question: {question}"""

    # Creating a prompt template for query generation
    prompt_perspectives = ChatPromptTemplate.from_template(template)

    # Generate the queries using ChatOpenAI and output parser
    generate_queries = (
        prompt_perspectives 
        | ChatOpenAI(temperature=0, openai_api_key=openai_api_key) 
        | StrOutputParser() 
        | (lambda x: x.split("\n"))
    )

    # Invoke the chain to generate queries
    multi_queries = generate_queries.invoke({"question": question})

    return multi_queries
def reciprocal_rank_fusion(results: list[list], k=60):
    """Applies Reciprocal Rank Fusion (RRF) to fuse ranked document lists."""
    fused_scores = {}
    for docs in results:
        for rank, doc in enumerate(docs):
            doc_str = dumps(doc)  # Convert to a serializable format
            if doc_str not in fused_scores:
                fused_scores[doc_str] = 0
            fused_scores[doc_str]  = 1 / (rank   k)  # RRF formula

    # Sort documents by the fused score
    reranked_results = [
        (loads(doc), score)
        for doc, score in sorted(fused_scores.items(), key=lambda x: x[1], reverse=True)
    ]
    return reranked_result

Mastering Query Answering with RAG: Overcoming Key Challenges in Large-Scale Meeting Data

Indexação aprimorada e pesquisa vetorial otimizada
Melhorar o mecanismo de indexação e refinar os parâmetros de pesquisa vetorial tornou a recuperação mais rápida e precisa, especialmente para grandes conjuntos de dados.

Resultados: Principais conquistas no atendimento de consultas RAG
A implementação dessas técnicas levou a melhorias significativas:

  • Maior precisão de recuperação: Técnicas como Semantic Chunking e Maximum Margin Retrieval refinaram a recuperação de dados, garantindo que apenas os pedaços mais relevantes fossem retornados.
  • Relevância aprimorada: a pontuação Lambda priorizou efetivamente os resultados pertinentes, alinhando as respostas com a intenção da consulta.
  • Tratamento aprimorado de consultas complexas: a geração de múltiplas consultas e o RAG Fusion permitiram que o sistema gerenciasse perguntas complexas, fornecendo respostas abrangentes.
  • Maior robustez do sistema: Esses refinamentos elevaram o sistema de um modelo básico para uma ferramenta sofisticada e confiável de resposta a consultas para dados de reuniões não estruturados e em grande escala.

Principais conclusões e lições aprendidas
Ao longo desta jornada, identifiquei vários insights importantes:

  1. A adaptabilidade é fundamental: soluções eficazes raramente surgem na primeira tentativa; melhoria iterativa e flexibilidade são essenciais.
  2. Metodologias em camadas melhoram a robustez: a integração de múltiplas abordagens – Chunking Semântico, Recuperação de Margem Máxima, Pontuação Lambda – criou um sistema mais forte e eficaz.
  3. Tratamento completo de consultas: a geração de múltiplas consultas e o RAG Fusion destacaram a importância de abordar questões de múltiplas perspectivas.
  4. Foco na semântica: enfatizar o significado dos dados, em vez de apenas a estrutura, melhorou significativamente a precisão da recuperação.

Conclusão: Perspectivas Futuras para Sistemas Baseados em RAG
O aprimoramento dos modelos RAG com técnicas avançadas transformou um sistema de recuperação simples em uma ferramenta poderosa para responder a consultas complexas e diferenciadas. Olhando para o futuro, pretendo incorporar capacidades de aprendizagem em tempo real, permitindo que o sistema se adapte dinamicamente a novos dados. Esta experiência aprofundou minhas habilidades técnicas e destacou a importância da flexibilidade, foco semântico e melhoria iterativa em sistemas de recuperação de dados.

Considerações finais: um guia para implementação de sistemas RAG avançados
Ao partilhar a minha experiência na superação dos desafios do RAG, espero oferecer um guia para a implementação de soluções semelhantes. Técnicas estratégicas, combinadas com refinamento iterativo, não apenas resolveram problemas imediatos, mas também estabeleceram uma base sólida para avanços futuros em sistemas de resposta a consultas.

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/cognilium_ai/mastering-query-answering-with-rag-overcoming-key-challenges-in-large-scale-meeting-data-33ji?1 Se houver alguma violação , entre em contato com study_golang @163.comdelete
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3