Алгоритмы и стратегии

Когда вы заходите в любое из приложений Trendyol в качестве пользователя, вы видите простое текстовое поле, которое можно рассматривать как ворота, позволяющие получить доступ к продуктам, которые вас больше всего интересуют. Вы вводите ключевое слово, а затем просматриваете страницу, полную продуктов, как показано на рисунке ниже.

Как команда Search & Smartlisting, мы - команда, главная цель которой - сделать пользователей счастливыми, перечисляя для них наиболее подходящие продукты. Если пользователь нажимает на товар, указанный на первой странице, для нас это плюс. Когда нажимают на самый первый продукт, мы - король! Наша цель - не утомлять пользователей, ведь мы их любим :)

Запрос поступает через API под названием Search API, когда пользователь применяет операцию поиска. После обработки запроса мы формируем ответ, включающий список продуктов и список возможных фильтров, которые можно применить к результатам поиска. API поиска отправляет поступающий запрос в циклическом конвейере, чтобы предоставить наиболее значимый набор результатов клиентским приложениям.

Когда мы смотрим на конвейер, мы видим, что запрос сначала разделен на семантические части преобразователем запросов. Затем многие поисковые стратегии последовательно обрабатывают разрешенный запрос. Операция поиска и агрегирования применяется после того, как будет выбрана лучшая стратегия поиска для этого запроса. Наконец, мы применяем операцию buybox, чтобы установить списки победителей для содержимого. Я полагаю, мне следует дать краткое описание того, что означают термины содержание и листинг.

В Trendyol мы используем терминологию контента для шаблонов продуктов, что означает, что контент не является продаваемым продуктом, но содержит имя, описание, множество изображений, бренд, категорию и т. Д. С другой стороны, когда мы говорим «листинг» , это означает, что контент превращается в продаваемый продукт. Список зависит от продавца, бутика или обоих. Например, в то время как красное платье Trendyolmilla со штрих-кодом XY12345 является контентом, размер XL контента, который можно продать по цене 50 TL в бутике Best Dresses, можно рассматривать как его список.

Разрешение запросов

Разрешение запроса - это операция, применяемая к нашему приходящему запросу, чтобы мы могли разделить ключевое слово поиска на более значимые части. Это базовый процесс распознавания именованных сущностей (NER), после которого мы можем собирать слова или фразы, принадлежащие к разным классам, таким как пол, бренд, категория, атрибут, вариант и т. Д. Мы используем рекурсивный подход с шагом запоминания и базой знаний для этой классификации. Скажем, у нас есть поисковый запрос «siyah dantel detaylı abiye milla elbise». После процесса разрешения запроса мы получаем результат, как показано ниже.

Это может быть простой процесс, но в нем есть много проблем. Нормализация - одна из наиболее важных проблем, как это всегда было в темах, связанных с NLP (обработка естественного языка). Поскольку наша проблема в основном связана с поиском информации, мы страдаем и от этого недостатка. Мы применяем процесс нормализации как к запросу, так и к данным, чтобы мы могли легко найти соответствие между ними. Например, пользователь, который хочет купить продукт под торговой маркой US Polo, может увидеть множество различных версий поисковых ключевых слов, таких как «us polo», «Us. polo »,« us.polo »,« US POLO »,« U.S. POLO »и т. Д. Чтобы справиться с этой проблемой и хорошо понять нашего пользователя, мы должны сопоставить каждую версию ключевого слова с нашей версией источника достоверности, которая называется« США ». Поло".

Еще одна важная проблема заключается в том, что ключевые слова, имеющие один или несколько аффиксов, могут иметь совершенно другую форму, чем их корневые формы. Например, в турецком языке есть грамматическое правило, называемое смягчением жестких согласных («p», «ç», «t», «k»). Эти согласные превращаются в мягкие согласные («b», «c», «d», «g»), когда к слову добавляется гласная. Скажем, у нас есть слово «китап», и мы добавляем после него суффикс «-ı». Мы получаем результат «kitabı» вместо «kitapı». В таких случаях мы должны сопоставить «kitabı» с данными, имена которых включают «kitap». Мы пользуемся преимуществами турецкой библиотеки НЛП с открытым исходным кодом для преобразования поверхностных форм слов в их корневые формы.

У нас также есть некоторые слова и фразы, которые могут иметь слова-синонимы. Например, рассматривая термин «su ısıtıcısı», мы должны сопоставить его с запрошенным словом «чайник», поскольку они имеют одно и то же значение, то есть один и тот же продукт. Мы используем базу знаний синонимов для этого процесса.

Мы также используем нечеткий поиск, который является значимым процессом для ключевых слов с ошибками. Мы используем индивидуальный алгоритм Левенштейна (редактировать расстояние), чтобы мы могли решить наши проблемы, связанные с опечатками.

Стратегии поиска

Теперь у нас есть несколько поисковых стратегий, и каждая из них решает проблему, с которой мы столкнулись до сих пор. Возможно, в ближайшем будущем мы добавим их в нашу линейку продуктов, поскольку столкнемся с новыми вызовами. Хотя вы можете видеть названия используемых нами стратегий, как показано ниже, я не могу упомянуть способ их использования в конвейере из-за юридических проблем. Если вы хотите узнать о них больше, приглашаем вас присоединиться к нам в Trendyol :)

  • Стратегия поиска по умолчанию
  • Стратегия полнотекстового поиска
  • Стратегия нечеткого поиска
  • Стратегия поиска по категориям
  • Стратегия поиска по категории предков
  • Рекомендуемая стратегия поиска бренда
  • Стратегия комбинированного поиска

Поиск

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

Теперь предположим, что мы фильтруем продукты и передаем результаты нашему пользователю. Давайте послушаем его, чтобы понять, сможем ли мы сделать его счастливым или нет.

Как видим, пользователь жалуется на количество товаров. Их слишком много, чтобы исследовать каждый из них, и, вероятно, он не доволен первыми 100 продуктами из 20K продуктов. Если бы мы могли перечислить продукты в лучшем порядке, возможно, мы сделали бы наших пользователей более счастливыми. Итак, нам нужно разумно сортировать наши продукты. Это называется релевантностью!

Актуальность

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

Здесь оценка продукта рассчитывается только на основе характеристик продуктов. Эти функции могут представлять собой информацию о продукте, такую ​​как цена, состояние запасов, тип груза, марка и категория, а также историческая информация, такая как количество продаж и количество просмотров. Чтобы вычислить значимые оценки для каждого продукта, мы используем контролируемый алгоритм машинного обучения под названием Random-Forest Algorithm с помощью команды специалистов по анализу данных.

Оценка сходства, которая является еще одним параметром нашей функции оценки, представляет собой меру сходства текста между ключевым словом поиска и несколькими полями содержания, которое мы пытаемся сопоставить с ключевым словом поиска. Поскольку Elasticsearch построен на библиотеке Lucene, мы можем легко использовать меру сходства TF / IDF. Это современная техника в области поиска информации, и ее можно сформулировать следующим образом.

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

После расчета оценки продукта и оценки сходства мы, наконец, получаем оценку релевантности следующим образом.

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

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

Повышение

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

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

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

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

Теперь наши пользователи довольны. И мы тоже!

Приглашение: это постоянный путь, который мы все еще продолжаем, и если вы увлечены нашей сложной работой, присоединяйтесь к нам!

PS: Если вы не знакомы с алгоритмами, которые мы применяем к какому-либо процессу, вы можете ознакомиться с ними, используя ссылки, перечисленные ниже.

Ссылки

  1. Алгоритм Левенштейна
  2. Алгоритм случайного леса
  3. Подход TF / IDF
  4. Люценовое сходство