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

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

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

  1. Быстро отладить, почему конкретная модель ставит бизнес на определенное место в результатах по сравнению с другими предприятиями.
  2. Провести качественную (человеческую) оценку общей эффективности новой модели ранжирования по набору поисковых запросов по сравнению с базовой моделью.
  3. Визуализируйте, как разные части алгоритма ранжирования взаимодействуют друг с другом
  4. Просмотр входных и выходных данных модели для определенного результата поиска в одном месте

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

Структура ранкера

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

Как видно на рисунке 2, пример ранжирования выполняет три шага последовательно.

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

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

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

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

Инструмент SxS

На изображении выше показана верхняя половина созданного нами инструмента SxS. Ручное тестирование и оценка новых алгоритмов - это основной вариант использования инструмента SxS. Чтобы поддержать это, мы добавили раскрывающееся меню вверху страницы, чтобы изменить географический регион и поисковый запрос, по которому мы сравниваем результаты. В данном случае мы выбрали страницу о кровельщиках из Далласа, штат Техас. Этот инструмент также позволяет нам выбирать, какие ранжеры мы оцениваем "бок о бок" в двух раскрывающихся списках "Ранжирование". Остальные параметры позволяют параметризовать различные аспекты запроса, а также проверять, отсортирован ли какой-либо список в соответствии с определенным полем. Эти инструменты особенно полезны при отладке в нашей среде разработки. Однако две наиболее важные части инструмента скрыты за кнопками «показать конфигурацию ранжатора» и «показать селектор метаданных».

Конфигурация ранжера

«Конфигурация ранжатора» - это полная схема ранжатора, похожая на вложенную структуру ранжатора, которую мы рассмотрели ранее в этом посте. Две конфигурации ранжатора видны на рисунке 4. В инструменте SxS конфигурации ранжатора реконфигурируются на лету. Рядом с каждой частью средства ранжирования есть флажки, которые позволяют пользователю отменить выбор целых компонентов и моделей или даже сделать что-то более детальное, например отменить выбор определенной функции в модели, чтобы увидеть, как обнуление этой функции меняет результат. На изображении ниже вы можете увидеть пример, в котором мы отменяем выбор различных функций с правой стороны, чтобы увидеть, как это влияет на результаты поиска.

Селектор метаданных

Селектор метаданных позволяет разработчику просматривать значения для определенных функций, чтобы они могли лучше понять рейтинг данного бизнеса в результатах. Это не только значительно упрощает отладку, но также улучшает нашу способность понять, почему данная компания занимает более высокое или низкое место в одном рейтинге по сравнению с другим. Вы также можете видеть на рисунке 5, что инструмент SxS указывает, когда бизнес увеличивается или уменьшается в рейтинге, что упрощает выявление и исследование резких изменений до начала эксперимента. Например, 1 → 7 в верхнем левом углу изображения указывает, что бизнес, занявший 1-ю позицию в рейтинге слева, переместился на 7-ю позицию в рейтинге справа. Изучая поля метаданных в обоих средствах ранжирования, разработчик может определить, что вызвало изменение ранга.

Заключение и дальнейшие шаги

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

  1. Инспектор метаданных ранжирования дает разработчику возможность проверять данные, стоящие за каждым результатом, на детальном уровне. Это удовлетворяет первое из наших требований - облегчить отладку.
  2. Просмотр изменений в SxS упрощает человеческую оценку конкретного поиска. Это особенно верно, когда оценка проводится среди членов группы ранжирования, и когда мы используем имеющиеся в нашем распоряжении инструменты аналитики, чтобы гарантировать, что мы охватываем широкий спектр поисковых запросов, географических регионов и рынков в нашей человеческой оценке.
  3. Возможность изменять ранжеры и переключать их подкомпоненты в конфигурации ранжатора позволяет нам визуализировать, как различные части ранжатора влияют на результаты поиска.
  4. Инструмент выбора метаданных работает как ярлык, чтобы увидеть, как входные данные модели преобразуются в выходные данные модели для конкретного результата поиска.

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

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

Особая благодарность Навнит Рао, Джо Цаю, Ричарду Демсин-Джонсу, Марку Эндрю Яо, Карен Lo и Dhananjay Sathe за отзывы об этом посте.

О Thumbtack

Thumbtack (www.thumbtack.com) - это местный рынок услуг, где клиенты находят и нанимают квалифицированных специалистов. Наше приложение разумно подбирает клиентов к электрикам, ландшафтным дизайнерам, фотографам и другим специалистам, обладая нужным опытом, доступностью и ценой. Thumbtack со штаб-квартирой в Сан-Франциско привлекла более 400 миллионов долларов от Baillie Gifford, Capital G, Javelin Venture Partners, Sequoia Capital и Tiger Global Management среди других.