paint-brush
Überwinden Sie LLM-Halluzinationen mithilfe von Wissensdatenbankenvon@kattasundeep110
Neue Geschichte

Überwinden Sie LLM-Halluzinationen mithilfe von Wissensdatenbanken

von Sundeep Goud Katta7m2024/11/07
Read on Terminal Reader

Zu lang; Lesen

Halluzinationen in LLMs können vermieden oder reduziert werden, indem die Antwort mithilfe von Wissensdatenbanken verbessert wird. Wissensdatenbanken können beliebige Daten der Organisation sein. Die Antwort des LLMs ist fundiert und dem Benutzer wird eine verbesserte Antwort bereitgestellt.
featured image - Überwinden Sie LLM-Halluzinationen mithilfe von Wissensdatenbanken
Sundeep Goud Katta HackerNoon profile picture
0-item

Was?

Wenn Sie einen LLM auffordern: „Schlagen Sie eine großartige Programmiersprache für maschinelles Lernen vor“


Die Antwort von LLMs wäre: „Eine der am meisten empfohlenen Programmiersprachen für maschinelles Lernen ist Python. Python ist eine hochrangige…“


Was wäre, wenn Ihre Organisation verifizierte, organisationsspezifische Informationen bereitstellen soll, also die Antwort mit authentischen Organisationsinformationen verbessern soll?


Lassen Sie es uns im Umgang mit LLM möglich machen

Warum?

Beliebte LLMs wie chatGPT von OpenAI und Gemini von Google werden mit öffentlich verfügbaren Daten trainiert. Ihnen fehlen oft organisationsspezifische Informationen. Es gibt bestimmte Situationen, in denen Organisationen sich auf LLMs verlassen möchten. Sie möchten jedoch die Antwort speziell für eine bestimmte Organisation verbessern oder Haftungsausschlüsse hinzufügen , wenn keine grundlegenden Daten verfügbar sind.


Dieser Vorgang wird als „Grounding der LLM-Antwort mithilfe von Wissensdatenbanken“ bezeichnet.

Wie?

Währenddessen kann ich einfach darüber reden.


Als Ingenieur gibt mir das Betrachten einiger Codeausschnitte Zuversicht.


Ihre Umsetzung stärkt mein Selbstvertrauen und macht mich glücklich. Das Teilen gibt mir Befriedigung 😄

Code? Warum nicht! → Python? Natürlich!!

  1. Installieren der erforderlichen Bibliotheken

     pip install openai faiss-cpu numpy python-dotenv
  • openai : Zur Interaktion mit GPT-Modellen und Einbettungen von OpenAI.
  • faiss-cpu : Eine Bibliothek von Facebook AI für eine effiziente Ähnlichkeitssuche, die zum Speichern und Suchen von Einbettungen verwendet wird.
  • numpy : Für numerische Operationen, einschließlich der Handhabung von Einbettungen als Vektoren.
  • python-dotenv : Um Umgebungsvariablen (z. B. API-Schlüssel) sicher aus einer .env Datei zu laden.


  1. Einrichten von Umgebungsvariablen

    • Navigieren Sie zu https://platform.openai.com/settings/organization/api-keys
    • Klicken Sie auf „Neuen geheimen Schlüssel erstellen“, wie im Bild unten gezeigt.
    • Geben Sie Details an. Sie können ein Servicekonto verwenden. Geben Sie einen Namen für die „Servicekonto-ID“ ein und wählen Sie ein Projekt aus.
    • Den geheimen Schlüssel in die Zwischenablage kopieren
    • Erstellen Sie eine .env Datei in Ihrem Projektverzeichnis. Fügen Sie dieser Datei Ihren OpenAI-API-Schlüssel hinzu.
     OPENAI_API_KEY=your_openai_api_key_here
    • Diese Datei bewahrt Ihren API-Schlüssel sicher auf und trennt ihn vom Code.


  2. Client initialisieren und Umgebungsvariablen laden

    • load_dotenv() lädt die .env Datei und os.getenv("OPENAI_API_KEY") ruft den API-Schlüssel ab. Dieses Setup schützt Ihren API-Schlüssel.
 import os from openai import OpenAI from dotenv import load_dotenv import faiss import numpy as np # Load environment variables load_dotenv() client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))


  1. Definieren Sie die Erdungsdaten/Wissensbasis
    • Dieses Wörterbuch enthält die grundlegenden Informationen zu den Themen. In Wirklichkeit könnte es sich dabei um einen größeren Datensatz oder eine Datenbank handeln.
 # Grounding data grounding_data = { "Python": "Python is dynamically typed, which can be a double-edged sword. While it makes coding faster and more flexible, it can lead to runtime errors that might have been caught at compile-time in statically-typed languages.", "LLMs": "Large Language Models (LLMs) are neural networks trained on large text datasets.", "Data Science": "Data Science involves using algorithms, data analysis, and machine learning to understand and interpret data.", "Java": "Java is great, it powers most of the machine learning code, and has a rich set of libraries available." }


  1. Texteinbettungen generieren

    • Eine Funktion zum Generieren von Einbettungen für einen bestimmten Text unter Verwendung des Einbettungsmodells von OpenAI. Diese Funktion ruft die OpenAI-API auf, um die Einbettung für eine Texteingabe abzurufen, die dann als NumPy-Array zurückgegeben wird.
     # Function to generate embedding for a text def get_embedding(text): response = client.embeddings.create( model="text-embedding-ada-002", input=text ) return np.array(response.data[0].embedding)


  2. FAISS-Index und Einbettungen für Erdungsdaten

    • Erstellen Sie einen FAISS-Index, eine für schnelle Ähnlichkeitssuchen optimierte Struktur, und füllen Sie ihn mit Einbettungen der Erdungsdaten.
     # Create FAISS index and populate it with grounding data embeddings dimension = len(get_embedding("test")) # Dimension of embeddings index = faiss.IndexFlatL2(dimension) # L2 distance index for similarity search grounding_embeddings = [] grounding_keys = list(grounding_data.keys()) for key, text in grounding_data.items(): embedding = get_embedding(text) grounding_embeddings.append(embedding) index.add(np.array([embedding]).astype("float32"))

    • dimension : Die Größe jeder Einbettung, die zum Initialisieren des FAISS-Index erforderlich ist.
    • index = faiss.IndexFlatL2(dimension) : Erstellt einen FAISS-Index, der die euklidische Distanz (L2) zur Ähnlichkeit verwendet.
    • Für jeden Eintrag in grounding_data generiert dieser Code eine Einbettung und fügt sie dem FAISS-Index hinzu.


  3. Vektorsuchfunktion

    • Die Funktion durchsucht den FAISS-Index nach dem Erdungsdateneintrag, der einer Abfrage am ähnlichsten ist.
 # Function to perform vector search on FAISS def vector_search(query_text, threshold=0.8): query_embedding = get_embedding(query_text).astype("float32").reshape(1, -1) D, I = index.search(query_embedding, 1) # Search for the closest vector if I[0][0] != -1 and D[0][0] <= threshold: return grounding_data[grounding_keys[I[0][0]]] else: return None # No similar grounding information available
  • Query Embedding : Wandelt den Abfragetext in einen Einbettungsvektor um.
  • FAISS Search : Durchsucht den Index nach dem Vektor, der der Abfrage am nächsten kommt.
  • Threshold Check : Wenn die Entfernung (D) des nächstgelegenen Vektors unter dem Schwellenwert liegt, werden die Erdungsinformationen zurückgegeben. Andernfalls wird angezeigt, dass keine zuverlässige Erdung gefunden wurde.
  1. Abfragen des LLM

    Wir fragen das LLM mithilfe der Chatgpt-API und des GPT-4-Modells von OpenAI ab.

     # Query the LLM def query_llm(prompt): response = client.chat.completions.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ] ) return response.choices[0].message.content


  1. Verbesserte Reaktion

    • Fügt Erdungsinformationen hinzu, falls verfügbar, oder
    • Fügt einen Haftungsausschluss hinzu, wenn keine relevanten Erdungsinformationen gefunden werden.
     def enhance_response(topic, llm_response): grounding_info = vector_search(llm_response) if grounding_info: # Check if the LLM's response aligns well with grounding information return f"{llm_response}\n\n(Verified Information: {grounding_info})" else: # Add a disclaimer when no grounding data is available return f"{llm_response}\n\n(Disclaimer: This information could not be verified against known data and may contain inaccuracies.)"
  2. Definieren Sie die Hauptfunktion

    Die Hauptfunktion kombiniert alles und ermöglicht Ihnen, ein Thema einzugeben, das LLM abzufragen und zu überprüfen, ob die Antwort mit den Grundlagendaten übereinstimmt.

     # Main function to execute the grounding check def main(): topic = input("Enter a topic: ") llm_response = query_llm(f"What can you tell me about {topic}?") grounding_info = vector_search(llm_response, threshold=0.8) print(f"LLM Response: {llm_response}") print(f"Grounding Information: {grounding_info}") if grounding_info != "No grounding information available": print("Response is grounded and reliable.") else: print("Potential hallucination detected. Using grounded information instead.") print(f"Grounded Answer: {grounding_info}") if __name__ == "__main__": main()

Ergebnis

Ausführen des Skripts

Rufen Sie dieses Snippet auf mit

 python groundin_llm.py


Die Antwort:

Geerdete, verbesserte Reaktion

Erläuterung

Wenn Sie sich die Antwort ansehen, war die Antwort von LLM zwar „Eine der am meisten empfohlenen Programmiersprachen für maschinelles Lernen …“, die fundierte Antwort war jedoch „Java ist großartig, es treibt den Großteil des Codes für maschinelles Lernen an und verfügt über eine große Anzahl verfügbarer Bibliotheken“.


Dies ist mithilfe der FAISS-Bibliothek von Meta für die auf Ähnlichkeit basierende Vektorsuche möglich.

Verfahren :

  1. Rufen Sie zuerst die LLM-Antwort ab.
  2. Prüfen Sie mithilfe der Vektorsuche, ob unsere Wissensdatenbank relevante Informationen enthält.
  3. Wenn vorhanden, geben Sie die Antwort aus der „Wissensdatenbank“ zurück.
  4. Wenn nicht, geben Sie die LLM-Antwort unverändert zurück.


Hier ist der Code: https://github.com/sundeep110/groundingLLMs

Viel Spaß beim Erden!!