Как создать приложения LLM с использованием векторной базы данных?

Как сделать приложение LLM с помощью векторной базы данных?

Введение

В области искусственного интеллекта большие языковые модели (LLM) и генеративные модели искусственного интеллекта, такие как GPT-4 от OpenAI, Claude 2 от Anthropic, Llama от Meta, Falcon, Palm от Google и т. д., перевернули представление о способах решения проблем. LLM используют методы глубокого обучения для выполнения задач обработки естественного языка. В этой статье вы узнаете, как создать приложения LLM с использованием векторной базы данных. Возможно, вы уже взаимодействовали с чат-ботом, например, в службе поддержки Amazon или помощнике в принятии решений Flipkart. Они генерируют текст, похожий на текст, создаваемый человеком, и предоставляют интерактивный пользовательский опыт, почти неотличимый от разговоров в реальной жизни. Однако эти LLM нуждаются в оптимизации, чтобы производить высококачественные и специфические результаты, действительно полезные для конкретных случаев использования.

Например, если вы зададите вопрос “Как изменить язык в приложении Android?” в приложении службы поддержки Amazon, оно может не быть обучено на этом конкретном тексте и, следовательно, не сможет дать ответ. В этом случае в помощь приходит векторная база данных. Векторная база данных хранит тексты в определенной области (в данном случае, справочные документы) и предыдущие запросы всех пользователей, включая историю заказов и т. д., в качестве числовых вложений и обеспечивает поиск похожих векторов в режиме реального времени. В данном случае она кодирует этот запрос в числовой вектор и использует его для выполнения поиска похожих векторов в своей базе данных и поиска ближайших соседей. Благодаря этому помощнику в чате удается правильно направить пользователя к разделу “Изменить предпочитаемый язык” в приложении Amazon.

Цели обучения

  • Как работают LLM, какие у них ограничения и зачем им нужны векторные базы данных?
  • Введение в модели вложений и способы их кодирования и использования в приложениях.
  • Узнайте, что такое векторная база данных и как они входят в состав архитектуры приложений LLM.
  • Научитесь создавать приложения LLM/Генеративного искусственного интеллекта с использованием векторных баз данных и TensorFlow.

Эта статья была опубликована как часть Data Science Blogathon.

Что такое LLM?

Большие языковые модели (LLM) являются основными моделями машинного обучения, использующими алгоритмы глубокого обучения для обработки и понимания естественного языка. Эти модели обучаются на огромном количестве текстовых данных для изучения закономерностей и связей сущностей в языке. LLM могут выполнять множество типов языковых задач, таких как перевод языков, анализ настроений, беседы с чат-ботами и многое другое. Они могут понимать сложные текстовые данные, определять сущности и связи между ними и генерировать новый текст, согласованный и грамматически правильный.

Читайте больше о LLM здесь.

Как работают LLM?

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

Ограничения LLM

Хотя LLM кажутся генерирующими ответы с довольно высокой точностью, даже лучше, чем люди во многих стандартных тестах, эти модели все еще имеют ограничения. Во-первых, они полностью полагаются на свои обучающие данные для построения своих рассуждений и, следовательно, могут не иметь конкретной или актуальной информации в данных. Это приводит к генерации некорректных или необычных ответов, известных как “галлюцинации”. Ведется постоянная попытка смягчить эти проблемы. Во-вторых, модель может не вести себя или не отвечать так, как ожидалось от пользователя.

Для решения этой проблемы векторные базы данных и модели вложений расширяют знания LLM/Генеративного искусственного интеллекта, предоставляя дополнительные поиски похожих модальностей (текст, изображение, видео и т. д.), по которым пользователь ищет информацию. Вот пример, когда LLM не имеют ответа, который запрашивает пользователь, и вместо этого полагаются на векторную базу данных для поиска этой информации.

LLM и векторные базы данных

Большие языковые модели (LLM) используются или интегрируются во многих отраслях, таких как электронная коммерция, путешествия, поиск, создание контента и финансы. Эти модели полагаются на относительно новый тип базы данных, известный как векторная база данных, которая хранит числовое представление текста, изображений, видео и других данных в бинарном представлении, называемом эмбеддингами. В этом разделе рассматриваются основы векторных баз данных и эмбеддингов, а также особое внимание уделяется тому, как использовать их для интеграции с приложениями LLM.

Векторная база данных – это база данных, которая хранит и ищет эмбеддинги с использованием высокомерного пространства. Эти векторы являются числовыми представлениями особенностей или атрибутов данных. С помощью алгоритмов, которые вычисляют расстояние или сходство между векторами в многомерном пространстве, векторные базы данных могут быстро и эффективно извлекать схожие данные. В отличие от традиционных скалярных баз данных, которые хранят данные в строках или столбцах и используют точное сопоставление или поиск по ключевым словам, векторные базы данных работают по-другому. Они используют векторные базы данных для поиска и сравнения большой коллекции векторов за очень короткое время (в пределах миллисекунд) с использованием таких техник, как приближенный поиск ближайших соседей (ANN).

Быстрая справочная информация по эмбеддингам

Модели искусственного интеллекта генерируют эмбеддинги, вводя исходные данные, такие как текст, видео, изображения, в библиотеку векторных эмбеддингов, такую как word2vec. В контексте искусственного интеллекта и машинного обучения эти особенности представляют разные измерения данных, необходимые для понимания паттернов, отношений и базовых структур.

Вот пример того, как сгенерировать векторные эмбеддинги с использованием word2vec.

1. Создайте модель, используя свою собственную корпусную базу данных или используйте предварительно построенную модель из Google или FastText. Если вы создаете свою собственную модель, вы можете сохранить ее на вашем файловом хранилище как файл “word2vec.model”.

import gensim # Создайте модель word2vecmodel = gensim.models.Word2Vec(corpus)# Сохраните файл моделиmodel.save('word2vec.model')

2. Загрузите модель, сгенерируйте векторное представление для вводного слова и используйте его для получения похожих слов в векторном представлении.

import gensimimport numpy as np# Загрузите модель word2vecmodel = gensim.models.Word2Vec.load('word2vec.model')# Получите вектор для слова "king"king_vector = model['king']# Получите наиболее похожие векторы на вектор "king"similar_vectors = model.similar_by_vector(king_vector, topn=5)# Распечатайте наиболее похожие векторыfor vector in similar_vectors: print(vector[0], vector[1])

3. Вот топ 5 слов, близких к вводному слову.

Вывод: man 0.85prince 0.78queen 0.75lord 0.74emperor 0.72

Архитектура приложения с использованием векторных баз данных для LLM

На высоком уровне векторные базы данных полагаются на модели эмбеддинга для обработки создания и запросов эмбеддингов. При передаче данных корпуса их содержимое кодируется векторами с использованием модели эмбеддинга и хранится в векторных базах данных, таких как Pinecone, ChromaDB, Weaviate и т. д. На пути чтения приложение делает запрос, используя предложения или слова, и опять же кодирует их с помощью модели эмбеддинга в вектор, который затем запрашивается в векторной базе данных для получения результатов.

Применение LLM с использованием векторных баз данных

LLM помогает в языковых задачах и является частью более широкого класса моделей, таких как Генеративный ИИ, который может генерировать изображения и видео, а не только текст. В этом разделе мы узнаем, как создавать практические приложения с использованием LLM/Генеративного ИИ, используя векторные базы данных. Я использовал библиотеки transformers и torch для языковых моделей и pinecone в качестве векторной базы данных. Вы можете выбрать любую языковую модель для LLM/векторизации и любую векторную базу данных для хранения и поиска.

Приложение Чатбот

Для создания чатбота с использованием векторной базы данных вы можете следовать этим шагам:

  1. Выберите векторную базу данных, такую как Pinecone, Chroma, Weaviate, AWS Kendra, и т.д.
  2. Создайте векторный индекс для вашего чатбота.
  3. Обучите языковую модель, используя большой текстовый корпус на ваш выбор. Например, для новостного чатбота вы можете использовать данные новостей.
  4. Интегрируйте векторную базу данных и языковую модель.

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

import pineconeimport transformers# Создание клиента API для векторной базы данныхclient = pinecone.Client(api_key="ВАШ_КЛЮЧ_API")# Загрузка языковой моделиmodel = transformers.AutoModelForCausalLM.from_pretrained("google/bigbird-roberta-base")# Определение функции для создания текстаdef generate_text(prompt):    inputs = model.prepare_inputs_for_generation(prompt, return_tensors="pt")    outputs = model.generate(inputs, max_length=100)    return outputs[0].decode("utf-8")# Определение функции для извлечения наиболее похожих векторов на вектор запроса пользователяdef retrieve_similar_vectors(query_vector):    results = client.search("my_index", query_vector)    return results# Определение функции для генерации ответа на запрос пользователяdef generate_response(query):    # Извлечение наиболее похожих векторов на вектор запроса пользователя    similar_vectors = retrieve_similar_vectors(query)    # Генерация текста на основе извлеченных векторов    response = generate_text(similar_vectors[0])    return response# Запуск чатботаwhile True:    # Получение запроса пользователя    query = input("Какой у вас вопрос? ")    # Генерация ответа на запрос пользователя    response = generate_response(query)    # Вывод ответа    print(response)

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

Чатбот > Какой у вас вопрос?Пользователь_А> Какovа высота Эйфелевой башни?Чатбот>Высота Эйфелевой башни измеряет 324 метра (1,063 фута) от ее основания до вершины антенны. 

Приложение Генератора Изображений

Давайте рассмотрим, как создать приложение Генератора Изображений, которое использует и Генеративный ИИ, и библиотеки LLM.

  1. Создайте векторную базу данных для хранения векторов изображений.
  2. Извлеките векторы изображений из ваших данных обучения.
  3. Вставьте векторы изображений в векторную базу данных.
  4. Обучите генеративную противоборствующую сеть (GAN). Прочитайте здесь, если вам нужно введение в GAN.
  5. Интегрируйте векторную базу данных и GAN.

Вот простой пример программы, которая интегрирует векторную базу данных и GAN для генерации изображений:

import pineconeimport torchfrom torchvision import transforms# Создание клиента API для векторной базы данныхclient = pinecone.Client(api_key="ВАШ_КЛЮЧ_API")# Загрузка GANgenerator = torch.load("generator.pt")# Определение функции для генерации изображения из вектораdef generate_image(vector):    # Преобразование вектора в тензор    tensor = torch.from_numpy(vector).float()    # Генерация изображения    image = generator(tensor)    # Преобразование изображения в изображение PIL    image = transforms.ToPILImage()(image)    return image# Запуск генератора изображенийwhile True:    # Получение запроса пользователя    query = input("Какое изображение вы хотите сгенерировать? ")    # Извлечение наиболее похожего вектора на вектор запроса пользователя    similar_vectors = client.search("my_index", query)    # Генерация изображения на основе извлеченного вектора    image = generate_image(similar_vectors[0])    # Отображение изображения    image.show()

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

ImageBot>Какое изображение вы хотите сгенерировать?Я>Идиллическое изображение горы с текущей рекой.ImageBot> Подождите минутку! Вот оно...
Сгенерированное изображение

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

Приложение для рекомендации фильмов

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

  1. Создайте базу данных векторов для хранения ваших векторов фильмов.
  2. Извлеките векторы фильмов из метаданных фильмов.
  3. Вставьте векторы фильмов в базу данных векторов.
  4. Рекомендуйте фильмы пользователям.

Вот пример использования API Pinecone для рекомендации фильмов пользователям:

import pinecone# Создание API-клиентаclient = pinecone.Client(api_key="ВАШ_КЛЮЧ_API")# Получение вектора пользователяuser_vector = client.get_vector("индекс_пользователя", идентификатор_пользователя)# Рекомендация фильмов пользователюresults = client.search("индекс_фильма", пользовательский_вектор)# Вывод результатовfor result in results:    print(result["title"])

Вот пример рекомендации для пользователя:

The Shawshank RedemptionThe Dark KnightInceptionThe GodfatherPulp Fiction

Реальные примеры использования LLM с помощью поиска/базы данных векторов

  • Microsoft и TikTok используют векторные базы данных, такие как Pinecone, для долгосрочной памяти и быстрого поиска. Это то, что LLM не может сделать самостоятельно без векторной базы данных. Это помогает пользователям сохранять свои предыдущие вопросы/ответы и возобновлять сеанс. Например, пользователи могут спросить: “Расскажи мне больше о рецепте пасты, о котором мы говорили на прошлой неделе”. Читайте здесь.

  • Decision Assistant от Flipkart рекомендует продукты пользователям, сначала кодируя запрос как векторное вложение, а затем выполняя поиск по векторам, хранящим соответствующие продукты в высокоразмерном пространстве. Например, если вы ищете “Wrangler кожаная куртка коричневого цвета мужская VoAGI”, он рекомендует пользователю соответствующие продукты с помощью поиска похожих векторов. В противном случае LLM не будет иметь рекомендаций, так как в каталоге товаров не будет содержаться таких названий или подробностей о продукте. Вы можете прочитать об этом здесь.
  • Chipper Cash, финансовая технологическая компания в Африке, использует векторную базу данных для снижения количества мошеннических регистраций пользователей в 10 раз. Для этого она хранит все изображения предыдущих регистраций пользователей как векторные вложения. Затем, когда новый пользователь регистрируется, она кодирует его как вектор и сравнивает с существующими пользователями, чтобы обнаружить мошенничество. Вы можете прочитать об этом здесь.
Источник: Chipper Cash
  • Facebook использует свою библиотеку поиска векторов, называемую FAISS (блог), во многих своих продуктах внутри, включая Instagram Reels и Facebook Stories, для быстрого поиска любого мультимедиа и нахождения похожих кандидатов для лучших предложений, показываемых пользователю.

Заключение

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

Основные выводы

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

  • Производительность: Векторные базы данных специально разработаны для эффективного хранения и извлечения векторных данных, что важно для создания высокопроизводительных приложений LLM.
  • Точность: Векторные базы данных могут точно соответствовать похожим векторам, даже если они отличаются незначительно. Они используют алгоритмы ближайших соседей для вычисления похожих векторов.
  • Многомодальность: Векторные базы данных могут вместить различные многомодальные данные, включая текст, изображения и звук. Эта гибкость делает их идеальным выбором для приложений LLM/Генеративного ИИ, которым необходимо работать с различными типами данных.
  • Дружественность для разработчиков: Векторные базы данных относительно просты в использовании, даже для разработчиков, возможно, не обладающих широкими знаниями методов машинного обучения.

Кроме того, я хотел бы отметить, что во многих существующих решениях SQL/NoSQL уже добавлены возможности хранения векторных вложений, индексации и быстрого поиска похожих элементов, например, PostgreSQL и Redis. Это быстро развивающаяся область, поэтому у разработчиков приложений в ближайшем будущем будет много вариантов для создания инновационных приложений.

Часто задаваемые вопросы

Представленные в этой статье мультимедийные материалы не принадлежат Analytics Vidhya и используются по усмотрению автора.