Dlaczego LLMy halucynują i jak można sobie z tym radzić?

20.02.2025 |  Weronika Stankiewicz

Z artykułu dowiesz się

  • czym są halucynacje i jak powstają
  • jak im zapobiegać z poziomu użytkownika modelu generatywnego

Wstęp

Rozwiązania oparte o duże modele językowe (LLM, czyli Large Language Models), takie jak ChatGPT czy Claude, są szeroko rozpoznawane i powszechnie wykorzystywane w wielu dziedzinach. Technologie te rewolucjonizują sposób, w jaki pracujemy, oferując pomoc w zadaniach takich jak odpowiadanie na pytania, streszczanie tekstów, poprawianie języka, a także tworzenie kodu. Mimo że generowane przez te modele odpowiedzi mogą wydawać się spójne i elokwentne, powinniśmy zachować ostrożność, ponieważ zawarte w nich informacje nie zawsze są zgodne z rzeczywistością.

Zjawisko to, znane jako halucynacje (ang. hallucinations), odnosi się do sytuacji, w kórej model generuje nieprawdziwe informacje, które są przedstawiane w sposób przekonujący i pewny. Halucynacje mogą obejmować całkowite fabrykowanie faktów, wymyślanie osób, wydarzeń historycznych, a także tworzenie nieistniejących koncepcji naukowych. Zdarza się, że modele językowe generują treści akademickie, cytując źródła i podając linki do artykułów, które w rzeczywistości nie istnieją.

Dlaczego modele językowe "halucynują"?

Halucynacje w modelach językowych wynikają z kilku głównych czynników, które są związane zarówno z naturą danych treningowych, jak i techniczną konstrukcją modeli.

„Garbage in, garbage out” – jakość danych treningowych

Jednym z kluczowych powodów występowania halucynacji w modelach językowych jest jakość danych, na których są one trenowane. Giganci technologiczni, tacy jak OpenAI czy Anthropic, poświęcają ogromny wysiłek na poprawę jakości tych danych, stosując zarówno metody automatyczne, jak i manualne. Proces ten obejmuje staranne oczyszczanie danych, mające na celu eliminację szkodliwych treści, nieświadomych uprzedzeń oraz wybór źródeł o wysokiej jakości.

Mimo tych starań całkowite wyeliminowanie nieprawdziwych lub nierzetelnych informacji pozostaje wyzwaniem. W efekcie modele mogą przyswajać fałszywe, przestarzałe dane, a także opinie czy spekulacje. Pomimo tego, że LLM-y są trenowane na ogromnych zbiorach danych, wciąż mogą występować luki w wiedzy, szczególnie w obszarach bardzo specjalistycznych, które nie zostały dostatecznie uwzględnione w zbiorze treningowym. Tematy te wykraczają poza granice wiedzy modeli, co wzmaga ich skłonność do generowania błędnych odpowiedzi.

Halucynacje mogą wynikać również z niejednoznaczności danych, a także z tendencji modelu do generalizowania informacji w sposób, który nie zawsze jest poprawny. Warto jednak dodać, że nawet najlepiej przygotowane dane nie wyeliminują halucynacji całkowicie, ponieważ nie jest to jedyny czynnik wpływający na ich powstawanie.

Probabilistyczna natura modeli językowych

LLM-y to probabilistyczne modele sekwencyjne, które generują tekst słowo po słowie, opierając się na architekturze typu Transformer, a dokładniej na jej elemencie – Dekoderze. Oznacza to, że modele te nie mają zdolności do rozumienia prawdziwości generowanych treści, a jedynie tworzą tekst na podstawie wzorców znalezionych w danych treningowych. Podczas generowania kolejnego tokenu (który może odpowiadać całemu słowu, jego części, a nawet pojedynczemu znakowi interpunkcyjnemu), model wykorzystuje kontekst (wcześniej wygenerowane tokeny) i na tej podstawie tworzy rozkład prawdopodobieństwa wszystkich możliwych tokenów, jakie mogą pojawić się na następnej pozycji. Następnie rozkład ten jest zawężany do nabardziej prawdopodobnych tokenów, między innymi przy użyciu technik takich jak top-k sampling, top-p sampling czy temperature sampling.

Z tak ograniczonego zbioru tokenów wybierany jest jeden – losowo, w sposób niedeterministyczny, na podstawie rozkładu prawdopodobieństwa. O niepewności modelu co do wyboru kolejnego tokena świadczy wartość entropii. Wysoka entropia oznacza, że rozkład prawdopodobieństwa dla kolejnych tokenów jest względnie płaski – różne tokeny mają podobne wartości, co świadczy o dużej niepewności modelu. Przy niskiej entropii natomiast jedno lub kilka tokenów ma znacznie wyższe prawdopodobieństwo, co wskazuje na większą „pewność” modelu co do wyboru kolejnego fragmentu tekstu.

Rysunek 1. Prawdopodobieństwa następnego tokenu. Wyniki uzyskane przez odpytanie modelu gpt-3.5-turbo-instruct za pomocą API.

Mogłoby się wydawać, że niska entropia (większa pewność modelu) powinna prowadzić do mniejszego ryzyka halucynacji, jednak to założenie nie zawsze się sprawdza. Halucynacje mogą występować nawet przy niskiej entropii, jeśli fałszywe informacje były nadreprezentowane w danych treningowych. Niska entropia oznacza, że model ma wyraźną „preferencję” dla pewnych tokenów, ale nie oznacza, że te tokeny są zgodne z faktami. Obecnie modele językowe nie mają wbudowanego mechanizmu weryfikacji faktów (ang. fact-checking), istnieje jednak możliwość rozszerzenia ich funkcjonalności o dodatkowe narzędzia, które mogą pełnić taką funkcję – o tym opowiem w dalszej części artykułu.

Wpływ RLHF i SFT na halucynacje

RLHF (ang. Reinforcement Learning from Human Feedback) to proces dostrajania modelu na podstawie ocen ludzkich. Opiera się on na dwóch etapach:

(1) budowie modelu preferencji, opartego na ocenach ludzkich,

(2) wykorzystaniu tego modelu do wzmocnienia głównego modelu za pomocą algorytmu optymalizacji.

W tym procesie model uczy się maksymalizować „nagrodę”, co oznacza, że stara się generować odpowiedzi, które odpowiadają ludzkim preferencjom. Choć RLHF jest stosowane w celu poprawy skuteczności modeli, paradoksalnie może również przyczyniać się do występowania halucynacji. Wynika to z nieświadomego wprowadzania uprzedzeń przez osoby oceniające – na przykład poprzez preferowanie bardziej spójnych lub elokwentnych odpowiedzi modelu, nawet jeśli są one mniej zgodne z faktami. RLHF faworyzuje więc styl i subiektywną satysfakcję użytkownika nad precyzję merytoryczną. Człowiek nie zawsze jest w stanie wykryć halucynacje modelu, co dodatkowo potęguje problem.

Badania wskazują, że modele trenowane z wykorzystaniem RLHF mają tendencję do dostosowywania się do preferencji oceniających. Zjawisko to nazywane jest sykofancją (ang. sycophancy), co w języku polskim oznacza „umiejętność przypodobania się pochlebstwem”.

Rysunek 2. Przykład dostosowywania odpowiedzi modelu do preferencji użytkownika. Odpytanie modelu gpt-4o.

Podobny problem występuje w przypadku SFT (ang. Supervised Fine-Tuning), czyli dostrajania nadzorowanego, które, podobnie jak RLHF, może prowadzić do nasilenia halucynacji. Proces ten polega na dostosowywaniu modelu do określonych danych, które często są ręcznie przygotowane przez człowieka. W przypadku SFT jakość tych danych jest kluczowa. Jeśli dane będą sprzeczne z wcześniej nabywaną wiedzą modelu, mogą one ją „nadpisać”, co prowadzi do tzw. catastrophic forgetting – utraty wcześniej przyswojonej wiedzy i generowania odpowiedzi, które są sprzeczne z faktycznymi informacjami. Problemy mogą również wystąpić, gdy dane użyte do dostrajania są niepełne lub wąsko ukierunkowane. Na przykład, jeśli model nie otrzyma wystarczająco szerokiego kontekstu dotyczącego określonego tematu, jego odpowiedzi mogą stać się powierzchowne, nieprecyzyjne lub wręcz błędne. Takie braki w danych treningowych prowadzą do zwiększonego ryzyka halucynacji, ponieważ model nie ma pełnej wiedzy na dany temat i może generować informacje, które są niezgodne z rzeczywistością.

Efekt kuli śnieżnej (ang. hallucinations snowballing)

Modele generują kolejne słowa w sposób sekwencyjny, co sprawia, że czasami zbyt mocno trzymają się początkowych błędów. Modele językowe tworzą tekst na podstawie kontekstu poprzednich słów, a początkowy błąd w jednej z predykcji (np. błędne słowo lub nieprecyzyjna prognoza) może zniekształcić cały dalszy kontekst. W rezultacie kolejne słowa są generowane na podstawie błędnego kontekstu, co prowadzi do eskalacji błędów, czyli tzw. error propagation.

Jak ograniczać halucynacje z poziomu użytkownika?

Skoro wiemy, czym są halucynacje i co je powoduje, warto przyjrzeć się metodom ich ograniczania. Metody te możemy podzielić na dwie kategorie:

  • metody stosowane podczas treningu modelu,
  • metody, które możemy zastosować z poziomu użytkownika.

Do pierwszej grupy zaliczają się metody stosowane w trakcie treningu modelu, skupiające się na zwiększeniu jakości danych treningowych oraz RLHF. Warto o nich wiedzieć, jednak w artykule skupimy się na metodach, które możemy zastosować jako użytkownicy modeli oraz twórcy rozwiązań opartych o LLM-y.

RAG i przekazywanie dodatkowej wiedzy

Z wcześniejszej sekcji dotyczącej przyczyn halucynacji wiemy już, że jednym z powodów, dla których LLM-y mogą generować błędne odpowiedzi, jest brak wystarczającej wiedzy. Problem ten jest szczególnie widoczny w przypadku zapytań wymagających dostępu do konkretnych informacji, takich jak dane wewnętrzne firmy, zawartość określonej strony internetowej czy nasze własne notatki. W takich sytuacjach konieczne staje się dostarczenie modelowi tzw. kontekstu, czyli dodatkowych danych, które umożliwią uzyskanie poprawnej odpowiedzi.

Jeśli kontekst jest stosunkowo krótki, na przykład w postaci jednostronicowego dokumentu, możemy przekazać go w treści promptu. Jest to możliwe, o ile treść kontekstu mieści się w długości okna kontekstowego modelu (ang. context window). Problemy pojawiają się jednak w przypadku bardziej złożonych kontekstów, w szczególności jeśli odpowiedź jest ukryta w dużej bazie dokumentów. Ze względu na ograniczenia okna kontekstowego, nie możemy przekazać całej bazy wiedzy jako kontekstu, a nawet jeśli byłoby to możliwe, obciążenie modelu zadaniem odnalezienia właściwego fragmentu znacznie obniżyłoby jego efektywność. W takich sytuacjach pomocna okazuje się technika RAG (ang. Retrieval-Augmented Generation).

Rysunek 3. Przykładowy schemat architektury rozwiązania opartego o RAG.

RAG opiera się na dwóch krokach:

(1) wyszukiwanie powiązanych informacji w bazie dokumentów,

(2) generowanie odpowiedzi przez LLM na podstawie dostarczonych danych.

Aby skorzystać z RAG, dane powinny być odpowiednio przygotowane – oczyszczone, przefiltrowane i podzielone na mniejsze fragmenty, tzw. chunki.

W pierwszym kroku, czyli podczas wyszukiwania informacji, warto mieć dostęp do takich narzędzi jak baza danych, w której przechowujemy dokumenty, baza wektorowa, w której przechowywane są wektorowe reprezentacje tych dokumentów oraz model typu Text Embedding, przekształcający tekst na wektory. Zarówno treść dokumentów, jak i zapytanie przekształcane są na reprezentacje wektorowe, które charakteryzują się podobieństwem, w przypadku treści podobnych znaczeniowo. Następnie porównuje się więc podobieństwo wektorowe między zapytaniem a dokumentami w bazie i zwraca dokumenty najbardziej podobne do zapytania.

Jest to tzw. wyszukiwanie semantyczne, które można wzbogacić o dodatkowe mechanizmy, takie jak dodatkowy ranking wyników (ang. re-rank) czy bardziej zaawansowane wyszukiwanie hybrydowe, łączące wyszukiwanie semantyczne z klasycznym wyszukiwaniem na podstawie słów kluczowych. Przygotowując rozwiązanie oparte o RAG, warto zwrócić uwagę na dostępne frameworki ułatwiające integrację modeli językowych z różnorodnymi źródłami danych, takie jak LangChain czy DSPy.

Dodatkowe mechanizmy i fact-checking

W celu wzbogacenia modelu o dodatkową wiedzę można wykorzystać różnorodne mechanizmy. Jeśli zależy nam na pozyskaniu informacji z konkretnej strony internetowej, możemy pobrać jej zawartość przy użyciu function calling, a następnie odpowiednio sformatować treść (np. jako plik tekstowy lub w formacie markdown), aby była zrozumiała dla modelu.

Bardziej zaawansowanym podejściem jest wdrożenie mechanizmu fact-checking poprzez dynamiczne wyszukiwanie informacji w Internecie. Przykładem takiego rozwiązania jest integracja z Google API, umożliwiająca pozyskiwanie danych w czasie rzeczywistym. To podejście jest szczególnie przydatne w sytuacjach wymagających najnowszych informacji, takich jak prognoza pogody czy bieżące wiadomości.

Możemy również rozszerzyć system o narzędzia, takie jak Wolfram Alpha, obsługujące zaawansowane zadania obliczeniowe, np. analizy matematyczne. Warto zauważyć, że to właśnie Wolfram Alpha wspomaga ChatGPT w wykonywaniu obliczeń matematycznych.

Innym rozwiązaniem w zakresie fact-checkingu jest wprowadzenie dodatkowego modelu, którego jedynym celem będzie kontrola prawdziwości generowanych informacji. Taki model może działać jako niezależny „kontroler” sprawdzający poprawność wygenerowanych danych na podstawie dostępnych źródeł.

Prompt Engineering

Odpowiednie formułowanie zapytań skierowanych do modelu (promptów) ma kluczowe znaczenie dla uzyskania wartościowych odpowiedzi.

Istnieje wiele technik ich konstruowania, które mogą ograniczyć zjawisko halucynacji (choć całkowite ich wyeliminowanie nie jest możliwe). Warto szczególnie zwrócić uwagę na następujące metody:

  • podział instrukcji na część systemową i użytkownika, jeśli narzędzie na to pozwala,
  • jasne rozdzielenie poszczególnych sekcji, takich jak polecenia i reguły, przykłady, źródła wiedzy czy historia konwersacji, np. poprzez wykorzystanie nagłówków Markdown lub sekcji w formacie HTML,
  • few-shot prompting, czyli przedstawienie modelowi przykładowych zapytań oraz odpowiedzi,
  • chain of thought, czyli zaprezentowanie modelowi procesu myślenia lub spowolnienie procesu wnioskowania np. poprzez instrukcjęWyjaśnij krok po kroku swój tok rozumowania.”,
  • prompt chaining, czyli rozbijanie skomplikowanych zapytań na kilka mniejszych.

Pomocne jest również zachęcanie modelu do wyrażania niepewności oraz przyznawania się do niewiedzy. W tym celu warto dodać do instrukcji takie zasady jak:

  • Jeżeli w tekście nie ma informacji na zadane pytanie, odpowiedz: ‘Nie znaleziono informacji w tekście’.
  • Jeżeli nie znasz odpowiedzi na dane pytanie odpowiedz: ‘Nie wiem’.

Rysunek 4. Przykładowy prompt z zastosowaniem opisanych praktyk.

Dodatkowo możemy usprawniać zapytania do modeli językowych za pomocą innego modelu, który zasugeruje poprawki do promptu lub wprowadzi ulepszenia. Istnieją także narzędzia służące do testowania i optymalizacji promptów, takie jak PromptFoo czy LangFuse.

Dzięki odpowiednio zaprojektowanemu promptowi model ma większą szansę na wygenerowanie prawdziwych i spójnych informacji. Prompt Engineering jest obszernym tematem, który sam w sobie zasługuje na oddzielny artykuł – więcej informacji, znajdziesz pod tym linkiem.

Fine-tuning, czyli dotrenowanie

Popularne platformy oferują możliwość dotrenowania modeli, np. z rodziny GPT lub Gemini, na własnych danych. W przypadku niektórych modeli proces ten polega jedynie na dostarczeniu danych w odpowiednim formacie. Jednak zgodnie z zaleceniami OpenAI, fine-tuning powinien być stosowany jedynie w sytuacjach, gdy inne metody – takie jak dopracowanie promptów czy dostarczenie źródeł wiedzy – okażą się niewystarczające. Jest to szczególnie istotne w przypadku mniejszych modeli (np. open-source), ponieważ ich dostrajanie może paradoksalnie obniżyć ich skuteczność.

Fine-tuning sprawdza się w sytuacjach, gdy:

  • osiągnięcie zadowalającej skuteczności, wymaga dostarczenia modelowi znacznie większej liczby przykładów niż w klasycznym podejściu few-shot learning,
  • opisanie pożądanego wyniku lub reguł prowadzących do niego jest trudne i łatwiej jest pokazać modelowi przykłady danych wejściowych i oczekiwanych wyników,
  • chcemy, aby model odpowiadał w określonym stylu lub tonie.

Dodatkowo fine-tuning może być szczególnie przydatny w dziedzinach wymagających dużej specjalizacji, takich jak medycyna czy prawo. W takich przypadkach dostrajanie modelu pozwala mu lepiej zrozumieć specyficzne konteksty i terminologię danej branży, co zwiększa jego precyzję i użyteczność.

Używanie zespołu modeli

Zatrudnienie różnych modeli do wzajemnej weryfikacji odpowiedzi to skuteczna technika poprawy ich jakości. Modele mogą „debatować” ze sobą, zadawać pytania i kwestionować wygenerowane treści, co pomaga w wykrywaniu potencjalnych halucynacji. Przykładowo, za pomocą API możemy skierować zapytanie do jednego modelu, a następnie przekazać jego odpowiedź do innego modelu z prośbą o dodatkową weryfikację informacji oraz ich ewentualną korektę.

Podsumowanie

Pomimo ryzyka halucynacji, modele językowe mogą być niezwykle użyteczne. Umożliwiają przetwarzanie języka naturalnego, w szczególności danych nieustrukturyzowanych, syntezę informacji, czy też wnioskowanie, a nawet automatyzację z wykorzystaniem autonomicznych agentów AI. Chociaż na obecnym etapie nie da się całkowicie wyeliminować ryzyka halucynacji, istnieje wiele metod pozwalających je znacząco ograniczyć. Modeli językowych należy jednak używać rozsądnie i rozważnie dobierać zadania im przekazywane kierując się zasadą ograniczonego zaufania. Pomimo ich wszechstronności, nie są one uniwersalnym rozwiązaniem i nie należy ulegać pokusie wykorzystywania ich do każdego możliwego zadania. Jeśli dane zadanie można rozwiązać prościej, np. za pomocą tradycyjnych metod programistycznych, należy wybrać tę metodę. Chociaż nie eliminuje to bezpośrednio halucynacji, takie podejście zwiększa efektywność i niezawodność systemów opartych na modelach językowych.