Перейти к основному содержанию

Введение

Датасет Hacker News содержит 28,74 миллиона публикаций и соответствующие им векторные эмбеддинги. Эмбеддинги были сгенерированы с помощью модели SentenceTransformers all-MiniLM-L6-v2. Размерность каждого эмбеддинг-вектора — 384. Этот датасет можно использовать, чтобы на практике разобраться в вопросах проектирования, сайзинга и производительности крупномасштабного реального приложения для векторного поиска, построенного на основе пользовательских текстовых данных.

Подробности о датасете

ClickHouse предоставляет полный датасет с векторными эмбеддингами в виде одного файла Parquet, размещённого в S3 бакете Мы рекомендуем сначала оценить размер датасета, чтобы определить требования к хранилищу и памяти, ориентируясь на документацию.

Шаги

1

Создание таблицы

Создайте таблицу hackernews для хранения публикаций, их эмбеддингов & связанных с ними атрибутов:
id — это просто последовательно увеличивающееся целое число. Дополнительные атрибуты можно использовать в предикатах, чтобы разобраться, как поиск векторов по сходству сочетается с постфильтрацией/префильтрацией, как описано в документации
2

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

Чтобы загрузить данные из файла в формате Parquet, выполните следующий оператор SQL:
Вставка 28,74 миллиона строк в таблицу займет несколько минут.
3

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

Выполните следующий SQL-запрос, чтобы определить и создать индекс векторного сходства на столбце vector таблицы hackernews:
Параметры и особенности производительности при создании индекса и поиске описаны в документации. В приведенном выше операторе используются значения 64 и 512 соответственно для гиперпараметров HNSW M и ef_construction. Вам нужно тщательно подобрать оптимальные значения этих параметров, оценивая время построения индекса и качество результатов поиска, соответствующие выбранным значениям.Построение и сохранение индекса для полного набора данных из 28,74 млн записей может занять от нескольких минут до часа — в зависимости от количества доступных ядер CPU и пропускной способности хранилища.
4

Выполните ANN-поиск

После построения индекса векторного сходства запросы векторного поиска будут автоматически использовать этот индекс:
Query
Первичная загрузка векторного индекса в память может занять от нескольких секунд до нескольких минут.
5

Генерация эмбеддингов для поискового запроса

Sentence Transformers — это локальные, простые в использовании модели векторных представлений для захвата семантического смысла предложений и абзацев.Этот набор данных HackerNews содержит векторные эмбеддинги, сгенерированные моделью all-MiniLM-L6-v2.Ниже приведён пример Python-скрипта, демонстрирующего программную генерацию эмбеддинг-векторов с помощью пакета sentence_transformers для Python. Полученный эмбеддинг-вектор поиска затем передаётся как аргумент функции cosineDistance() в запросе `SELECT`.
Ниже приведён пример запуска указанного выше Python-скрипта и результаты поиска по сходству (выводятся только первые 100 символов из каждого из 20 наиболее релевантных постов):

Демонстрационное приложение для суммаризации

В примере выше были показаны семантический поиск и извлечение документов с помощью ClickHouse.Далее представлен очень простой, но перспективный пример приложения на основе генеративного ИИ.Приложение выполняет следующие действия:
  1. Принимает от пользователя топик в качестве входных данных
  2. Создает эмбеддинг-вектор для темы с помощью SentenceTransformers и модели all-MiniLM-L6-v2
  3. Извлекает наиболее релевантные посты/комментарии с помощью поиска по векторному сходству в таблице hackernews
  4. Использует LangChain и Chat API OpenAI gpt-3.5-turbo, чтобы кратко изложить содержимое, полученное на шаге #3. Посты/комментарии, полученные на шаге #3, передаются в Chat API как контекст и служат ключевым связующим звеном в Generative AI.
Ниже сначала приведён пример работы приложения для суммаризации, а затем — его исходный код. Для запуска приложения необходимо задать API-ключ OpenAI в переменной окружения OPENAI_API_KEY. API-ключ OpenAI можно получить после регистрации на https://platform.openai.com.Данное приложение демонстрирует сценарий использования Generative AI, применимый в различных корпоративных областях, таких как: анализ тональности обращений клиентов, автоматизация технической поддержки, анализ диалогов пользователей, юридические документы, медицинские записи, транскрипты совещаний, финансовая отчётность и т. д.
Код для приведённого выше приложения:
Последнее изменение 2 июля 2026 г.