Die meisten großen Sprachmodelle (LLMs) wie GPT-4 werden auf verallgemeinerten, oft veralteten Datensätzen geschult. Während sie sich hervorheben, um auf allgemeine Fragen zu antworten, haben sie mit Fragen zu jüngsten Nachrichten, neuesten Entwicklungen und domänenspezifischen Themen zu kämpfen. In solchen Fällen können sie ungenaue Antworten halluzinieren oder liefern.
Trotz der Entstehung von Modellen wie Claude 3.5 Sonett müssen wir immer noch entweder die Feinabstimmung modellieren, um maßgeschneiderte Antworten zu generieren oder die Systeme (Abruf-Augmented-Generation) zu verwenden, um dem Basismodell einen zusätzlichen Kontext zu bieten.
.In diesem Tutorial werden wir Rag und Feinabstimmung untersuchen, zwei unterschiedliche Techniken zur Verbesserung der LLM-Antworten. Wir werden ihre Unterschiede untersuchen und die Theorie durch Bewertung der Ergebnisse in die Praxis umsetzen.
Zusätzlich werden wir in Hybridtechniken eintauchen, die fein abgestimmte Modelle mit Lappensystemen kombinieren, um das Beste aus beiden Welten zu nutzen. Schließlich lernen wir, wie Sie zwischen diesen drei Ansätzen auf der Grundlage bestimmter Anwendungsfälle und Anforderungen wählen.
Rag- und Feinabstimmentechniken verbessern die Reaktionsgenerierung für domänenspezifische Abfragen, sind jedoch von Natur aus völlig unterschiedliche Techniken. Lassen Sie uns etwas über sie lernen.
retrieval-aus-generierte Generation ist ein Prozess, bei dem große Sprachmodelle wie GPT-4O mit externen Datenquellen zu kontextbewusst werden. Es ist eine Kombination aus einem Retriever und einem Generator. Der Retriever holt Daten aus dem Internet oder einer Vektor -Datenbank und stellt sie dem Generator mit der Abfrage des ursprünglichen Benutzers zur Verfügung. Der Generator verwendet einen zusätzlichen Kontext, um eine sehr genaue und relevante Antwort zu generieren.
Um mehr herauszufinden, lesen Sie unseren Artikel. Was ist Abruf Augmented Generation (LAG)? Ein Leitfaden für die Grundlagen und verstehen Sie die inneren Funktionsweise der Lag -Anwendung und verschiedene Anwendungsfälle.
Feinabstimmung ist der Prozess, das das vorgebildete Modell mithilfe des domänenspezifischen Datensatzes abzustimmen. Das vorgebildete Modell wird auf mehreren großen Leichen allgemeiner Datensätze aus dem Internet geschult. Sie sind gut darin, auf allgemeine Fragen zu antworten, aber sie werden kämpfen oder sogar halluzinieren, während sie auf domänenspezifische Fragen antworten.
Zum Beispiel könnte ein vorgebildetes Modell in allgemeinen Konversationsfähigkeiten kompetent sein, aber bei der Frage nach komplizierten medizinischen Verfahren oder rechtlichen Präzedenzfällen falsche Antworten hervorrufen.
Die Feinabstimmung in einem medizinischen oder rechtlichen Datensatz ermöglicht es dem Modell, Fragen in diesen Feldern mit größerer Genauigkeit und Relevanz zu verstehen und zu beantworten.
Folgen Sie dem Einführungshandbuch zum Fine-Tuning-LLMS-Tutorial, um das Anpassen des vorgebildeten Modells mit visuellen Leitfäden zu erfahren.
Wir haben jede Methodik zur Verbesserung der Reaktionsgenerierung der LLMs gelernt. Untersuchen wir die Unterschiede, um sie besser zu verstehen.
Rag verwendet einen dynamischen Lernstil, mit dem Sprachmodelle auf die neuesten und genauesten Daten aus Datenbanken, Internet oder sogar APIs zugreifen und sie verwenden können. Dieser Ansatz stellt sicher, dass die generierten Antworten immer aktuell und relevant sind.
Feinabstimmung beinhaltet statisches Lernen, bei dem das Modell während der Trainingsphase durch einen neuen Datensatz lernt. Während diese Methode es dem Modell ermöglicht, sich an die domänenspezifische Antwortgenerierung anzupassen, kann es keine neuen Informationen nach dem Training ohne erneuerung integrieren.
Lappen eignet sich am besten für Verallgemeinerungen. Es verwendet den Abrufprozess, um Informationen aus verschiedenen Datenquellen zu ziehen. RAG ändert nicht die Antwort des Modells. Es liefert nur zusätzliche Informationen, um das Modell zu leiten.
Feinabstimmung passt die Modellausgabe an und verbessert die Modellleistung auf einer speziellen Domäne, die eng mit dem Trainingsdatensatz zugeordnet ist. Es verändert auch den Stil der Reaktionsgenerierung und bietet manchmal relevantere Antworten als RAG -Systeme.
RAG ist ressourcenintensiv, da er während der Modellinferenz durchgeführt wird. Im Vergleich zu einfachen LLMs ohne Lappen benötigt Lappen mehr Speicher und Computer.
Feinabstimmung ist rechenintensiv, wird jedoch einmal durchgeführt. Während des Trainingsprozesses erfordert es mehrere GPUs und ein hohes Gedächtnis, aber danach ist es im Vergleich zu RAG-Systemen ziemlich ressourcenfreundlich.
Lappen erfordert, um modelle Einbettungsmodelle und LLMs der Klasse für eine bessere Reaktionsgenerierung zu erhalten. Es benötigt auch eine schnelle Vektordatenbank. Die API- und Betriebskosten können ziemlich schnell steigen.
Feinabstimmung kostet Sie während des Trainings nur einmal groß, aber danach zahlen Sie für Modellinferenz, was ziemlich billiger ist als Lag.
Insgesamt kostetim Durchschnitt die Feinabstimmung mehr als Lappen, wenn alles berücksichtigt wird.
Lappensysteme können von Software -Ingenieuren erstellt werden und erfordern mittelgroße technische Know -how. Sie müssen über LLM -Designs, Vektordatenbanken, Einbettungen, schnelle Ingenieure und mehr erfahren, was Zeit erfordert, aber in einem Monat leicht zu lernen ist.
Die Feinabstimmung des Modells erfordert ein hohes technisches Fachwissen. Von der Vorbereitung des Datensatzes bis hin zum Festlegen von Tuning -Parametern bis zur Überwachung der Modellleistung sind jahrelange Erfahrung im Bereich der Verarbeitung natürlicher Sprache erforderlich.
Lassen Sie uns unsere Theorie testen, indem wir einem fein abgestimmten Modell, einer Lappenanwendung und einem hybriden Ansatz dieselbe Eingabeaufforderung zur Verfügung stellen und dann die Ergebnisse bewerten. Der Hybridansatz kombiniert das fein abgestimmte Modell mit der RAG-Anwendung. In diesem Beispiel werden wir den Ruslanmv/AI-Medical-Chatbot-Datensatz aus dem Umarmungsgesicht verwenden, das Gespräche zwischen Patienten und Ärzten über verschiedene Gesundheitszustände enthält.
bauen
Wir werden zunächst die Lag -Anwendung mit dem Ökosystem Lama 3 und Langchain bauen.Sie können auch lernen, eine Lag -Anwendung mit Llamaindex zu erstellen, indem Sie dem Code folgen, die Augmented -Generation mit LamaNdex abrufen.
1. Installieren Sie alle erforderlichen Python -Pakete.
%%capture %pip install -U langchain langchainhub langchain_community langchain-huggingface faiss-gpu transformers accelerate
2. Laden Sie die erforderlichen Funktionen von Langchain- und Transformators -Bibliotheken.
from langchain.document_loaders import HuggingFaceDatasetLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import FAISS from transformers import AutoTokenizer, AutoModelForCausalLM,pipeline from langchain_huggingface import HuggingFacePipeline from langchain.chains import RetrievalQA
3. Um auf eingeschränkte Modelle und Datensätze zuzugreifen, wird empfohlen, sich mit der API -Taste bei der Umarmungs -Face -Hub anzumelden.
from huggingface_hub import login from kaggle_secrets import UserSecretsClient user_secrets = UserSecretsClient() hf_token = user_secrets.get_secret("HUGGINGFACE_TOKEN") login(token = hf_token)
4. Laden Sie den Datensatz, indem Sie den Dataset -Namen und den Spaltennamen in das Umarmungsfassaderatasetader angeben. Die Spalten "Doktor" werden unser Hauptdokument sein, und die restlichen Spalten sind die Metadaten.
5. Begrenzung unseres Datensatzes auf die ersten 1000 Zeilen. Durch die Reduzierung des Datensatzes können wir die Datenspeicherzeit in der Vector -Datenbank verkürzen.
# Specify the dataset name dataset_name = "ruslanmv/ai-medical-chatbot" # Create a loader instance using dataset columns loader_doctor = HuggingFaceDatasetLoader(dataset_name,"Doctor") # Load the data doctor_data = loader_doctor.load() # Select the first 1000 entries doctor_data = doctor_data[:1000] doctor_data[:2]
Wie wir sehen können, ist die Spalte "Doktor" der Seiteninhalt, und der Rest gelten als Metadaten.
6. Laden Sie das Einbettungsmodell vom Umarmungsgesicht mit spezifischen Parametern wie der Aktivierung der GPU -Beschleunigung.
7. Testen Sie das Einbettungsmodell, indem Sie es mit dem Beispieltext zur Verfügung stellen.
# Define the path to the embedding model modelPath = "sentence-transformers/all-MiniLM-L12-v2" # GPU acceleration model_kwargs = {'device':'cuda'} # Create a dictionary with encoding options encode_kwargs = {'normalize_embeddings': False} # Initialize an instance of HuggingFaceEmbeddings with the specified parameters embeddings = HuggingFaceEmbeddings( model_name=modelPath, model_kwargs=model_kwargs, encode_kwargs=encode_kwargs ) text = "Why are you a doctor?" query_result = embeddings.embed_query(text) query_result[:3]
[-0.059351932257413864, 0.08008933067321777, 0.040729623287916183]
8. Konvertieren Sie die Daten in die Einbettungen und speichern Sie sie in die Vektor -Datenbank.
9. Speichern Sie die Vektordatenbank im lokalen Verzeichnis.
10. Führen Sie eine Ähnlichkeitssuche mit der Beispielaufforderung durch.
vector_db = FAISS.from_documents(doctor_data, embeddings) vector_db.save_local("/kaggle/working/faiss_doctor_index") question = "Hi Doctor, I have a headache, help me." searchDocs = vector_db.similarity_search(question) print(searchDocs[0].page_content)
11. Konvertieren Sie die Vektor -Datenbankinstanz in einen Retriever. Dies wird uns helfen, die Lappenkette zu schaffen.
retriever = vector_db.as_retriever()
12. Laden Sie den Tokenizer und das Modell mit dem Lama 3 8B -Chat -Modell.
13. Verwenden Sie sie, um die Pipeline der Testgenerierung zu erstellen.
14. Konvertieren Sie die Pipeline in den Langchain LLM -Client.
import torch base_model = "/kaggle/input/llama-3/transformers/8b-chat-hf/1" tokenizer = AutoTokenizer.from_pretrained(base_model) model = AutoModelForCausalLM.from_pretrained( base_model, return_dict=True, low_cpu_mem_usage=True, torch_dtype=torch.float16, device_map="auto", trust_remote_code=True, ) pipe = pipeline( "text-generation", model=model, tokenizer=tokenizer, max_new_tokens=120 ) llm = HuggingFacePipeline(pipeline=pipe)
15. Erstellen Sie eine Frage und beantworten Sie die Kette mit Retriever, Benutzerabfrage, Lappen -Eingabeaufforderung und LLM.
from langchain import hub from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough rag_prompt = hub.pull("rlm/rag-prompt") qa_chain = ( {"context": retriever, "question": RunnablePassthrough()} | rag_prompt | llm | StrOutputParser() )
16. Testen Sie die Q & A -Kette, indem Sie dem Arzt Fragen stellen.
question = "Hi Doctor, I have a headache, help me." result = qa_chain.invoke(question) print(result.split("Answer: ")[1])
Es ist dem Datensatz ziemlich ähnlich, aber es nimmt den Stil nicht auf. Es hat den Kontext verstanden und es verwendet, um die Antwort in seinem eigenen Stil zu schreiben.
Versuchen wir es mit einer anderen Frage erneut.
%%capture %pip install -U langchain langchainhub langchain_community langchain-huggingface faiss-gpu transformers accelerate
Dies ist eine sehr direkte Antwort. Vielleicht müssen wir das Modell fein abstellen, anstatt den RAG-Ansatz für den Arzt und den Patienten-Chatbot zu verwenden.
Wenn Sie Schwierigkeiten beim Ausführen des Codes begegnen, wenden Sie sich bitte an das Kaggle Notebook: Erstellen von Lag -Anwendung mit Lama 3.
Erfahren Sie, wie Sie die Leistung des Lappensystems mit Techniken wie Chunking, Reranking und Abfragen von Transformationen verbessern, indem Sie die Lag -Leistung verbessern: 5 Schlüsseltechniken mit Beispielen Tutorial.
Wir werden das Modell auf dem Arzt- und Patienten-Datensatz nicht gut abtun, da wir dies bereits in einem früheren Tutorial gemacht haben: Feinabstimmung Lama 3 und lokal verwendet: eine Schritt-für-Schritt-Anleitung. Wir werden das fein abgestimmte Modell laden und dieselbe Frage zur Bewertung der Ergebnisse stellen. Das fein abgestimmte Modell ist auf Umarmung und Kaggle erhältlich.
Wenn Sie das GPT-4-Modell mithilfe der OpenAI-API eintunisieren möchten, können Sie sich auf das leicht zu befolgende DataCamp-Tutorial finden
1. Laden Sie den Tokenizer und das Modell mit der Transformator Library.
2. Stellen Sie sicher, dass Sie die richtigen Parameter verwenden, um das Modell in der Kaggle GPU T4 X2 -Umgebung zu laden.
from langchain.document_loaders import HuggingFaceDatasetLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import FAISS from transformers import AutoTokenizer, AutoModelForCausalLM,pipeline from langchain_huggingface import HuggingFacePipeline from langchain.chains import RetrievalQA
4. Erstellen Sie eine Pipeline für die Textgenerierung mit dem Modell und dem Tokenizer.
5. Geben Sie dem Pipeline -Objekt eine Eingabeaufforderung an und generieren Sie die Antwort.
from huggingface_hub import login from kaggle_secrets import UserSecretsClient user_secrets = UserSecretsClient() hf_token = user_secrets.get_secret("HUGGINGFACE_TOKEN") login(token = hf_token)
6. Lassen Sie uns die zweite Frage stellen.
Der Stil ist der gleiche und die Antwort ist ziemlich einfühlsam und erklärend.
# Specify the dataset name dataset_name = "ruslanmv/ai-medical-chatbot" # Create a loader instance using dataset columns loader_doctor = HuggingFaceDatasetLoader(dataset_name,"Doctor") # Load the data doctor_data = loader_doctor.load() # Select the first 1000 entries doctor_data = doctor_data[:1000] doctor_data[:2]
Wenn Sie auf Schwierigkeiten stoßen, den Code auszuführen
Wir werden das fein abgestimmte Modell nun einen zusätzlichen Kontext zur Verfügung stellen, um die Antwort weiter zu stimmen und das Gleichgewicht zu finden.
Anstatt den gesamten Code erneut zu schreiben, werden wir mit der Q & A -Kette direkt in die Antwortgenerierung eintauchen. Wenn Sie den vollständigen Code sehen möchten, wie wir ein feinstimmiges Modell mit einer RAG-Q & A-Kette kombiniert haben, sehen Sie sich bitte das Kaggle-Notebook des Hybridansatzes (RAG-Feinabstimmung) an.
Stellen Sie der Kette die gleichen Fragen zur Verfügung, die wir dem Lappen und dem fein abgestimmten Modell gestellt haben.
%%capture %pip install -U langchain langchainhub langchain_community langchain-huggingface faiss-gpu transformers accelerate
Die Antwort ist ziemlich genau und die Antwort wird im Arztstil erzeugt.
Lassen Sie uns die zweite Frage stellen.
from langchain.document_loaders import HuggingFaceDatasetLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import FAISS from transformers import AutoTokenizer, AutoModelForCausalLM,pipeline from langchain_huggingface import HuggingFacePipeline from langchain.chains import RetrievalQA
Das ist seltsam. Wir haben nie einen zusätzlichen Kontext darüber geliefert, ob die Akne mit Eiter gefüllt ist oder nicht. Vielleicht gilt das Hybridmodell nicht für einige Fragen.
Im Fall eines Chatbots von Arztpatienten zeichnet sich das fein abgestimmte Modell in Stiladoption und Genauigkeit aus. Dies kann jedoch für andere Anwendungsfälle variieren, weshalb es wichtig ist, umfangreiche Tests durchzuführen, um die beste Methode für Ihren spezifischen Anwendungsfall zu ermitteln.
Der offizielle Begriff für den Hybridansatz ist RAFT (Retrieval Augmented Fine-Tuning). Erfahren Sie mehr darüber, indem Sie lesen, was Raft ist? Kombination von Lappen und Feinabstimmungen, um LLMs an spezialisierte Domains-Blogs anzupassen.
Es hängt alles von Ihrem Anwendungsfall und den verfügbaren Ressourcen ab. Wenn Sie ein Startup mit begrenzten Ressourcen sind, bauen Sie einen RAG -Proof of Concept mit offenen AI -API und Langchain -Framework auf. Dafür benötigen Sie begrenzte Ressourcen, Fachkenntnisse und Datensätze.
Wenn Sie ein Unternehmen mit mittlerer Ebene sind und die Reaktionsgenauigkeit verbessern und das Open-Source-Modell in der Cloud bereitstellen möchten, müssen Sie Experten wie Datenwissenschaftler und Ingenieure für maschinelles Lernen einstellen. Die Feinabstimmung erfordert einen erstklassigen GPUs, einen großen Speicher, einen gereinigten Datensatz und ein technisches Team, das LLMs versteht.
Eine hybride Lösung ist sowohl Ressource als auch Berechnung intensiv. Es erfordert auch einen LLMOPS-Ingenieur, der Feinabstimmung und Lappen ausgleichen kann. Sie sollten dies berücksichtigen, wenn Sie Ihre Reaktionsgenerierung noch weiter verbessern möchten, indem Sie die guten Qualitäten von Lappen und einem fein abgestimmten Modell nutzen.
Weitere Informationen finden Sie in der Tabelle unten, um einen Überblick über Lappen-, Feinabstimmungs- und Floß-Lösungen zu erhalten.
rag |
Feinabstimmung |
raft |
|
Vorteile |
Kontextbezogenes Verständnis, minimiert Halluzinationen, passt sich leicht an neue Daten an, kostengünstig. |
aufgabenspezifisches Fachwissen, Anpassung, Verbesserung der Genauigkeit, erhöhte Robustheit. |
kombiniert Stärken von Lappen und Feinabstimmung, tieferes Verständnis und Kontext. |
Nachteile |
Datenquellenmanagement, Komplexität. |
Datenverzerrung, ressourcenintensive, hohe Rechenkosten, erhebliche Speicheranforderungen, Zeit- und Fachwissenintensiv. |
Komplexität bei der Implementierung erfordert das Ausgleich von Abruf- und Feinabstimmungsprozessen. |
Implementierungskomplexität |
höher als ein schnelles Engineering. |
höher als Lappen. Erfordert hochtechnische Experten. |
am komplexesten der drei. |
Lernstil |
dynamisch |
static |
dynamisches statisches |
Anpassungsfähigkeit |
passt sich leicht an neue Daten und sich weiterentwickelnde Fakten an. |
passen Sie die Ausgänge auf bestimmte Aufgaben und Domänen an. |
passt sich sowohl Echtzeitdaten als auch spezifische Aufgaben an. |
Kosten |
niedrig |
moderat |
High |
Ressourcenintensität |
niedrig. Ressourcen werden während der Inferenz verwendet. |
moderat. Ressourcen werden während der Feinabstimmung verwendet. |
High |
große Sprachmodelle stehen heute im Mittelpunkt der KI -Entwicklung. Unternehmen suchen nach verschiedenen Möglichkeiten, diese Modelle zu verbessern und anzupassen, ohne Millionen von Dollar für Schulungen auszugeben. Sie beginnen mit der Parameteroptimierung und zum schnellen Engineering. Sie wählen entweder Rag oder fein das Modell, um eine noch bessere Reaktion zu erhalten und Halluzinationen zu reduzieren. Obwohl es andere Techniken gibt, um die Reaktion zu verbessern, sind dies die beliebtesten Optionen.
In diesem Tutorial haben wir die Unterschiede zwischen Lappen und Feinabstimmung sowohl Theorie als auch praktischen Beispielen erfahren. Wir haben auch Hybridmodelle untersucht und verglichen, welche Methode für Sie am besten geeignet ist.
Um mehr über die Bereitstellung von LLMs und die verschiedenen beteiligten Techniken zu erfahren, lesen Sie unseren Code-Along mit LlamaNdex und unseren Kurs über die Bereitstellung von LLM-Anwendungen mit Langchain.
Das obige ist der detaillierte Inhalt vonRag gegen Feinabstimmung: Ein umfassendes Tutorial mit praktischen Beispielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!