Модели встраивания текста

Модели встраивания текста в основном используются для вычисления векторного представления текста. Здесь термин "вектор" обозначает математический вектор, также известный как вектор признаков. Как разработчику, вам нужно знать, что модель встраивания текста может вычислить вектор признаков для текста, а затем, используя вычисления похожести векторов, она может определить контент текста с похожими признаками.

Совет: Для базовых знаний о моделях встраивания текста обратитесь к Вводному учебнику по моделям встраивания текста

Разница между поиском по вектору и поиском на основе ключевых слов

  • Поиск по вектору основан на семантической похожести слов. Он может найти результаты, которые семантически связаны с запросом, даже если слова в запросе и слова в результатах не совпадают точно. Поиск по вектору отображает слова в пространство высокой размерности и вычисляет схожесть между векторами. Это означает, что даже если сами слова не совпадают, при условии, что они семантически похожи, могут быть найдены связанные результаты.
  • Поиск на основе ключевых слов, напротив, представляет собой простой процесс сопоставления строк. Он возвращает только результаты, содержащие запросы, которые точно совпадают с ключевыми словами. Если документ использует разные слова, даже если они семантически схожи, они не будут сопоставлены.

Класс Embeddings является типом класса, специально разработанным для взаимодействия с моделями встраивания текста. Существует много поставщиков моделей встраивания (таких как OpenAI, Cohere, Hugging Face и др.), и цель этого класса - предоставить стандартный интерфейс для всех поставщиков.

Класс Embeddings создает векторное представление текста. С помощью поиска по вектору можно выполнять семантические поиски, например поиск самых похожих фрагментов текста в векторном пространстве.

Базовый класс Embeddings в LangChain предоставляет два метода: один для встраивания документов, а другой для встраивания запросов. Первый принимает несколько текстов в качестве входных данных, в то время как второй принимает один текст. Причина, по которой они рассматриваются как два разных метода, заключается в том, что некоторые поставщики встраивания имеют различные методы встраивания для документов, которые должны быть проанализированы, и запросов (сами запросы для поиска).

Быстрый старт

Ниже приведен пример использования модели встраивания OpenAI:

Настройка

Сначала нам нужно установить пакет OpenAI для Python. Поскольку в LangChain существует множество различных реализаций моделей встраивания текста, разработчики должны устанавливать зависимости различных моделей в соответствии со своими выборами:

pip install langchain-openai

Настройте ключ OpenAI через переменные среды:

export OPENAI_API_KEY="..."

Если вы не хотите устанавливать переменные среды, вы можете передать параметр с именем openai_api_key непосредственно при инициализации класса OpenAI LLM для передачи ключа:

from langchain_openai import OpenAIEmbeddings

embeddings_model = OpenAIEmbeddings(openai_api_key="...")

В противном случае вы можете инициализировать его без параметров:

from langchain_openai import OpenAIEmbeddings

embeddings_model = OpenAIEmbeddings()

embed_documents

Вычислите векторные признаки пакета текстов:

embeddings = embeddings_model.embed_documents(
    [
        "Привет!",
        "О, здравствуй!",
        "Как тебя зовут?",
        "Мои друзья зовут меня Мир",
        "Привет, Мир!"
    ]
)
len(embeddings), len(embeddings[0])
(5, 1536)

embed_query

Эта функция вычисляет векторный признак текста запроса. Обычно в нее входит преобразование вопроса для поиска в вектор признаков, а затем использование этого вектора для запроса похожих текстов в векторной базе данных.

embedded_query = embeddings_model.embed_query("Какое имя упоминалось в разговоре?")
embedded_query[:5]
[0.0053587136790156364,
 -0.0004999046213924885,
 0.038883671164512634,
 -0.003001077566295862,
 -0.00900818221271038]