Научитесь использовать ChromaDB для приложения семантического поиска

Введение

За последний год генеративный ИИ добился больших успехов. С момента запуска модели генерации изображений DALL-E 2 многие модели ИИ, такие как GPT-3.5, GPT-4 и модели с открытым исходным кодом, стали притчей во языцех в сообществе ИИ и за его пределами. С появлением приложений и вариантов использования ИИ увеличился поток различных инструментов и технологий, облегчающих такие приложения ИИ и позволяющих разработчикам ИИ создавать реальные приложения.

Среди таких инструментов сегодня мы узнаем о работе и функциях ChromaDB, векторной базы данных с открытым исходным кодом для хранения вложений из моделей ИИ, таких как GPT3.5, GPT-4 или любой другой модели ОС. Встраивание — важнейший компонент любого пайплайна приложений ИИ. Поскольку компьютеры обрабатывают только векторы, все данные должны быть векторизованы в виде вложений для использования в приложениях. так глубоко погрузитесь в работу ChromDB с практическими примерами кода!

(Примечание: исходная статья была опубликована на Analytics Vidhya — нажмите здесь, чтобы узнать больше)

Оглавление:

  1. Основы ChromaDB и установка библиотеки
  2. Функции и работа ChromaDB
  3. Приложение семантического поиска с образцами документов
  4. Вложения, поддерживаемые в ChromaDB
  5. Заключение
  6. Часто задаваемые вопросы

Основы ChromaDB и установка библиотеки

ChromaDB — это векторная база данных с открытым исходным кодом, предназначенная для хранения векторных вложений для разработки и создания больших приложений языковых моделей. База данных упрощает хранение знаний, навыков и фактов для приложений LLM.

ChromaDB — это векторная база данных с открытым исходным кодом, предназначенная для хранения векторных вложений для разработки и создания больших приложений языковых моделей. База данных упрощает хранение знаний, навыков и фактов для приложений LLM.

На приведенной выше диаграмме показана работа chromaDB при интеграции с любым приложением LLM. ChromaDB предоставляет нам инструмент для выполнения следующих функций:

  • Храните вложения и их метаданные с идентификаторами.
  • Встраивание документов и запросов
  • Поиск вложений

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

Теперь давайте установим ChromaDB в средах Python и Javascript. Он также может работать в Jupyter Notebook, позволяя специалистам по данным и инженерам по машинному обучению экспериментировать с моделями LLM.

Установка Python

pip install chromadb

Установка JavaScript

npm install --save chromadb # yarn add chromadb

После установки библиотеки мы узнаем о различных ее функциях в следующих разделах.

Функции и работа ChromaDB

Мы можем использовать среду Jupyter Notebook, такую ​​как Google Colab, для наших демонстрационных целей. Вы можете выполнить следующие практические упражнения в среде Google Colab, Kaggle или локальной записной книжки.

Создание коллекции ChromaDB

# import chromadb and create client
import chromadb

client = chromadb.Client()
collection = client.create_collection("my-collection")

В приведенном выше коде мы создали экземпляр объекта клиента для создания коллекции "my-collection" в папке репозитория.

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

Добавить документы в коллекцию

# add the documents in the db
collection.add(
    documents=["This is a document about cat", "This is a document about car", "This is a document about bike"],
    metadatas=[{"category": "animal"}, {"category": "vehicle"}, {"category": "vehicle"}],
    ids=["id1", "id2","id3"]
)

Теперь мы добавили несколько примеров документов вместе с метаданными и идентификаторами, чтобы хранить их в структурированном виде.

ChromaDB будет хранить текстовые документы и выполнять токенизацию, векторизацию и индексирование автоматически без каких-либо дополнительных команд.

Запросить базу данных коллекции

# ask the querying to retrieve the data from DB
results = collection.query(
    query_texts=["vehicle"],
    n_results=1
)


------------------------------[Results]-------------------------------------
{'ids': [['id2']],
 'embeddings': None,
 'documents': [['This is a document about car']],
 'metadatas': [[{'category': 'vehicle'}]],
 'distances': [[0.8069301247596741]]}

Просто вызвав функцию «query()» в базе данных коллекции, она вернет наиболее похожий текст на основе входного запроса с их метаданными и идентификаторами. В нашем примере запрос возвращает аналогичный текст, содержащий метаданные "транспортное средство".

Приложение семантического поиска с образцами документов

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

Мы будем использовать папку pets с несколькими образцами документов, чтобы обойти приложение семантического поиска в ChromaDB. У нас есть следующие файлы в локальной папке:

Давайте импортируем файлы из локальной папки и сохраним их в "file_data".

# import files from the pets folder to store in VectorDB
import os

def read_files_from_folder(folder_path):
    file_data = []

    for file_name in os.listdir(folder_path):
        if file_name.endswith(".txt"):
            with open(os.path.join(folder_path, file_name), 'r') as file:
                content = file.read()
                file_data.append({"file_name": file_name, "content": content})

    return file_data

folder_path = "/content/pets"
file_data = read_files_from_folder(folder_path)

Приведенный выше код берет файлы из папки «pets» и добавляет их в «file_data» в виде списка всех файлов. мы будем использовать эти файлы для хранения в ChromaDB в качестве вложений для запросов.

# get the data from file_data and create chromadb collection
documents = []
metadatas = []
ids = []

for index, data in enumerate(file_data):
    documents.append(data['content'])
    metadatas.append({'source': data['file_name']})
    ids.append(str(index + 1))

# create collection of pet files 
pet_collection = client.create_collection("pet_collection")

# add files to the chromadb collection
pet_collection.add(
    documents=documents,
    metadatas=metadatas,
    ids=ids
)

Приведенный выше код берет файлы и метаданные из списка файлов и добавляет их в коллекцию chromaDB с именем "pet_collection".

Здесь мы должны принять к сведению, что по умолчанию chromadb использует модель встраивания «all-MiniLM-L6-v2» из преобразователей предложений, которая преобразует текстовые документы в векторы. Теперь давайте запросим коллекцию, чтобы увидеть результаты.

# query the database to get the answer from vectorized data
results = pet_collection.query(
    query_texts=["What is the Nutrition needs of the pet animals?"],
    n_results=1
)

results

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

Использование различных моделей встраивания

До сих пор мы использовали модель встраивания по умолчанию для векторизации входных текстов, но ChromaDB также допускает различные другие модели из библиотеки преобразования предложений. мы будем использовать модель «paraphrase-MiniLM-L3-v2», чтобы встроить тот же самый документ pets для нашего приложения семантического поиска.

(Примечание. Пожалуйста, установите библиотеку sentence_transformers перед выполнением приведенного ниже кода, если вы еще этого не сделали.)

# import the sentence transformers
from sentence_transformers import SentenceTransformer

model = SentenceTransformer('paraphrase-MiniLM-L3-v2')

documents = []
embeddings = []
metadatas = []
ids = []

for index, data in enumerate(file_data):
    documents.append(data['content'])
    embedding = model.encode(data['content']).tolist()
    embeddings.append(embedding)
    metadatas.append({'source': data['file_name']})
    ids.append(str(index + 1))

# create the new chromaDB and use embeddings to add and query data
pet_collection_emb = client.create_collection("pet_collection_emb")

# add the pets files into the pet_collection_emb database
pet_collection_emb.add(
    documents=documents,
    embeddings=embeddings,
    metadatas=metadatas,
    ids=ids
)

В приведенном выше коде используется модель «paraphrase-MiniLM-L3-v2» для кодирования входных файлов при добавлении в новую коллекцию.

Теперь мы можем снова запросить базу данных, чтобы получить наиболее похожие результаты.

# write text query and submit to the collection 
query = "What are the different kinds of pets people commonly own?"
input_em = model.encode(query).tolist()

results = pet_collection_emb.query(
    query_embeddings=[input_em],
    n_results=1
)
results

Вложения, поддерживаемые в ChromaDB

Вложения — это собственный способ хранения всех видов данных для приложений ИИ. Они могут представлять текст, изображения, аудио- и видеоданные в соответствии с требованиями приложений.

ChromaDB поддерживает множество моделей ИИ от разных поставщиков встраивания, таких как OpenAI, преобразователи предложений, Cohere и Google PaLM API. Давайте посмотрим на некоторые из них здесь.

Встраивание преобразователя предложений

# loading any model from sentence transformer library
sentence_transformer_ef = embedding_functions.SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2")

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

Модели OpenAI

ChromaDB предоставляет функцию-оболочку для использования любого API модели внедрения из OpenAI для приложений AI.

# function to call OpenAI embeddings
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
                api_key="YOUR_API_KEY",
                model_name="text-embedding-ada-002"
            )

Для получения более подробной информации о функциях ChromaDB посетите их официальную документацию здесь

Репозиторий кода Github: Нажмите здесь

Заключение

В заключение, векторные базы данных являются ключевыми строительными блоками для приложений генеративного ИИ. ChromaDB — одна из таких векторных баз данных, которая все чаще используется в широком спектре приложений на основе LLM. В этом блоге мы узнали о различных функциях и работе ChromaDb на примере кода. Давайте рассмотрим основные выводы из этого блога:

  1. Мы изучили различные функции ChromaDB на примерах кода.
  2. Мы узнали о вариантах использования chromaDB в приложении семантического поиска.
  3. Наконец, мы увидели типы вложений, такие как OpenAI, Cohere и преобразователи предложений, которые поддерживаются ChromaDB.

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

Вопрос 1. Для чего используется база данных цветности?

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

Вопрос 2. Является ли chromaDB бесплатным?

О: Да, ChromaDB можно использовать бесплатно в любых личных или коммерческих целях по лицензии Apache 2.0.

Вопрос 3. Находится ли база данных цветности в памяти?

О: ChromaDB по своей природе является гибкой. Он работает как в оперативной памяти, так и во встроенной конфигурации для любого приложения на основе LLM.

Вопрос 4. В чем разница между ChromaDB и LangChain?

О: ChromaDB – это векторная база данных, в которой данные хранятся в форме встраивания, а LangChain – это платформа для загрузки больших объемов данных для любого варианта использования.

Вопрос 5. Какие встраивания поддерживает ChromaDB?

О: ChromaDB поддерживает модели преобразования предложений, API OpenAI и Cohere или любую другую модель ОС для хранения вложений.