Этап 4 — Канонизация
2.7 Этап 4 — Каноническое сопоставление продуктов
На этом этапе различные поверхностные формы одного и того же продукта сводятся к единому каноническому идентификатору. Например:
COCA COLA 330ML KUTUC.COLA 33CL TENEKECOCA-COLA 0.33 LCOKA 330 ML
Все четыре разрешаются в один и тот же canonical_product_id. Это разрешение является предварительным условием для памяти цен и B2B-продукта данных.
Подход
Каноническое разрешение выполняется асинхронно в фоновом worker пост-обработки, после того как синхронный поток уже вернул пользователю проверенный предпросмотр. Это выводит разрешение продуктов с чувствительного к задержке пути: пользователь видит свой чек сразу, а канонические идентификаторы прикрепляются к записи мгновением позже.
Резолвер работает с таблицей псевдонимов, которая сопоставляет исходный текст строк чека с каноническими продуктами:
- Нечёткий поиск псевдонима — нормализованный текст строки сопоставляется с ранее выученными псевдонимами чеков с помощью триграммного сходства PostgreSQL (
pg_trgm). Совпадение разрешается напрямую в канонический продукт. Псевдонимы, выученные у одного торговца, переиспользуются между торговцами только тогда, когда текст читается как настоящее название продукта, а не как внутренняя аббревиатура магазина, — это удерживает разные продукты от слияния под одним каноническим идентификатором. - Резервный вызов LLM — при промахе языковая модель нормализует исходный текст в атрибуты бренда, продукта и размера. Результат записывается upsert-ом как новый канонический продукт (или сопоставляется с существующим) вместе с новой строкой псевдонима, поэтому та же поверхностная форма в следующий раз разрешается без вызова модели.
Настройки сходства и промпт нормализации управляются внутренним операционным слоем.
Неразрешённая позиция чека записывается с нулевой канонической ссылкой; разрешение может завершиться на более позднем проходе по мере роста таблицы псевдонимов.
Структура таксономии
category > subcategory > brand > product > variantПример:
Beverages > Carbonated Soft Drinks > Coca-Cola > Coca-Cola Classic > 330 ml canКаждый канонический продукт несёт нормализованные атрибуты: size_value, size_unit, package_type, brand_id, is_private_label, barcode_gtin (при наличии).
Модель роста
Канонический индекс растёт из самого потока чеков: каждая нормализованная LLM строка добавляет канонический продукт и псевдоним, и каждое последующее повторение этой поверхностной формы разрешается из таблицы псевдонимов без затрат на модель. Неоднозначные или низкокачественные записи проверяются через административный инструментарий каталога.