Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln förklarar hur stora språkmodeller (LLM) kan använda extra data för att ge bättre svar. Som standard vet en LLM bara vad den lärde sig under träningen. Du kan lägga till realtidsdata eller privata data för att göra det mer användbart.
Det finns två huvudsakliga sätt att lägga till dessa extra data:
- Hämtningsförhöjd generation (RAG): Använder semantisk sökning och kontextuell priming för att hitta och lägga till användbar information innan modellen svarar. Läs mer i Viktiga begrepp och överväganden för att skapa generativa AI-lösningar.
- Finjustering: Tränar om LLM på en mindre, specifik datauppsättning så att den blir bättre på vissa uppgifter eller ämnen.
I nästa avsnitt delas båda metoderna upp.
Förstå RAG
RAG aktiverar nyckelscenariot "chatta över mina data". I det här scenariot har en organisation en potentiellt stor mängd textinnehåll, till exempel dokument, dokumentation och andra upphovsrättsskyddade data. Den använder denna corpus som grund för svar på användarfrågor.
MED RAG kan du skapa chattrobotar som besvarar frågor med dina egna dokument. Så här fungerar det:
- Lagra dina dokument (eller delar av dem, så kallade segment) i en databas
- Skapa en inbäddning för varje segment; en lista med tal som beskriver det
- När någon ställer en fråga hittar systemet liknande segment
- Skicka relevanta segment tillsammans med frågan till LLM för att skapa ett svar
Skapa ett index över vektoriserade dokument
Börja med att skapa ett vektordatalager. Det här arkivet innehåller inbäddningar för varje dokument eller segment. Följande diagram visar de viktigaste stegen för att skapa ett vektoriserat index för dina dokument.
Diagrammet visar en datapipeline. Den här pipelinen tar in data, bearbetar dem och hanterar dem för systemet. Den förbereder också data för lagring i vektordatabasen och ser till att de är i rätt format för LLM.
Inbäddningar driver hela processen. En inbäddning är en uppsättning tal som representerar innebörden av ord, meningar eller dokument så att en maskininlärningsmodell kan använda dem.
Ett sätt att skapa en inbäddning är att skicka ditt innehåll till Azure OpenAI Embeddings API. API:et returnerar en vektor – en lista med tal. Varje tal beskriver något om innehållet, till exempel dess ämne, betydelse, grammatik eller stil.
- Ämnesämne
- Semantisk betydelse
- Syntax och grammatik
- Ord- och frasanvändning
- Kontextuella relationer
- Format eller ton
Alla dessa siffror visar tillsammans var innehållet finns i ett flerdimensionellt utrymme. Föreställ dig ett 3D-diagram, men med hundratals eller tusentals dimensioner. Datorer kan arbeta med den här typen av utrymme, även om vi inte kan rita det.
Självstudie: Utforska Azure OpenAI i Inbäddningar av Azure AI Foundry Models och dokumentsökning innehåller en guide om hur du använder API:et för Inbäddning av Azure OpenAI för att skapa inbäddningar för dina dokument.
Lagra vektor och innehåll
Nästa steg omfattar lagring av vektorn och innehållet (eller en pekare till innehållets plats) och andra metadata i en vektordatabas. En vektordatabas liknar alla andra typer av databaser, men med två viktiga skillnader:
- Vektordatabaser använder en vektor som ett index för att söka efter data
- Vektordatabaser använder ofta närmaste grannalgoritmer, som kan använda cosininlikitet som ett avståndsmått för att hitta vektorer som bäst matchar sökvillkoren
Med corpus av dokument som lagras i en vektordatabas kan utvecklare skapa en retrieverkomponent för att hämta dokument som matchar användarens fråga. Systemet använder dessa data för att förse LLM med det som krävs för att besvara användarens fråga.
Besvara frågor med hjälp av dina dokument
Ett RAG-system använder först semantisk sökning för att hitta artiklar som kan vara till hjälp för LLM när det skapar ett svar. Nästa steg innebär att skicka matchande artiklar med användarens ursprungliga uppmaning till LLM för att skapa ett svar.
Följande diagram visar en enkel RAG-implementering (kallas ibland naiv RAG):
I diagrammet skickar en användare en fråga. Först omvandlar systemet användarens uppmaning till en inbäddning. Sedan söker den igenom vektordatabasen för att hitta de dokument eller segment som mest liknar prompten.
Cosinernas likhet mäter hur nära två vektorer är genom att titta på vinkeln mellan dem. Ett värde nära 1 innebär att vektorerna är mycket lika; ett värde nära -1 innebär att de skiljer sig mycket åt. Den här metoden hjälper systemet att hitta dokument med liknande innehåll.
Närmaste grannalgoritmer hittar de vektorer som är närmast en viss punkt. Algoritmen k-nearest neighbors (KNN) letar efter de översta k närmaste matchningarna. System som rekommendationsmotorer använder ofta KNN och cosinélikhet tillsammans för att hitta de bästa matchningarna för en användares behov.
Efter sökningen skickar du det bästa matchande innehållet och användarens uppmaning till LLM så att det kan generera ett mer relevant svar.
Utmaningar och överväganden
Ett RAG-system har sina egna utmaningar:
- Datasekretess: Hantera användardata på ett ansvarsfullt sätt, särskilt när du hämtar eller bearbetar information från externa källor.
- Beräkningskrav: Förvänta dig att både hämtnings- och generationssteg använder betydande databehandlingsresurser.
- Noggrannhet och relevans: Fokusera på att leverera korrekta, relevanta svar och se upp för bias i dina data eller modeller.
Utvecklare måste hantera dessa utmaningar för att skapa RAG-system som är effektiva, etiska och värdefulla.
Mer information om hur du skapar produktionsklara RAG-system finns i Skapa avancerade hämtningsförhöjda generationssystem.
Vill du försöka skapa en generativ AI-lösning? Börja med Kom igång med chatten med ditt eget dataexempel för Python. Självstudier är också tillgängliga för .NET, Java och JavaScript.
Finjustera en modell
Finjustering tränar om en LLM på en mindre, domänspecifik datauppsättning efter den första träningen på en stor, allmän datamängd.
Under förträningen lär sig LLM:er språkstruktur, kontext och allmänna mönster från breda data. Finjustering lär modellen med nya, fokuserade data så att den kan prestera bättre på specifika uppgifter eller ämnen. Som den lär sig uppdaterar modellen sina vikter för att hantera information om nya data.
Viktiga fördelar med finjustering
- Specialisering: Finjustering hjälper modellen att göra bättre på specifika uppgifter, som att analysera juridiska eller medicinska dokument eller hantera kundservice.
- Effektivitet: Finjustering använder mindre data och färre resurser än att träna en modell från grunden.
- Anpassningsbarhet: Med finjustering kan modellen lära sig nya uppgifter eller domäner som inte omfattas av den ursprungliga träningen.
- Förbättrad prestanda: Finjustering hjälper modellen att förstå språk, stil eller terminologi för en ny domän.
- Anpassning: Finjustering kan göra att modellens svar passar en användares eller organisations behov eller inställningar.
Begränsningar och utmaningar
Finjustering har också några utmaningar:
- Datakrav: Du behöver en stor datauppsättning av hög kvalitet för din specifika uppgift eller domän.
- Risk för överanpassning: Med en liten datamängd kan modellen göra bra ifrån sig när det gäller att träna data men dåligt på nya data.
- Kostnad och resurser: Finjusteringen behöver fortfarande beräkningskraft, särskilt för stora modeller eller datauppsättningar.
- Underhåll och uppdatering: Du måste uppdatera finjusterade modeller när domänen ändras.
- Modellavvikelse: Finjustering för en viss uppgift kan göra modellen mindre effektiv för allmänna språkuppgifter.
Anpassa en modell genom finjustering förklarar hur du finjusterar en modell.
Finjustering jämfört med RAG
Finjustering och RAG hjälper båda LLM:er att fungera bättre, men var och en passar olika behov. Välj rätt metod baserat på dina mål, de data och den beräkning du har och om du vill att modellen ska specialisera sig eller förbli allmän.
När du ska välja finjustering
- Aktivitetsspecifik prestanda: Välj finjustering när du behöver toppresultat för en viss uppgift och har tillräckligt med domändata för att undvika överanpassning.
- Kontroll över data: Använd finjustering om du har unika eller proprietära data som skiljer sig mycket från vad basmodellen var förtränad på.
- Stabilt innehåll: Välj finjustering om uppgiften inte behöver ständiga uppdateringar med den senaste informationen.
När du ska välja RAG
- Dynamiskt eller föränderligt innehåll: Använd RAG när du behöver den senaste informationen, till exempel för nyheter eller senaste händelser.
- Bred ämnestäckning: Välj RAG om du vill ha starka resultat i många ämnen, inte bara ett område.
- Begränsade resurser: Gå med RAG om du inte har mycket data eller beräkning för träning och basmodellen redan gör ett bra jobb.
Slutliga tankar för programdesign
Bestäm mellan finjustering och RAG baserat på vad din app behöver. Finjustering är bäst för specialiserade uppgifter, medan RAG ger dig flexibilitet och up-to-date-innehåll för dynamiska scenarier.