Wprowadzenie
Jestem pewien, że większość z was słyszała o ChatGPT i wypróbowała go, aby odpowiedzieć na pytania! Zastanawialiście się kiedyś, co dzieje się pod maską? Jest zasilany przez Large Language Model GPT-3 opracowany przez Open AI. Te duże modele językowe, często określane jako LLM, otworzyły wiele możliwości Przetwarzanie języka naturalnego.
Czym są modele dużych języków?
Modele LLM są szkolone na ogromnych ilościach danych tekstowych, umożliwiając im zrozumienie ludzkiego języka wraz ze znaczeniem i kontekstem. Wcześniej większość modeli była szkolona przy użyciu podejścia nadzorowanego, w którym wprowadzamy funkcje wejściowe i odpowiadające im etykiety. W przeciwieństwie do tego, LLM są szkoleni poprzez uczenie się bez nadzoru, gdzie są karmione ogromnymi ilościami danych tekstowych bez żadnych etykiet i instrukcji. Dlatego LLM skutecznie uczą się znaczenia i relacji między słowami języka. Mogą być używane do wielu różnych zadań, takich jak generowanie tekstu, odpowiadanie na pytania, tłumaczenie z jednego języka na inny i wiele więcej.
Wisienką na torcie jest to, że te duże modele językowe można dostosować do niestandardowego zestawu danych do zadań specyficznych dla domeny. W tym artykule omówię potrzebę dostrojenia, różne dostępne LLM, a także pokażę przykład.
Zrozumienie dostrajania LLM
Załóżmy, że prowadzisz społeczność wspierającą diabetyków i chcesz założyć infolinię online, aby odpowiadać na pytania. Wstępnie przeszkolony LLM jest przeszkolony bardziej ogólnie i nie byłby w stanie udzielić najlepszych odpowiedzi na pytania dotyczące konkretnej domeny ani zrozumieć terminów medycznych i akronimów. Można to rozwiązać za pomocą dostrajania.
Co rozumiemy przez dostrajanie? Mówiąc krótko, przelew
nauka! Duże modele językowe są szkolone na ogromnych zestawach danych przy użyciu dużych zasobów i mają miliony parametrów. Reprezentacje i wzorce językowe wyuczone przez LLM podczas szkolenia wstępnego są przenoszone do bieżącego zadania. Z technicznego punktu widzenia inicjujemy model z wstępnie wytrenowanymi wagami, a następnie trenujemy go na naszych danych specyficznych dla zadania, aby uzyskać więcej zoptymalizowanych pod kątem zadań wag dla parametrów. Możesz także wprowadzać zmiany w architekturze modelu i modyfikować warstwy zgodnie z potrzebami.
Dlaczego warto dostrajać modele?
- Oszczędzaj czas i zasoby: Dostrajanie może pomóc zredukować czas i zasoby potrzebne do szkolenia niż szkolenie od zera.
- Zmniejszone wymagania dotyczące danych: Jeśli chcesz wytrenować model od podstaw, potrzebujesz ogromnych ilości oznaczonych danych, które są często niedostępne dla osób prywatnych i małych firm. Dostrajanie może pomóc w osiągnięciu dobrej wydajności nawet przy mniejszej ilości danych.
- Dostosuj do swoich potrzeb: Wstępnie przeszkolony LLM może nie być w stanie wychwycić terminologii i skrótów specyficznych dla Twojej domeny. Na przykład normalny LLM nie rozpoznałby, że „Typ 1” i „Typ 2” oznaczają typy cukrzycy, podczas gdy dobrze dostrojony może.
- Włącz ciągłe uczenie się: Załóżmy, że dopracowaliśmy nasz model na podstawie danych dotyczących cukrzycy i wdrożyliśmy go. Co zrobić, jeśli dostępny jest nowy plan diety lub leczenie, które chcesz uwzględnić? Możesz użyć wag swojego wcześniej dostrojonego modelu i dostosować go tak, aby zawierał nowe dane. Może to pomóc organizacjom w efektywnym aktualizowaniu modeli.
Wybór modelu Open Source LLM
Następnym krokiem byłoby wybranie dużego modelu językowego dla twojego zadania. Jakie masz opcje? Najnowocześniejsze dostępne obecnie duże modele językowe obejmują GPT-3, Bloom, BERT, T5 i XLNet. Spośród nich GPT-3 (Generative Pretrained Transformers) wykazał najlepszą wydajność, ponieważ jest wytrenowany na 175 miliardach parametrów i może obsługiwać różnorodne zadania NLU. Ale dostrajanie GPT-3 jest dostępne tylko za pośrednictwem płatnej subskrypcji i jest stosunkowo droższe niż inne opcje.
Z drugiej strony BERT to duży model językowy typu open source, który można bezpłatnie dostroić. BERTI oznacza Bi-directional Encoder Decoder Transformers. BERT doskonale radzi sobie ze zrozumieniem kontekstowych reprezentacji słów.
Jak wybierasz?
Jeśli Twoje zadanie jest bardziej zorientowane na generowanie tekstu, lepszym wyborem będą modele GPT-3 (płatny) lub GPT-2 (open source). Jeśli Twoje zadanie podlega klasyfikacji tekstu, odpowiadaniu na pytania lub rozpoznawaniu jednostek, możesz skorzystać z BERT. W moim przypadku odpowiadania na pytania dotyczące cukrzycy postępowałbym z modelem BERT.
Przygotowanie i wstępne przetwarzanie zestawu danych
Jest to najważniejszy etap dostrajania, ponieważ format danych różni się w zależności od modelu i zadania. W tym przypadku stworzyłem przykładowy dokument tekstowy z informacjami na temat cukrzycy, który uzyskałem od Narodowego Instytutu Zdrowia . Możesz użyć własnych danych.
Aby dostroić BERT do zadań polegających na odpowiadaniu na pytania, zaleca się przekonwertowanie danych do formatu SQuAD. SQuAD to Stanford Question Answering Dataset i ten format jest powszechnie stosowany do szkolenia modeli NLP do zadań związanych z odpowiadaniem na pytania. Dane muszą być w formacie JSON, gdzie każde pole składa się z:
context
: Zdanie lub akapit z tekstem, na podstawie którego model będzie szukał odpowiedzi na pytaniequestion
: zapytanie, na które BERT ma odpowiedzieć. Będziesz musiał sformułować te pytania w oparciu o sposób interakcji użytkownika końcowego z modelem kontroli jakości.answers
: W tym polu należy podać żądaną odpowiedź. W ramach tego znajdują się dwa podkomponenty,text
ianswer_start
,text
będzie zawierał ciąg odpowiedzi. Mając na uwadze, że,answer_start
oznacza indeks, od którego zaczyna się odpowiedź w akapicie kontekstu.
Jak możesz sobie wyobrazić, utworzenie tych danych dla twojego dokumentu zajęłoby dużo czasu, gdybyś zrobił to ręcznie. Nie martw się, pokażę Ci, jak łatwo to zrobić za pomocą narzędzia do adnotacji Stóg siana.
Jak tworzyć dane w formacie SQuAD za pomocą Haystack?
Korzystając z narzędzia do adnotacji Haystack, możesz szybko utworzyć zestaw danych z etykietami do zadań polegających na odpowiadaniu na pytania. Możesz uzyskać dostęp do narzędzia, tworząc konto na ich stronie witryna internetowa. Utwórz nowy projekt i prześlij swój dokument. Możesz go zobaczyć w zakładce „Dokumenty”, przejdź do „Akcje” i zobaczysz opcję tworzenia swoich pytań. Możesz napisać swoje pytanie i zaznaczyć odpowiedź w dokumencie, Stóg siana automatycznie znajdzie jego początkowy indeks. Pokazałem, jak to zrobiłem na moim dokumencie na poniższym obrazku.
Ryc. 1: Tworzenie zestawu danych z etykietami do odpowiadania na pytania za pomocą stogu siana
Po utworzeniu wystarczającej liczby par pytanie-odpowiedź do precyzyjnego dostrojenia powinno być możliwe wyświetlenie ich podsumowania, jak pokazano poniżej. W zakładce „Eksportuj etykiety” możesz znaleźć wiele opcji formatu, w którym chcesz eksportować. Wybieramy format drużyny dla naszej sprawy. Jeśli potrzebujesz dodatkowej pomocy w korzystaniu z narzędzia, możesz sprawdzić ich dokumentacja. Mamy teraz nasz plik JSON zawierający pary QA do dopracowania.
Jak dostroić?
Python oferuje wiele pakietów typu open source, których można użyć do dopracowania. W moim przypadku użyłem pakietu Pytorch i Transformers. Zacznij od zaimportowania modułów pakietów za pomocą pip, menedżera pakietów. The transformers
biblioteka zapewnia BERTTokenizer
, który jest przeznaczony specjalnie do tokenizacji danych wejściowych do modelu BERT.
!pip install torch
!pip install transformers import json
import torch
from transformers import BertTokenizer, BertForQuestionAnswering
from torch.utils.data import DataLoader, Dataset
Definiowanie niestandardowego zestawu danych do ładowania i wstępnego przetwarzania
Następnym krokiem jest załadowanie i wstępne przetworzenie danych. Możesz użyć Dataset
klasa od Pytorcha utils.data
moduł do definiowania niestandardowej klasy dla Twojego zestawu danych. Stworzyłem niestandardową klasę zestawu danych diabetes
jak widać na poniższym fragmencie kodu. The init
odpowiada za inicjalizację zmiennych. The file_path
to argument, który wprowadzi ścieżkę do pliku szkoleniowego JSON i zostanie użyty do inicjalizacji data
. Inicjujemy BertTokenizer
także tutaj.
Następnie definiujemy a load_data()
funkcjonować. Ta funkcja wczyta plik JSON do obiektu danych JSON i wyodrębni z niego kontekst, pytanie, odpowiedzi i ich indeks. Dołącza wyodrębnione pola do listy i zwraca je.
Połączenia getitem
używa tokenizatora BERT do zakodowania pytania i kontekstu w tensorach wejściowych, które są input_ids
i attention_mask
, encode_plus
dokona tokenizacji tekstu i doda specjalne tokeny (takie jak [CLS] i [SEP]). Zauważ, że używamy tzw squeeze()
metodę usuwania pojedynczych wymiarów przed wprowadzeniem do BERT. Na koniec zwraca przetworzone tensory wejściowe.
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
Po zdefiniowaniu możesz śmiało utworzyć instancję tej klasy, przekazując metodę file_path
do tego argument.
file_path = 'diabetes.json'
dataset = diabetes(file_path)
Trenowanie modelu
będę używać BertForQuestionAnswering
modelu, ponieważ najlepiej nadaje się do zadań QA. Możesz zainicjować wstępnie wytrenowane wagi pliku bert-base-uncased
modelu dzwoniąc pod numer from_pretrained
funkcja na modelu. Powinieneś także wybrać funkcję utraty oceny i optymalizator, którego będziesz używać do treningu.
Zapoznaj się z naszym praktycznym, praktycznym przewodnikiem dotyczącym nauki Git, zawierającym najlepsze praktyki, standardy przyjęte w branży i dołączoną ściągawkę. Zatrzymaj polecenia Google Git, a właściwie uczyć się to!
Używam optymalizatora Adama i funkcji utraty entropii krzyżowej. Możesz użyć klasy Pytorch DataLoader
ładowanie danych w różnych partiach, a także mieszanie ich w celu uniknięcia jakichkolwiek uprzedzeń.
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)
Po zdefiniowaniu modułu ładującego dane można przystąpić do pisania końcowej pętli szkoleniowej. Podczas każdej iteracji każda partia uzyskana z data_loader
zawiera batch_size
liczbę przykładów, na których wykonywana jest propagacja do przodu i do tyłu. Kod próbuje znaleźć najlepszy zestaw wag dla parametrów, przy którym strata byłaby 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}")
To kończy twoje dostrajanie! Możesz przetestować model, ustawiając go na model.eval()
. Możesz także użyć dostrajania współczynnika uczenia i parametrów liczby epok, aby uzyskać najlepsze wyniki na swoich danych.
Najlepsze porady i praktyki
Oto kilka punktów, na które należy zwrócić uwagę podczas dostrajania dowolnych dużych modeli językowych na niestandardowych danych:
- Twój zestaw danych musi reprezentować domenę docelową lub zadanie, w którym model językowy ma się wyróżniać. Czyszczenie i dobrze ustrukturyzowane dane są niezbędne.
- Upewnij się, że masz wystarczającą liczbę przykładów szkoleniowych w danych, aby model nauczył się wzorców. W przeciwnym razie model może zapamiętywać przykłady i nadmiernie się dopasowywać, bez możliwości generalizować do niewidocznych przykładów.
- Wybierz wstępnie przeszkolony model, który został przeszkolony w korpusie odpowiednim do wykonywanego zadania. W przypadku odpowiadania na pytania wybieramy wstępnie przeszkolony model, który jest szkolony w zestawie danych Stanford Question Answering. Podobnie do tego, dostępne są różne modele do zadań, takich jak analiza tonacji, generowanie tekstu, podsumowanie, klasyfikacja tekstu i inne.
- Próbować Akumulacja gradientu jeśli masz ograniczoną pamięć GPU. W tej metodzie zamiast aktualizować wagi modelu po każdej partii, gradienty są gromadzone w wielu mini-partiach przed wykonaniem aktualizacji.
- Jeśli napotkasz problem nadmiernego dopasowania podczas dostrajania, użyj regularyzacja techniki. Niektóre powszechnie stosowane metody obejmują dodawanie warstw odrzucanych do architektury modelu, wdrażanie rozkładu masy i normalizację warstw.
Wnioski
Duże modele językowe mogą pomóc zautomatyzować wiele zadań w szybki i wydajny sposób. Precyzyjne dostrajanie LLM pomaga wykorzystać moc nauki transferu i dostosować ją do konkretnej domeny. Dostrajanie może być niezbędne, jeśli Twój zbiór danych dotyczy dziedzin takich jak medycyna, nisza techniczna, zbiory danych finansowych i nie tylko.
W tym artykule wykorzystaliśmy BERT, ponieważ jest to oprogramowanie typu open source i działa dobrze do użytku osobistego. Jeśli pracujesz nad projektem na dużą skalę, możesz wybrać mocniejsze LLM, takie jak GPT3 lub inne alternatywy typu open source. Pamiętaj, że dostrajanie dużych modeli językowych może być kosztowne obliczeniowo i czasochłonne. Upewnij się, że masz wystarczające zasoby obliczeniowe, w tym GPU lub TPU w zależności od skali.
- Dystrybucja treści i PR oparta na SEO. Uzyskaj wzmocnienie już dziś.
- PlatoData.Network Pionowe generatywne AI. Wzmocnij się. Dostęp tutaj.
- PlatoAiStream. Inteligencja Web3. Wiedza wzmocniona. Dostęp tutaj.
- PlatonESG. Motoryzacja / pojazdy elektryczne, Węgiel Czysta technologia, Energia, Środowisko, Słoneczny, Gospodarowanie odpadami. Dostęp tutaj.
- Przesunięcia bloków. Modernizacja własności offsetu środowiskowego. Dostęp tutaj.
- Źródło: https://stackabuse.com/guide-to-fine-tuning-open-source-llms-on-custom-data/
- :ma
- :Jest
- :nie
- :Gdzie
- $W GÓRĘ
- 1
- 12
- 20
- 8
- a
- Zdolny
- O nas
- dostęp
- dostęp
- Konto
- Zgromadzone
- Osiągać
- działania
- faktycznie
- Adam
- dodanie
- Dodaje
- przyjęty
- Po
- przed
- AI
- również
- alternatywy
- am
- wśród
- ilość
- kwoty
- an
- analiza
- i
- Inne
- odpowiedź
- odpowiedzi
- każdy
- podejście
- architektura
- SĄ
- argument
- artykuł
- AS
- At
- Próby
- zautomatyzować
- automatycznie
- dostępny
- średni
- uniknąć
- na podstawie
- BE
- być
- zanim
- poniżej
- BEST
- Ulepsz Swój
- pomiędzy
- stronniczość
- Miliard
- Kwitnąć
- granica
- biznes
- ale
- by
- powołanie
- CAN
- Pojemność
- walizka
- zapasy
- Zmiany
- ChatGPT
- ZOBACZ
- wybór
- Dodaj
- klasa
- klasyfikacja
- kod
- powszechnie
- społeczność
- Ukończył
- konkluzja
- składa się
- zawiera
- kontekst
- kontekstowy
- 轉換
- Odpowiedni
- Stwórz
- stworzony
- Tworzenie
- Krzyż
- istotny
- Aktualny
- Obecnie
- zwyczaj
- dostosować
- dane
- zbiory danych
- zdefiniowane
- wdrażane
- życzenia
- rozwinięty
- urządzenie
- Cukrzyca
- ZROBIŁ
- Dieta
- różne
- Wymiary
- inny
- do
- dokument
- dokumenty
- robi
- domena
- domeny
- darowizna
- zrobić
- podczas
- każdy
- z łatwością
- wydajny
- skutecznie
- więcej
- umożliwiając
- zakończenia
- dość
- zapewnić
- jednostka
- epoka
- epoki
- niezbędny
- ewaluację
- Parzyste
- EVER
- przykład
- przykłady
- przewyższać
- doskonała
- drogi
- eksport
- wyciąg
- Twarz
- Spada
- Korzyści
- nakarmiony
- pole
- Łąka
- filet
- finał
- W końcu
- budżetowy
- Znajdź
- Skupiać
- W razie zamówieenia projektu
- format
- Naprzód
- FRAME
- Darmowy
- od
- funkcjonować
- ogólnie
- generacja
- generatywny
- git
- Go
- dobry
- GPU
- GPU
- gradienty
- poprowadzi
- ręka
- uchwyt
- hands-on
- dzieje
- Have
- Zdrowie
- wysłuchany
- ciężki
- pomoc
- stąd
- tutaj
- Atrakcja
- kaptur
- unosić
- W jaki sposób
- How To
- HTTPS
- olbrzymi
- człowiek
- gigantyczny
- i
- if
- obraz
- obraz
- wykonawczych
- importowanie
- in
- zawierać
- włączony
- Włącznie z
- wskaźnik
- osób
- Informacja
- wkład
- Wejścia
- zainstalować
- przykład
- instrukcje
- interakcji
- najnowszych
- Wprowadzenie
- IT
- iteracja
- Praca
- json
- Trzymać
- Etykiety
- język
- duży
- na dużą skalę
- warstwa
- nioski
- UCZYĆ SIĘ
- dowiedziałem
- nauka
- niech
- Dźwignia
- LG
- Biblioteka
- lubić
- Ograniczony
- Lista
- ll
- LLM
- załadować
- ładowarka
- załadunek
- od
- Partia
- robić
- kierownik
- sposób
- ręcznie
- wiele
- masywny
- Może..
- oznaczać
- znaczenie
- medyczny
- Pamięć
- metoda
- metody
- może
- miliony
- minimalny
- model
- modele
- modyfikować
- Moduł
- Moduły
- jeszcze
- większość
- dużo
- wielokrotność
- my
- narodowy
- Potrzebować
- potrzebne
- wymagania
- Nowości
- Następny
- NIH
- nlp
- Nie
- normalna
- już dziś
- numer
- przedmiot
- uzyskać
- uzyskane
- of
- Oferty
- często
- on
- ONE
- Online
- tylko
- koncepcja
- open source
- Option
- Opcje
- or
- organizacji
- Inne
- ludzkiej,
- na zewnątrz
- koniec
- własny
- pakiet
- Pakiety
- płatny
- par
- parametry
- szczególny
- Przechodzący
- ścieżka
- wzory
- dla
- jest gwarancją najlepszej jakości, które mogą dostarczyć Ci Twoje monitory,
- wykonywane
- wykonywania
- osobisty
- krok po kroku
- plato
- Analiza danych Platona
- PlatoDane
- zwrotnica
- możliwości
- power
- powered
- mocny
- Praktyczny
- poprzednio
- Problem
- Obrobiony
- projekt
- zapewniać
- zapewnia
- płomień
- Q & A
- pytanie
- pytania
- Szybki
- szybko
- Kurs
- raczej
- dosięgnąć
- Czytaj
- uznanie
- rozpoznać
- Zalecana
- zmniejszyć
- , o którym mowa
- Relacje
- stosunkowo
- pamiętać
- usunąć
- reprezentować
- wymagania
- Zasoby
- odpowiedzialny
- Efekt
- powraca
- Pierścień
- run
- s
- powiedzieć
- Skala
- zadraśnięcie
- Szukaj
- widzieć
- SAMEGO SIEBIE
- wyrok
- sentyment
- zestaw
- ustawienie
- Shadow
- arkusz
- powinien
- pokazać
- pokazane
- Shuffle
- oznaczać
- podobny
- mały
- małych firm
- mniejszy
- kilka
- Źródło
- specjalny
- specyficzny
- swoiście
- Nadużycie stosu
- standardy
- stojaki
- Stanford
- początek
- Startowy
- state-of-the-art
- Ewolucja krok po kroku
- Stop
- sznur
- subskrypcja
- taki
- wystarczający
- PODSUMOWANIE
- wsparcie
- pewnie
- Brać
- Mówić
- cel
- Zadanie
- zadania
- Techniczny
- terminologia
- REGULAMIN
- test
- Klasyfikacja tekstu
- niż
- że
- Połączenia
- ich
- Im
- następnie
- Tam.
- Te
- one
- to
- Przez
- czas
- czasochłonne
- wskazówki
- do
- tokenizować
- tokenizacja
- Żetony
- narzędzie
- Top
- pochodnia
- w kierunku
- Pociąg
- przeszkolony
- Trening
- przenieść
- przeniesione
- Transformatory
- przejście
- Tłumaczenie
- leczenie
- wypróbowany
- drugiej
- rodzaj
- typy
- dla
- zrozumieć
- zrozumienie
- w odróżnieniu
- nowomodny
- Aktualizacja
- aktualizowanie
- posługiwać się
- używany
- Użytkownik
- zastosowania
- za pomocą
- różnorodność
- Zobacz i wysłuchaj
- chcieć
- we
- waga
- DOBRZE
- były
- Co
- natomiast
- który
- Podczas
- szeroki
- szeroko
- będzie
- w
- bez
- słowo
- słowa
- pracujący
- działa
- martwić się
- by
- nie
- napisać
- You
- Twój
- zefirnet