Optimizing Vector Search: Why You Should Flatten Structured Data
Data&AI Insights📖 Источник: towardsdatascience.com
Краткое содержание статьи
Статья посвящена оптимизации поиска по векторам в системах Retrieval-Augmented Generation (RAG) через преобразование структурированных данных в плоский текст. Автор показывает, что простое внедрение необработанных JSON-объектов в векторную базу данных приводит к значительному ухудшению качества поиска из-за особенностей токенизации и работы современных моделей эмбеддинга на базе архитектуры BERT. Для повышения эффективности предлагается метод «флеттинга» — преобразование JSON в естественный язык с сохранением смысловых связей, что улучшает метрики поиска на 19-27%. В статье приведён эксперимент с использованием модели all-MiniLM-L6-v2 и датасета Amazon ESCI, демонстрирующий конкретные численные улучшения.
Проблемы использования необработанных JSON в векторном поиске
Современные эмбеддинги, основанные на архитектуре BERT (кодировщик трансформера), обучены на больших корпусах неструктурированного текста с целью захвата семантического смысла. При попытке внедрить структурированные данные в формате JSON напрямую в векторную базу, возникает несколько ключевых проблем:
- Токенизация: современные модели используют алгоритмы Byte-Pair Encoding (BPE) или WordPiece, оптимизированные для естественного языка. При обработке JSON токенизатор разбивает текст на множество синтаксических символов (
",:,,), которые не несут семантической нагрузки, и на ключи/значения, например,"usd": 10разбивается на токены",usd,:,10,,. Это приводит к низкому отношению сигнала к шуму, так как около 25% токенов — синтаксис без смысла. - Механизм внимания (Attention) в трансформерах связывает значимые слова в тексте, например, в предложении «The price is 10 US dollars» модель легко связывает число
10с понятиемprice. В JSON же структура ключ-значение представлена синтаксисом, который модель не обучена эффективно интерпретировать, что приводит к потере смысловых связей. - Среднее объединение (Mean Pooling): итоговый вектор эмбеддинга получается усреднением всех токенов. При большом количестве «шумных» синтаксических токенов итоговый вектор смещается от истинного семантического центра, ухудшая качество поиска и увеличивая расстояние между запросом и документом в векторном пространстве.

Пример токенизации необработанного JSON с высокой долей синтаксических токенов, не несущих смысловой нагрузки
Метод «флеттинга»: преобразование JSON в естественный язык
Для решения описанных проблем предлагается преобразовать структурированные данные в плоский текст, который лучше подходит для моделей эмбеддинга. Рассмотрим пример продукта в формате JSON:
💻 Код (json):
{
"skuId": "123",
"description": "This is a test product used for demonstration purposes",
"quantity": 5,
"price": {
"usd": 10,
"eur": 9
},
"availableDiscounts": ["1", "2", "3"],
"giftCardAvailable": "true",
"category": "demo product"
}Преобразование в текст по шаблону:
Product with SKU 123 belongs to the category "demo product" Description: This is a test product used for demonstration purposes It has a quantity of 5 available The price is 10 US dollars or 9 euros Available discount ids include 1, 2, and 3 Gift cards are available for this product
Токенизация этого текста приводит к сокращению длины последовательности на 14% и к увеличению доли семантически значимых токенов.

Токенизация преобразованного текста с меньшим количеством токенов и большей семантической нагрузкой
Эксперимент: сравнение производительности поиска
Для оценки эффективности подхода был проведён эксперимент с использованием:
- Модели эмбеддинга: all-MiniLM-L6-v2 (22,7 млн параметров), популярной за счёт скорости и точности.
- Датасета: Amazon ESCI, версия milistu/amazon-esci-data, содержащая 5,000 случайных запросов и 3,809 продуктов.
- Индексов: два плоских FAISS индекса (IndexFlatIP) с размерностью эмбеддинга 384 — один для JSON, другой для плоского текста. Использование плоского индекса исключает влияние Approximate Nearest Neighbour (ANN) на метрики.
Функция преобразования JSON в текст:
💻 Код (python):
def flatten_product(product):
return (
f"Product {product['product_title']} from brand {product['product_brand']}"
f" and product id {product['product_id']}"
f" and description {product['product_description']}"
)Пример необработанного JSON из датасета:
💻 Код (json):
{
"product_id": "B07NKPWJMG",
"title": "RoWood 3D Puzzles for Adults, Wooden Mechanical Gear Kits for Teens Kids Age 14+",
"description": "Specifications Model Number: Rowood Treasure box LK502 Average build time: 5 hours Total Pieces: 123 Model weight: 0.69 kg Box weight: 0.74 KG Assembled size: 100*124*85 mm Box size: 320*235*39 mm Certificates: EN71,-1,-2,-3,ASTMF963 Recommended Age Range: 14+ Contents Plywood sheets Metal Spring Illustrated instructions Accessories MADE FOR ASSEMBLY -Follow the instructions provided in the booklet and assembly 3d puzzle with some exciting and engaging fun. Fell the pride of self creation getting this exquisite wooden work like a pro. GLORIFY YOUR LIVING SPACE -Revive the enigmatic charm and cheer your parties and get-togethers with an experience that is unique and interesting.",
"brand": "RoWood",
"color": "Treasure Box"
}Результаты эксперимента
Сравнение метрик поиска (Precision@10, Recall@10, MRR) для двух подходов показало:
- Recall@10 увеличился на 19.1%
- MRR (Mean Reciprocal Rank) вырос на 27.2%
- Precision@10 также демонстрирует стабильный рост около 20%

Сравнение результатов поиска для необработанного JSON и плоского текста с использованием модели all-MiniLM-L6-v2

Процентное улучшение ключевых метрик после преобразования JSON в плоский текст
Выводы и рекомендации
- Внедрение необработанных JSON-объектов в векторные базы данных с использованием стандартных моделей эмбеддинга на базе BERT приводит к ухудшению качества поиска из-за высокой доли синтаксических токенов и отсутствия семантических связей между ключами и значениями.
- Преобразование структурированных данных в плоский текст с сохранением смысловых связей (флеттинг) значительно улучшает качество эмбеддингов и, как следствие, метрики поиска.
- Эксперимент с моделью all-MiniLM-L6-v2 и датасетом Amazon ESCI показал улучшение Recall@10 на 19.1% и MRR на 27.2%, что подтверждает эффективность метода.
- Для инженеров, создающих RAG-системы, ключевым этапом является правильная подготовка данных — именно она обеспечивает достижение пиковых результатов семантического поиска.
- Важно использовать плоские индексы FAISS для точной оценки метрик без влияния Approximate Nearest Neighbour алгоритмов.
Дополнительные ресурсы
- Полный код эксперимента доступен в Google Colab: https://colab.research.google.com/drive/1dTgt6xwmA6CeIKE38lf2cZVahaJNbQB1?usp=sharing
- Модель эмбеддинга all-MiniLM-L6-v2: https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2
- Датасет Amazon ESCI: https://huggingface.co/datasets/milistu/amazon-esci-data
- FAISS — библиотека для эффективного поиска по векторам: https://ai.meta.com/tools/faiss/
Таким образом, статья демонстрирует, что грамотная подготовка структурированных данных в виде плоского текста является критически важной для повышения качества семантического поиска в RAG-системах, и предлагает конкретный, воспроизводимый метод с подтверждёнными численными результатами.
📢 Информация предоставлена телеграм-каналом: Data&AI Insights
🤖 Data&AI Insights - Ваш источник инсайтов о данных и ИИ