Few-shot prompting polega na pokazaniu modelowi kilku rozwiązanych przykładów zadania, każdy jako wejście w parze z oczekiwaną odpowiedzią, zanim podasz mu właściwe wejście. Model odczytuje wzorzec i go kontynuuje. Przykłady to najszybszy sposób, żeby ustalić rzeczy trudne do opisania słowami: gdzie przebiega granica między dwiema kategoriami, jaki dokładnie kształt ma wynik albo jakim głosem pisze twój zespół.
Jak działa few-shot prompting
Brown i współautorzy w pracy z 2020 roku "Language Models are Few-Shot Learners" pokazali, że GPT-3 potrafi przyswoić nowe zadanie z kilku demonstracji umieszczonych w prompcie, bez ponownego trenowania. Nazywa się to in-context learning: w samym modelu nic się nie zmienia, a przykłady wpływają tylko na odpowiedź na ten jeden prompt. Następnym razem przykłady znów muszą się w nim znaleźć.
Nazwy biorą się od liczby przykładów. Prompt zero-shot nie ma żadnego, prompt one-shot ma jeden, a prompt few-shot ma kilka, zwykle od dwóch do kilku.
Zero-shot i few-shot obok siebie
Obie poniższe zakładki proszą o to samo tym samym poleceniem. Jedyna różnica polega na tym, że druga zakładka dodaje cztery opisane etykietami przykłady przed właściwym zgłoszeniem.
Kategoria: bug
Użytkownik zresetował hasło, ale nowe hasło jest odrzucane przy logowaniu. To wskazuje na problem w procesie resetowania hasła, więc najpewniej jest to bug w systemie uwierzytelniania.
Przykłady zmieniły dwie rzeczy. Pierwsza to format: odpowiedź zero-shot dodała pogrubiony nagłówek i wyjaśnienie, a odpowiedź few-shot dopasowała się do przykładów i podała jedno słowo, które skrypt może od razu odczytać. Druga to decyzja. "Bug" to rozsądne odczytanie zgłoszenia i większość ludzi by je wybrała. Ale ten zespół kwalifikuje problemy z logowaniem jako account, a trzeci przykład mówi to bez jednego słowa wyjaśnienia. Żadne polecenie nie wspominało o tej regule; przenosiły ją przykłady.
Ile przykładów użyć
Zacznij od dwóch do pięciu. To wystarcza przy większości zadań z formatowaniem i klasyfikacją, a prompt pozostaje krótki.
- Jeden przykład pokazuje format, ale model ma skłonność do zbyt wiernego kopiowania go. Jeśli jedyny przykład to 30-wyrazowe streszczenie zmiany cennika, następne streszczenie może mieć 30 wyrazów i dziwnie skupiać się na pieniądzach.
- Dwa albo trzy różne przykłady pozwalają modelowi zobaczyć, co mają wspólnego (wzorzec), a co się zmienia (szczegóły).
- Przy klasyfikacji dołącz co najmniej jeden przykład dla każdej etykiety, a potem dodaj przypadki graniczne, które bez przykładów wychodziły źle.
- Powyżej kilku zyski zwykle maleją, a każde zapytanie się wydłuża, co kosztuje tokeny i czas. Jeśli do poprawnego wyniku potrzebujesz dziesiątek przykładów, zadanie może wymagać jaśniejszego polecenia albo zupełnie innego podejścia.
Jak dobrać dobre przykłady
Model uczy się ze wszystkiego, co twoje przykłady mają wspólnego, a nie tylko z tego, czego chcesz go nauczyć.
- Uwzględnij trudne przypadki. Łatwe przykłady uczą niewiele. Najbardziej przydatne leżą na granicy, jak zgłoszenie o logowaniu powyżej.
- Różnicuj powierzchnię. Mieszaj krótkie i długie wejścia, różne tematy i różne sformułowania. Jeśli każda pozytywna recenzja w przykładach jest krótka, model może uznać długość za sygnał.
- Równoważ etykiety i mieszaj kolejność. Modele mają skłonność do przechylania się w stronę etykiety, która pojawia się w przykładach najczęściej, i tej, która pojawia się ostatnia.
- Sprawdź każdy przykład. Błąd w przykładzie to polecenie, żeby ten błąd popełnić.
- Używaj prawdziwych wejść. Przykłady wzięte z twoich rzeczywistych danych znacznie lepiej odpowiadają temu, co zobaczy model, niż wymyślone.
Zachowaj identyczny format
Każdy przykład powinien używać tych samych etykiet, separatorów i wielkości liter, a właściwe wejście powinno wyglądać dokładnie jak wejścia z przykładów. W prompcie ze zgłoszeniami każdy przykład to "Zgłoszenie:", a potem "Etykieta:", a prompt kończy się otwartą linią "Etykieta:", po której naturalnie da się napisać tylko jedno.
Dłuższe przykłady otaczaj wyraźnymi znacznikami, na przykład tagami <example>, żeby model widział, gdzie jeden się kończy, a następny zaczyna; zobacz delimitery i tagi XML. W API możesz też podać przykłady jako wcześniejsze tury rozmowy: wiadomość użytkownika z przykładowym wejściem, a potem wiadomość asystenta z odpowiedzią, powtórzone dla każdego przykładu.
Prompty few-shot to dobre szablony promptów wielokrotnego użytku: polecenie i przykłady pozostają stałe, a zmienia się tylko wejście. Poniższy blok przepisuje wiadomość commita w stylu zespołu. Wpisz w polu własną wiadomość i wyłącz część z przykładami, żeby zobaczyć, ile stylu przenoszą.
feat(search): spraw, żeby pole wyszukiwania nie rozróżniało wielkości liter
Żadna z reguł nie jest zapisana: typ małymi literami, zakres w nawiasie, tryb rozkazujący, brak kropki na końcu. Przykłady pokazują wszystkie cztery, a odpowiedź się do nich stosuje. Po wyłączeniu przykładów model nadal poprawia wiadomość, ale musi zgadywać styl i nic nie sprawia, że jego domysł pokryje się z twoim.
Przykłady few-shot mogą też demonstrować rozumowanie, a nie tylko odpowiedzi. Rozwiązane przykłady pokazujące swoje kroki to sposób, w jaki pierwotnie przedstawiono chain of thought prompting. Przy modelach, które rozumują wewnętrznie przed odpowiedzią, ograniczaj przykłady do wejść, odpowiedzi i formatu: rozpisane kroki rozumowania mogą odciągnąć je od lepszej drogi, a niektórzy dostawcy radzą, żeby przy takich modelach najpierw spróbować zero-shot.
Najczęściej zadawane pytania
Czym jest few-shot prompting?
Few-shot prompting to dołączenie do promptu kilku przykładów zadania, każdy jako wejście w parze z poprawnym wyjściem, przed właściwym wejściem. Model kontynuuje wzorzec wyznaczony przez przykłady. Najbardziej przydaje się przy własnych kategoriach, nietypowych formatach i stylach firmowych, które łatwiej pokazać niż opisać.
Ile przykładów powinien mieć prompt few-shot?
Od dwóch do pięciu to dobry punkt wyjścia dla większości zadań. Przy klasyfikacji dołącz co najmniej jeden przykład na etykietę oraz przypadki graniczne, w których model mylił się bez przykładów. Powyżej kilku każdy kolejny przykład zwykle pomaga mniej, a wydłuża każde zapytanie.
Czym jest one-shot prompting?
One-shot prompting daje modelowi dokładnie jeden przykład. To wystarcza, żeby pokazać format, ale model ma skłonność do zbyt wiernego kopiowania tego jednego przykładu, łącznie z długością, sformułowaniami, a nawet tematem. Drugi, inny przykład mówi modelowi, które cechy są wzorcem, a które przypadkiem.
Czy model uczy się z moich przykładów?
Tylko na potrzeby bieżącego zapytania. Przykłady kształtują odpowiedź, bo są w kontekście; wagi modelu się nie zmieniają i nic nie zostaje zapamiętane na następną rozmowę. Nazywa się to in-context learning i właśnie dlatego prompt few-shot musi zawierać swoje przykłady przy każdym użyciu.
Czy złe przykłady mogą pogorszyć wynik?
Tak. Model kopiuje wszystko, co przykłady mają wspólnego, także błędy, długość i ton, których nie zamierzasz przekazać. Jeśli większość przykładów ma tę samą etykietę, model też ma skłonność do przechylania się w jej stronę. Sprawdź, czy przykłady są poprawne, zróżnicowane i zrównoważone.