Исследуем Verba, the Golden RAGtriever
Verba - это приложение с открытым исходным кодом и удобным интерфейсом для генерации с расширенным поиском (RAG). Всего за несколько простых шагов ты сможешь исследовать свои данные и извлечь из них полезные сведения, как локально с помощью HuggingFace и Ollama, так и через OpenAI, Cohere и Google.

Verba - это новый инструмент на базе искусственного интеллекта, который помогает пользователям создавать увлекательный и осмысленный контент. Он помогает на всех этапах - от мозгового штурма до создания черновиков, увеличивая продуктивность и креативность. Независимо от того, писатель вы или создатель контента, Verba открывает новые возможности для оптимизации творческого процесса.
Введение
Добро пожаловать в увлекательный мир векторного поиска с Verba!
Если ты только начинаешь и хочешь познакомиться с новым инструментом, или ты уже опытный разработчик, желающий расширить набор своих инструментов, эта статья специально для тебя. Из нее ты узнаешь о том, что такое Verba, где и для чего она применяется, как ее использовать в Python, и какие существуют альтернативные решения.
Итак, наливай ☕️ и поехали!
Зачем нужен векторный поиск?
Прежде чем погрузиться в специфику Verba, давайте разберемся, что такое векторизация и что собой представляет векторный поиск.
Векторизация – это преобразование входных данных (текста или изображения) в векторы действительных чисел, которые понятны моделям машинного обучения. Существует множество техник векторизации, от простого подсчета частоты употребления термина до использования признаков, учитывающих сложный контекст.
Векторный поиск - это метод поиска похожих объектов на основе их векторов (числовых представлений). Он особенно эффективен для таких задач, как поиск в больших текстовых массивах данных, поиск похожих изображений или даже рекомендация товаров.
Почему векторный поиск важен? Вот несколько причин:
- Масштабируемость: Традиционные методы поиска могут не справляться с большими массивами данных. Векторный поиск хорошо масштабируется при работе с большими объемами данных.
- Точность: Благодаря использованию вкраплений векторный поиск может улавливать семантический смысл, что приводит к более точным результатам поиска.
- Универсальность: Векторный поиск можно использовать для изображений, аудио и любых других данных, которые могут быть представлены в виде векторов.
Что такое Verba?
Verba - это инструмент с открытым исходным кодом, разработанный Weaviate для упрощения и повышения эффективности векторного поиска. Verba использует возможности Weaviate, векторной базы данных с открытым исходным кодом, способной хранить как объекты данных, так и векторные вкрапления. Эта функция позволяет осуществлять сложный, бесшовный и эффективный поиск. Verba сочетает в себе мощь моделей машинного обучения для создания вложений (векторов) и надежность Weaviate для выполнения быстрого и точного поиска.
Модели
Verba позволяет выбирать различных провайдеров LLM (Large Language Models или Большие Языковые Модели) в зависимости от конкретного случая использования:
- Ollama: Модели локального встраивания и генерации, например, Llama3
- HuggingFace: Модели локального встраивания, например, MiniLMEmbedder
- Cohere: Модели встраивания и генерации, например, Command R+
- Google: Модели встраивания и генерации, например, Gemini
- OpenAI: Модели встраивания и генерации, например, GPT-4o
Данные
Verba поддерживает работу со следующими типами данных:
- PDF: Импорт PDF-файлов в Verba
- CSV/XLSX: Импорт табличных данных в Verba
- Неструктурированные: Импорт данных через Unstructured.io
- Multi-Modal: Планируется импорт мультимодальных данных в Verba.
Примеры использования Verba
Поиск документов. Одним из наиболее распространенных вариантов использования Weaviate Verba является поиск документов. Если у тебя есть коллекция научных работ, новостных статей или записей в блогах, Verba поможет тебе найти соответствующие документы на основе запроса.
Поиск сходства изображений. Если у тебя есть набор данных изображений, ты можешь использовать Verba для поиска визуально похожих изображений. Это особенно полезно для таких приложений, как рекомендации на основе изображений или обнаружение дубликатов изображений.
Семантический поиск по тексту. Verba отлично справляется с семантическим поиском текста, цель которого - найти документы, семантически схожие с заданным запросом. Это выходит за рамки сопоставления ключевых слов и позволяет понять контекст и смысл запроса.
Начало работы с Verba
Давайте разберемся, как начать работу с Weaviate Verba и использовать ее в проекте на Python. Мы рассмотрим установку, основы использования и практический пример.
Установка
Прежде всего, нужно установить Weaviate и библиотеку Verba. Это можно сделать с помощью pip:
pip install weaviate-client
pip install weaviate-verbaНастройка
Чтобы использовать Weaviate Verba, необходимо иметь запущенный экземпляр Weaviate. Локальное развертывание - это самый простой способ запустить базу данных Weaviate для создания прототипов и тестирования. Ты можешь запустить Weaviate локально с помощью Docker:
docker run -p 8080:8080 -p 50051:50051 semitechnologies/weaviate:latestПодробные инструкции по развертыванию Weaviate с помощью Docker ты найдешь в их Weaviate Docker Guide.
Если ты предпочитаешь облачные решения, Weaviate Cloud Service (WCS) предлагает масштабируемую, управляемую среду. О том, как настроить облачный кластер и получить API ключи, читай в Weaviate Cluster Setup Guide.
Использование Verba
Перед запуском Verba нужно настроить доступ к различным компонентам в зависимости от выбранных технологий, такими как OpenAI, Cohere или HuggingFace, с помощью файла .env. Создай его в той же директории, в которой ты будешь запускать Verba. 👉 Пример .env.
Теперь давай посмотрим, как использовать Weaviate Verba с кодом на Python. Начнем с простого примера индексирования и поиска текстовых данных.
Индексирование данных:
import weaviate
from weaviate_verba import Verba
# Подключение к Weaviate
client = weaviate.Client("http://localhost:8080")
# Инициализируем Verba
verba = Verba(client)
# Определяем схему
schema = {
"classes": [
{
"class": "Article",
"properties": [
{
"name": "title",
"dataType": ["string"]
},
{
"name": "content",
"dataType": ["text"]
}
]
}
]
}
# Создаем схему
client.schema.create(schema)
# Индексируем данные
articles = [
{"title": "Introduction to Machine Learning", "content": "Machine learning is a field of AI..."},
{"title": "Deep Learning Basics", "content": "Deep learning is a subset of machine learning..."},
]
for article in articles:
client.data_object.create(article, "Article")Поиск данных:
# Поиск похожих статей
query = "Basics of AI"
result = verba.search("Article", query)
for item in result:
print(f"Title: {item['title']}, Content: {item['content']}")Локальные Документы
Давай подробнее рассмотрим, как использовать Weaviate Verba для индексации и поиска локально сохраненных документов. Мы рассмотрим процесс загрузки документов из локальной файловой системы, их индексации с помощью Weaviate Verba, а затем выполнения поиска.
Убедись, что у тебя установлены Weaviate и Verba, а также запущен экземпляр Weaviate.
Загрузка и индексирование
Предположим, что у тебя есть каталог с текстовыми файлами, которые ты хочешь проиндексировать. Давай напишем код, который загрузит эти файлы, создаст схему в Weaviate и проиндексирует документы.
import os
import weaviate
from weaviate_verba import Verba
# Подключение к Weaviate
client = weaviate.Client("http://localhost:8080")
# Инициализируем Verba
verba = Verba(client)
# Определяем схему
schema = {
"classes": [
{
"class": "Document",
"properties": [
{
"name": "title",
"dataType": ["string"]
},
{
"name": "content",
"dataType": ["text"]
}
]
}
]
}
# Создаем схему
client.schema.create(schema)
# Функция загрузки документов из каталога
def load_documents_from_directory(directory_path):
documents = []
for filename in os.listdir(directory_path):
if filename.endswith(".txt"):
file_path = os.path.join(directory_path, filename)
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
documents.append({
"title": filename,
"content": content
})
return documents
# Загружаем документы
directory_path = "/path/to/your/documents" # Поменяй на путь к твоей директории
documents = load_documents_from_directory(directory_path)
# Индексируем документы
for doc in documents:
client.data_object.create(doc, "Document")Поиск документов
Теперь, когда мы проиндексировали наши локальные документы, мы можем выполнять поиск с помощью Verba.
# Определяем поисковый запрос
query = "Machine learning concepts"
# Выполняем поиск
results = verba.search("Document", query)
# Отображаем результаты
for result in results:
# Выводим первые 200 символов содержимого
print(f"Title: {result['title']}, Content: {result['content'][:200]}...")Пример полного сценария
Вот полный сценарий, объединяющий загрузку, индексацию и поиск:
import os
import weaviate
from weaviate_verba import Verba
# Подключение к Weaviate
client = weaviate.Client("http://localhost:8080")
# Инициализируем Verba
verba = Verba(client)
# Определяем схему
schema = {
"classes": [
{
"class": "Document",
"properties": [
{
"name": "title",
"dataType": ["string"]
},
{
"name": "content",
"dataType": ["text"]
}
]
}
]
}
# Создаем схему
client.schema.create(schema)
# Функция загрузки документов из каталога
def load_documents_from_directory(directory_path):
documents = []
for filename in os.listdir(directory_path):
if filename.endswith(".txt"):
file_path = os.path.join(directory_path, filename)
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
documents.append({
"title": filename,
"content": content
})
return documents
# Загружаем документы
directory_path = "/path/to/your/documents" # Поменяй на путь к твоей директории
documents = load_documents_from_directory(directory_path)
# Индексируем документы
for doc in documents:
client.data_object.create(doc, "Document")
# Определяем поисковый запрос
query = "Machine learning concepts"
# Выполняем поиск
results = verba.search("Document", query)
# Отображаем результаты
for result in results:
# Выводим первые 200 символов содержимого
print(f"Title: {result['title']}, Content: {result['content'][:200]}...")Пояснение
Загрузка документов: Функция
load_documents_from_directoryсчитывает текстовые файлы из указанного каталога и загружает их содержимое в список словарей.Индексирование документов: Каждый документ индексируется в Weaviate с именем класса “Документ”.
Поиск: Поисковый запрос обрабатывается, и результаты выводятся на печать, отображая заголовок и первые 200 символов содержимого каждого документа.
Следуя этим шагам, ты сможешь эффективно индексировать и искать в локально сохраненных документах с помощью Weaviate Verba. Этот метод может быть адаптирован для различных типов текстовых данных, обеспечивая мощные и масштабируемые возможности поиска в твоих проектах.
Плюсы и минусы Verba
Итак, что же хорошего и что можно улучшить в этом инструменте?
Плюсы Verba
- Простота использования: Verba предоставляет высокоуровневый API, который позволяет легко интегрировать векторный поиск в твои приложения.
- Гибкость: Поддерживаются различные типы данных, включая текст, изображения и многое другое.
- Производительность: Построенная на базе Weaviate, Verba обеспечивает быстрый и эффективный поиск даже в больших массивах данных.
- Открытый исходный код: Открытый исходный код означает, что ты можешь внести свой вклад в его разработку и адаптировать его под свои нужды.
Минусы Verba
- Сложность установки: Первоначальная установка, особенно настройка Weaviate, может быть сложной для новичков.
- Ресурсоемкость: Запуск Weaviate и выполнение векторных операций могут быть ресурсоемкими и требовать значительных вычислительных мощностей.
- Кривая обучения: Для понимания концепций векторного поиска и эффективного использования Verba может потребоваться обучение.
👉 Хочешь увидеть Verba в действии? Живая демонстрация Verba.
👉 Официальная статья о Verba от Weaviate.
👉 Видео на YouTube с обзором возможностей Verba.
Альтернативные Решения
Faiss
Faiss (Facebook AI Similarity Search) - популярная библиотека для эффективного поиска сходства и кластеризации плотных векторов.
Плюсы Faiss:
- Высоко оптимизированная: Faiss оптимизирована для производительности и эффективно обрабатывает большие наборы данных.
- Версальность: Он поддерживает различные методы индексирования и стратегии поиска.
Недостатки Faiss:.
- Сложность: Faiss может быть сложным в настройке и использовании, особенно для новичков.
- Ограниченная область применения: В первую очередь он ориентирован на векторный поиск и не предоставляет полноценной поисковой системы, как Weaviate.
Elasticsearch
Elasticsearch - это широко используемая поисковая система, которая может быть расширена с помощью k-NN плагина для поддержки векторного поиска.
Плюсы Elasticsearch с k-NN:.
- Масштабируемость: Elasticsearch обладает высокой масштабируемостью и может работать с крупномасштабными поисковыми приложениями.
- Богатые возможности: Помимо векторного поиска, он предлагает широкий спектр поисковых и аналитических функций.
Минусы Elasticsearch с k-NN:.
- Сложность: Установка и настройка Elasticsearch с плагином k-NN может быть сложной.
- Производительность: Несмотря на свою мощь, он не может сравниться по производительности со специализированными инструментами векторного поиска, такими как Faiss или Weaviate.
Заключение
Verba - это мощный инструмент, позволяющий использовать все возможности векторного поиска на кончиках твоих пальцев. Простота использования, гибкость и производительность делают его отличным выбором для различных приложений. Несмотря на некоторую сложность настройки и требования к ресурсам, преимущества, которые он предлагает, стоят затраченных усилий.
Для начинающих пользователей Weaviate Verba может стать отличным введением в мир векторного поиска. Примеры кода, приведенные в этом посте, помогут тебе начать свой путь. По мере знакомства с инструментом ты откроешь для себя весь его потенциал и широкий спектр приложений, которые он может поддерживать.
Если ты рассматривашь альтернативы, то Faiss и Elasticsearch с плагином k-NN также являются отличными вариантами, каждый из которых имеет свои сильные и слабые стороны. В конечном итоге выбор лучшего инструмента для твоих нужд будет зависеть от конкретного случая использования, требований к производительности и знакомства с технологией.
Удачного кодирования, и пусть твои поиски всегда будут эффективными и точными!
😎
Один емейл, когда выйдет новый пост.



