Witaj Czytelniku w nowym arcie, w którym poruszę temat budowania promptów dla wielkich modeli językowych takich jak GPT, LLaMa3, Mistral 7B i tym podobnych. Opowiem także, skąd wynikają halucynacje w tych modelach oraz jak ich unikać, stosując techniki zero-shot prompts, one-shot prompts i multi-shot prompts.
Jak mogłeś zauważyć, napisałem już kilka artykułów na temat budowania promptów, które są stosowane przy generowaniu grafiki przy użyciu modeli typu Stable Diffusion Network. Takie techniki budowania promptów są również używane w innych modelach do generowania grafiki. W szczegółach to opisujemy temat i opisujemy parametry generowania obrazu, jak budować prompty można poczytać tutaj.
Podobne techniki można zastosować także przy tworzeniu promptów do wielkich modeli językowych, gdzie podajemy kontekst, parametry generowanego tekstu, styl, przykładowe odpowiedzi tak aby uniknąć halucynowania.
Z czego wynika halucynacja? Wyobraź sobie, że posiadasz „wielki mózg”, który ma wiedzę z różnych dziedzin – wiedzę z całego Internetu, ale nie rozumie znaczenia, zna tylko statystykę i powiązania pomiędzy wyrazami.
Tym w uproszczeniu jest wielki model językowy, nie rozumie, czym jest dana rzecz, a opiera się tylko na statystycznych powiązaniach między tokenami, a w najprostszym przypadku – między sylabami słów (bo w uproszczeniu token to będzie jedna sylaba lub kilka znaków tekstu).
Jeśli model posiada wiedzę z różnych tematów, to przy ogólnikowym zapytaniu, jak na przykład „wygeneruj mi wiersz” bez podawania szczegółów czy kontekstu, przykładu, zacznie generować tekst, który statystycznie pasuje między kolejnymi tokenami, ale nie musi to oznaczać generowania tekstu z danego tematu.
Aby uniknąć halucynacji, należy powiedzieć modelowi, w jakim obszarze ma się specjalizować. Można to osiągnąć na przykład przez sformułowanie:
„Pracuj jako programista Python”, „Pracuj jako copywriter„, „Pracuj jako analityk biznesowy” lub „Jesteś analitykiem biznesowym„, „Jesteś programistą Pythona, który używa bibliotek FastAPI, Pytorch„, „*Zachowuj się jak copywriter z 10 letnim stażem, pisz bezpośrednim językiem…”. W ten sposób zawężamy dziedzinę, styl, w której model będzie operował.
Innym sposobem ograniczenia halucynacji jest stosowanie metody: 0-shot, 1-shot, lub multi-shot prompts
Jeśli chcemy, aby model generował odpowiedzi w określonym formacie lub stylu, możemy podać mu przykład jak ma się zachowywać lub jakim formacie ma udzielać odpowiedzi.
W podanych poniżej przykładach powiem czym jest zero-shot, one-shot, mult-shot.
Zero-shot
Nie podajemy żadnego przykładu. Używamy techniki typu 0-shot, jeśli „wierzymy”, że ogólna wiedza modela zapewni wystarczającą odpowiedź.
Prosimy model o wygenerowanie pliku JSON z informacjami o użytkowniku, nie podając szczegółów struktury. Model generuje przykładową strukturę opierając się na wewnętrznym schemacie. .
Przykład:
generuj plik JSON z opisem produktu
{
"product": {
"name": "Smartphone",
"brand": "TechCo",
"model": "X200",
"description": "A high-end smartphone with advanced features.",
"price": 699.99,
"currency": "USD",
"availability": true,
"specs": {
"display": "6.5-inch AMOLED touchscreen",
"processor": "Octa-core Snapdragon 888",
"memory": "8GB RAM, 256GB storage",
"camera": "Quad-camera setup (108MP main, 12MP ultra-wide, 8MP telephoto, 2MP depth sensor)",
"battery": "5000mAh",
"connectivity": ["5G", "Wi-Fi 6", "Bluetooth 5.2"],
"color": "Black",
"dimensions": "160 x 75 x 8 mm",
"weight": "180 grams"
},
"images": [
"image1.jpg",
"image2.jpg",
"image3.jpg"
],
"reviews": [
{
"user": "John Doe",
"rating": 4.5,
"comment": "Great phone! Excellent camera quality."
},
{
"user": "Jane Smith",
"rating": 5,
"comment": "Amazing battery life and performance."
}
]
}
}
One-shot
Podajemy pojedynczy przykład pożądanego wyniku, który pomoże modelowi w ukierunkowaniu odpowiedzi. To podejście jest przydatne, gdy potrzebny jest określony format lub styl lub gdy zadanie wymaga pewnego poziomu wskazówek i podpowiedzi.
W przypadku pliku JSON podajemy jeden przykład ze strukturą pliku. Model na tej podstawie generuje podobną strukturę dla innego zestawu danych.
generuj plik JSON z opisem telefonu, jak dla poniższego przykładu
example""":
{
"product": {
"id": "001",
"name": "Laptop",
"price": "2999.99",
"description": "Example description"
}
}
"""
Odpowiedź:
{
"product": {
"id": "002",
"name": "Smartphone",
"price": "999.99",
"description": "A high-end smartphone with advanced features."
}
}
Multi-shot
Podajemy kilka przykładów odpowiedzi dla zadanego pytania. Model uczy się struktury i kontekstu, aby generować odpowiedzi w podobnym formacie bazując na różnych przykładach. Podpowiedzi te mogą być przydatne w przypadku złożonych zadań, gdzie podanie szeregu przykładów pomaga modelowi lepiej zrozumieć pożądany wynik. Używamy go wtedy gdy pojedynczy przykład może nie wystarczyć do kierowania modelem lub gdy chcesz zademonstrować wzór lub trend.
generuj plik JSON z opisem jednej książki, jak dla poniższego przykładu:
example""":
{
"book": {
"id": "110",
"title": "The Great Gatsby",
"author": "F. Scott Fitzgerald",
"descryption":"Book descryption"
}
}
{
"book": {
"id": "111",
"title": "1984",
"author": "George Orwell",
"descryption":"Book descryption"
}
}
"""
Odpowiedź:
{
"book": {
"id": "112",
"title": "To Kill a Mockingbird",
"author": "Harper Lee",
"description": "Set in the American South during the Depression, 'To Kill a Mockingbird' follows the journey of Scout and Jem Finch, whose father has been appointed to defend a black man accused of rape. The novel explores themes of racial injustice, moral growth, and the strength of personal conviction."
}
}
Generalnie ważne jest to aby pamiętać o różnicach pomiędzy poszczególnymi modelami, gdyż ten sam prompt da różne odpowiedzi w zależności od użytego modelu, ale to jest zagadnienie do nawiązania w innym artykule.
Możliwość komentowania jest wyłączona.