Tender Hack: Нижний Новгород



😎 За 3 дня заняли 1️⃣ место



👉 Проходил в оффлайн формате, кормили вкусно, в самом начале вручили мерч. Отмечу, что этот хак был не про то как "сделать презентацию и выиграть", а про то как сделать действительно рабочее решение. Только топ 5 команд по тех части проходили на финальную защиту.



Задача была такой же как и на Zakupki.Hack, но в этот раз мы хотели рассмотреть более стабильные подходы, больше углубиться в детали.



Наш аналог озон'а для поставщиков умеет:

1) Семантический поиск

2) Частичная мультиязычность (ru-en)

3) Лексический поиск (лемматизация)

4) Поиск с учетом характеристик

5) Поиск сопутствующих товаров

6) Автодополнение

7) Автокоррекция

8) Транслитерация

9) Анализ рынка



Как решали?

Взяли LABSE (дистиллированную на ru-en) из-за того, что она лучше чем rubert-tiny v1/2 работает с токенами на английском, а это зачастую названия продуктов. В ходе тестирования заметили, что модель все ещё помнит что tea-чай, laptop-ноутбук, т.е. получили адаптацию под английский без тренировки под него.



К выдачи нейронки добавляли BM25, поиск который применяют в системах Lucene, Sphinx, помогло исправлять краевые случаи когда модель плохо работала.



Выдачу алгоритмов ранжировали, для этого применяли:

1) Схожесть строк jaro-winkler

2) Максимальная последовательная схожесть КПГЗ кодов.

3) Количество общих характеристик



Для сопутствующих товаров учитывали, что при применении нейронок у нас получится ситуация, когда для "ноутбук asus" в рекомендации попадет "ноутбук hp", а это не то что нам надо.



Починили тем, что выводили все результаты != кпгз товара, для которого искались сопутки. Вдобавок к этому у нас была история закупок на портале поставщиков, смогли вытащить информацию что, с чем покупают. Это значительно улучшило качество выдачи.



Презентация

Репозиторий