Delen via


Een large language model uitbreiden met ophalen-augmented generation en fine-tuning

In de artikelen in deze reeks worden de modellen voor het ophalen van kennis besproken die LLM's gebruiken om hun antwoorden te genereren. Standaard heeft een LLM (Large Language Model) alleen toegang tot de trainingsgegevens. U kunt het model echter uitbreiden om realtime gegevens of persoonlijke gegevens op te nemen. In dit artikel wordt een van de twee mechanismen besproken voor het uitbreiden van een model.

Het eerste mechanisme is Rag (Retrieval-Augmented Generation), een vorm van voorverwerking die semantische zoekopdracht combineert met contextuele priming (besproken in een ander artikel).

Het tweede mechanisme is nauwkeurig afstemmen, dat verwijst naar het proces van verdere training van het model op een specifieke gegevensset na de eerste, brede training, met het doel om het beter aan te passen aan taken of concepten met betrekking tot die gegevensset te begrijpen. Dit proces helpt het model zich te specialiseren of de nauwkeurigheid en efficiëntie ervan te verbeteren bij het verwerken van bepaalde typen invoer of domeinen.

In de volgende secties worden deze twee mechanismen gedetailleerder beschreven.

Rag begrijpen

RAG wordt vaak gebruikt om het scenario 'chatten over mijn gegevens' mogelijk te maken, waarbij bedrijven met een grote hoeveelheid tekstinhoud (interne documenten, documentatie, enzovoort) en deze verzameling willen gebruiken als basis voor antwoorden op vragen van gebruikers.

Op hoog niveau maakt u een databasevermelding voor elk document (of een gedeelte van een document met de naam 'chunk'). Het segment wordt geïndexeerd op het insluiten, een vector (matrix) met getallen die facetten van het document vertegenwoordigen. Wanneer een gebruiker een query indient, zoekt u in de database naar vergelijkbare documenten en verzendt u vervolgens de query en de documenten naar de LLM om een antwoord op te stellen.

Notitie

De term Retrieval-Augmented Generation (RAG) accommodatief. Het proces voor het implementeren van een RAG-chatsysteem dat in dit artikel wordt beschreven, kan worden toegepast of er behoefte is aan het gebruik van externe gegevens die moeten worden gebruikt in een ondersteunende capaciteit (RAG) of als het middelpunt van het antwoord (RCG). Dit genuanceerde onderscheid wordt niet behandeld in de meeste leesingen met betrekking tot RAG.

Een index van gevectoriseerde documenten maken

De eerste stap bij het maken van een RAG-chatsysteem is het maken van een vectorgegevensarchief met de vectoring van het document (of een deel van het document). Bekijk het volgende diagram met een overzicht van de basisstappen voor het maken van een gevectoriseerde index van documenten.

Diagram met de verschillende fasen van opname van documenten, te beginnen met segmentering, vervolgens stappen na het segmenteren, vervolgens aanroepen naar de insluit-API en vervolgens de documentsegmenten op te slaan als gevectoriseerde insluitingen in de vectordatabase.

Dit diagram vertegenwoordigt een gegevenspijplijn, die verantwoordelijk is voor de opname, verwerking en beheer van gegevens die door het systeem worden gebruikt. Dit omvat het vooraf verwerken van gegevens die moeten worden opgeslagen in de vectordatabase en ervoor zorgen dat de gegevens die in de LLM worden ingevoerd, de juiste indeling hebben.

Het hele proces wordt aangestuurd door het idee van een insluiting, een numerieke weergave van gegevens (meestal woorden, woordgroepen, zinnen of zelfs hele documenten) waarmee de semantische eigenschappen van de invoer worden vastgelegd op een manier die kan worden verwerkt door machine learning-modellen.

Als u een insluiting wilt maken, verzendt u het stuk inhoud (zinnen, alinea's of hele documenten) naar de Azure OpenAI Embedding-API. Wat wordt geretourneerd door de Embedding-API is een vector. Elke waarde in de vector vertegenwoordigt een bepaalde eigenschap (dimensie) van de inhoud. Dimensies kunnen onderwerponderwerp, semantische betekenis, syntaxis en grammatica, gebruik van woorden en woordgroepen, contextuele relaties, stijl en toon, enzovoort omvatten. Samen vertegenwoordigen alle waarden van de vector de dimensionale ruimte van de inhoud. Met andere woorden, als u een 3D-weergave van een vector met drie waarden kunt zien, leeft een bepaalde vector in een bepaald gebied van het x-, y-, z-vlak. Wat gebeurt er als u 1000 (of meer) waarden hebt? Hoewel het niet mogelijk is voor mensen om een grafiek met 1000 dimensies te tekenen op een vel papier om het begrijpelijker te maken, hebben computers geen probleem om die mate van dimensionale ruimte te begrijpen.

In de volgende stap van het diagram ziet u hoe u de vector opslaat, samen met de inhoud zelf (of een aanwijzer naar de locatie van de inhoud) en andere metagegevens in een vectordatabase. Een vectordatabase is net als elk type database, met twee verschillen:

  • Vectordatabases gebruiken een vector als index om te zoeken naar gegevens.
  • Vectordatabases implementeren een algoritme genaamd cosinus vergelijkbare zoekopdracht, ook wel bekend als dichtstbijzijnde buur, die vectoren gebruikt die het meest overeenkomen met de zoekcriteria.

Met het verzameling documenten dat is opgeslagen in een vectordatabase, kunnen ontwikkelaars een retriever-onderdeel bouwen waarmee documenten worden opgehaald die overeenkomen met de query van de gebruiker uit de database om de LLM te leveren met wat het nodig heeft om de query van de gebruiker te beantwoorden.

Query's beantwoorden met uw documenten

Een RAG-systeem maakt eerst gebruik van semantische zoekopdrachten om artikelen te vinden die nuttig kunnen zijn voor de LLM bij het opstellen van een antwoord. De volgende stap bestaat uit het verzenden van de overeenkomende artikelen, samen met de oorspronkelijke prompt van de gebruiker naar de LLM om een antwoord op te stellen.

Bekijk het volgende diagram als een eenvoudige RAG-implementatie (ook wel 'naïef RAG' genoemd).

Diagram met een eenvoudige RAG-stroom, met vakken die stappen of processen en pijlen vertegenwoordigen die elk vak verbinden. De stroom begint met de query van de gebruiker, die wordt verzonden naar de Insluitings-API. De Insluiten-API retourneert resultaten in een vectorquery, die wordt gebruikt om de dichtstbijzijnde overeenkomsten (artikelsegmenten) in de vectordatabase te vinden. De query- en artikelsegmenten worden verzonden naar de voltooiings-API en de resultaten worden naar de gebruiker verzonden.

In het diagram verzendt een gebruiker een query. De eerste stap is het maken van een insluiting voor de prompt van de gebruiker om een vector terug te krijgen. De volgende stap is het doorzoeken van de vectordatabase voor die documenten (of delen van documenten) die overeenkomen met de dichtstbijzijnde buur.

Cosinus-gelijkenis is een meting die wordt gebruikt om te bepalen hoe vergelijkbare twee vectoren zijn, in wezen de cosinus van de hoek ertussen te beoordelen. Een cosinus-gelijkenis dicht bij 1 duidt op een hoge mate van gelijkenis (kleine hoek), terwijl een gelijkenis in de buurt van -1 aangeeft dat de hoek 180 graden nadert. Deze metrische waarde is van cruciaal belang voor taken zoals document vergelijkbaarheid, waarbij het doel is documenten met vergelijkbare inhoud of betekenis te vinden.

De algoritmen 'Dichtstbijzijnde buur' werken door de dichtstbijzijnde vectoren (buren) te vinden naar een bepaald punt in vectorruimte. In het K-dichtstbijzijnde buren-algoritme (KNN) verwijst 'k' naar het aantal dichtstbijzijnde buren dat moet worden overwogen. Deze benadering wordt veel gebruikt in classificatie en regressie, waarbij het algoritme het label van een nieuw gegevenspunt voorspelt op basis van het meerderheidslabel van de dichtstbijzijnde buren in de trainingsset. KNN en cosinus-overeenkomsten worden vaak samen gebruikt in systemen zoals aanbevelingsengines, waarbij het doel is om items te vinden die het meest lijken op de voorkeuren van een gebruiker, die worden weergegeven als vectoren in de insluitruimte.

U neemt de beste resultaten van die zoekopdracht en verzendt de overeenkomende inhoud samen met de prompt van de gebruiker om een antwoord te genereren dat (hopelijk) wordt geïnformeerd door overeenkomende inhoud.

Uitdagingen en overwegingen

Het implementeren van een RAG-systeem wordt geleverd met zijn set uitdagingen. Gegevensprivacy is van het grootste belang, omdat het systeem gebruikersgegevens op verantwoorde wijze moet verwerken, met name bij het ophalen en verwerken van informatie uit externe bronnen. Rekenvereisten kunnen ook aanzienlijk zijn, omdat zowel de ophaal- als generatieve processen resource-intensief zijn. Het garanderen van de nauwkeurigheid en relevantie van reacties tijdens het beheren van vooroordelen die aanwezig zijn in de gegevens of het model, is een andere belangrijke overweging. Ontwikkelaars moeten deze uitdagingen zorgvuldig doorlopen om efficiënte, ethische en waardevolle RAG-systemen te creëren.

Het volgende artikel in deze reeks, Het bouwen van geavanceerde systemen voor ophalen-Augmented Generation biedt meer informatie over het bouwen van gegevens en deductiepijplijnen om een productieklaar RAG-systeem mogelijk te maken.

Als u direct wilt experimenteren met het bouwen van een generatieve AI-oplossing, raden we u aan om aan de slag te gaan met de chat met behulp van uw eigen gegevensvoorbeeld voor Python. Er zijn ook versies van de zelfstudie beschikbaar in .NET, Java en JavaScript.

Een model verfijnen

Afstemmen, in de context van een LLM, verwijst naar het proces van het aanpassen van de parameters van het model op een domeinspecifieke gegevensset nadat deze in eerste instantie is getraind op een grote, diverse gegevensset.

LLM's worden getraind (vooraf getraind) op een brede gegevensset, die de taalstructuur, context en een breed scala aan kennis begrijpt. Deze fase omvat het leren van algemene taalpatronen. Bij het afstemmen wordt meer training toegevoegd aan het vooraf getrainde model op basis van een kleinere, specifieke gegevensset. Deze secundaire trainingsfase is erop gericht het model aan te passen om beter te presteren op bepaalde taken of om specifieke domeinen te begrijpen, waardoor de nauwkeurigheid en relevantie voor deze gespecialiseerde toepassingen worden verbeterd. Tijdens het verfijnen worden de gewichten van het model aangepast om de nuances van deze kleinere gegevensset beter te voorspellen of te begrijpen.

Enkele overwegingen:

  • Specialisatie: Afstemming van het model past het model aan op specifieke taken, zoals juridische documentanalyse, interpretatie van medische tekst of interacties met de klantenservice. Dit maakt het model effectiever op deze gebieden.
  • Efficiëntie: Het is efficiënter om een vooraf getraind model voor een specifieke taak af te stemmen dan om een volledig nieuw model te trainen, omdat voor het verfijnen van gegevens en rekenresources minder gegevens en rekenresources nodig zijn.
  • Aanpassingsvermogen: Met fine-tuning kunt u zich aanpassen aan nieuwe taken of domeinen die geen deel uitmaakten van de oorspronkelijke trainingsgegevens, waardoor LLM's veelzijdige hulpprogramma's voor verschillende toepassingen zijn.
  • Verbeterde prestaties: Voor taken die afwijken van de gegevens waarop het model oorspronkelijk is getraind, kan het verfijnen tot betere prestaties leiden, omdat het model wordt aangepast om inzicht te krijgen in de specifieke taal, stijl of terminologie die in het nieuwe domein wordt gebruikt.
  • Persoonlijke instellingen: In sommige toepassingen kunt u het aanpassen van de antwoorden of voorspellingen van het model aanpassen aan de specifieke behoeften of voorkeuren van een gebruiker of organisatie. Het verfijnen heeft echter bepaalde nadelen en beperkingen. Als u deze begrijpt, kunt u bepalen wanneer u kiest voor fine-tuning versus alternatieven zoals het ophalen van augmented generation (RAG).
  • Gegevensvereiste: Voor het afstemmen is een voldoende grote en hoogwaardige gegevensset vereist die specifiek is voor de doeltaak of het doeldomein. Het verzamelen en cureren van deze gegevensset kan lastig en resource-intensief zijn.
  • Overfitting risico: er is een risico op overfitting, met name met een kleine gegevensset. Overfitting zorgt ervoor dat het model goed presteert op de trainingsgegevens, maar slecht op nieuwe, ongelezen gegevens, waardoor de generaliseerbaarheid wordt verminderd.
  • Kosten en resources: hoewel minder resource-intensief is dan het trainen vanaf het begin, zijn er nog steeds rekenresources vereist, met name voor grote modellen en gegevenssets, wat voor sommige gebruikers of projecten mogelijk verboden is.
  • Onderhoud en bijwerken: bijgesneden modellen hebben mogelijk regelmatige updates nodig om effectief te blijven naarmate de domeinspecifieke informatie na verloop van tijd verandert. Dit doorlopende onderhoud vereist extra resources en gegevens.
  • Modeldrift: Omdat het model is afgestemd op specifieke taken, verliest het mogelijk een deel van zijn algemene taalbegrip en veelzijdigheid, wat leidt tot een fenomeen dat bekend staat als modeldrift.

Bij het aanpassen van een model met fine-tuning wordt uitgelegd hoe u een model kunt verfijnen. Op hoog niveau geeft u een JSON-gegevensset met potentiële vragen en voorkeursantwoorden op. De documentatie stelt voor dat er merkbare verbeteringen zijn door 50 tot 100 vraag-/antwoordparen op te geven, maar het juiste aantal varieert sterk voor de use-case.

Fine-tuning versus ophalen-augmented generation

Op het oppervlak lijkt het erop dat er nogal wat overlap is tussen het verfijnen en ophalen van uitgebreide generatie. Het kiezen tussen het afstemmen en ophalen van uitgebreide generatie hangt af van de specifieke vereisten van uw taak, waaronder prestatieverwachtingen, beschikbaarheid van resources en de noodzaak van domeinspecifiekheid versus generaliseerbaarheid.

Wanneer u liever de voorkeur geeft aan het afstemmen van de opzoek-Augmented Generation:

  • Taakspecifieke prestaties : afstemmen verdient de voorkeur wanneer hoge prestaties voor een specifieke taak essentieel zijn en er voldoende domeinspecifieke gegevens bestaan om het model effectief te trainen zonder aanzienlijke overfittingsrisico's.
  • Control Over gegevens : als u eigen of zeer gespecialiseerde gegevens hebt die aanzienlijk verschillen van de gegevens waarop het basismodel is getraind, kunt u deze unieke kennis opnemen in het model.
  • Beperkte behoefte aan realtime-updates : als de taak niet vereist dat het model voortdurend wordt bijgewerkt met de meest recente informatie, kan het afstemmen efficiënter zijn omdat RAG-modellen doorgaans toegang nodig hebben tot bijgewerkte externe databases of internet om recente gegevens op te halen.

Wanneer u liever Retrieval-Augmented Generation wilt ophalen via fine-tuning:

  • Dynamische of veranderende inhoud : RAG is geschikter voor taken waarbij de meest recente informatie essentieel is. Omdat RAG-modellen in realtime gegevens uit externe bronnen kunnen ophalen, zijn ze beter geschikt voor toepassingen zoals het genereren van nieuws of het beantwoorden van vragen over recente gebeurtenissen.
  • Generalisatie over specialisatie : als het doel is om sterke prestaties te behouden voor een breed scala aan onderwerpen in plaats van te excelleren in een smal domein, kan RAG de voorkeur hebben. Het maakt gebruik van externe Knowledge Bases, zodat er reacties kunnen worden gegenereerd in verschillende domeinen zonder dat er een risico bestaat op overfitting naar een specifieke gegevensset.
  • Resourcebeperkingen : voor organisaties met beperkte resources voor gegevensverzameling en modeltraining biedt het gebruik van een RAG-benadering mogelijk een rendabel alternatief voor het verfijnen, vooral als het basismodel al redelijk goed presteert op de gewenste taken.

Laatste overwegingen die van invloed kunnen zijn op uw ontwerpbeslissingen voor toepassingen

Hier volgt een korte lijst met zaken die u kunt overwegen en andere punten uit dit artikel die van invloed zijn op uw beslissingen over het ontwerp van uw toepassing:

  • Bepaal tussen het afstemmen en ophalen van uitgebreide generatie op basis van de specifieke behoeften van uw toepassing. Het afstemmen kan betere prestaties bieden voor gespecialiseerde taken, terwijl RAG flexibiliteit en actuele inhoud voor dynamische toepassingen kan bieden.