Научитесь использовать ChromaDB для приложения семантического поиска
Введение
За последний год генеративный ИИ добился больших успехов. С момента запуска модели генерации изображений DALL-E 2 многие модели ИИ, такие как GPT-3.5, GPT-4 и модели с открытым исходным кодом, стали притчей во языцех в сообществе ИИ и за его пределами. С появлением приложений и вариантов использования ИИ увеличился поток различных инструментов и технологий, облегчающих такие приложения ИИ и позволяющих разработчикам ИИ создавать реальные приложения.
Среди таких инструментов сегодня мы узнаем о работе и функциях ChromaDB, векторной базы данных с открытым исходным кодом для хранения вложений из моделей ИИ, таких как GPT3.5, GPT-4 или любой другой модели ОС. Встраивание — важнейший компонент любого пайплайна приложений ИИ. Поскольку компьютеры обрабатывают только векторы, все данные должны быть векторизованы в виде вложений для использования в приложениях. так глубоко погрузитесь в работу ChromDB с практическими примерами кода!
(Примечание: исходная статья была опубликована на Analytics Vidhya — нажмите здесь, чтобы узнать больше)
Оглавление:
- Основы ChromaDB и установка библиотеки
- Функции и работа ChromaDB
- Приложение семантического поиска с образцами документов
- Вложения, поддерживаемые в ChromaDB
- Заключение
- Часто задаваемые вопросы
Основы 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 на примере кода. Давайте рассмотрим основные выводы из этого блога:
- Мы изучили различные функции ChromaDB на примерах кода.
- Мы узнали о вариантах использования chromaDB в приложении семантического поиска.
- Наконец, мы увидели типы вложений, такие как 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 или любую другую модель ОС для хранения вложений.