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]