Modele językowe ogólnego przeznaczenia LLM można precyzyjnie dostroić, aby osiągnąć kilka typowych zadań, takich jak analiza sentymentow i rozpoznawanie nazwanych jednostek. Zadania te zazwyczaj nie wymagają dodatkowej wiedzy w tle.
W przypadku bardziej złożonych i wymagających wiedzy zadań możliwe jest zbudowanie systemu opartego na modelu językowym, który uzyskuje dostęp do zewnętrznych źródeł wiedzy w celu wykonania zadań. Zapewnia to większą spójność faktów, poprawia wiarygodność generowanych odpowiedzi i pomaga złagodzić problem “halucynacji”.
Badacze Meta AI wprowadzili metodę zwaną Retrieval Augmented Generation (RAG)Retrieval Augmented Generation (RAG) (opens in a new tab), aby zająć się takimi zadaniami wymagającymi dużej wiedzy. RAG łączy w sobie komponent wyszukiwania informacji z modelem generowania tekstu. RAG może być precyzyjnie dostrojony, a jego wewnętrzna wiedza może być modyfikowana w efektywny sposób i bez konieczności ponownego szkolenia całego modelu.
RAG pobiera dane wejściowe i pobiera zestaw odpowiednich / wspierających dokumentów, biorąc pod uwagę źródło (np. Wikipedię). Dokumenty są łączone jako kontekst z oryginalnym promptem wejściowym i podawane do generatora tekstu, który generuje ostateczne dane wyjściowe. Sprawia to, że RAG jest adaptacyjny w sytuacjach, w których fakty mogą ewoluować w czasie. Jest to bardzo przydatne, ponieważ parametryczna wiedza LLM jest statyczna. RAG pozwala modelom językowym ominąć ponowne szkolenie, umożliwiając dostęp do najnowszych informacji w celu generowania wiarygodnych wyników poprzez generowanie oparte na wyszukiwaniu.
Lewis zaproponowal ogólny przepis dostrajania dla RAG. Wstępnie wytrenowany model seq2seq jest używany jako [pamięć parametryczna](pamięć parametryczna), a dense vector index Wikipedii jest używany jako pamięć nieparametryczna (dostępna przy użyciu wstępnie wytrenowanego neural pre-trained retriever). Poniżej znajduje się przegląd tego, jak działa to podejście:
RAG osiąga dobre wyniki w kilku testach porównawczych, takich jak Natural Questions, WebQuestions i CuratedTrec. RAG generuje odpowiedzi, które są bardziej rzeczowe, konkretne i zróżnicowane, gdy testowane są na pytaniach MS-MARCO i Jeopardy. RAG poprawia również wyniki weryfikacji faktów FEVER.
Pokazuje to potencjał RAG jako realnej opcji ulepszania wyników modeli językowych w zadaniach wymagających dużej wiedzy.
Ostatnio podejścia oparte na retrieverach stały się bardziej popularne i są łączone z popularnymi LLM, takimi jak ChatGPT, w celu poprawy możliwości i spójności faktów.
Prosty przykład wykorzystania retrieverów i LLM do odpowiadania na pytania ze źródłami można znaleźć w dokumentacji LangChain.
Etapy z RAG
Istnieje pięć kluczowych etapów w ramach RAG, które z kolei będą częścią każdej większej aplikacji, którą zbudujesz. Są to:
-
Loading: odnosi się do pobierania danych z miejsca, w którym się znajdują - niezależnie od tego, czy są to pliki tekstowe, PDF, inna strona internetowa, baza danych czy API - do potoku. LlamaHub zapewnia setki konektorów do wyboru.
-
Indeksowanie: oznacza to tworzenie struktury danych, która pozwala na wyszukiwanie danych. W przypadku LLM prawie zawsze oznacza to tworzenie “osadzeń wektorowych”, numerycznych reprezentacji znaczenia danych, a także wielu innych strategii metadanych, aby ułatwić dokładne wyszukiwanie danych istotnych kontekstowo.
-
Przechowywanie: po zindeksowaniu danych prawie zawsze będziesz chciał przechowywać indeks, a także inne metadane, aby uniknąć konieczności ich ponownego indeksowania.
-
Zapytania: dla każdej strategii indeksowania istnieje wiele sposobów wykorzystania LLM i struktur danych LlamaIndex do zapytań, w tym podzapytań, zapytań wieloetapowych i strategii hybrydowych.
-
Evaluation: krytycznym krokiem w każdym potoku jest sprawdzenie jego skuteczności w stosunku do innych strategii lub po wprowadzeniu zmian. Ocena zapewnia obiektywne pomiary dokładności, wierności i szybkości odpowiedzi na zapytania.
Ważne pojęcia w ramach każdego kroku
Istnieją również pewne terminy, które odnoszą się do kroków na każdym z tych etapów.
Etap ładowania
[Węzły i dokumenty]: Document
jest kontenerem wokół dowolnego źródła danych - na przykład PDF, wyjście API lub pobranie danych z bazy danych. Węzeł
jest atomową jednostką danych w LlamaIndex i reprezentuje “fragment” źródłowego Dokumentu
. Węzły mają metadane, które odnoszą je do dokumentu, w którym się znajdują i do innych węzłów.
[Konektory]: Konektor danych (często nazywany Reader
) przyjmuje dane z różnych źródeł danych i formatów danych do Document
i Nodes
.
Etap indeksowania
[Indeksy]: Po wprowadzeniu danych, LlamaIndex pomoże ci zindeksować dane do struktury, która jest łatwa do odzyskania. Zwykle wiąże się to z generowaniem “osadzeń wektorowych”, które są przechowywane w wyspecjalizowanej bazie danych zwanej “magazynem wektorowym”. Indeksy mogą również przechowywać różne metadane dotyczące danych.
[Embeddingi] LLM generują numeryczne reprezentacje danych zwane embeddingami
. Podczas filtrowania danych pod kątem trafności, LlamaIndex przekonwertuje zapytania na osadzenia, a magazyn wektorów znajdzie dane, które są numerycznie podobne do osadzenia zapytania.
Etap zapytań
[Retrievery]: Retriever definiuje sposób efektywnego pobierania odpowiedniego kontekstu z indeksu po otrzymaniu zapytania. Strategia wyszukiwania jest kluczem do trafności pobieranych danych i wydajności, z jaką jest to wykonywane.
[Routery]: Router określa, która wyszukiwarka zostanie użyta do pobrania odpowiedniego kontekstu z bazy wiedzy. Mówiąc dokładniej, klasa RouterRetriever
jest odpowiedzialna za wybór jednego lub wielu kandydatów do wykonania zapytania. Używają selektora, aby wybrać najlepszą opcję na podstawie metadanych każdego kandydata i zapytania.
[Node Postprocessors]: Postprocesor węzła pobiera zestaw pobranych węzłów i stosuje do nich transformacje, filtrowanie lub logikę zmiany kolejności.
[Syntezatory odpowiedzi]: Syntezator odpowiedzi generuje odpowiedź z LLM, wykorzystując zapytanie użytkownika i dany zestaw pobranych fragmentów tekstu.
Łączenie wszystkiego razem
Istnieje nieskończenie wiele przypadków użycia aplikacji LLM opartych na danych, ale można je z grubsza podzielić na trzy kategorie:
[Silniki zapytań]: Silnik zapytań to kompleksowy potok, który umożliwia zadawanie pytań dotyczących danych. Przyjmuje zapytanie w języku naturalnym i zwraca odpowiedź wraz z kontekstem referencyjnym pobranym i przekazanym do LLM.
[Silniki czatu]: Silnik czatu to kompleksowy potok umożliwiający konwersację z danymi (wielokrotna wymiana informacji zamiast pojedynczego pytania i odpowiedzi).
[Agenci]: Agent to zautomatyzowany proces decyzyjny zasilany przez LLM, który wchodzi w interakcję ze światem za pośrednictwem zestawu [narzędzi]. Agenci mogą podejmować dowolną liczbę kroków w celu wykonania danego zadania, dynamicznie decydując o najlepszym sposobie działania, zamiast podążać za wcześniej ustalonymi krokami. Daje to dodatkową elastyczność w rozwiązywaniu bardziej złożonych zadań.