Podstawy
2 godz. 43 min · OpenAI · Full-stack i Programowanie
Adam GospodarczykChociaż dokładne działanie dużych modeli językowych nie jest zrozumiałe nawet dla twórców tych narzędzi, to i tak istnieje szereg dobrze znanych faktów. Zapoznanie się z nimi pozwoli Ci lepiej wyobrazić sobie sposób działania LLM bez konieczności wchodzenia w głębokie detale techniczne. To z kolei w sposób bezpośredni przełoży się na skuteczność projektowanych promptów. W pierwszej części kursu skupiamy na wysokopoziomowym spojrzeniu na modele firmy OpenAI, uwzględniając ich aktualne możliwości oraz aktualne ograniczenia.
Instrukcje kierowane do modeli takich jak GPT-3.5-Turbo czy GPT-4, mogą realizować najróżniejsze zadania. Pomimo tego ich ogólna struktura uwzględnia pewne schematy z których możemy korzystać. W zależności od celu jaki chcemy osiągnąć, możemy uwzględniać lub pomijać poszczególne elementy promptu. I chociaż wspomniane modele są w stanie świetnie radzić sobie z nieustrukturyzowanymi danymi, to w przypadku projektowania instrukcji, bardzo istotne jest zachowanie precyzji oraz wyraźne oddzielenie jej fragmentów. Na praktycznych przykładach zobaczysz, jak łatwo niewłaściwe formatowanie może negatywnie wpływać na generowaną odpowiedź. Poznasz także ogólne zasady, które pomogą Ci kształtować instrukcje w sposób, który zwiększy prawdopodobieństwo wygenerowania odpowiedzi, której oczekujesz.
Zero-shot, Few-shot, Chain of Thought czy Tree of Thoughts — to techniki projektowania promptów, dzięki którym znacząco zwiększysz ich skuteczność. I choć każda z nich zwykle opiera się o bardzo proste koncepcje, tak ich praktyczne wykorzystanie nie zawsze jest oczywiste. W tym kursie nie tylko poznasz przykłady ich zastosowania, ale także będziesz w stanie połączyć je z ogólnymi zasadami tworzenia promptów, co jeszcze bardziej ulepszy tworzone przez Ciebie instrukcje. Ciekawostka: Technika Tree of Thoughts w niektórych przypadkach zwiększa skuteczność GPT-4 z 4% do nawet 74%.
Ostatnia część kursu uwzględnia kilka przykładów, których celem jest pokazanie Ci szerokiego kontekstu w którym umiejętność projektowania promptów, umożliwia wyjście daleko poza zwykłe odpowiadanie na pytania i generowanie tekstu. Zobaczysz, jak tworzone przez Ciebie instrukcje mogą zostać wykorzystane w aplikacjach webowych oraz systemach uwzględniających realizujących złożone zadania z pomocą dużych modeli językowych. Mowa tutaj o pamięci długoterminowej, embeddingu danych oraz nawet autonomicznych agentach, zdolnych do posługiwania się narzędziami. Pamiętaj jednak, że wszystkie z wymienionych tematów zostały omówione tylko z szerokiej perspektywy, ponieważ ich faktyczna implementacja, wykracza poza zakres tego kursu.
Ten kurs został zaprojektowany z myślą o osobach chcących rozpocząć naukę projektowania promptów dla dużych modeli językowych, takich jak GPT-3.5-Turbo czy GPT-4. Wcześniejsze doświadczenie oraz zaawansowane umiejętności techniczne czy programistyczne nie są wymagane. Wiedza z tego kursu da Ci podstawy do dalszej nauki projektowania promptów oraz pozwoli Ci uzyskać szerszą perspektywę na temat roli promptów przy codziennej pracy z narzędziami takimi jak ChatGPT czy integracjami dużych modeli językowych z aplikacjami.
Na początek proponuję, abyśmy zaczęli od tego, aby wyjaśnić czym w ogóle są modele językowe.
Otóż są to pewnego rodzaju mechanizmy, które dążą do tego, aby zrozumieć ludzki język.
To właśnie z tego powodu, jeżeli model otrzyma informację w postaci "Hello!", to
prawdopodobnie zrozumie, że chodzi o przywitanie i w związku z tym również
przywita się z nami, dodatkowo zadając pytanie, jak może nam dzisiaj pomóc?
Oczywiście nie mówimy tutaj o dokładnie takim samym rozumieniu jak w przypadku
ludzi, ale o pewnego rodzaju modelu, który próbuje odwzorować ten mechanizm.
Zatem z jednej strony nie będziemy
otrzymywać dokładnie takiego samego poziomu zrozumienia, ale z drugiej strony
nie ma nic złego w tym, aby dokładnie tego wymagać od modeli.
W praktyce wygląda to tak, że jeżeli
wysyłam wiadomość hello, to spodziewam się przynajmniej przywitania.
Także wygląda na to, że mamy tutaj
potencjalną konwersację, która może oczywiście się dalej rozwijać.
Nie jest jednak do końca jasne, co się dzieje pomiędzy.
Chodzi tutaj dokładnie o to, że modele językowe starają się odnaleźć różnego
rodzaju wzorce oraz połączenia pomiędzy słowami.
Zatem powiedzmy, że ze słowem "Hello" może być powiązane słowo "Hi!".
W końcu jedno i drugie jest przywitanie i może występować pomiędzy nimi jakieś połączenie.
I choć to akurat może być tutaj bardzo oczywiste, to nadal nie jest do końca
jasne, dlaczego akurat pojawiło się tutaj takie pytanie.
Odpowiedzią na to jest sam mechanizm generowania tekstu, który w przypadku
dużych modeli językowych polega w bardzo dużym uproszczeniu na generowaniu
kolejnego fragmentu słowa, tak zwanego tokenu, na podstawie prawdopodobieństwa.
Wyobraź sobie, że na nasze przywitanie model dobiera sobie słowo "hello!"
i przypisuje do niego prawdopodobieństwo, a następnie słowo "yo!", które w tym przypadku
uzyskuje nieco mniejsze prawdopodobieństwo wystąpienia.
Jednocześnie wśród nich pojawia się także słowo "hi", które w tym przypadku ma
najwyższe prawdopodobieństwo i może zostać wybrane.
Mówię tutaj "może" zostać wybrane, a nie "zawsze" będzie wybrane ze względu na to, że
to, w jaki sposób dobierane są tutaj kolejne tokeny, nie jest uzależnione
wyłącznie od tego, jaki wskaźnik prawdopodobieństwa posiada.
Na to ma wpływ jeszcze wiele innych czynników, a dodatkowo na część z nich możemy mieć także wpływ.
O czym będę jeszcze mówił.
Tymczasem działanie dużych modeli językowych można sprowadzić do niesamowicie prostej koncepcji, polegającej
na ciągłym odpowiadaniu na to samo pytanie o następującej treści:
"Dla tekstu mamy do tej pory jakie słowo powinno być kolejne?"
I teraz, ze względu na to, że ta koncepcja brzmi niesamowicie prosto, aż trudno
uwierzyć w to, że modele takie jak GPT 3 czy GPT 4 są w stanie generować długie i
przekonujące treści, działający kod w różnych językach
programowania, a nawet rozwiązywać złożone zadania z egzaminów uczelni wyższych.
Jeżeli jednak przyjrzymy się temu nieco z
innej strony, to nagle okaże się, że ta koncepcja może nie wystarczać np.
do tego, aby przeprowadzać bardzo złożone
obliczenia lub aby za pierwszym razem rozwiązywać bardzo złożone problemy.
Z tego powodu powstają różnego rodzaju
techniki, których celem jest dążenie do tego, aby generowane przez model
odpowiedzi były możliwie jak najwyższej jakości.
Jak już się pewnie domyślasz, dokładnie to jest tematem naszego kursu i na tym
będziemy skupiali się w kolejnych lekcjach.
Zanim jednak do tego przejdziemy,
chciałbym, abyśmy jeszcze na moment zatrzymali się przy tym,
czym w ogóle są modele GPT?
Otóż są to duże modele językowe opracowane
przez firmę OpenAI. Sama ich nazwa oznacza generative pretrained transformer, co niewiele
nam mówi, ale jednocześnie mamy tutaj kilka sygnałów.
Jeden z nich polega na tym, że modele te
zostały wytrenowane na bardzo dużych zestawach danych, a ich zadanie polegało
na tym, aby generować tekst poprzez generowanie kolejnego słowa w taki sposób,
aby brzmiał możliwie najbardziej naturalnie.
W rezultacie firma OpenAI, stworzyła w ten sposób modele, które cieszą się
aktualnie największą popularnością i są w stanie realizować wiele różnych zadań od
generowania tekstu, poprzez tłumaczenia, a także generowanie kodu.
I teraz ze względu na to, że mówimy tutaj o tak dużych zestawach danych, to modele
są w stanie generować tekst, który brzmi tak, jakby napisał go człowiek.
Przykładowo, jeżeli przywitam się słowami "cześć, dobrze Cię widzieć",
to prawdopodobnie otrzymam odpowiedź odwzajemniając uprzejmość, a zaraz po nich
znajdzie się pytanie o ewentualną możliwość pomocy.
Idąc dalej, w związku z tym, że mówimy tutaj o treningu, który odbył się na
dużych zestawach danych i co więcej trening ten został zakończony, to niestety
bazowa wiedza modelu jest w tym momencie ograniczona do około września 2021 roku.
Warto jednak zaznaczyć, że
wśród tej wiedzy mogą znaleźć się informacje wykraczające poza ten zakres.
Może to być wiedza na temat niektórych
osób bądź istotnych wydarzeń, które miały miejsce na świecie od tego czasu.
Nietrudno się więc domyślić, że coś takiego będzie miało wpływ np.
na pytania dotyczące najnowszych wersji
systemów operacyjnych bądź wybranych narzędzi i technologii.
Przykładowo, na pytanie o najnowszą wersję systemu macOS,
ChatGPT podaje nam nieprawidłową nazwę Big Sur, aczkolwiek trzeba zaznaczyć, że
podczas udzielania odpowiedzi zaznacza, że odpowiedź może nie być prawidłowa ze
względu na to, że jego wiedza jest ograniczona.
Nie zawsze jednak ma to miejsce i możemy wprost otrzymać błędną odpowiedź, pomimo
tego, że model nie będzie nas o tym informował.
Coś takiego może mieć miejsce niesamowicie często, chociażby ze względu na to, że
domyślnie modele GPT nie są podłączone do Internetu.
Aczkolwiek mówimy tutaj o domyślnym stanie.
Ze względu na to, że chociażby wyszukiwarka Bing posiada wersję ChatGPT,
która posiada umiejętność wyszukiwania informacji w Internecie.
Nieco trudno się więc tutaj domyślić, że
wersja podłączona do internetu będzie zwracać znacznie lepsze rezultaty niż
wersja, która dostępu do Internetu nie posiada.
Zatem przykładowo, jeżeli bazowy model
zapytam o nazwę overment, to uzyskamy informację, że model nie posiada żadnych
informacji na jego temat, a inaczej mówiąc nie posiada dostępu do Internetu.
Sytuacja jednak będzie wyglądała inaczej w
przypadku chociażby wspomnianego Bing Chat.
Idąc tym wszystkim dalej, ograniczona
wiedza modelu oraz brak dostępu do internetu zwiększają szansę na tzw.
halucynacje modelu, czyli pewnego rodzaju
zachowaniu, pod którym kryje się wiele różnych rzeczy.
Jedną z nich jest wprowadzanie w błąd użytkownika poprzez odpowiadanie mu na
pytania, które nie mają nic wspólnego z rzeczywistością bądź stanem faktycznym.
Przykładowo tutaj zadałem pytanie o totalnie wymyśloną przeze mnie nazwę.
Pomimo tego otrzymałem odpowiedź ze strony
modelu, która szczegółowo wyjaśniała mi o co dokładnie pytam oraz była w stanie
nawet prowadzić dalszą dyskusję na ten temat.
Widząc coś takiego można poddawać pod dużą
wątpliwość jakiekolwiek praktyczne zastosowanie modeli GPT.
Jeżeli dołożymy do tego fakt, że wszystkie
informacje, które przesyłasz do modeli GPT trafiają na serwery OpenAI, to może
okazać się, że jeżeli prześlesz do nich np.
poufne informacje na temat Twojej firmy, możesz otrzymać wypowiedzenie od swojego
pracodawcy za ujawnienie poufnych danych firmowych.
Z tego powodu profesjonalne zastosowanie
narzędzi takich jak ChatGPT, jest po prostu niedozwolone
w sytuacji, gdy pracujemy na jakichkolwiek poufnych danych bądź np.
informacji podlegających pod ochronę danych osobowych.
I teraz mając to wszystko na uwadze,
możemy zauważyć tutaj zarówno możliwości, jak i różnego rodzaju ograniczenia, z
których możemy korzystać oraz w ramach których możemy się poruszać.
Tym bardziej że istnieje tutaj szereg
różnego rodzaju technik, aby skutecznie sięgać po to, co najlepsze w tych
narzędziach, a jednocześnie sprytnie omijać ich ograniczenia.
Na ten moment więc potraktuj duże modele
językowe jako narzędzia, które są zaawansowanymi mechanizmami autouzupełniania, skupiającymi się na tym, aby przewidywać kolejne słowo. Tym, aby przewidywać kolejne słowa.
Ta prosta koncepcja, która leży u ich
podstaw, daje z jednej strony niesamowite możliwości w postaci generowania tekstu na
różne sposoby, ale jednocześnie też takie modele posiadają różnego rodzaju
ograniczenia i w niektórych sytuacjach mogą nam wprost szkodzić.
Nasze zadanie więc będzie polegało na tym, aby nauczyć się otrzymywać z nich jak
najwięcej wartości przy możliwie najbardziej skutecznym unikaniu ich
ograniczeń, a nawet zagrożeń, które mogą nam przynieść.