Modele osadzeń tekstowych
Modele osadzeń tekstowych służą głównie do obliczania reprezentacji wektorowej tekstu. Tutaj termin "wektor" odnosi się do wektora matematycznego, znany także jako wektor cech. Jako programista, wszystko, co musisz wiedzieć, to że model osadzeń tekstu może obliczyć wektor cech danego tekstu, a następnie, korzystając z obliczeń podobieństwa wektorów, może zidentyfikować treści tekstowe o podobnych cechach.
Wskazówka: Dla podstawowej wiedzy na temat modeli osadzeń tekstowych, prosimy zajrzeć do Wprowadzającego samouczka o modelach osadzeń tekstowych
Różnica pomiędzy wyszukiwaniem wektorowym a wyszukiwaniem opartym na słowach kluczowych
- Wyszukiwanie wektorowe opiera się na semantycznym podobieństwie wektorów słów. Może znaleźć wyniki semantycznie powiązane z zapytaniem, nawet jeśli dokładne słowa z zapytania i słowa w wynikach się nie zgadzają. Wyszukiwanie wektorowe mapuje słowa do przestrzeni wektorowej o wysokiej wymiarowości i oblicza podobieństwo między wektorami. Oznacza to, że nawet jeśli same słowa się nie zgadzają, o ile są semantycznie podobne, można znaleźć powiązane wyniki.
- Z kolei wyszukiwanie oparte na słowach kluczowych to prosty proces dopasowywania łańcuchów znaków. Zwraca tylko wyniki zawierające dokładnie zgodne słowa z zapytania. Jeśli dokument używa innych słów, nawet jeśli są semantycznie podobne, nie zostaną dopasowane.
Klasa Embeddings jest rodzajem klasy specjalnie zaprojektowanej do interakcji z modelami osadzeń tekstu. Istnieje wiele dostawców modeli osadzeń (takich jak OpenAI, Cohere, Hugging Face, itp.), a projekt tej klasy polega na zapewnieniu standardowego interfejsu dla wszystkich dostawców.
Klasa Embeddings tworzy reprezentację wektorową tekstu. Dzięki wyszukiwaniu wektorowemu można przeprowadzać semantyczne wyszukiwania, na przykład szukanie najbardziej podobnych fragmentów tekstu w przestrzeni wektorowej.
Podstawowa klasa Embeddings w LangChain udostępnia dwie metody: jedną do osadzania dokumentów, a drugą do osadzania zapytań. Pierwsza pobiera wiele tekstów jako dane wejściowe, podczas gdy druga pobiera pojedynczy tekst. Powodem, dla którego są traktowane jako dwie różne metody, jest to, że niektórzy dostawcy osadzeń mają różne metody osadzania dla dokumentów przeznaczonych do wyszukiwania oraz dla zapytań (same zapytania wyszukiwania).
Szybki start
Poniżej znajduje się przykład użycia modelu osadzeń OpenAI:
Konfiguracja
Najpierw musimy zainstalować pakiet Python OpenAI. Ponieważ LangChain posiada wiele różnych implementacji modeli osadzeń tekstu, programiści muszą zainstalować zależności różnych modeli według własnego wyboru:
pip install langchain-openai
Skonfiguruj klucz OpenAI za pomocą zmiennych środowiskowych:
export OPENAI_API_KEY="..."
Jeśli nie chcesz ustawiać zmiennych środowiskowych, możesz przekazać bezpośrednio parametr nazwany openai_api_key
podczas inicjalizacji klasy OpenAI LLM, aby przekazać klucz:
from langchain_openai import OpenAIEmbeddings
embeddings_model = OpenAIEmbeddings(openai_api_key="...")
W przeciwnym razie, można zainicjować bez żadnych parametrów:
from langchain_openai import OpenAIEmbeddings
embeddings_model = OpenAIEmbeddings()
osadź_dokumenty
Oblicz wektor cech zbioru tekstów:
osadzenia = embeddings_model.osadź_dokumenty(
[
"Cześć!",
"Hej, witaj!",
"Jak masz na imię?",
"Moi przyjaciele nazywają mnie Świat",
"Witaj Świecie!"
]
)
len(osadzenia), len(osadzenia[0])
(5, 1536)
osadź_zapytanie
Ta funkcja oblicza wektor cech zapytania tekstowego. Zazwyczaj polega to na konwersji pytania, które ma zostać wyszukane, na wektor cech, a następnie zastosowaniu tego wektora do wyszukiwania podobnych tekstów w bazie danych wektorowej.
osadzone_zapytanie = embeddings_model.osadź_zapytanie("Jakie imię było wspomniane w rozmowie?")
osadzone_zapytanie[:5]
[0.0053587136790156364,
-0.0004999046213924885,
0.038883671164512634,
-0.003001077566295862,
-0.00900818221271038]