Привет! Я Давид Акопян, занимаюсь интеграциями ML, GPT и консалтингом. Сейчас работаю тимлидом продуктовой аналитики в Авито.
Ранее был опыт в:
EY операционном консалтинге в сфере ретейла. Консультировал такие компании как «Магнит», «Детский Мир», «Аскона», «МВидео», НЛМК;
E-groccery-стартапе;
был тимлидом аналитики обычной и экспресс-доставки Яндекс.Маркета;
а еще пробовал себя в различных проектах во фрилансе.
Каждый, кто работает с большими данными, знает, насколько трудоемко и сложно вручную находить и удалять дублирующиеся записи. Нечеткие совпадения, повторяющиеся данные или ошибки при вводе информации могут снижать точность моделей и усложнять анализ.
В этой статье хочу поделиться опытом успешного консалтингового проекта по интеграции ML и GPT для интернет-магазина на Shopify с целью уменьшения количества дубликатов в базе данных клиента.
Материал подготовлен на основе моего выступления в качестве контрибьютера для YNDX Family – это неофициальное сообщество нынешних и бывших сотрудников Яндекса. У ребят есть закрытая база знаний, где профессионалы делятся своим опытом.
Что внутри статьи:
Какие существующие алгоритмы могут помочь в решении задачи?
Почему алгоритм BM25 лучше всего подошел для задачи клиента?
Почему не стали использовать модель GPT?
Сравнение результатов BM25 и GPT
Шесть правил успеха консалтингового проекта
Как определить стоимость проекта
Итак, поехали!
Описание кейса
Заказчик: Быстро растущая компания из Дубая, занимается стройматериалами и сотрудничает с большим количеством поставщиков.
Боль клиента: У компании стремительно растет база данных (БД), и коды SKU заполняются разными поставщиками, что может привести к появлению множества дубликатов в будущем. Клиент хочет внедрить автоматизированную систему распознавания дубликатов в базе данных.
Формализованная техническая задача: В результате анализа кейса были выделены следующие задачи:
провести первичный анализ БД для оценки количества: дубликатов записей и вариаций одного товара с целью объединения их в одну карточку с сохранением спецификаций;
выполнить интеграцию с 1С, при которой при заведении новой карточки будут появляться подсказки о возможном наличии дубликатов.
Критерии точности работы модели:
доля ошибок первого рода (ложная тревога) не должны превышать 10%, то есть модель не должна ошибочно помечать запись как дубликат в более чем 10% случаев;
доля ошибок второго рода (недостаточная бдительность) не должны превышать 5%, то есть модель должна пропускать не более 5% случаев, когда дубликат остается нераспознанным.
Какие существующие алгоритмы могут помочь в решении задачи клиента?
BM25
BM25 (Best Match 25) – это вероятностный алгоритм ранжирования, применяемый для оценки релевантности документов поисковому запросу. Он широко используется в поисковых системах и системах управления информацией. BM25 оценивает вероятность релевантности документа запросу, основываясь на частоте терминов запроса в документе и статистических характеристиках коллекции документов.
Расстояние Левенштейна
Расстояние Левенштейна или редакционное расстояние — это метрика, измеряющая различие между двумя строками. Чем больше расстояние – тем более различны строки. Для двух одинаковых строк расстояние равно нулю. Этот метод используется для исправления ошибок в текстах, поиска дубликатов и других операций с текстовыми данными.
Косинусная близость
Косинусное сходство – это метод, применяемый для оценки сходства между двумя текстовыми документами. Оно вычисляется через угол между векторами, представляющими документы, и широко используется в рекомендательных системах и приложениях машинного обучения.
Евклидово расстояние
Евклидово расстояние – это метрика, определяющая кратчайшую прямую между двумя точками в евклидовом пространстве. Это фундаментальная геометрическая метрика, которая применяется для измерения расстояний в многомерных пространствах.
Почему алгоритм BM25 лучше всего подошел для задачи клиента?
Алгоритм BM25 был выбран по следующим причинам:
алгоритм отдает приоритет более редким словам, что позволяет улучшить точность поиска. Пример: Для запроса «Гайка Rixton 25мм» наиболее релевантной будет запись «Гайка Rixton 2.5см», а не «Гайка Asims 25мм», так как бренд Rixton встречается реже;
алгоритм можно улучшить, добавив поля, такие как «бренд», «размер» и другие характеристики. Это позволяет модели извлекать из артикула нужные данные (например, название бренда и размер) и искать по ним более эффективно.
Почему модель GPT не подошла для задачи?
В тестовом режиме мы применили модель GPT для решения задачи клиента, но были выявлены следующие сложности:
высокий риск увеличения стоимости использования модели GPT;
увеличение количества товаров и записей усложняет процесс обработки и
сравнения;изменения в базе данных могут привести к необходимости адаптации модели;
точность обработки и сравнения может оказаться ниже, чем у других
алгоритмов.
Сравнение результатов при использовании BM25 и GPT
Для оценки того, какой из алгоритмов — BM25 или GPT — лучше подходит для решения задач клиента и соответствует критериям точности, был проведён эксперимент. Оба алгоритма анализировали подготовленный фрагмент из текущей базы данных клиента и искали дубликаты. В результате алгоритм BM25 показал более точные результаты по сравнению с GPT.
С какими сложностями столкнулись?
проведение ручной валидации результатов внедрения модели;
найти недорогих программистов для интеграции с 1С.
Шесть простых правил для успеха консалтиногового проекта
всегда пиши максимально детальное техническое задание и утверждай его с клиентом в начале проекта;
всегда пиши детальное саммари после каждой встречи с клиентом;
всегда оформляй контракт с клиентом;
всегда проси предоплату и согласовывай этапы оплаты проекта;
всегда договаривайся о критериях приемки (когда это возможно);
всегда закладывайте риски в стоимость проекта.
Как определить стоимость консалтингового проекта?
Есть три способа определить стоимость проекта:
ROI (Возврат на инвестиции)
Этот метод оценивает рентабельность проекта, сравнивая затраты и предполагаемую прибыль. ROI помогает определить, стоит ли инвестировать в проект, основываясь на его потенциальной окупаемости.
Конкуренты
Оценка стоимости основывается на ценах, которые предлагают конкуренты за аналогичные продукты или услуги. Цель — оставаться конкурентоспособным, не завышая цену, но и не занижая её.
Себестоимость
Этот метод рассчитывает стоимость проекта на основе всех понесенных затрат, включая материалы и оплату труда. Установление цены основывается на необходимости покрыть эти расходы и обеспечить прибыль.
Вывод
GPT имеет широкий функционал, но для многих практических задач классические ML решения оказываются эффективнее и проще в имплементации.
В любых консалтинговых проектах необходимо проявлять аккуратность в формализации требований заказчика начиная от метрик по которым будет оцениваться эффективность, до результатов каждой конкретной встречи.
Спасибо вам за уделенное статье время! Буду рад ответить на вопросы и обсудить ваш опыт в комментариях к статье.
Комментарии (6)
muxa_ru
09.01.2025 15:45доля ошибок первого рода (ложная тревога) не должны превышать 10%, то есть модель не должна ошибочно помечать запись как дубликат в более чем 10% случаев;
Так вот почему доставка привозит не то что было заказано. Базу дедуплицировали и объединили два разных товара в один. А то что люди явным образом вбили другой SKU это фигня, на которую не стоит обращать внимание истинному датасатанисту. :)
Ananiev_Genrih
09.01.2025 15:45честно признаюсь что "минусанул" статью за низкий технический уровень материала . Раз уж это что-то про NLP направление, то давайте посчитаем хотя бы на easy- уровне долю предложений, соотвествующих тематике заголовка от всего корпуса этой статьи (даже без стемминга/лемматизации). И долю по тематике "топ Х советов чтобы не кинул заказчик".
Лучше бы сделали хороший авторский перевод статьи по своему заголовку чтобы Хабр стал больше похож на торт
ENick
09.01.2025 15:45"всегда договаривайся о критериях приемки (когда это возможно)" - это правило НОМЕР ОДИН, и только если убрать текст в скобках. Если это правило не согласовано и не подписано, то всё остальное - сотрясение воздуха. Можно сформулировать и иначе: "нет хода - не вистуй".
kemsky
BM25 - походу вот она причина почему на озоне не найти просто так что-то с точными размерами.
Так как же все-таки использовать это для поиска в бд?
d_akopian Автор
Привет, я использовал этот метод для поиска дубликатов в достаточно однородной БД (там были только строительные материалы и инструменты). В данном методе считается BM25score n-ой записи со всеми остальными.
Этот score учитывает:
1. TF (Term Frequency) - частоту вхождения каждого слова из n-ой записи в k-ую (с которой сейчас она сравнивается). Например если в n-ой записе есть слово "гайка", а k-ая запись "гайка гайка гайка", то такой скор будет высокий, а если вообще не упоминается это слово то 0.
2. IDF (Inverse Document Frequency) - частоту вхождения слов которые есть n-ой записи. Например если только в n-ой записи и в k-ой есть название бренда этой гайки (например "Ангстрем"), то за такое совпадение вероятность того что n-ая и k-ая запись являются дубликатами возрастёт
3. Длина документа. Если k-ая запись содержит очень много слов, то её score совпадения уменьшается (потому что если в названии вся "Война и мир" то вероятность что все слова из названия n-ой записи найдутся в k-ой велика).
4. Параметры которые подбирались эмпирически которые варьируют вес перечисленных выше параметров.
Все эти величины подставлялись в формулу (есть статья на Хабре с формулой и более подробным разбором и примером кода). Получается матрица a*a (где a число записей в БД/категории/бренде), выставляется эмпирически пороговое значение этого коэффициента совпадения и все пары со скором выше определяются как дубликаты.