Bevezetés
Biztos vagyok benne, hogy a legtöbben hallottak volna a ChatGPT-ről, és kipróbálták volna, hogy válaszoljanak kérdéseire! Gondolkozott már azon, hogy mi történik a motorháztető alatt? Az Open AI által kifejlesztett Large Language Model GPT-3 hajtja. Ezek a nagy nyelvi modellek, amelyeket gyakran LLM-eknek neveznek, számos lehetőséget nyitottak meg Természetes nyelvi feldolgozás.
Mik azok a nagy nyelvi modellek?
Az LLM modellek hatalmas mennyiségű szöveges adatra vannak kiképezve, lehetővé téve számukra, hogy megértsék az emberi nyelvet jelentéssel és kontextussal együtt. Korábban a legtöbb modellt felügyelt megközelítéssel képezték ki, ahol a beviteli funkciókat és a megfelelő címkéket tápláltuk. Ezzel ellentétben az LLM-eket felügyelet nélkül képezik, ahol hatalmas mennyiségű szöveges adatot táplálnak be minden címke és utasítás nélkül. Ezért az LLM-ek hatékonyan tanulják meg egy nyelv szavainak jelentését és kapcsolatait. Sokféle feladathoz használhatók, mint például szöveggenerálás, kérdések megválaszolása, fordítás egyik nyelvről a másikra és még sok más.
Mint egy cseresznye a tetején, ezek a nagy nyelvi modellek finomhangolhatók az egyéni adatkészleten a tartományspecifikus feladatokhoz. Ebben a cikkben beszélek a finomhangolás szükségességéről, a különböző elérhető LLM-ekről, és mutatok egy példát is.
Az LLM finomhangolás megértése
Tegyük fel, hogy Ön egy cukorbeteg-támogatási közösséget üzemeltet, és szeretne egy online segélyvonalat létrehozni a kérdések megválaszolására. Az előre képzett LLM általánosabb képzésben részesül, és nem tudja a legjobb választ adni a területspecifikus kérdésekre, és nem tudja megérteni az orvosi kifejezéseket és betűszavakat. Ez finomhangolással megoldható.
Mit értünk finomhangolás alatt? Röviden szólva, Átruházás
tanulás! A nagy nyelvi modelleket hatalmas adathalmazokra képezik, nagy erőforrásokat használva, és több millió paraméterrel rendelkeznek. Az LLM által az előképzés során tanult reprezentációk és nyelvi minták átkerülnek az aktuális feladathoz. Technikai értelemben inicializálunk egy modellt az előre betanított súlyokkal, majd betanítjuk a feladatspecifikus adatainkra, hogy a paraméterekhez több feladatra optimalizált súlyt érjünk el. Ezenkívül módosíthatja a modell architektúráját, és igény szerint módosíthatja a rétegeket.
Miért kell finomhangolni a modelleket?
- Takarítson meg időt és erőforrásokat: A finomhangolás segítségével csökkentheti a képzési időt és a szükséges erőforrásokat, mint a nulláról történő edzést.
- Csökkentett adatigény: Ha egy modellt a semmiből szeretne betanítani, hatalmas mennyiségű címkézett adatra lenne szüksége, amelyek gyakran nem állnak rendelkezésre magánszemélyek és kisvállalkozások számára. A finomhangolással még kisebb adatmennyiség mellett is jó teljesítményt érhet el.
- Testreszabása az Ön igényei szerint: Előfordulhat, hogy az előképzett LLM nem ismeri a domain-specifikus terminológiát és rövidítéseket. Például egy normál LLM nem ismeri fel, hogy az „1-es típusú” és a „2-es típus” a cukorbetegség típusait jelöli, míg a finomhangolt egy igen.
- Folyamatos tanulás engedélyezése: Tegyük fel, hogy a cukorbetegségre vonatkozó információs adatokon finomhangoltuk a modellünket, és bevezettük azt. Mi a teendő, ha rendelkezésre áll egy új diéta vagy kezelés, amelyet bele szeretne foglalni? Használhatja a korábban finomhangolt modell súlyait, és módosíthatja az új adatokkal. Ez segíthet a szervezeteknek abban, hogy modelleiket hatékonyan naprakészen tartsák.
Nyílt forráskódú LLM-modell kiválasztása
A következő lépés egy nagy nyelvi modell kiválasztása a feladatához. Milyen lehetőségei vannak? A jelenleg elérhető legkorszerűbb nagy nyelvi modellek közé tartozik a GPT-3, a Bloom, a BERT, a T5 és az XLNet. Ezek közül a GPT-3 (Generative Pretrained Transformers) mutatta a legjobb teljesítményt, mivel 175 milliárd paraméterre van kiképezve, és sokféle NLU-feladatot tud kezelni. A GPT-3 finomhangolása azonban csak fizetős előfizetésen keresztül érhető el, és viszonylag drágább, mint más lehetőségek.
Másrészt a BERT egy nyílt forráskódú nagy nyelvi modell, és ingyenesen finomhangolható. BERTI A kétirányú kódoló dekódoló transzformátorok rövidítése. A BERT kiváló munkát végez a kontextuális szóreprezentációk megértésében.
Hogyan válasszon?
Ha a feladata inkább a szöveggenerálásra irányul, a GPT-3 (fizetős) vagy a GPT-2 (nyílt forráskódú) modellek jobb választást jelentenek. Ha a feladata szövegbesorolás, kérdésmegválaszolás vagy entitásfelismerés alá tartozik, használhatja a BERT-t. A cukorbetegséggel kapcsolatos kérdések megválaszolásával kapcsolatos esetemben a BERT modellt használnám.
Adatkészlet előkészítése és előfeldolgozása
Ez a finomhangolás legdöntőbb lépése, mivel az adatok formátuma a modelltől és a feladattól függően változik. Erre az esetre készítettem egy minta szöveges dokumentumot a cukorbetegséggel kapcsolatos információkkal, amelyeket az Országos Egészségügyi Intézettől szereztem be. . Használhatja saját adatait.
A BERT kérdés-válaszolási feladatának finomhangolásához ajánlott az adatok SQuAD formátumba konvertálása. A SQuAD a Stanford Question Answering Dataset, és ezt a formátumot széles körben alkalmazzák a kérdések megválaszolására szolgáló NLP-modellek betanításához. Az adatoknak JSON formátumban kell lenniük, ahol minden mező a következőkből áll:
context
: Az a mondat vagy bekezdés szöveggel, amely alapján a modell választ keres a kérdésrequestion
: A lekérdezés, amelyre a BERT-től választ szeretnénk adni. Ezeket a kérdéseket az alapján kell megfogalmaznia, hogy a végfelhasználó hogyan kommunikálna a minőségbiztosítási modellel.answers
: Ebben a mezőben meg kell adnia a kívánt választ. Ez alatt két alkomponens található,text
és aanswer_start
Aztext
lesz a válaszszöveg. mivelanswer_start
az indexet jelöli, ahonnan a válasz a kontextus bekezdésben kezdődik.
Ahogy el tudja képzelni, sok időbe telne ezen adatok létrehozása a dokumentumhoz, ha manuálisan csinálná. Ne aggódjon, megmutatom, hogyan teheti meg egyszerűen a Haystack annotációs eszközzel.
Hogyan lehet adatokat létrehozni SQuAD formátumban a Haystack segítségével?
A Haystack annotációs eszközzel gyorsan létrehozhat egy címkézett adatkészletet a kérdésmegválaszolási feladatokhoz. Az eszközt úgy érheti el, hogy fiókot hoz létre náluk weboldal. Hozzon létre egy új projektet, és töltse fel a dokumentumot. Megtekintheti a „Dokumentumok” fül alatt, lépjen a „Műveletek” menüpontra, és ott megtekintheti a kérdések létrehozásának lehetőségét. A dokumentumban felírhatja kérdését és kiemelheti a választ, a Haystack automatikusan megtalálja a kezdő indexét. Az alábbi képen bemutattam, hogyan csináltam ezt a dokumentumomon.
1. ábra: Felcímkézett adatkészlet létrehozása a szénakazalban történő kérdés-válaszoláshoz
Ha elkészült a finomhangoláshoz elegendő kérdés-válasz pár létrehozásával, látnia kell ezek összefoglalását az alábbiak szerint. A „Címkék exportálása” lapon több lehetőséget is találhat az exportálni kívánt formátumhoz. Mi választjuk ki az esetünkhöz tartozó csapatformátumot. Ha további segítségre van szüksége az eszköz használatához, nézze meg őket dokumentáció. Mostantól megvan a JSON-fájlunk, amely tartalmazza a minőségbiztosítási párokat a finomhangoláshoz.
Hogyan kell finomhangolni?
A Python számos nyílt forráskódú csomagot kínál a finomhangoláshoz. Az esetemben a Pytorch and Transformers csomagot használtam. Kezdje a csomagmodulok importálásával a pip csomagkezelő segítségével. A transformers
könyvtár biztosítja a BERTTokenizer
, amely kifejezetten a BERT modell bemeneteinek tokenizálására szolgál.
!pip install torch
!pip install transformers import json
import torch
from transformers import BertTokenizer, BertForQuestionAnswering
from torch.utils.data import DataLoader, Dataset
Egyéni adatkészlet meghatározása a betöltéshez és az előfeldolgozáshoz
A következő lépés az adatok betöltése és előfeldolgozása. Használhatja a Dataset
osztály a pytorch's-tól utils.data
modult az adatkészlet egyéni osztályának meghatározásához. Létrehoztam egy egyéni adatkészlet osztályt diabetes
ahogy az alábbi kódrészletben is látható. A init
felelős a változók inicializálásáért. A file_path
egy argumentum, amely megadja a JSON-oktatófájl elérési útját, és az inicializáláshoz használható data
. Inicializáljuk a BertTokenizer
itt is.
Ezután meghatározzuk a load_data()
funkció. Ez a funkció beolvassa a JSON-fájlt egy JSON-adatobjektumba, és kivonja belőle a kontextust, a kérdést, a válaszokat és azok indexét. A kibontott mezőket listához fűzi, és visszaadja.
A getitem
a BERT tokenizer segítségével kódolja a kérdést és a kontextust bemeneti tenzorokba, amelyek ilyenek input_ids
és a attention_mask
Az encode_plus
tokenizálja a szöveget, és speciális tokeneket ad hozzá (például [CLS] és [SEP]). Vegye figyelembe, hogy a squeeze()
módszer az egyes méretek eltávolítására a BERT-be való bevitel előtt. Végül visszaadja a feldolgozott bemeneti tenzorokat.
class diabetes(Dataset): def __init__(self, file_path): self.data = self.load_data(file_path) self.tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') def load_data(self, file_path): with open(file_path, 'r') as f: data = json.load(f) paragraphs = data['data'][0]['paragraphs'] extracted_data = [] for paragraph in paragraphs: context = paragraph['context'] for qa in paragraph['qas']: question = qa['question'] answer = qa['answers'][0]['text'] start_pos = qa['answers'][0]['answer_start'] extracted_data.append({ 'context': context, 'question': question, 'answer': answer, 'start_pos': start_pos, }) return extracted_data def __len__(self): return len(self.data) def __getitem__(self, index): example = self.data[index] question = example['question'] context = example['context'] answer = example['answer'] inputs = self.tokenizer.encode_plus(question, context, add_special_tokens=True, padding='max_length', max_length=512, truncation=True, return_tensors='pt') input_ids = inputs['input_ids'].squeeze() attention_mask = inputs['attention_mask'].squeeze() start_pos = torch.tensor(example['start_pos']) return input_ids, attention_mask, start_pos, end_pos
Miután meghatározta, továbbléphet, és létrehozhat egy példányt ebből az osztályból a következő átadásával file_path
érv hozzá.
file_path = 'diabetes.json'
dataset = diabetes(file_path)
A modell képzése
használni fogom a BertForQuestionAnswering
modellt, mivel ez a legalkalmasabb a minőségbiztosítási feladatokhoz. Inicializálhatja az előre betanított súlyokat a bert-base-uncased
modell felhívásával a from_pretrained
funkciót a modellen. Ki kell választania a képzéshez használt értékelési veszteségfüggvényt és optimalizálót is.
Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!
Adam optimalizálót és kereszt entrópia veszteség függvényt használok. Használhatja a Pytorch osztályt DataLoader
az adatok különböző kötegekben történő betöltésére, valamint a torzítás elkerülése érdekében keverésre.
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = BertForQuestionAnswering.from_pretrained('bert-base-uncased')
model.to(device) optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5)
loss_fn = torch.nn.CrossEntropyLoss()
batch_size = 8
num_epochs = 50 data_loader = DataLoader(dataset, batch_size=batch_size, shuffle=True)
Az adatbetöltő meghatározása után folytathatja az utolsó edzési ciklus megírását. Az egyes iterációk során minden egyes tétel, amelyet a data_loader
tartalmaz batch_size
számú példa, amelyen előre és hátra terjedés történik. A kód megpróbálja megtalálni a paraméterek legjobb súlykészletét, amelynél a veszteség minimális lenne.
for epoch in range(num_epochs): model.train() total_loss = 0 for batch in data_loader: input_ids = batch[0].to(device) attention_mask = batch[1].to(device) start_positions = batch[2].to(device) optimizer.zero_grad() outputs = model(input_ids, attention_mask=attention_mask, start_positions=start_positions) loss = outputs.loss loss.backward() optimizer.step() total_loss += loss.item() avg_loss = total_loss / len(data_loader) print(f"Epoch {epoch+1}/{num_epochs} - Average Loss: {avg_loss:.4f}")
Ezzel befejeződik a finomhangolás! Beállításával tesztelheti a modellt model.eval()
. Használhatja a tanulási sebesség és az epochs no of epoch paraméterek finomhangolását is, hogy a legjobb eredményeket érje el adataival.
A legjobb tippek és gyakorlatok
A nagy nyelvi modellek egyéni adatokon történő finomhangolása során érdemes megjegyezni néhány szempontot:
- Az adatkészletnek azt a céltartományt vagy feladatot kell képviselnie, amelyben a nyelvi modellt ki kívánja fejezni. Tiszta és a jól strukturált adatok elengedhetetlenek.
- Győződjön meg arról, hogy elegendő képzési példája van az adatokban ahhoz, hogy a modell megtanulhassa a mintákat. Ellenkező esetben előfordulhat, hogy a modell megjegyzi a példákat, és túlméretezi magát, anélkül, hogy képes lenne rá általánosítani nem látott példákra.
- Válasszon egy előre betanított modellt, amelyet az adott feladathoz kapcsolódó korpuszon képeztek ki. A kérdések megválaszolásához egy előre betanított modellt választunk, amely a Stanford Question Answering adatkészleten van betanítva. Ehhez hasonlóan különböző modellek állnak rendelkezésre olyan feladatokhoz, mint a hangulatelemzés, szöveggenerálás, összegzés, szövegosztályozás stb.
- Megpróbál Gradiens felhalmozódás ha korlátozott a GPU memóriája. Ennél a módszernél ahelyett, hogy minden köteg után frissítené a modell súlyait, a színátmenetek több mini kötegben halmozódnak fel a frissítés végrehajtása előtt.
- Ha a finomhangolás során a túlillesztés problémájával szembesül, használja szabályozás technikák. Néhány általánosan használt módszer közé tartozik a kieső rétegek hozzáadása a modellarchitektúrához, a súlycsökkentés és a rétegnormalizálás megvalósítása.
Következtetés
A nagy nyelvi modellek segítségével számos feladatot gyorsan és hatékonyan automatizálhat. A finomhangoló LLM-ek segítenek kihasználni a tanulás átvitelének erejét, és testreszabni az adott tartományhoz. A finomhangolás elengedhetetlen lehet, ha adatkészlete olyan területekre vonatkozik, mint az orvosi, a műszaki rés, a pénzügyi adatkészletek stb.
Ebben a cikkben a BERT-et használtuk, mivel nyílt forráskódú, és jól használható személyes használatra. Ha nagyszabású projekten dolgozik, választhat erősebb LLM-eket, például GPT3-at, vagy más nyílt forráskódú alternatívákat. Ne feledje, hogy a nagy nyelvi modellek finomhangolása számítási szempontból költséges és időigényes lehet. Győződjön meg arról, hogy elegendő számítási erőforrással rendelkezik, beleértve a GPU-kat vagy a TPU-kat a skála alapján.
- SEO által támogatott tartalom és PR terjesztés. Erősödjön még ma.
- PlatoData.Network Vertical Generative Ai. Erősítse meg magát. Hozzáférés itt.
- PlatoAiStream. Web3 Intelligence. Felerősített tudás. Hozzáférés itt.
- PlatoESG. Autóipar / elektromos járművek, Carbon, CleanTech, Energia, Környezet, Nap, Hulladékgazdálkodás. Hozzáférés itt.
- BlockOffsets. A környezetvédelmi ellentételezési tulajdon korszerűsítése. Hozzáférés itt.
- Forrás: https://stackabuse.com/guide-to-fine-tuning-open-source-llms-on-custom-data/
- :van
- :is
- :nem
- :ahol
- $ UP
- 1
- 12
- 20
- 8
- a
- Képes
- Rólunk
- hozzáférés
- igénybe vett
- Fiók
- Felgyülemlett
- Elérése
- cselekvések
- tulajdonképpen
- Ádám
- hozzáadásával
- Hozzáteszi
- fogadott
- Után
- előre
- AI
- Is
- alternatívák
- am
- között
- összeg
- Összegek
- an
- elemzés
- és a
- Másik
- válasz
- válaszok
- bármilyen
- megközelítés
- építészet
- VANNAK
- érv
- cikkben
- AS
- At
- Kísérletek
- automatizált
- automatikusan
- elérhető
- átlagos
- elkerülése érdekében
- alapján
- BE
- óta
- előtt
- lent
- BEST
- Jobb
- között
- előítélet
- Billió
- Virágzik
- határ
- vállalkozások
- de
- by
- hívás
- TUD
- Kapacitás
- eset
- Fogás
- Változások
- ChatGPT
- ellenőrizze
- választás
- A pop-art design, négy időzóna kijelzése egyszerre és méretének arányai azok az érvek, amelyek a NeXtime Time Zones-t kiváló választássá teszik. Válassza a
- osztály
- besorolás
- kód
- általában
- közösség
- Befejezi
- következtetés
- áll
- tartalmaz
- kontextus
- szövegre vonatkozó
- konvertáló
- Megfelelő
- teremt
- készítette
- létrehozása
- Kereszt
- kritikus
- Jelenlegi
- Jelenleg
- szokás
- testre
- dátum
- adatkészletek
- meghatározott
- telepített
- kívánatos
- fejlett
- eszköz
- Cukorbetegség
- DID
- Diéta
- különböző
- méretek
- számos
- do
- dokumentum
- dokumentumok
- nem
- domain
- domainek
- Don
- csinált
- alatt
- minden
- könnyen
- hatékony
- eredményesen
- más
- lehetővé téve
- végén
- elég
- biztosítására
- egység
- korszak
- korszakok
- alapvető
- értékelés
- Még
- EVER
- példa
- példák
- Excel
- kiváló
- drága
- export
- kivonat
- Arc
- Vízesés
- Jellemzők
- Fed
- mező
- Fields
- filé
- utolsó
- Végül
- pénzügyi
- Találjon
- Összpontosít
- A
- formátum
- Előre
- KERET
- Ingyenes
- ból ből
- funkció
- általában
- generáció
- nemző
- megy
- Go
- jó
- GPU
- GPU
- színátmenetek
- útmutató
- kéz
- fogantyú
- hands-on
- megtörténik
- Legyen
- Egészség
- hallott
- nehéz
- segít
- ennélfogva
- itt
- Kiemel
- motorháztető
- lebeg
- Hogyan
- How To
- HTTPS
- hatalmas
- emberi
- alázatos
- i
- if
- kép
- kép
- végrehajtási
- importáló
- in
- tartalmaz
- beleértve
- Beleértve
- index
- egyének
- információ
- bemenet
- bemenet
- telepíteni
- példa
- utasítás
- kölcsönhatásba
- bele
- Bevezetés
- IT
- ismétlés
- Munka
- json
- Tart
- Címkék
- nyelv
- nagy
- nagyarányú
- réteg
- tojók
- TANUL
- tanult
- tanulás
- hadd
- Tőkeáttétel
- LG
- könyvtár
- mint
- Korlátozott
- Lista
- ll
- LLM
- kiszámításának
- rakodó
- betöltés
- le
- Sok
- csinál
- menedzser
- mód
- kézzel
- sok
- tömeges
- Lehet..
- jelent
- jelenti
- orvosi
- Memory design
- módszer
- mód
- esetleg
- Több millió
- minimális
- modell
- modellek
- módosítása
- Modulok
- Modulok
- több
- a legtöbb
- sok
- többszörös
- my
- nemzeti
- Szükség
- szükséges
- igények
- Új
- következő
- NIH
- NLP
- nem
- normális
- Most
- szám
- tárgy
- szerez
- kapott
- of
- Ajánlatok
- gyakran
- on
- ONE
- online
- csak
- nyitva
- nyílt forráskódú
- opció
- Opciók
- or
- szervezetek
- Más
- mi
- ki
- felett
- saját
- csomag
- csomagok
- fizetett
- párok
- paraméterek
- különös
- Múló
- ösvény
- minták
- mert
- teljesítmény
- teljesített
- előadó
- személyes
- terv
- Plató
- Platón adatintelligencia
- PlatoData
- pont
- lehetőségek
- hatalom
- powered
- erős
- Gyakorlati
- korábban
- Probléma
- Feldolgozott
- program
- ad
- biztosít
- pytorch
- Kérdések és válaszok
- kérdés
- Kérdések
- Quick
- gyorsan
- Arány
- Inkább
- el
- Olvass
- elismerés
- elismerik
- ajánlott
- csökkenteni
- említett
- Kapcsolatok
- viszonylag
- eszébe jut
- eltávolítása
- képvisel
- követelmények
- Tudástár
- felelős
- Eredmények
- Visszatér
- Gyűrű
- futás
- s
- azt mondják
- Skála
- kaparni
- Keresés
- lát
- MAGA
- mondat
- érzés
- készlet
- beállítás
- árnyék
- adatlap
- kellene
- előadás
- mutatott
- keverés
- jelent
- hasonló
- kicsi
- kisvállalkozások
- kisebb
- néhány
- forrás
- speciális
- különleges
- kifejezetten
- Stackabus
- szabványok
- állványok
- Stanford
- kezdet
- Kezdve
- csúcs-
- Lépés
- megáll
- Húr
- előfizetés
- ilyen
- elegendő
- ÖSSZEFOGLALÓ
- támogatás
- biztos
- Vesz
- Beszél
- cél
- Feladat
- feladatok
- Műszaki
- terminológia
- feltételek
- teszt
- Szöveg osztályozása
- mint
- hogy
- A
- azok
- Őket
- akkor
- Ott.
- Ezek
- ők
- ezt
- Keresztül
- idő
- időigényes
- tippek
- nak nek
- tokenizálni
- bontja le
- tokenek
- szerszám
- felső
- fáklya
- felé
- Vonat
- kiképzett
- Képzések
- átruházás
- átment
- transzformerek
- átmenet
- Fordítás
- kezelés
- kipróbált
- kettő
- típus
- típusok
- alatt
- megért
- megértés
- nem úgy mint
- up-to-date
- Frissítések
- frissítése
- használ
- használt
- használó
- használ
- segítségével
- fajta
- Megnézem
- akar
- we
- súly
- JÓL
- voltak
- Mit
- mivel
- ami
- míg
- széles
- széles körben
- lesz
- val vel
- nélkül
- szó
- szavak
- dolgozó
- művek
- aggódik
- lenne
- nem
- ír
- te
- A te
- zephyrnet