Задача: разработка решения, которое автоматизирует процесс сопоставления товаров заказчика с размещаемыми товарами дилеров.
Цель этого проекта - разработка решения, которое отчасти автоматизирует процесс сопоставления товаров. Основная идея - предлагать несколько товаров заказчика, которые с наибольшей вероятностью соответствуют размечаемому товару дилера. Предлагается реализовать это решение, как онлайн сервис, открываемый в веб-браузере. Выбор наиболее вероятных подсказок делается методами машинного обучения.
Над проектом трудились:
- Минайчев Денис https://github.com/SeriousDen7 (сборка проекта, оборачивание в функции, очистка названий, выделение фичей из названий, методика поэтапного сбора предсказаний: артикул, TF-IDF, МО классификация)
- Носач Ирина https://github.com/LolaBSL (очистка названий, лемматизация, проработка машинного обучения после перевода в задачу классификации)
- Мукосеев Андрей(до 28 ноября) https://github.com/Andrey-Mukoseev (Проверка языковых моделей (BERT, TF-IDF), исследование задачи классификации после ранжирования)
- Матушкин Николай (с 1 декабря) https://github.com/NikMaNik
pandas, numpy, re, nltk, faiss, sklearn, spacy
-
marketing_dealer - список дилеров.
-
marketing_dealerprice - результат работы парсера площадок дилеров:
-
product_key - уникальный номер позиции;
-
price - цена;
-
product_url - адрес страницы, откуда собраны данные;
-
product_name - заголовок продаваемого товара;
-
date - дата получения информации;
-
dealer_id - идентификатор дилера (внешний ключ к marketing_dealer).
-
-
marketing_product - список товаров, которые производит и распространяет заказчик:
-
article - артикул товара;
-
ean_13 - код товара (см. EAN 13);
-
name - название товара;
-
cost - стоимость;
-
min_recommended_price - рекомендованная минимальная цена;
-
recommended_price - рекомендованная цена;
-
category_id - категория товара;
-
ozon_name - названиет товара на Озоне;
-
name_1c - название товара в 1C;
-
wb_name - название товара на Wildberries;
-
ozon_article - описание для Озон;
-
wb_article - артикул для Wildberries;
-
ym_article - артикул для Яндекс.Маркета.
-
-
marketing_productdealerkey - таблица матчинга товаров заказчика и товаров дилеров:
-
key - внешний ключ к marketing_dealerprice;
-
product_id - внешний ключ к marketing_product;
-
dealer_id - внешний ключ к marketing_dealer.
-
Основные этапы выполнения проекта
- Изучение данных;
- Генерация гипотез, их проверка;
- Подготовка данных;
- Обучение модели и оценка метрики;
- Упаковка модели, написание ру-скриптов.
Создаем функции для предобработки:
-
Предварительная очистка текста (Добавляем пробел на явных стыках, переходах(язык, регистр)и на конкретных словах, переводим все в нижний регистр, убираем название заказчика)
-
Из названий продукции мы извлекли полезную информацию. Среди обнаруженных признаков:
1. Артитул (может выстапуть для 100% нахождения соответствующего ID продукта); 2. Количество/объем цифрой; 3. Еденицы измерения (Последние 2 признака переводит в общий формат (1000 г->1 кг, 600 мл->0,6 л)) -
Лемматизируем слова (русские и английские).
Создаем отдельные функции для обработки данных с парсинга и с товарами производителя:
Функция для данных с парсинга делает:
- Удаляем 3 ненужные колонки, удаляем дубликаты, переименовываем колонку ключа, и выставляем новые индексы;
- Применяем функции: предварительной очистки, извлечения нужной информации, лемматизацию
Функция для обработки данных от производителя делает:
- Заполняет пропуски, собирает в одну колонку уникальные слова из четырех колонок с названиями (name, name_1c, name_wb, name_ozon) и собирает дополнительные фичи из названий
- Удаляем 7 ненужных колонок('Unnamed: 0', 'ean_13', 'category_id', 'ozon_article', 'wb_article', 'ym_article', 'wb_article_td')
- Лемматизируем
- Собираем финальную версию таблицы
- заполняем пропуски рекомендованной цены медианой
Создаем функцию нахождения id товара по артикулу:
Принимает на вход артикул строкой,
возвращает id товара из таблицы продукции списком из 1 числав двух фреймах
Делаем функцию промежуточной проверки точности:
Принимает правильные соответствия в виде словаря, словарь предсказаний и рассматриваемое количество первых предсказаний;
Выводит текст с оценкой, в переменную никакую не записывается
Создаем функцию для обучения векторайзера текста:
Принимает 2 таблицы, составляет корпус для обучения,
Возвращает обученный векторайзер TF-IDF
Обучили векторайзер и сохранили
Создаем функцию ранжирования и отбора ближайших соседей по расстоянию между векторизированными текстами
Принимает на вход 2 таблицы векторизированного текста
выдает (base_index) словарь соответствия индекса с id продукта,
(vecs) список списков расстояний между векторами по возрастанию (n ближайших)
(idx) список списков ближайших n id продукции в соответствии с (vecs)
Делаем функцию поиска ближайших соседей (включает использование функций обучения векторайзера и самого поиска соседей)
Если передаем таблицу мэтчей - значит в работу берем только данные с известным ответом и будет показана метрика
Принимает 2 обработанные таблицы(продукция и парсерные данные) и опционально таблицу мэтчей
Выдает словарь соответствия ключа предполагаемым 10 id и при зарузке таблицы мэтчей - таргет
(Создадим две таблицы. Первая: base - данные производителя, где индексы - это id товаров.
Вторая: query - соответствие запроса к парсеру и правильного ответа к продукции)
Функция объединения значений двух словарей с учетом позиций
На входе основной и дополнительный словари
На выходе обновленные основной словарь
Главная функция которая задействует все остальные функции, Принимает на вход путь к файлам, выдает словарь соответствия ключа предложения диллера с 10 id продукции заказчика