Heim >Technologie-Peripheriegeräte >KI >Verbesserung von Lappen: Jenseits der Vanille nähert sich

Verbesserung von Lappen: Jenseits der Vanille nähert sich

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2025-02-25 16:38:09631Durchsuche

Enhancing RAG: Beyond Vanilla Approaches

retrieval-augmented Generation (RAG) steigert die Sprachmodelle durch Integration externer Informationsabrufs erheblich. Standardlag, während sie die Reaktionsrelevanz verbessert, stockt häufig in komplexen Abrufsituationen. Dieser Artikel untersucht die Mängel von Basic Rag und präsentiert fortgeschrittene Methoden zur Verbesserung der Genauigkeit und Effizienz.

Einschränkungen des Basislagers

Betrachten Sie ein einfaches Szenario: relevante Informationen aus mehreren Dokumenten abrufen. Unser Datensatz enthält:

  • Ein primäres Dokument, in dem gesunde, produktive Lebensstilpraktiken beschrieben werden.
  • Zwei nicht verwandte Dokumente, die einige überlappende Schlüsselwörter enthalten, jedoch in verschiedenen Kontexten.
<code>main_document_text = """
Morning Routine (5:30 AM - 9:00 AM)
✅ Wake Up Early - Aim for 6-8 hours of sleep to feel well-rested.
✅ Hydrate First - Drink a glass of water to rehydrate your body.
✅ Morning Stretch or Light Exercise - Do 5-10 minutes of stretching or a short workout to activate your body.
✅ Mindfulness or Meditation - Spend 5-10 minutes practicing mindfulness or deep breathing.
✅ Healthy Breakfast - Eat a balanced meal with protein, healthy fats, and fiber.
✅ Plan Your Day - Set goals, review your schedule, and prioritize tasks.
...
"""</code>

Ein grundlegendes Lappensystem, wenn er mit:

befragt wird
  1. Wie kann ich meine Gesundheit und Produktivität verbessern?
  2. Was sind die besten Strategien für einen gesunden und produktiven Lebensstil?

kann Schwierigkeiten haben, das primäre Dokument aufgrund des Vorhandenseins ähnlicher Wörter in nicht verwandten Dokumenten konsequent abzurufen.

Helferfunktionen: Straffung der Lag -Pipeline

Um die Abrufgenauigkeit zu verbessern und die Abfrageverarbeitung zu vereinfachen, führen wir Helferfunktionen ein. Diese Funktionen erledigen Aufgaben wie die Abfrage der ChatGPT -API, die Berechnung von Dokument -Einbettungen und die Bestimmung der Ähnlichkeitswerte. Dies schafft eine effizientere Lappenpipeline.

Hier sind die Helferfunktionen:

<code># **Imports**
import os
import json
import openai
import numpy as np
from scipy.spatial.distance import cosine
from google.colab import userdata

# Set up OpenAI API key
os.environ["OPENAI_API_KEY"] = userdata.get('AiTeam')</code>
<code>def query_chatgpt(prompt, model="gpt-4o", response_format=openai.NOT_GIVEN):
    try:
        response = client.chat.completions.create(
            model=model,
            messages=[{"role": "user", "content": prompt}],
            temperature=0.0 , # Adjust for more or less creativity
            response_format=response_format
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        return f"Error: {e}"</code>
<code>def get_embedding(text, model="text-embedding-3-large"): #"text-embedding-ada-002"
    """Fetches the embedding for a given text using OpenAI's API."""
    response = client.embeddings.create(
        input=[text],
        model=model
    )
    return response.data[0].embedding</code>
<code>def compute_similarity_metrics(embed1, embed2):
    """Computes different similarity/distance metrics between two embeddings."""
    cosine_sim = 1- cosine(embed1, embed2)  # Cosine similarity

    return cosine_sim</code>
<code>def fetch_similar_docs(query, docs, threshold = .55, top=1):
  query_em = get_embedding(query)
  data = []
  for d in docs:
    # Compute and print similarity metrics
    similarity_results = compute_similarity_metrics(d["embedding"], query_em)
    if(similarity_results >= threshold):
      data.append({"id":d["id"], "ref_doc":d.get("ref_doc", ""), "score":similarity_results})

  # Sorting by value (second element in each tuple)
  sorted_data = sorted(data, key=lambda x: x["score"], reverse=True)  # Ascending order
  sorted_data = sorted_data[:min(top, len(sorted_data))]
  return sorted_data</code>

Bewertung des Basislagers

Wir testen den Basislappen unter Verwendung vordefinierter Abfragen, um die Fähigkeit zu bewerten, das relevanteste Dokument basierend auf semantischer Ähnlichkeit abzurufen. Dies unterstreicht seine Grenzen.

<code>"""# **Testing Vanilla RAG**"""

query = "what should I do to stay healthy and productive?"
r = fetch_similar_docs(query, docs)
print("query = ", query)
print("documents = ", r)

query = "what are the best practices to stay healthy and productive ?"
r = fetch_similar_docs(query, docs)
print("query = ", query)
print("documents = ", r)</code>

Erweiterte Techniken für verbesserten Lappen

Um den Abrufprozess zu verbessern, führen wir Funktionen ein, die strukturierte Informationen generieren, um das Abrufen von Dokumenten und Abfragen zu verbessern.

Drei wichtige Verbesserungen werden implementiert:

1. FAQs

erzeugen

Erstellen von FAQs aus dem Dokument erweitert die Abfragebestimmungsmöglichkeiten. Diese FAQs werden einmal generiert und gespeichert, wodurch der Suchraum ohne wiederkehrende Kosten bereichert wird.

<code>def generate_faq(text):
  prompt = f'''
  given the following text: """{text}"""
  Ask relevant simple atomic questions ONLY (don't answer them) to cover all subjects covered by the text. Return the result as a json list example [q1, q2, q3...]
  '''
  return query_chatgpt(prompt, response_format={ "type": "json_object" })</code>

2. Erstellen einer Übersicht

Eine kurze Zusammenfassung erfasst die Kernideen des Dokuments und verbessert die Effektivität des Abrufs. Die Einbettung des Überblicks wird der Dokumentsammlung hinzugefügt.

<code>def generate_overview(text):
  prompt = f'''
  given the following text: """{text}"""
  Generate an abstract for it that tells in maximum 3 lines what is it about and use high level terms that will capture the main points,
  Use terms and words that will be most likely used by average person.
  '''
  return query_chatgpt(prompt)</code>

3. Abzersetzung von Abfragen

breite Abfragen werden in kleinere, präzisere Sub-Anfragen unterteilt. Diese Unterausfragen werden mit der erweiterten Dokumentsammlung (Originaldokument, FAQs und Übersicht) verglichen. Die Ergebnisse werden für eine verbesserte Relevanz verschmolzen.

<code>main_document_text = """
Morning Routine (5:30 AM - 9:00 AM)
✅ Wake Up Early - Aim for 6-8 hours of sleep to feel well-rested.
✅ Hydrate First - Drink a glass of water to rehydrate your body.
✅ Morning Stretch or Light Exercise - Do 5-10 minutes of stretching or a short workout to activate your body.
✅ Mindfulness or Meditation - Spend 5-10 minutes practicing mindfulness or deep breathing.
✅ Healthy Breakfast - Eat a balanced meal with protein, healthy fats, and fiber.
✅ Plan Your Day - Set goals, review your schedule, and prioritize tasks.
...
"""</code>

Bewertung des erweiterten Lappen

erneutes Erreichen der ersten Abfragen mit diesen Verbesserungen zeigt eine signifikante Verbesserung. Die Abdeckung von Abfragen erzeugt mehrere Unterausfragen, was zu einem erfolgreichen Abrufen sowohl von den FAQs als auch aus dem Originaldokument führt.

<code># **Imports**
import os
import json
import openai
import numpy as np
from scipy.spatial.distance import cosine
from google.colab import userdata

# Set up OpenAI API key
os.environ["OPENAI_API_KEY"] = userdata.get('AiTeam')</code>

Beispiel für FAQ -Ausgabe:

<code>def query_chatgpt(prompt, model="gpt-4o", response_format=openai.NOT_GIVEN):
    try:
        response = client.chat.completions.create(
            model=model,
            messages=[{"role": "user", "content": prompt}],
            temperature=0.0 , # Adjust for more or less creativity
            response_format=response_format
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        return f"Error: {e}"</code>

Kosten-Nutzen-Analyse

Während der Vorverarbeitung (Generierung von FAQs, Übersichten und Einbettungen) fügt dies eine einmalige Kosten pro Dokument zu. Dies spielt die Ineffizienzen eines schlecht optimierten Lappensystems aus: frustrierte Benutzer und erhöhte Abfragekosten beim Abrufen irrelevanter Informationen. Für hochvolumige Systeme ist die Vorverarbeitung eine lohnende Investition.

Schlussfolgerung

kombiniertes Dokumentenvorverarbeitung (FAQs und Übersichten) mit Abzersetzung von Abfragen erzeugt ein intelligentes Lag-System, das die Genauigkeit und die Kostenwirksamkeit in Einklang bringt. Dies verbessert die Abrufqualität, reduziert irrelevante Ergebnisse und verbessert die Benutzererfahrung. Zukünftige Forschung kann weitere Optimierungen wie dynamisches Schwellenwert und Verstärkungslernen für die Verfeinerung von Abfragen untersuchen.

Das obige ist der detaillierte Inhalt vonVerbesserung von Lappen: Jenseits der Vanille nähert sich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn