Создание семантического поискового агента документов с Hugging Face и ChromaDB


Введение

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

  • Моделей встраивания Hugging Face для преобразования текста в векторные представления
  • Chroma DB в качестве векторной базы данных для эффективного поиска по сходству
  • Трансформеров предложений для создания качественных встраиваний текста

Практическое решение

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

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

Шаги для реализации DocSearchAgent

Первым шагом необходимо установить необходимые библиотеки:

pip install chromadb sentence-transformers langchain datasets

Далее импортируем необходимые библиотеки:

import os
import numpy as np
import pandas as pd
from datasets import load_dataset
import chromadb
from chromadb.utils import embedding_functions
from sentence_transformers import SentenceTransformer
from langchain.text_splitter import RecursiveCharacterTextSplitter
import time

Загрузка данных

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

dataset = load_dataset("wikipedia", "20220301.en", split="train[:1000]")

Разделение документов

Документы следует разделить на более мелкие части для более точного поиска:

text_splitter = RecursiveCharacterTextSplitter(
   chunk_size=1000,
   chunk_overlap=200,
   length_function=len,
)

Создание встраиваний

Используем заранее обученную модель трансформеров предложений:

model_name = "sentence-transformers/all-MiniLM-L6-v2"
embedding_model = SentenceTransformer(model_name)

Настройка Chroma DB

Теперь создадим легковесную векторную базу данных для нашего поискового движка:

chroma_client = chromadb.Client()
embedding_function = embedding_functions.SentenceTransformerEmbeddingFunction(model_name=model_name)

Поиск документов

Теперь можно реализовать функцию для поиска документов:

def search_documents(query, n_results=5):
   # Логика поиска

Интерактивный поиск

Создадим интерфейс для удобного поиска:

def interactive_search():
   # Логика интерактивного поиска

Фильтрация результатов

Добавим возможность фильтрации результатов поиска по метаданным:

def filtered_search(query, filter_source=None, n_results=5):
   # Логика фильтрации

Заключение

Мы продемонстрировали, как создать семантический поисковый движок для документов с помощью моделей встраивания Hugging Face и ChromaDB. Система извлекает документы на основе значений, преобразуя текст в векторные представления. Итоговый продукт включает интерактивный поиск, фильтрацию по метаданным и оценку релевантности.

Свяжитесь с нами

Если вам нужна помощь в управлении искусственным интеллектом в бизнесе, свяжитесь с нами по адресу hello@itinai.ru.



Новости в сфере искусственного интеллекта