Общий пайплайн состоит из 3 основных стадий (см. Рисунок 1):
Репозиторий составлен из нескольких подпроектов (См. README для каждого подпроекта отдельно).
Для установки среды для каждого подпроекта есть свой environment.yml или setup.py.
clip-siameseДля большинства ноутбуков подпроекта clip-siamese доступны скринкасты в data/walthrhough, которые можно скачать с помощью hf_data_download.ipynb из HF repo INDEEPA/clip-siamese.
В данном подпроекте обучаем модель SiameseRuCLIP для идентификации похожих товаров по содержанию - название, изображение, описание (см. Рисунок 2).
Для разметки данных используем регулярные выражения (в cross-encoder приведен пример разметки данных с помощью LLM) чтобы получить пары товаров для контрастного обучения (см. Рисунок 3)
Важно разделять отрицательные примеры на простые отрицательные и сложные отрицательные для обеспечения разнообразия выборки (см. Рисунок 4)
Чтобы сократить кол-во пар при сохранении разнообразия датасета, кластеризуем простые отрицательные примеры и будем сэмплировать по 1 из каждого кластера (см. Рисунок 5)
Модель похожести получает 80-90+ Accuracy на валидации/тесте на попарном датасете OZ_geo_5500 по целевым товарам (товарам продаца 'ИНТЕРТРЕЙД'). См. clip-siamese/contrastive_test_embs_from-pairwise-rendered.ipynb и соответствующий скринкаст
При этом модель получает точность < 10 на всем наборе пар целевых товаров (в т.ч. которые попали в трейн), что странно - возможно виноват data leak. См. clip-siamese/contrastive_test_embs_from-pairwise-queries.ipynb и соответствующий скринкаст.
TODO: исключить Data Leak в тренировочном скрипте или показать, что он несущественный TODO: замерить метрики ранжирования TODO: обучить на лоссе для ранжирования, сравнить с контрастной версией TODO: сравнить SimameseRuCLIP обученный на лоссе для ранжирования с CrossEncoder (см. cross-encoder)
competitors-xgbМодель для определения конкурентных товаров с помощью градиентного бустинга на экономических признаках + (опционально скоры похожести из RuCLIP/Sentence Transformers).
TODO: Можно доработать чтобы принимать на вход скор похожести пары товаров из SiameseRuCLIP, а также добавить относительные признаки (см. competitors-xgb/reports/XGBoost_feature_importance_analysis.pdf)
cross-encoderПланировалось обучать Cross-Encoder чтобы повторить пайплайн ecom-tech.
В частности, была попытка разметить набор данных OZ_geo_5500 с помощью LLM - для каждого товара найти все дубликаты/похожие по содержанию (название + описание, без картинки).
После 50+ итераций улучшения промпта (см. make_OZ_geo_5500_pairwise-LLM-*.ipynb) промпт все еще показывал нестабильные результаты. В частности, было выявлено большое кол-во ложноположительных детекций в результирующей LLM разметке, что неприемлемо для контрастного обучения.
Особые сложности вызывала обработка числовых признаков. Так, на Рисунке 6 приведен пример, когда LLM посчитала два товара из категории географиеских карт дубликатами (D = Duplicate) несмотря на сильное различие в масштабе, что является критической ошибкой при определении конкурентных товаров.
Поэтому была предложена альтернативная схема разметики датасета OZ_geo_5500 с помощью регулярных выражений (см. clip-siamese/make_OZ_geo_5500_pairwise-regex).
TODO: обучить кросс-энкодер на разметке по регуляркам
Легаси код для обучения ruclip.
TODO: определить, он вообще лучше, чем исходные веса (от Сбера): ruclip в качестве backbone для SiameseRuCLIP?
220 commits
3 commits
Jupyter Notebook
99.6%
Общий пайплайн состоит из 3 основных стадий (см. Рисунок 1):
Репозиторий составлен из нескольких подпроектов (См. README для каждого подпроекта отдельно).
Для установки среды для каждого подпроекта есть свой environment.yml или setup.py.
clip-siameseДля большинства ноутбуков подпроекта clip-siamese доступны скринкасты в data/walthrhough, которые можно скачать с помощью hf_data_download.ipynb из HF repo INDEEPA/clip-siamese.
В данном подпроекте обучаем модель SiameseRuCLIP для идентификации похожих товаров по содержанию - название, изображение, описание (см. Рисунок 2).
Для разметки данных используем регулярные выражения (в cross-encoder приведен пример разметки данных с помощью LLM) чтобы получить пары товаров для контрастного обучения (см. Рисунок 3)
Важно разделять отрицательные примеры на простые отрицательные и сложные отрицательные для обеспечения разнообразия выборки (см. Рисунок 4)
Чтобы сократить кол-во пар при сохранении разнообразия датасета, кластеризуем простые отрицательные примеры и будем сэмплировать по 1 из каждого кластера (см. Рисунок 5)
Модель похожести получает 80-90+ Accuracy на валидации/тесте на попарном датасете OZ_geo_5500 по целевым товарам (товарам продаца 'ИНТЕРТРЕЙД'). См. clip-siamese/contrastive_test_embs_from-pairwise-rendered.ipynb и соответствующий скринкаст
При этом модель получает точность < 10 на всем наборе пар целевых товаров (в т.ч. которые попали в трейн), что странно - возможно виноват data leak. См. clip-siamese/contrastive_test_embs_from-pairwise-queries.ipynb и соответствующий скринкаст.
TODO: исключить Data Leak в тренировочном скрипте или показать, что он несущественный TODO: замерить метрики ранжирования TODO: обучить на лоссе для ранжирования, сравнить с контрастной версией TODO: сравнить SimameseRuCLIP обученный на лоссе для ранжирования с CrossEncoder (см. cross-encoder)
competitors-xgbМодель для определения конкурентных товаров с помощью градиентного бустинга на экономических признаках + (опционально скоры похожести из RuCLIP/Sentence Transformers).
TODO: Можно доработать чтобы принимать на вход скор похожести пары товаров из SiameseRuCLIP, а также добавить относительные признаки (см. competitors-xgb/reports/XGBoost_feature_importance_analysis.pdf)
cross-encoderПланировалось обучать Cross-Encoder чтобы повторить пайплайн ecom-tech.
В частности, была попытка разметить набор данных OZ_geo_5500 с помощью LLM - для каждого товара найти все дубликаты/похожие по содержанию (название + описание, без картинки).
После 50+ итераций улучшения промпта (см. make_OZ_geo_5500_pairwise-LLM-*.ipynb) промпт все еще показывал нестабильные результаты. В частности, было выявлено большое кол-во ложноположительных детекций в результирующей LLM разметке, что неприемлемо для контрастного обучения.
Особые сложности вызывала обработка числовых признаков. Так, на Рисунке 6 приведен пример, когда LLM посчитала два товара из категории географиеских карт дубликатами (D = Duplicate) несмотря на сильное различие в масштабе, что является критической ошибкой при определении конкурентных товаров.
Поэтому была предложена альтернативная схема разметики датасета OZ_geo_5500 с помощью регулярных выражений (см. clip-siamese/make_OZ_geo_5500_pairwise-regex).
TODO: обучить кросс-энкодер на разметке по регуляркам
Легаси код для обучения ruclip.
TODO: определить, он вообще лучше, чем исходные веса (от Сбера): ruclip в качестве backbone для SiameseRuCLIP?
220 commits
3 commits
Jupyter Notebook
99.6%