Faza wzbogacania fragmentu RAG
Po podzieleniu dokumentów na kolekcję fragmentów następnym krokiem jest wzbogacenie każdego fragmentu przez wyczyszczenie go i rozszerzenie ich metadanymi. Czyszczenie fragmentów umożliwia osiągnięcie lepszych dopasowań do zapytań semantycznych w wyszukiwaniu wektorowym. Dodawanie metadanych umożliwia obsługę wyszukiwań fragmentów wykraczających poza wyszukiwania semantyczne. Zarówno czyszczenie, jak i rozszerzanie obejmują rozszerzenie schematu dla fragmentu.
W tym artykule omówiono różne sposoby rozszerzania fragmentów, w tym niektóre typowe operacje czyszczenia, które można wykonać na fragmentach w celu ulepszenia porównań wektorów. Opisano również niektóre typowe pola metadanych, które można dodać do fragmentów w celu rozszerzenia indeksu wyszukiwania.
Poniższy przykładowy kod przedstawia fragmenty wzbogacone danymi.
Czyszczenie danych
Fragmentowanie danych ułatwia obciążeniu znajdowanie najbardziej odpowiednich fragmentów, zazwyczaj poprzez wektoryzowanie tych fragmentów i przechowywanie ich w bazie danych wektorów. Zoptymalizowane wyszukiwanie wektorów zwraca tylko wiersze w bazie danych, które mają najbliższe dopasowania semantyczne do zapytania. Celem czyszczenia danych jest wsparcie dopasowań zbliżonych przez wyeliminowanie różnic, które nie są istotne dla znaczenia tekstu. Poniżej przedstawiono niektóre typowe procedury czyszczenia.
Notatka
Należy zwrócić oryginalny, nieczyszczony fragment jako wynik zapytania, dlatego należy dodać dodatkowe pole do przechowywania oczyszczonych i wektoryzowanych danych.
Wprowadzenie strategii użycia małych liter. Stosowanie małych liter pozwala dopasować słowa, które były wcześniej pisane wielką literą, takie jak wyrazy na początku zdania, do odpowiadających im słów w środku zdania. Osadzanie jest zazwyczaj czułe na wielkość liter, więc "Cheetah" i "cheetah" skutkowałyby różnymi wektorami dla tego samego logicznego słowa. Na przykład, w przypadku osadzonego zapytania "co jest szybsze, gepard czy puma?" osadzenie "gepardy są szybsze niż pumy" jest bliższe dopasowania niż "Gepardy są szybsze niż pumy". Niektóre strategie dotyczące zmiany wielkości liter zmieniają wszystkie wyrazy na małe, w tym nazwy własne, podczas gdy inne zmieniają tylko pierwsze wyrazy w zdaniach.
Usuń słowa stop. Słowa stop to słowa takie jak "a", "an" i "the". Możesz usunąć słowa stop, aby zmniejszyć wymiarowość wynikowego wektora. Jeśli usuniesz słowa stop w poprzednim przykładzie, "gepard jest szybszy niż puma" i "gepard jest szybszy niż puma" są wektorycznie równe "gepard szybszy puma". Ważne jest jednak, aby zrozumieć, że niektóre słowa posiadają semantyczne znaczenie. Na przykład "nie" może być uważane za słowo stopujące, ale ma znaczące znaczenie semantyczne. Należy przeprowadzić test, aby określić wpływ usuwania słów nieistotnych.
Napraw błędy pisowni. Błędnie napisany wyraz nie jest zgodny z poprawnie napisanym słowem w modelu osadzania. Na przykład "cheatah" nie jest taki sam jak "cheetah" w osadzaniu. Należy naprawić błędy pisowni, aby rozwiązać ten problem.
Usuń znaki Unicode. Usuwanie znaków Unicode może zmniejszyć szum we fragmentach i zmniejszyć wymiarowość. Podobnie jak słowa kluczowe, niektóre znaki Unicode mogą zawierać istotne informacje. Ważne jest przeprowadzenie testów, aby zrozumieć wpływ usuwania znaków Unicode.
Normalizuj tekst. Normalizacja tekstu zgodnie ze standardami, takimi jak rozszerzanie skrótów, zamiana liczb na słowa oraz rozwijanie skrótów, na przykład rozszerzenie "jestem" na "ja jestem", może pomóc zwiększyć wydajność wyszukiwań wektorowych.
Rozszerzanie fragmentów
Semantyczne wyszukiwania względem wektoryzowanych fragmentów działają dobrze dla niektórych typów zapytań, ale nie również dla innych. W zależności od typów zapytań, które są potrzebne do obsługi, może być konieczne rozszerzenie fragmentów o dodatkowe informacje. Dodatkowe pola metadanych są przechowywane w tym samym wierszu co osadzanie i mogą być używane w rozwiązaniu wyszukiwania jako filtry lub w ramach wyszukiwania.
Na poniższej ilustracji przedstawiono kod JSON w pełni wzbogaconej zawartości i opisano sposób użycia metadanych przez platformę wyszukiwania.
Kolumny metadanych, które należy dodać, zależą od domeny problemu, w tym typu posiadanych danych i typów zapytań, które mają być obsługiwane. Musisz przeanalizować środowisko użytkownika, dostępne dane i jakość wyników, które próbujesz osiągnąć. Z tego miejsca możesz określić, jakie metadane mogą pomóc w spełnieniu wymagań obciążenia.
Poniżej przedstawiono niektóre typowe pola metadanych wraz z oryginalnym tekstem fragmentu, niektóre wskazówki dotyczące ich potencjalnych zastosowań oraz narzędzia lub techniki, które są często używane do generowania zawartości metadanych.
Identyfikator. Identyfikator jednoznacznie identyfikuje fragment. Unikatowy identyfikator jest przydatny podczas przetwarzania w celu określenia, czy fragment już istnieje w magazynie. Identyfikator może być skrótem niektórych pól klucza. Tools: Biblioteka skrótów.
Tytuł. Tytuł jest przydatną wartością zwracaną dla fragmentu. Zawiera krótkie podsumowanie zawartości w fragmencie. Podsumowanie może być również przydatne do wykonywania zapytań za pomocą indeksowanego wyszukiwania, ponieważ może zawierać słowa kluczowe do dopasowania. Tools: model językowy.
Streszczenie. Podsumowanie jest podobne do tytułu w tym, że jest to wspólna wartość zwracana i może być używana w indeksowanych wyszukiwaniach. Podsumowania są zazwyczaj dłuższe niż tytuły. Tools: model językowy.
Przeformułowanie fragmentu. Przeformułowanie fragmentu może być przydatne jako pole wyszukiwania wektorowego, ponieważ przeformułowanie uchwyca odmiany języka, takie jak synonimy i parafrazy. Tools: model językowy.
Słowa kluczowe. Wyszukiwanie słów kluczowych jest przydatne w przypadku danych nietekstowych, wyszukiwania dokładnego dopasowania i ważnego terminu lub wartości. Na przykład producent samochodów może mieć przeglądy lub dane wydajności dla każdego z jego modeli przez wiele lat. "Recenzja produktu X dla roku 2009" jest semantycznie jak "Przegląd produktu X dla 2010" i "Przegląd produktu Y dla 2009 roku". W tym przypadku bardziej efektywne jest dopasowanie słów kluczowych dla produktu i roku. Tools: model językowy, RAKE, KeyBERT, multi-rake.
Podmioty. Jednostki to konkretne informacje, takie jak osoby, organizacje i lokalizacje. Podobnie jak słowa kluczowe, jednostki są dobre dla dokładnych wyszukiwań dopasowujących lub gdy określone jednostki mają znaczenie. Narzędzia: spaCy, Stanford Named Entity Recognizer (Stanford NER), scikit-learn, Natural Language Toolkit (NLTK).
Oczyszczony fragment tekstu. Tekst oczyszczonego fragmentu. Tools: model językowy.
Pytania, na które fragment może odpowiedzieć. Czasami osadzone zapytanie nie jest zbliżone do osadzonego fragmentu. Na przykład zapytanie może być małe w stosunku do rozmiaru fragmentu. Lepszym rozwiązaniem może być sformułowanie zapytań, na które fragment może odpowiadać i wykonywać wyszukiwanie wektorowe między rzeczywistym zapytaniem użytkownika a wstępnie sformułowanymi zapytaniami. Tools: model językowy.
Źródło. Źródło fragmentu może być cenne jako odpowiedź na zapytania. Zwracanie źródła umożliwia zapytaniu przytaczanie oryginalnego źródła.
Język. Język fragmentu może być przydatny jako filtr w zapytaniach.
Koszt rozszerzania
Użycie niektórych modeli językowych do rozszerzania fragmentów może być kosztowne. Należy obliczyć koszt każdego ulepszenia, które rozważasz, i pomnożyć go przez szacowaną liczbę fragmentów w czasie. Te informacje należy używać wraz z testowaniem wzbogaconych pól, aby określić najlepszą decyzję biznesową.
Następny krok
Powiązane zasoby
- wzbogacanie sztucznej inteligencji w usłudze Azure AI Search
- pojęcia dotyczące zestawu umiejętności w usłudze Azure AI Search