Predstavitev
Prepričan sem, da bi večina od vas že slišala za ChatGPT in ga preizkusila, da bi odgovorila na vaša vprašanja! Ste se kdaj vprašali, kaj se dogaja pod pokrovom? Poganja ga Large Language Model GPT-3, ki ga je razvil Open AI. Ti veliki jezikovni modeli, pogosto imenovani LLM, so odklenili številne možnosti v Obdelava Natural Language.
Kaj so veliki jezikovni modeli?
Modeli LLM se usposabljajo na ogromnih količinah besedilnih podatkov, kar jim omogoča razumevanje človeškega jezika s pomenom in kontekstom. Prej se je večina modelov usposabljala z uporabo nadzorovanega pristopa, kjer podajamo vhodne funkcije in ustrezne oznake. Za razliko od tega se LLM-ji usposabljajo z nenadzorovanim učenjem, kjer se jim vnesejo ogromne količine besedilnih podatkov brez kakršnih koli oznak in navodil. LLM se tako učinkovito naučijo pomena in odnosov med besedami jezika. Uporabljajo se lahko za najrazličnejša opravila, kot so ustvarjanje besedila, odgovarjanje na vprašanja, prevajanje iz enega jezika v drugega in še veliko več.
Kot češnja na vrhu je mogoče te velike jezikovne modele natančno nastaviti na vašem naboru podatkov po meri za naloge, specifične za domeno. V tem članku bom govoril o potrebi po natančnem prilagajanju, različnih razpoložljivih LLM-jih in pokazal primer.
Razumevanje natančnega uravnavanja LLM
Recimo, da vodite skupnost za pomoč pri sladkorni bolezni in želite vzpostaviti spletno telefonsko linijo za pomoč, kjer boste odgovarjali na vprašanja. Vnaprej usposobljen LLM je bolj splošno usposobljen in ne bi mogel zagotoviti najboljših odgovorov na vprašanja, specifična za domeno, ter ne bi mogel razumeti medicinskih izrazov in akronimov. To je mogoče rešiti s fino nastavitvijo.
Kaj mislimo s fino nastavitvijo? Če povem na kratko, prenos
učenje! Veliki jezikovni modeli se usposabljajo na ogromnih zbirkah podatkov z uporabo velikih virov in imajo na milijone parametrov. Reprezentacije in jezikovni vzorci, ki se jih nauči LLM med predhodnim usposabljanjem, se prenesejo na vašo trenutno nalogo. V tehničnem smislu inicializiramo model z vnaprej pripravljenimi utežmi in ga nato urimo na naših podatkih, specifičnih za nalogo, da dosežemo več uteži, optimiziranih za nalogo za parametre. Prav tako lahko spremenite arhitekturo modela in spremenite plasti po svojih potrebah.
Zakaj bi morali natančno prilagoditi modele?
- Prihranite čas in sredstva: Natančna nastavitev vam lahko pomaga skrajšati čas usposabljanja in potrebna sredstva kot usposabljanje od začetka.
- Zmanjšane podatkovne zahteve: Če želite usposobiti model iz nič, bi potrebovali ogromne količine označenih podatkov, ki posameznikom in malim podjetjem pogosto niso na voljo. Natančna nastavitev vam lahko pomaga doseči dobro delovanje tudi z manjšo količino podatkov.
- Prilagodite svojim potrebam: Vnaprej usposobljeni LLM morda ne bo razumel terminologije in okrajšav, specifičnih za vašo domeno. Na primer, običajni LLM ne bi prepoznal, da "Tip 1" in "Tip 2" označujeta vrste sladkorne bolezni, medtem ko natančno nastavljen lahko.
- Omogoči nenehno učenje: Recimo, da smo naš model natančno prilagodili podatki o sladkorni bolezni in ga uporabili. Kaj pa, če je na voljo nov načrt prehrane ali zdravljenje, ki ga želite vključiti? Uporabite lahko uteži vašega predhodno natančno nastavljenega modela in ga prilagodite tako, da vključuje vaše nove podatke. To lahko pomaga organizacijam, da ohranjajo svoje modele posodobljene na učinkovit način.
Izbira odprtokodnega modela LLM
Naslednji korak bi bila izbira velikega jezikovnega modela za vašo nalogo. Kakšne so vaše možnosti? Najsodobnejši veliki jezikovni modeli, ki so trenutno na voljo, vključujejo GPT-3, Bloom, BERT, T5 in XLNet. Med temi je GPT-3 (Generative Pretrained Transformers) pokazal najboljšo zmogljivost, saj je usposobljen za 175 milijard parametrov in lahko obravnava različne naloge NLU. Vendar pa je do natančne nastavitve GPT-3 mogoče dostopati samo prek plačane naročnine in je relativno dražja od drugih možnosti.
Po drugi strani pa je BERT odprtokodni velik jezikovni model in ga je mogoče brezplačno prilagoditi. BERTI okrajšava za dvosmerne kodirne dekoderske transformatorje. BERT odlično razume kontekstualne predstavitev besed.
Kako se odločite?
Če je vaša naloga bolj usmerjena v ustvarjanje besedila, bi bila boljša izbira model GPT-3 (plačljiv) ali GPT-2 (odprtokodni). Če vaša naloga spada pod klasifikacijo besedila, odgovarjanje na vprašanja ali prepoznavanje entitet, lahko uporabite BERT. Za moj primer odgovarjanja na vprašanja o sladkorni bolezni bi nadaljeval z modelom BERT.
Priprava in predhodna obdelava vašega nabora podatkov
To je najpomembnejši korak natančnega prilagajanja, saj se oblika podatkov razlikuje glede na model in nalogo. Za ta primer sem ustvaril vzorčni besedilni dokument z informacijami o sladkorni bolezni, ki sem ga pridobil pri Nacionalnem inštitutu za zdravje. spletna stran. Uporabite lahko svoje podatke.
Za natančno nastavitev naloge odgovarjanja na vprašanja BERT priporočamo pretvorbo podatkov v format SQuAD. SQuAD je Stanford Question Answering Dataset in ta oblika je splošno sprejeta za usposabljanje modelov NLP za naloge Question Answering. Podatki morajo biti v formatu JSON, kjer je vsako polje sestavljeno iz:
context
: Stavek ali odstavek z besedilom, na podlagi katerega bo model iskal odgovor na vprašanjequestion
: Poizvedba, za katero želimo, da BERT odgovori. Ta vprašanja bi morali oblikovati glede na to, kako bi končni uporabnik komuniciral z modelom zagotavljanja kakovosti.answers
: V to polje morate vnesti želeni odgovor. Pod tem sta dve podkomponenti,text
inanswer_start
.text
bo imel niz odgovorov. keranswer_start
označuje indeks, od koder se začne odgovor v kontekstnem odstavku.
Kot si lahko predstavljate, bi ustvarjanje teh podatkov za vaš dokument trajalo veliko časa, če bi to storili ročno. Ne skrbite, pokazal vam bom, kako to preprosto storite z orodjem za opombe Haystack.
Kako ustvariti podatke v formatu SQuAD s programom Haystack?
Z orodjem za opombe Haystack lahko hitro ustvarite označen nabor podatkov za naloge odgovorov na vprašanja. Do orodja lahko dostopate tako, da ustvarite račun na njihovem spletna stran. Ustvarite nov projekt in naložite svoj dokument. Ogledate si ga lahko pod zavihkom »Dokumenti«, pojdite na »Dejanja« in vidite možnost za ustvarjanje vprašanj. Lahko napišete svoje vprašanje in označite odgovor v dokumentu, Haystack bo samodejno našel njegov začetni indeks. Na spodnji sliki sem pokazal, kako sem to naredil na svojem dokumentu.
Slika 1: Ustvarjanje označenega nabora podatkov za odgovarjanje na vprašanja s Haystackom
Ko končate z ustvarjanjem dovolj parov vprašanje-odgovor za natančno nastavitev, bi morali imeti možnost videti njihov povzetek, kot je prikazano spodaj. Pod zavihkom »Izvozi oznake« lahko najdete več možnosti za format, v katerega želite izvoziti. Za naš primer izberemo format ekipe. Če potrebujete dodatno pomoč pri uporabi orodja, jih lahko preverite Dokumentacija. Zdaj imamo svojo datoteko JSON, ki vsebuje pare QA za natančno nastavitev.
Kako natančno nastaviti?
Python ponuja številne odprtokodne pakete, ki jih lahko uporabite za natančno nastavitev. Za svoj primer sem uporabil paket Pytorch in Transformers. Začnite z uvozom paketnih modulov z uporabo pip, upravitelja paketov. The transformers
knjižnica ponuja a BERTTokenizer
, ki je posebej za tokeniziranje vnosov v model BERT.
!pip install torch
!pip install transformers import json
import torch
from transformers import BertTokenizer, BertForQuestionAnswering
from torch.utils.data import DataLoader, Dataset
Definiranje nabora podatkov po meri za nalaganje in predhodno obdelavo
Naslednji korak je nalaganje in predhodna obdelava podatkov. Lahko uporabite Dataset
razred iz pytorcha utils.data
modul za definiranje razreda po meri za vaš nabor podatkov. Ustvaril sem razred nabora podatkov po meri diabetes
kot lahko vidite v spodnjem delčku kode. The init
je odgovoren za inicializacijo spremenljivk. The file_path
je argument, ki bo vnesel pot vaše učne datoteke JSON in bo uporabljen za inicializacijo data
. Inicializiramo BertTokenizer
tudi tukaj.
Nato definiramo a load_data()
funkcijo. Ta funkcija bo prebrala datoteko JSON v podatkovni objekt JSON in iz nje izvlekla kontekst, vprašanje, odgovore in njihov indeks. Izvlečena polja doda na seznam in ga vrne.
O getitem
uporablja tokenizer BERT za kodiranje vprašanja in konteksta v vhodne tenzorje, ki so input_ids
in attention_mask
. encode_plus
bo tokeniziral besedilo in dodal posebne žetone (kot sta [CLS] in [SEP]). Upoštevajte, da uporabljamo squeeze()
metoda za odstranitev morebitnih posameznih dimenzij pred vnosom v BERT. Na koncu vrne obdelane vhodne tenzorje.
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
Ko ga definirate, lahko nadaljujete in ustvarite primerek tega razreda tako, da posredujete file_path
argument za to.
file_path = 'diabetes.json'
dataset = diabetes(file_path)
Izobraževanje modela
Uporabil bom BertForQuestionAnswering
model, saj je najbolj primeren za naloge QA. Inicializirate lahko vnaprej pripravljene uteži bert-base-uncased
modela tako, da pokličete from_pretrained
funkcijo na modelu. Izbrati morate tudi funkcijo izgube ocene in optimizator, ki ju boste uporabljali za usposabljanje.
Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!
Uporabljam optimizator Adam in funkcijo navzkrižne entropijske izgube. Uporabite lahko razred Pytorch DataLoader
za nalaganje podatkov v različnih serijah in njihovo mešanje, da se izognete kakršni koli pristranskosti.
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)
Ko je nalagalnik podatkov definiran, lahko nadaljujete in napišete končno vadbeno zanko. Med vsako ponovitvijo je vsaka serija, pridobljena iz data_loader
Vsebuje batch_size
število primerov, na katerih se izvaja propagacija naprej in nazaj. Koda poskuša najti najboljši niz uteži za parametre, pri katerih bi bila izguba minimalna.
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}")
S tem je vaša fina nastavitev zaključena! Model lahko preizkusite tako, da ga nastavite na model.eval()
. Uporabite lahko tudi natančno nastavitev stopnje učenja in parametrov št. epoh, da dobite najboljše rezultate na svojih podatkih.
Najboljši nasveti in prakse
Tukaj je nekaj točk, ki jih morate upoštevati pri natančnem prilagajanju velikih jezikovnih modelov na podatkih po meri:
- Vaš nabor podatkov mora predstavljati ciljno domeno ali nalogo, pri kateri želite, da je jezikovni model odličen. Očistite in dobro strukturirani podatki so bistveni.
- Zagotovite, da imate v svojih podatkih dovolj primerov za usposabljanje, da se lahko model nauči vzorcev. V nasprotnem primeru bi si lahko model zapomnil primere in se preveč prilagodil, ne da bi bil zmožen posplošiti do nevidenih primerov.
- Izberite vnaprej usposobljen model, ki je bil usposobljen za korpus, ki ustreza vaši nalogi. Za odgovarjanje na vprašanja izberemo vnaprej usposobljen model, ki je usposobljen na naboru podatkov Stanford Question Answering. Podobno temu so na voljo različni modeli za naloge, kot so analiza razpoloženja, generiranje besedila, povzemanje, razvrščanje besedil in drugo.
- Poskusite Gradientno kopičenje če imate omejen pomnilnik GPE. Pri tej metodi se namesto posodabljanja uteži modela po vsaki seriji gradienti zberejo v več mini serijah, preden se izvede posodobitev.
- Če se med finim uravnavanjem srečujete s težavo prekomernega opremljanja, uporabite regularizacija technqiues. Nekatere pogosto uporabljene metode vključujejo dodajanje izpadnih slojev v arhitekturo modela, izvajanje upada teže in normalizacijo plasti.
zaključek
Veliki jezikovni modeli vam lahko pomagajo avtomatizirati številne naloge na hiter in učinkovit način. LLM s fino nastavitvijo vam pomaga izkoristiti moč prenosnega učenja in ga prilagoditi vaši določeni domeni. Natančna nastavitev je lahko bistvena, če je vaš nabor podatkov v domenah, kot so medicina, tehnična niša, nabori finančnih podatkov in več.
V tem članku smo uporabili BERT, saj je odprtokoden in dobro deluje za osebno uporabo. Če delate na obsežnem projektu, se lahko odločite za zmogljivejše LLM-je, kot je GPT3, ali druge odprtokodne alternative. Ne pozabite, da je natančno prilagajanje velikih jezikovnih modelov lahko računsko drago in dolgotrajno. Zagotovite, da imate dovolj računalniških virov, vključno z grafičnimi procesorji ali procesorji TPE glede na lestvico.
- Distribucija vsebine in PR s pomočjo SEO. Okrepite se še danes.
- PlatoData.Network Vertical Generative Ai. Opolnomočite se. Dostopite tukaj.
- PlatoAiStream. Web3 Intelligence. Razširjeno znanje. Dostopite tukaj.
- PlatoESG. Avtomobili/EV, Ogljik, CleanTech, Energija, Okolje, sončna energija, Ravnanje z odpadki. Dostopite tukaj.
- BlockOffsets. Posodobitev okoljskega offset lastništva. Dostopite tukaj.
- vir: https://stackabuse.com/guide-to-fine-tuning-open-source-llms-on-custom-data/
- :ima
- : je
- :ne
- :kje
- $GOR
- 1
- 12
- 20
- 8
- a
- Sposobna
- O meni
- dostop
- dostopna
- Račun
- Nakopičeno
- Doseči
- dejavnosti
- dejansko
- Adam
- dodajanje
- Dodaja
- sprejet
- po
- naprej
- AI
- Prav tako
- alternative
- am
- med
- znesek
- zneski
- an
- Analiza
- in
- Še ena
- odgovor
- odgovori
- kaj
- pristop
- Arhitektura
- SE
- Argument
- članek
- AS
- At
- Poskusi
- avtomatizirati
- samodejno
- Na voljo
- povprečno
- izogniti
- temeljijo
- BE
- bilo
- pred
- spodaj
- BEST
- Boljše
- med
- pristranskosti
- Billion
- Bloom
- meja
- podjetja
- vendar
- by
- kliče
- CAN
- kapaciteta
- primeru
- wrestling
- Spremembe
- ChatGPT
- preveriti
- izbira
- Izberite
- razred
- Razvrstitev
- Koda
- pogosto
- skupnost
- Zaključi
- Sklenitev
- vsebuje
- Vsebuje
- ozadje
- kontekstualno
- pretvorbo
- Ustrezno
- ustvarjajo
- ustvaril
- Ustvarjanje
- Cross
- ključnega pomena
- Trenutna
- Trenutno
- po meri
- prilagodite
- datum
- nabor podatkov
- opredeljen
- razporejeni
- želeno
- razvili
- naprava
- Sladkorna bolezen
- DID
- Prehrana
- drugačen
- dimenzije
- razne
- do
- dokument
- Dokumenti
- ne
- domena
- domen
- don
- opravljeno
- med
- vsak
- enostavno
- učinkovite
- učinkovito
- ostalo
- omogočanje
- konec
- dovolj
- zagotovitev
- entiteta
- epoha
- epohe
- bistvena
- Ocena
- Tudi
- VEDNO
- Primer
- Primeri
- Excel
- odlično
- drago
- izvoz
- ekstrakt
- Obraz
- Falls
- Lastnosti
- Fed
- Polje
- Področja
- file
- končna
- končno
- finančna
- Najdi
- Osredotočite
- za
- format
- Naprej
- FRAME
- brezplačno
- iz
- funkcija
- splošno
- generacija
- generativno
- git
- Go
- dobro
- GPU
- Grafične kartice
- gradienti
- vodi
- strani
- ročaj
- hands-on
- se zgodi
- Imajo
- Zdravje
- Slišal
- težka
- pomoč
- zato
- tukaj
- Označite
- napa
- hover
- Kako
- Kako
- HTTPS
- velika
- človeškega
- ogromno
- i
- if
- slika
- slika
- izvajanja
- uvoz
- in
- vključujejo
- vključeno
- Vključno
- Indeks
- posamezniki
- Podatki
- vhod
- vhodi
- namestitev
- primer
- Navodila
- interakcijo
- v
- Predstavitev
- IT
- ponovitev
- Job
- json
- Imejte
- Oznake
- jezik
- velika
- obsežne
- plast
- plasti
- UČITE
- naučili
- učenje
- Naj
- Vzvod
- LG
- Knjižnica
- kot
- Limited
- Seznam
- ll
- LLM
- obremenitev
- nakladač
- nalaganje
- off
- Sklop
- Znamka
- upravitelj
- Način
- ročno
- več
- ogromen
- Maj ..
- pomeni
- kar pomeni,
- medicinski
- Spomin
- Metoda
- Metode
- morda
- milijoni
- minimalna
- Model
- modeli
- spremenite
- Moduli
- Moduli
- več
- Najbolj
- veliko
- več
- my
- nacionalni
- Nimate
- potrebna
- potrebe
- Novo
- Naslednja
- NIH
- nlp
- št
- normalno
- zdaj
- Številka
- predmet
- pridobi
- pridobljeni
- of
- Ponudbe
- pogosto
- on
- ONE
- na spletu
- samo
- odprite
- open source
- Možnost
- možnosti
- or
- organizacije
- Ostalo
- naši
- ven
- več
- lastne
- paket
- pakete
- plačana
- parov
- parametri
- zlasti
- Podaje
- pot
- vzorci
- za
- performance
- opravljeno
- izvajati
- Osebni
- Načrt
- platon
- Platonova podatkovna inteligenca
- PlatoData
- točke
- možnosti
- moč
- poganja
- močan
- Praktično
- prej
- problem
- Predelano
- Projekt
- zagotavljajo
- zagotavlja
- pitorha
- Vprašanja in odgovori
- vprašanje
- vprašanja
- Hitri
- hitro
- Oceniti
- precej
- dosežejo
- Preberi
- Priznanje
- priznajo
- priporočeno
- zmanjša
- besedilu
- Razmerja
- relativno
- pomembno
- ne pozabite
- odstrani
- predstavljajo
- Zahteve
- viri
- odgovorna
- Rezultati
- vrne
- Ring
- Run
- s
- pravijo,
- Lestvica
- praska
- Iskalnik
- glej
- SAMO
- stavek
- sentiment
- nastavite
- nastavitev
- Shadow
- stanja
- shouldnt
- Prikaži
- pokazale
- shuffle
- pomenijo
- Podoben
- majhna
- mala podjetja
- manj
- nekaj
- vir
- posebna
- specifična
- posebej
- Stackabuse
- standardi
- stojala
- Stanford
- Začetek
- Začetek
- state-of-the-art
- Korak
- stop
- String
- naročnina
- taka
- dovolj
- POVZETEK
- podpora
- Preverite
- Bodite
- Pogovor
- ciljna
- Naloga
- Naloge
- tehnični
- terminologija
- Pogoji
- Test
- Razvrstitev besedil
- kot
- da
- O
- njihove
- Njih
- POTEM
- Tukaj.
- te
- jih
- ta
- skozi
- čas
- zamudno
- nasveti
- do
- tokenizirati
- označevanje
- Boni
- orodje
- vrh
- baklo
- proti
- Vlak
- usposobljeni
- usposabljanje
- prenos
- prenese
- transformatorji
- Prehod
- prevod
- Zdravljenje
- Poskušal
- dva
- tip
- Vrste
- pod
- razumeli
- razumevanje
- za razliko od
- up-to-date
- Nadgradnja
- posodabljanje
- uporaba
- Rabljeni
- uporabnik
- uporablja
- uporabo
- raznolikost
- Poglej
- želeli
- we
- teža
- Dobro
- so bili
- Kaj
- medtem ko
- ki
- medtem
- široka
- pogosto
- bo
- z
- brez
- beseda
- besede
- deluje
- deluje
- skrbi
- bi
- ne bi
- pisati
- Vi
- Vaša rutina za
- zefirnet