Att använda stora språkmodeller för att bygga generativa AI-applikationer innebär nya utmaningar. En nyckelfråga är att säkerställa svarskvalitet (noggrannhet och relevans) i innehåll som genereras av modellen för en given användarförfrågan. I tidigare lektioner har vi diskuterat tekniker som prompt-engineering och retrieval-augmented generation som försöker lösa problemet genom att modifiera prompt-inmatningen till den befintliga modellen.
I dagens lektion diskuterar vi en tredje teknik, finjustering, som försöker ta itu med utmaningen genom att omträna själva modellen med ytterligare data. Låt oss gå in på detaljerna.
Denna lektion introducerar begreppet finjustering för förtränade språkmodeller, utforskar fördelar och utmaningar med detta tillvägagångssätt och ger vägledning om när och hur man använder finjustering för att förbättra prestandan hos dina generativa AI-modeller.
I slutet av denna lektion bör du kunna svara på följande frågor:
- Vad är finjustering för språkmodeller?
- När och varför är finjustering användbart?
- Hur kan jag finjustera en förtränad modell?
- Vilka är begränsningarna med finjustering?
Redo? Låt oss sätta igång.
Vill du få en övergripande bild av vad vi ska täcka innan vi dyker in? Titta på denna illustrerade guide som beskriver läranderesan för denna lektion – från att lära sig kärnbegrepp och motivation för finjustering till att förstå processen och bästa praxis för att utföra finjusteringsuppgiften. Detta är ett fascinerande ämne att utforska, så glöm inte att kolla in sidan Resurser för ytterligare länkar som stödjer din självstyrda inlärningsresa!
Enligt definition är stora språkmodeller förtränade på stora mängder text hämtad från olika källor inklusive internet. Som vi lärt oss i tidigare lektioner behöver vi tekniker som prompt-engineering och retrieval-augmented generation för att förbättra kvaliteten på modellens svar på användarens frågor ("prompts").
En populär prompt-engineering teknik innebär att ge modellen mer vägledning om vad som förväntas i svaret, antingen genom att ge instruktioner (explicit vägledning) eller ge den några exempel (implicit vägledning). Detta kallas few-shot learning men har två begränsningar:
- Modellens tokenbegränsningar kan begränsa antalet exempel du kan ge och därmed effektiviteten.
- Kostnaden för modellens tokens kan göra det dyrt att lägga till exempel till varje prompt och begränsa flexibiliteten.
Finjustering är en vanlig praxis inom maskininlärningssystem där vi tar en förtränad modell och tränar om den med ny data för att förbättra dess prestanda på en specifik uppgift. I kontexten av språkmodeller kan vi finjustera den förtränade modellen med en kuraterad uppsättning exempel för en given uppgift eller applikationsdomän för att skapa en anpassad modell som kan vara mer exakt och relevant för just den uppgiften eller domänen. En ytterligare fördel med finjustering är att det också kan minska antalet exempel som behövs för few-shot learning – vilket minskar tokenanvändning och relaterade kostnader.
I detta sammanhang, när vi pratar om finjustering, avser vi övervakad finjustering där omträningen görs genom att lägga till ny data som inte var del av den ursprungliga träningsdatamängden. Detta skiljer sig från en oövervakad finjustering där modellen tränas om på ursprungsdata, men med olika hyperparametrar.
Det viktigaste att komma ihåg är att finjustering är en avancerad teknik som kräver en viss nivå av expertis för att uppnå önskade resultat. Om det görs felaktigt kan det kanske inte ge de förväntade förbättringarna och kan till och med försämra modellens prestanda för din målade domän.
Så innan du lär dig "hur" du finjusterar språkmodeller, behöver du veta "varför" du ska ta denna väg och "när" du ska börja finjusteringsprocessen. Börja med att ställa dig själv dessa frågor:
- Användningsfall: Vad är ditt användningsfall för finjustering? Vilken aspekt av den nuvarande förtränade modellen vill du förbättra?
- Alternativ: Har du provat andra tekniker för att uppnå önskade resultat? Använd dem för att skapa en baslinje för jämförelse.
- Prompt-engineering: Testa tekniker som few-shot prompting med exempel på relevanta prompt-svar. Utvärdera svarens kvalitet.
- Retrieval Augmented Generation: Försök att förstärka prompts med sökresultat från dina data. Utvärdera svarens kvalitet.
- Kostnader: Har du identifierat kostnaderna för finjustering?
- Tunbarhet – är den förtränade modellen tillgänglig för finjustering?
- Insats – för att förbereda träningsdata, utvärdera och förfina modellen.
- Beräkning – för att köra finjusteringsjobb och distribuera den finjusterade modellen.
- Data – tillgång till kvalitativa exempel i tillräcklig omfattning för finjusteringspåverkan.
- Fördelar: Har du bekräftat fördelarna med finjustering?
- Kvalitet – presterade den finjusterade modellen bättre än baslinjen?
- Kostnad – minskar det tokenanvändningen genom att förenkla prompts?
- Utbyggbarhet – kan du återanvända basmodellen för nya domäner?
Genom att svara på dessa frågor bör du kunna avgöra om finjustering är rätt tillvägagångssätt för ditt användningsfall. Idealiskt är tillvägagångssättet giltigt endast om fördelarna överväger kostnaderna. När du bestämt dig för att gå vidare är det dags att tänka på hur du kan finjustera den förtränade modellen.
Vill du ha fler insikter om beslutsprocessen? Titta på To fine-tune or not to fine-tune
För att finjustera en förtränad modell behöver du:
- en förtränad modell att finjustera
- en dataset att använda för finjusteringen
- en träningsmiljö för att köra finjusteringsjobbet
- en hosting-miljö för att distribuera den finjusterade modellen
Följande resurser erbjuder steg-för-steg tutorials som guidar dig genom ett verkligt exempel med en utvald modell och kuraterad dataset. För att arbeta med dessa tutorials behöver du ett konto hos respektive leverantör samt tillgång till relevanta modeller och datasets.
| Leverantör | Tutorial | Beskrivning |
|---|---|---|
| OpenAI | Hur man finjusterar chattmodeller | Lär dig att finjustera en gpt-35-turbo för en specifik domän ("receptassistent") genom att förbereda träningsdata, köra finjusteringsjobbet och använda den finjusterade modellen för inferens. |
| Azure OpenAI | GPT 3.5 Turbo finjusteringsguide | Lär dig att finjustera en gpt-35-turbo-0613 modell på Azure genom att utföra steg för att skapa och ladda upp träningsdata, köra finjusteringsjobbet. Distribuera och använd den nya modellen. |
| Hugging Face | Finjustera LLMs med Hugging Face | Denna bloggpost visar hur du finjusterar en öppen LLM (exempel: CodeLlama 7B) med hjälp av transformers biblioteket & Transformer Reinforcement Learning (TRL) med öppna datasets på Hugging Face. |
| 🤗 AutoTrain | Finjustera LLMs med AutoTrain | AutoTrain (eller AutoTrain Advanced) är ett python-bibliotek utvecklat av Hugging Face som tillåter finjustering för många olika uppgifter inklusive LLM finjustering. AutoTrain är en lösning utan kod och finjustering kan göras i din egen moln, på Hugging Face Spaces eller lokalt. Den stöder både webbaserat GUI, CLI och träning via yaml-konfigurationsfiler. |
| 🦥 Unsloth | Finjustera LLMs med Unsloth | Unsloth är ett open-source-ramverk som stödjer finjustering av LLM och förstärkningsinlärning (RL). Unsloth förenklar lokal träning, utvärdering och distribution med färdiga notebooks. Det stöder även text-till-tal (TTS), BERT och multimodala modeller. För att komma igång, läs deras steg-för-steg Finjusteringsguide för LLMs. |
Välj en av tutorials ovan och gå igenom den. Vi kan komma att återskapa en version av dessa tutorials i Jupyter Notebooks i detta repo för referens endast. Vänligen använd originalkällorna direkt för att få de senaste versionerna.
Efter att ha slutfört denna lektion, kika på vår Generative AI Learning collection för att fortsätta utveckla din kunskap om generativ AI!
Grattis!! Du har slutfört den sista lektionen i v2-serien för denna kurs! Sluta inte lära och bygga. **Kolla in sidan RESURSER för en lista på ytterligare förslag för just detta ämne.
Vår v1-serie av lektioner har också uppdaterats med fler uppgifter och koncept. Så ta en minut för att fräscha upp din kunskap – och vänligen dela dina frågor och feedback för att hjälpa oss förbättra dessa lektioner för communityn.
Ansvarsfriskrivning: Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Trots att vi strävar efter noggrannhet kan automatiska översättningar innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål ska anses vara den auktoritativa källan. För viktig information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår till följd av användningen av denna översättning.

