0/5

PRICE.RU: как обучить нейронную сеть для матчинга предложений от интернет-магазинов и типовых моделей товаров

PRICE.RU: как обучить нейронную сеть для матчинга предложений от интернет-магазинов и типовых моделей товаров
время публикации: 10:00  23 августа 2023 года
Казалось бы, задача сопоставления в интернет-магазине поискового запроса и товара – достаточно простая и давно успешно решается. Однако, когда на платформе более 40 миллионов предложений в нескольких тысячах магазинов, задача значительно усложняется. Для ее решения в Price.ru решили задействовать собственные и опенсорсные нейронные сети. Получилось ли их обучить?
PRICE.RU: задача – обучить собственную нейронную сеть для матчинга предложений от интернет-магазинов и типовых моделей товаров на сервисеИнтересным опытом делится Эдуард Ашрафьян, генеральный директор Price.ru. В начале рассказа нужно пояснить, для чего нужен матчинг в Price.ru.

На сайте Price.ru в каждой группе товаров есть типовые модели. К каждой модели товара притягивается несколько предложений или офферов (терминология Price.ru) от интернет-магазинов, которые ранжируются по стоимости и совокупности других выгодных условий от селлера.

Основная задача - сделать матчинг, корректно сопоставив модель товара и оффер между собой. 

Например, в Price.ru есть оффер на Apple iPhone 14 Pro Max и модель Apple iPhone 14 Pro. Названия похожи, но это разные модели телефона. Нам нужно, чтобы в нашей базе данных система отличала друг от друга эти модели, а также правильно распределяла каждый новый оффер.

PRICE.RU: задача – обучить собственную нейронную сеть для матчинга предложений от интернет-магазинов и типовых моделей товаров на сервисе

Типовые модели на Price.ru

На первый взгляд, задача простая - необходимо сравнить две строки с текстом и сделать вывод: одинаковые они или различаются. Но методом простого сопоставления на большом объёме данных быстро это сделать не получится: на Price.ru 40 миллионов офферов и 2,5 миллиона моделей товаров.


Решение задачи без ИИ


С текстом можно работать и без машинного обучения, так называемыми регулярными выражениями, механизмом для поиска и замены текста – regexp. Мы парсили по шаблону из строк с текстом одинаковые названия моделей товаров. Но это сработало неточно: были ошибки в случаях, когда слово заменено на синоним или в названии есть опечатка. Более того, процесс занимал много времени – нужно было написать тысячи regexp под каждую категорию и каждый бренд.

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


Изучаем подходящие для задачи нейронные сети


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

Мы брали веса BERT-подобных нейронных сетей, доступных для открытого пользования (BERT – это нейросетевая модель-трансформер от Google, на которой сегодня строится большинство инструментов автоматической обработки языка), которые обучались на внешних данных (Википедия, классическая литература, публичные датасеты). Нейросети должны были помочь решить задачу через семантический поиск: превратить строку с текстом в вектор, а в нашем случае - превратить в вектор название оффера и название модели и соотнести их.

Все кандидаты на роль матчера тестировались на способность качественно разделять эмбеддинги (эмбеддинг - это векторное представление слов). Вывод был неутешительный - опенсорсные нейронные сети сработали плохо. Лучшей доступной через интернет моделью оказалась нейронная сеть от OpenAI - text-embedding-ada-002.

Она делала матчинг на условные 50-70% точности в зависимости от категории, но был и серьезный минус – эта нейронная сеть оказалось достаточно дорогой и медленной.

Затем мы решали задачу семантического поиска несколько необычным путем — через большие языковые модели подобные ChatGPT.

Провели следующий эксперимент: взяли опенсорсный клон ChatGPT под названием Vicuna, отрезали от нейронной сети encoder (часть, ответственную за преобразования слов в векторы) и использовали ее выходные эмбеддинги. Encoder – это то же самое, что и BERT, только огромный - выходная размерность в десятки раз больше. Эксперимент интересный, но необходимого уровня точности он не дал, поэтому мы продолжили использовать текстово-генеративные нейронные сети традиционным способом.


Попытка решить задачу с помощью LLM (больших языковых моделей)


Мы решили представить задачу матчинга в виде смежной задачи — токен классификации. А поскольку обучать свои нейронные сети нам все еще не хотелось, мы стали использовать для этого большие языковые модели ChatGPT и Vicuna.

Программист задал контекст для большой языковой модели Vicuna, исходя из которого она должна была общаться с пользователем:

name="planshet_big",
system="A chat between a human and an artificial intelligence Named Entities Recognition Assistant. Answer of the system has exactly template and no more other words. The system is double checking the answer before give that."
"The system can only parse named entities like Brand, Device from text and nothing else. That is the template of the answer: 'Brand:___\nDevice:___\nEND_OF_ANSWER",
roles=("Human", "Assistant"),
messages=(
(
"Human",
"Планшетный компьютер Digma Optima Prime 4 3G Black",
),
(
"Assistant",
"Brand name:Digma\nDevice:Optima Prime 4 3G\nEND_OF_ANSWER",
)


input:
Планшет Apple iPad 4 16Gb Wi-Fi+Cellular Retina (iOS/A6X 1400MHz/9.7" (2048x1536)/1024Mb/16Gb/Cellular (3G+4G LTE) 3G (EDGE, HSDPA, HSUPA)) [MD525] 
output:
Brand:Apple
Device:iPad 4 16Gb Wi-Fi
END_OF_ANSWER


Таким образом, большая языковая модель находила в наших офферах именованные сущности — бренд и модель устройства. По этим данным мы и пробовали делать матчинг. Это начало работать, но получалось плохо: 60-70% точности в зависимости от категории. Например, на мобильных телефонах только две трети офферов моделизировались правильно, остальное выходило с ошибкой. Мы пришли к выводу, что и этот подход не сработал. Поэтому мы вернулись к тому способу, которым сегодня решают задачу матчинга маркетплейсы - стали обучать свой BERT.


Обучить собственную нейронную сеть


У нас не получилось использовать опенсорсные нейронные сети. Вероятнее всего, это произошло потому, что для решения задачи матчинга необходимо обучать BERT на данных из того же домена, в котором он будет использоваться. Так мы решили создать собственную нейронную сеть, обучив ее на данных сервиса Price.ru.  
Исходный код BERT открытый, а это значит, что любой может использовать его для обучения собственных систем языковой обработки и других задач. Сейчас мы обучаем нейросеть, которая в пять раз меньше OpenAI - text-embedding-ada-002. При этом она не имеет ограничений в скорости работы, а также обладает точностью матчинга 75-95% в зависимости от категории.


Как происходит работа с BERT


Если объяснять просто, BERT - это как «чёрный ящик», куда ты кладешь текст, а на выходе получаешь вектор - эмбеддинг (векторное представление слов).


Сколько времени потребуется, чтобы подготовить и обучить нейронную сеть


Создание собственной матчинговой системы - это большая исследовательская и инженерная задача. Матчер состоит из множества модулей, которые включают в себя не только нейронные сети, работающие с текстом, но также картиночные и бустинговые модели.

На данном этапе мы только обучаем BERT на наших данных - это длительный процесс. Нельзя просто выгрузить данные из домена и загрузить их в нейросеть. Необходимо предварительно с ними поработать - сбалансировать по категориям, брендам, сделать текст неоднородным, убрать повторы. Нейронная сеть лучше изучит паттерны, если данные будут многомерными. Если же положить сырые данные, BERT, конечно, обучится, но некачественно - только для определенных категорий. Для других же не обучится вообще.

Время непосредственного обучения (GPU-time) BERT'а на сервере с большой видеокар-той занимает от трех суток до нескольких недель или месяцев.  Это зависит от количе-ства данных и величины выбранной архитектуры нейронной сети.


Как подобную задачу решают маркетплейсы


Сейчас Price.ru решает задачу матчинга классическим путем – так же, как её решали AliExpress или «Яндекс Маркет». Но мы проводим собственное исследование, которое может дать другие результаты.

У маркетплейсов работа с ИИ – это целая комплексная ML-система, состоящая из разных нейронных сетей и использующая разнообразные подходы в работе. Они используют компьютерное зрение и обработку естественного языка. Также используется классический ML-бустинг – это метод в машинном обучении для уменьшения количества ошибок при прогностическом анализе данных.

Мы берем небольшой элемент из этой системы, но он является основным компонентом для решения задачи матчинга.




Читайте также: Создаем контент на сайте и делаем SEO при помощи ChatGPT (инструкция)




Итоги


1. ИИ способен решать задачу матчинга, но, чтобы добиться точности, необходимо проводить эксперименты и пробовать разные подходы. 

2. Использовать опенсорсные нейронные сети – ложный путь решения задачи матчинга.

3. Обучение нейронных сетей на собственном домене займет больше времени, но принесет лучшие результаты.

Эдуард Ашрафьян, 
генеральный директор Price.ru.

Для NEW RETAIL



0
Реклама на New Retail. Медиакит