
Введение
В современном мире, насыщенном информацией, быстрый поиск актуальных документов является критически важным. Традиционные системы поиска на основе ключевых слов часто не справляются с задачами понимания семантики. В этом руководстве мы рассмотрим, как создать мощный поисковый движок для документов с использованием:
- Моделей встраивания 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.