Sissejuhatus
Olen kindel, et enamik teist oleks ChatGPT-st kuulnud ja proovinud seda oma küsimustele vastamiseks! Kas olete kunagi mõelnud, mis toimub kapoti all? Selle toiteallikaks on Open AI välja töötatud suur keelemudel GPT-3. Need suured keelemudelid, mida sageli nimetatakse LLM-ideks, on avanud palju võimalusi Natural Language Processing.
Mis on suured keelemudelid?
LLM-mudelid on koolitatud tohutul hulgal tekstiandmetel, mis võimaldavad neil mõista inimkeelt koos tähenduse ja kontekstiga. Varem koolitati enamikku mudeleid juhendatud lähenemisviisi abil, kus söödame sisendfunktsioone ja vastavaid silte. Erinevalt sellest koolitatakse LLM-e juhendamata õppimise teel, kus neile söödetakse tohutul hulgal tekstiandmeid ilma siltide ja juhisteta. Seega õpivad LLM-id tõhusalt keele sõnade tähendust ja seoseid. Neid saab kasutada mitmesuguste ülesannete jaoks, nagu teksti genereerimine, küsimustele vastamine, ühest keelest teise tõlkimine ja palju muud.
Nagu kirss peal, saab neid suuri keelemudeleid domeenispetsiifiliste ülesannete jaoks teie kohandatud andmekogus peenhäälestada. Selles artiklis räägin peenhäälestuse vajadusest, erinevatest saadaolevatest LLM-idest ja näitan ka näidet.
LLM-i peenhäälestuse mõistmine
Oletame, et juhite diabeeditoe kogukonda ja soovite luua küsimustele vastamiseks Interneti-abitelefoni. Eelkoolitatud LLM on koolitatud üldisemalt ja ei suuda anda parimaid vastuseid domeenipõhistele küsimustele ega mõista meditsiinilisi termineid ja akronüüme. Seda saab lahendada peenhäälestusega.
Mida me peenhäälestuse all mõtleme? Lühidalt öeldes Ülekanne
õppimine! Suured keelemudelid on koolitatud tohutute andmekogumite põhjal, kasutades suuri ressursse ja neil on miljoneid parameetreid. LLM-i eelkoolituse käigus õpitud esitused ja keelemustrid kantakse üle teie praegusesse ülesandesse. Tehnilises mõttes initsialiseerime mudeli eelnevalt treenitud raskustega ja seejärel treenime seda meie ülesandepõhiste andmete põhjal, et jõuda parameetrite jaoks ülesande jaoks optimeeritud kaaludeni. Samuti saate teha muudatusi mudeli arhitektuuris ja muuta kihte vastavalt oma vajadustele.
Miks peaksite mudeleid peenhäälestama?
- Säästke aega ja ressursse: Peenhäälestus võib aidata teil treenimiseks kuluvat aega ja ressursse vähendada kui nullist treenides.
- Vähendatud andmenõuded: Kui soovite mudelit nullist välja õpetada, vajate tohutul hulgal märgistatud andmeid, mis pole üksikisikute ja väikeettevõtete jaoks sageli saadaval. Peenhäälestus võib aidata teil saavutada häid tulemusi isegi väiksema andmehulga korral.
- Kohandage vastavalt oma vajadustele: Eelkoolitatud LLM ei pruugi olla teie domeenispetsiifiline terminoloogia ja lühendid. Näiteks tavaline LLM ei tunneks ära, et "tüüp 1" ja "tüüp 2" tähistavad diabeedi tüüpe, samas kui peenhäälestatud inimene võib seda teha.
- Luba pidev õppimine: Oletame, et viimistlesime oma mudelit diabeediteabe andmete põhjal ja võtsime selle kasutusele. Mis siis, kui on saadaval uus toitumiskava või ravi, mida soovite lisada? Saate kasutada oma varem peenhäälestatud mudeli kaalusid ja kohandada seda uute andmete lisamiseks. See võib aidata organisatsioonidel hoida oma mudeleid tõhusalt ajakohasena.
Avatud lähtekoodiga LLM-mudeli valimine
Järgmine samm oleks valida oma ülesande jaoks suur keelemudel. Millised on teie võimalused? Hetkel saadaolevate tipptasemel suurte keelemudelite hulka kuuluvad GPT-3, Bloom, BERT, T5 ja XLNet. Nende hulgas on parimat jõudlust näidanud GPT-3 (generatiivsed eeltreenitud transformaatorid), kuna see on koolitatud 175 miljardi parameetri jaoks ja saab hakkama erinevate NLU ülesannetega. Kuid GPT-3 peenhäälestamisele pääseb juurde ainult tasulise tellimuse kaudu ja see on suhteliselt kallim kui muud võimalused.
Teisest küljest on BERT avatud lähtekoodiga suur keelemudel ja seda saab tasuta viimistleda. BERT tähistab kahesuunalisi kodeerija dekoodertransformaatoreid. BERT teeb suurepärast tööd kontekstuaalsete sõnade esitusviiside mõistmisel.
Kuidas valida?
Kui teie ülesanne on rohkem orienteeritud teksti genereerimisele, oleks parem valik GPT-3 (tasuline) või GPT-2 (avatud lähtekoodiga) mudel. Kui teie ülesanne kuulub teksti liigitamise, küsimustele vastamise või olemituvastuse alla, võite kasutada BERT-i. Diabeedi küsimusele vastamise puhul kasutaksin BERTi mudelit.
Andmestiku ettevalmistamine ja eeltöötlemine
See on peenhäälestuse kõige olulisem samm, kuna andmete vorming varieerub olenevalt mudelist ja ülesandest. Selle juhtumi jaoks olen koostanud Tervise Instituudist hankinud diabeedialase teabega tekstidokumendi näidise. veebisait. Saate kasutada oma andmeid.
BERT-i küsimuste-vastuste ülesande täpsustamiseks on soovitatav oma andmed teisendada SQuAD-vormingusse. SQuAD on Stanfordi küsimustele vastamise andmestik ja seda vormingut kasutatakse laialdaselt küsimustele vastamise ülesannete NLP-mudelite koolitamiseks. Andmed peavad olema JSON-vormingus, kus iga väli koosneb:
context
: tekstiga lause või lõik, mille põhjal mudel küsimusele vastust otsibquestion
: päring, millele tahame, et BERT vastaks. Peaksite need küsimused kujundama selle põhjal, kuidas lõppkasutaja QA mudeliga suhtleb.answers
: sellel väljal peate sisestama soovitud vastuse. Selle all on kaks alamkomponenti,text
jaanswer_start
.text
on vastuse string. arvestades,answer_start
tähistab indeksit, kust algab vastus kontekstilõigus.
Nagu võite ette kujutada, kuluks nende andmete loomine oma dokumendi jaoks palju aega, kui teeksite seda käsitsi. Ärge muretsege, ma näitan teile, kuidas seda Haystacki märkuste tööriistaga hõlpsalt teha.
Kuidas luua heinakuhjaga andmeid SQuAD-vormingus?
Haystacki märkuste tööriista abil saate kiiresti luua märgistatud andmestiku küsimustele vastamise ülesannete jaoks. Tööriistale pääsete juurde, luues neile konto site. Looge uus projekt ja laadige dokument üles. Saate seda vaadata vahekaardil "Dokumendid", minge jaotisse "Toimingud" ja näete valikut küsimuste koostamiseks. Saate dokumendis kirjutada oma küsimuse ja vastuse esile tõsta, Haystack leiab automaatselt selle algusindeksi. Olen näidanud, kuidas ma seda tegin oma dokumendil alloleval pildil.
Joonis 1: Heinakuhjaga küsimustele vastamise jaoks märgistatud andmekogumi loomine
Kui olete peenhäälestamiseks piisava hulga küsimuste-vastuste paaride loomise lõpetanud, peaksite nägema nende kokkuvõtet, nagu allpool näidatud. Vahekaardil „Ekspordi sildid” leiate mitu valikut selle vormingu jaoks, milles soovite eksportida. Valime oma juhtumi jaoks rühmavormingu. Kui vajate tööriista kasutamisel rohkem abi, saate neid kontrollida dokumentatsioon. Nüüd on meil JSON-fail, mis sisaldab kvaliteedikontrolli paare peenhäälestamiseks.
Kuidas peenhäälestada?
Python pakub palju avatud lähtekoodiga pakette, mida saate peenhäälestamiseks kasutada. Kasutasin oma juhtumi jaoks paketti Pytorch ja Transformers. Alustage paketimoodulite importimisega paketihalduri pip abil. The transformers
raamatukogu pakub a BERTTokenizer
, mis on mõeldud spetsiaalselt BERT-mudeli sisendite märgistamiseks.
!pip install torch
!pip install transformers import json
import torch
from transformers import BertTokenizer, BertForQuestionAnswering
from torch.utils.data import DataLoader, Dataset
Kohandatud andmestiku määratlemine laadimiseks ja eeltöötluseks
Järgmine samm on andmete laadimine ja eeltöötlemine. Võite kasutada Dataset
klass pytorchist utils.data
moodulit, et määrata oma andmestikule kohandatud klass. Olen loonud kohandatud andmestiku klassi diabetes
nagu näete allolevast koodilõigust. The init
vastutab muutujate lähtestamise eest. The file_path
on argument, mis sisestab teie JSON-i treeningfaili tee ja mida kasutatakse lähtestamiseks data
. Initsialiseerime BertTokenizer
ka siin.
Järgmisena määratleme a load_data()
funktsiooni. See funktsioon loeb JSON-faili JSON-andmeobjektiks ja eraldab sellest konteksti, küsimuse, vastused ja nende indeksi. See lisab ekstraheeritud väljad loendisse ja tagastab selle.
. getitem
kasutab BERT-i tokenisaatorit, et kodeerida küsimus ja kontekst sisendtensorites, mis on input_ids
ja attention_mask
. encode_plus
muudab teksti märgiks ja lisab spetsiaalsed märgid (nt [CLS] ja [SEP]). Pange tähele, et me kasutame squeeze()
meetod üksikute mõõtmete eemaldamiseks enne BERT-i sisestamist. Lõpuks tagastab see töödeldud sisendtensorid.
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
Kui olete selle määratlenud, saate jätkata ja luua selle klassi eksemplari, edastades selle file_path
argument sellele.
file_path = 'diabetes.json'
dataset = diabetes(file_path)
Modelli koolitamine
Ma hakkan kasutama BertForQuestionAnswering
mudelit, kuna see sobib kõige paremini QA ülesannete täitmiseks. Saate lähtestada eelnevalt treenitud raskused bert-base-uncased
mudelile helistades from_pretrained
funktsioon mudelil. Samuti peaksite valima hindamise kadumise funktsiooni ja optimeerija, mida kasutaksite koolitusel.
Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!
Kasutan Adam optimeerijat ja ristentroopia kadumise funktsiooni. Võite kasutada Pytorchi klassi DataLoader
andmete laadimiseks erinevatesse partiidesse ja nende segamiseks, et vältida eelarvamusi.
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)
Kui andmelaadija on määratletud, võite jätkata ja kirjutada viimase treeningtsükli. Iga iteratsiooni ajal saadi iga partii data_loader
sisaldab batch_size
näidete arv, mille põhjal levitatakse edasi ja tagasi. Kood püüab leida parameetrite jaoks parima kaalukomplekti, mille puhul oleks kadu minimaalne.
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}")
See viib teie peenhäälestuse lõpule! Saate mudelit testida, seadistades selle olekusse model.eval()
. Oma andmetega parimate tulemuste saamiseks võite kasutada ka õppimiskiiruse ja ajastute arvu peenhäälestamist.
Parimad näpunäited ja tavad
Siin on mõned punktid, mida tuleb tähele panna kohandatud andmete põhjal suurte keelemudelite viimistlemisel.
- Teie andmestik peab esindama sihtdomeeni või -ülesannet, mille puhul soovite keelemudelil silma paista. puhastada ja hästi struktureeritud andmed on olulised.
- Veenduge, et teie andmetes oleks piisavalt koolitusnäiteid, et mudel saaks mustreid õppida. Vastasel juhul võib mudel näited meelde jätta ja sobida üle, ilma et oleks võimalik seda teha üldistada nähtamatutele näidetele.
- Valige eelkoolitatud mudel, mis on koolitatud teie ülesandega seotud korpusel. Küsimustele vastamiseks valime eelkoolitatud mudeli, mis on koolitatud Stanfordi küsimustele vastamise andmestiku põhjal. Sarnaselt sellele on saadaval erinevad mudelid selliste ülesannete jaoks nagu tundeanalüüs, teksti genereerimine, kokkuvõte, teksti klassifitseerimine ja palju muud.
- Püüdma Gradiendi kogunemine kui teil on piiratud GPU mälu. Selle meetodi puhul kogutakse enne värskendamist mudeli kaalude värskendamise asemel gradiente mitme minipartii peale.
- Kui teil tekib peenhäälestuse ajal ülepaigutamise probleem, kasutage seadustamine tehnikaid. Mõned sagedamini kasutatavad meetodid hõlmavad väljalangevate kihtide lisamist mudeli arhitektuurile, kaalu vähendamise ja kihtide normaliseerimise rakendamist.
Järeldus
Suured keelemudelid aitavad teil paljusid ülesandeid kiiresti ja tõhusalt automatiseerida. Täppishäälestavad LLM-id aitavad teil õppimise ülekandmise võimet kasutada ja kohandada seda teie konkreetse domeeni jaoks. Peenhäälestus võib olla oluline, kui teie andmestik on sellistes valdkondades nagu meditsiin, tehniline nišš, finantsandmed ja palju muud.
Selles artiklis kasutasime BERT-i, kuna see on avatud lähtekoodiga ja sobib hästi isiklikuks kasutamiseks. Kui töötate suuremahulise projekti kallal, saate valida võimsamad LLM-id, nagu GPT3, või muud avatud lähtekoodiga alternatiivid. Pidage meeles, et suurte keelemudelite peenhäälestus võib olla arvutuslikult kulukas ja aeganõudev. Veenduge, et teil oleks piisavalt arvutusressursse, sealhulgas skaalal põhinevaid GPU-sid või TPU-sid.
- SEO-põhise sisu ja PR-levi. Võimenduge juba täna.
- PlatoData.Network Vertikaalne generatiivne Ai. Jõustage ennast. Juurdepääs siia.
- PlatoAiStream. Web3 luure. Täiustatud teadmised. Juurdepääs siia.
- PlatoESG. Autod/elektrisõidukid, Süsinik, CleanTech, Energia, Keskkond päikeseenergia, Jäätmekäitluse. Juurdepääs siia.
- BlockOffsets. Keskkonnakompensatsiooni omandi ajakohastamine. Juurdepääs siia.
- Allikas: https://stackabuse.com/guide-to-fine-tuning-open-source-llms-on-custom-data/
- :on
- :on
- :mitte
- : kus
- $ UP
- 1
- 12
- 20
- 8
- a
- Võimalik
- MEIST
- juurdepääs
- pääses
- konto
- Kogunenud
- Saavutada
- meetmete
- tegelikult
- Adam
- lisades
- Lisab
- vastu
- pärast
- eespool
- AI
- Ka
- alternatiive
- am
- vahel
- summa
- summad
- an
- analüüs
- ja
- Teine
- vastus
- vastuseid
- mistahes
- lähenemine
- arhitektuur
- OLEME
- argument
- artikkel
- AS
- At
- Katsed
- automatiseerima
- automaatselt
- saadaval
- keskmine
- vältima
- põhineb
- BE
- olnud
- enne
- alla
- BEST
- Parem
- vahel
- erapoolikus
- Miljard
- Õitsema
- piir
- ettevõtted
- kuid
- by
- kutsudes
- CAN
- Võimsus
- juhul
- maadlus
- Vaidluste lahendamine
- ChatGPT
- kontrollima
- valik
- Vali
- klass
- klassifikatsioon
- kood
- tavaliselt
- kogukond
- Lõpetab
- järeldus
- koosneb
- sisaldab
- kontekst
- kontekstuaalne
- konverteeriva
- Vastav
- looma
- loodud
- loomine
- Rist
- otsustav
- Praegune
- Praegu
- tava
- kohandada
- andmed
- andmekogumid
- määratletud
- lähetatud
- soovitud
- arenenud
- seade
- Diabeet
- DID
- Dieet
- erinev
- mõõdud
- mitu
- do
- dokument
- dokumendid
- ei
- domeen
- Domeenid
- don
- tehtud
- ajal
- iga
- kergesti
- tõhus
- tõhusalt
- teine
- võimaldades
- lõpp
- piisavalt
- tagama
- üksus
- epohh
- ajajärgud
- oluline
- hindamine
- Isegi
- KUNAGI
- näide
- näited
- Excel
- suurepärane
- kallis
- eksport
- väljavõte
- nägu
- juga
- FUNKTSIOONID
- Toidetud
- väli
- Valdkonnad
- fail
- lõplik
- Lõpuks
- finants-
- leidma
- Keskenduma
- eest
- formaat
- edasi
- FRAME
- tasuta
- Alates
- funktsioon
- üldiselt
- põlvkond
- generatiivne
- Git
- Go
- hea
- GPU
- GPU
- kalded
- suunata
- käsi
- käepide
- käed-
- juhtub
- Olema
- Tervis
- kuulnud
- raske
- aitama
- sellest tulenevalt
- siin
- Esile tõstma
- kapuuts
- hõljuma
- Kuidas
- Kuidas
- HTTPS
- tohutu
- inim-
- hiigelsuur
- i
- if
- pilt
- kujutage ette
- rakendamisel
- importivate
- in
- sisaldama
- lisatud
- Kaasa arvatud
- indeks
- inimesed
- info
- sisend
- sisendite
- paigaldama
- Näiteks
- juhised
- suhelda
- sisse
- Sissejuhatus
- IT
- iteratsioon
- töö
- Json
- hoidma
- Labels
- keel
- suur
- suuremahuline
- kiht
- kihid
- Õppida
- õppinud
- õppimine
- laskma
- Finantsvõimendus
- LG
- Raamatukogu
- nagu
- piiratud
- nimekiri
- ll
- LLM
- koormus
- laadur
- laadimine
- kaotus
- Partii
- tegema
- juht
- viis
- käsitsi
- palju
- suur
- mai..
- keskmine
- tähendus
- meditsiini-
- Mälu
- meetod
- meetodid
- võib
- miljonid
- minimaalne
- mudel
- mudelid
- muutma
- moodulid
- Moodulid
- rohkem
- kõige
- palju
- mitmekordne
- my
- riiklik
- Vajadus
- vaja
- vajadustele
- Uus
- järgmine
- NIH
- nlp
- ei
- normaalne
- nüüd
- number
- objekt
- saama
- saadud
- of
- Pakkumised
- sageli
- on
- ONE
- Internetis
- ainult
- avatud
- avatud lähtekoodiga
- valik
- Valikud
- or
- organisatsioonid
- Muu
- meie
- välja
- üle
- enda
- pakend
- pakette
- makstud
- paari
- parameetrid
- eriline
- Mööduv
- tee
- mustrid
- kohta
- jõudlus
- teostatud
- esitades
- isiklik
- kava
- Platon
- Platoni andmete intelligentsus
- PlatoData
- võrra
- võimalused
- võim
- sisse
- võimas
- Praktiline
- varem
- Probleem
- Töödeldud
- projekt
- anda
- annab
- pütorch
- Küsimused ja vastused
- küsimus
- Küsimused
- Kiire
- kiiresti
- määr
- pigem
- jõudma
- Lugenud
- tunnustamine
- tunnistama
- soovitatav
- vähendama
- nimetatud
- Suhted
- suhteliselt
- asjakohane
- meeles pidama
- kõrvaldama
- esindama
- Nõuded
- Vahendid
- vastutav
- Tulemused
- Tulu
- ring
- jooks
- s
- ütlema
- Skaala
- kriimustada
- Otsing
- vaata
- SELF
- Lause
- tunne
- komplekt
- kehtestamine
- vari
- leht
- peaks
- näitama
- näidatud
- shuffle
- tähistama
- sarnane
- väike
- väikeettevõtted
- väiksem
- mõned
- allikas
- eriline
- konkreetse
- eriti
- Stackabus
- standardite
- seisab
- Stanford
- algus
- Käivitus
- modernne
- Samm
- Peatus
- nöör
- tellimine
- selline
- piisav
- KOKKUVÕTE
- toetama
- kindel
- Võtma
- rääkima
- sihtmärk
- Ülesanne
- ülesanded
- Tehniline
- terminoloogia
- tingimused
- test
- Teksti liigitus
- kui
- et
- .
- oma
- Neile
- SIIS
- Seal.
- Need
- nad
- see
- Läbi
- aeg
- aega võttev
- nõuanded
- et
- märkima
- märgistamine
- märgid
- tööriist
- ülemine
- tõrvik
- suunas
- Rong
- koolitatud
- koolitus
- üle
- üle antud
- trafod
- üleminek
- Tõlge
- ravi
- proovitud
- kaks
- tüüp
- liigid
- all
- mõistma
- mõistmine
- erinevalt
- ajakohane
- Värskendused
- ajakohastamine
- kasutama
- Kasutatud
- Kasutaja
- kasutusalad
- kasutamine
- sort
- vaade
- tahan
- we
- kaal
- Hästi
- olid
- M
- samas kui
- mis
- kuigi
- lai
- laialdaselt
- will
- koos
- ilma
- sõna
- sõnad
- töö
- töötab
- muretsema
- oleks
- ei tahaks
- kirjutama
- sa
- Sinu
- sephyrnet