[Поиск] Опыт Airbnb с глубоким обучением в поиске

поисковый движок

На этой неделе я поделюсь статьей «Применение глубокого обучения к поиску Airbnb», как видно из названия статьи, о том, как Airbnb применяет глубокое обучение к своей собственной поисковой системе.

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

Далее давайте посмотрим, с какими трудностями и преимуществами столкнулась Airbnb в процессе применения глубокого обучения?

задний план

В сценарии Airbnb это двусторонний рынок: сдача домов в аренду для арендодателей и предложение домов для потенциальных арендаторов. В большинстве случаев поведение при бронировании начинается с поиска.

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

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

В Airbnb пользователи, как правило, ищут -> просматривают -> ищут... -> бронируют комнату и, наконец, реализуют операцию бронирования комнаты с помощью нескольких поисков и просмотров, и это поведение будет использоваться для обучающих данных. Обученная модель запускается онлайн A/B.

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

Что мне лично нравится в этой статье, так это то, что, в отличие от других обычных работ, я пытаюсь объяснить, что я предложил новую модель, затем, какова структура, и, наконец, экспериментально проверить, что она превосходна. Цель этой статьи — рассказать вам об исследованиях и успехах Airbnb в поиске, а также показать, как постепенно углублять проект с точки зрения макроэкономики и на какие детали необходимо обратить внимание.

Эволюция модели

На этих двух графиках показаны разные модели, которые Airbnb опробовала в поиске: один — эффективность NDCG в оффлайне, а другой — доход от онлайн-бронирований.

Вначале это была простая однослойная сеть NN, в основном для прохождения через весь конвейер (это совпадает с тем, что я упомянул в ежегодном резюме моей предыдущей статьи). Когда одноуровневая сеть была завершена, Airbnb начала постепенно оптимизировать свою сеть. lambdarank был выбран потому, что офлайн-метрика — NDCG.

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

"Decision Tree/Factorization Machine NN": В дополнение к lambdaRank автор сказал, что они сделали попытку слияния моделей, объединив GBDT, FM и NN, и структура также очень проста:

Автор сказал, что, хотя производительность показателей объединения трех моделей в тестовом наборе аналогична показателям прямого использования нейронной сети, порядок заголовков в окончательном списке сильно отличается, поэтому автор считает, что слияние модели сочетает в себе соответствующие преимущества трех типов моделей.Но эта статья не дает дальнейшего развития. Вместо этого дается ссылка [я покажу ее позже] (Руокси Ван, Бин Фу, Ган Фу и Минлян Ван. 2017. Deep & Cross Network for Ad Click Predictions. In Proceedings of ADKDD'17 (ADKDD'17). ).ACM, Нью-Йорк, штат Нью-Йорк, США, статья 12, 7 стр.).

"Deep NN": Следующим шагом будет вступление в эру DNN Автор сказал, что DNN прост в использовании. Нечего сказать, это просто бред. Автор сказал, что их первоначальные характеристики данных - это некоторые простые вещи, какая цена, ситуация с оборудованием, исторический номер подписки и т. Д. Кроме того, выходные данные двух моделей также подаются как функция.

Как показано на рисунке ниже, по мере увеличения обучающих данных разрыв между обучающим набором и тестовым набором постепенно исчезает:

Однако автор сказал, что, в отличие от большого успеха DNN в области CV (точность машин и людей одинакова), в текущем сценарии люди не могут судить, какой контент должен отображаться правильно: ведь после поиска он невозможно забронировать дом.Это также в основном зависит от бюджета и вкуса пользователя.

Здесь автор говорит, что хочет ввести то, что редко вводится в другое время: несколько неудачных попыток

неудачная модель

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

listing ID

Использование интерактивного списка идентификаторов товара в качестве функции и передача его непосредственно в модель — это обычная операция в поиске, рекомендациях, NLP и других полях, и она часто очень эффективна Airbnb также полна надежд перед тем, как начать. Но чтобы написать сюда, видно, что результат однозначно разочаровывает.

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

Автор анализирует возможные причины этого явления: из-за особого делового характера Airbnb.

Потому что в других областях, таких как Douyin, количество просмотров короткого видео не ограничено; например, в Taobao количество раз, когда продукт можно купить, также не ограничено. Взятие записи взаимодействия ID как функции само по себе требует такого большого количества записей поведения. А вот на Airbnb даже самые популярные номера бронируют до 365 раз в год.

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

многозадачное обучение

Принимая во внимание ограничения на поведение при бронировании номера, Airbnb начала считать, что поведение при просмотре не ограничено.Можем ли мы начать с поведения при просмотре?

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

После разработки модели, эй, теперь вы можете использовать идентификатор листинга.

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

разработка функций

Здесь Airbnb предлагает некоторые идеи по обработке функций, чтобы удовлетворить определенные свойства и помочь нейронным сетям эффективно выполнять математические операции.

функция регуляризации

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

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

Таким образом, для входных функций идеальным является центрирование их диапазона между -1 и 1 и среднее значение 0.

Для этого автор предлагает два метода регуляризации:

  • Для объекта, который подчиняется нормальному распределению, преобразуйте его распределение с помощью (feature_val − μ)/σ;
  • Для объектов, которые следуют степенному закону распределения, преобразуйте распределение по log((1+feature_val) / (1+медиана)).

Распределение функций

Распределение признаков можно сгладить на предыдущем шаге, но зачем вам его сглаживать?

Устранение ошибок

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

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

Выгодно для обобщающей способности модели

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

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

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

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

С другой стороны, чтобы проверить способность к обобщению, автор попытался сделать все цены х2, х3, х4 и т. д., и окончательный NDCG оказался на удивление стабильным.

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

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

Проверить целостность функции

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

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

Поэтому автор использует средние дни занятости для сглаживания, которое формирует степенное распределение правой фигуры.

![image-20210228090023053](/Users/songshiwei/Library/Application Support/typora-user-images/image-20210228090023053.png)

Высокая базовая функция

Я пытался указать ID раньше, но это не сработало. Так где же еще Airbnb экспериментирует с высокоуровневыми классификационными функциями?

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

Например {"Сан-Франциско", 539058204} → 71829521

Последний пример приложения выглядит следующим образом:

Вы можете увидеть эту тепловую карту.При поиске Сан-Франциско это не просто центр тепловой карты, а прямое линейное расстояние излучает тепло. Земля под Сан-Франциско заметно жарче, чем водные соседи рядом с ним.

системная инженерия

Общий процесс здесь может быть похож на все остальные Онлайн-сервис — это сервис Java. Используйте spark для обработки данных, TensorFlow для обучения моделей и Scala и Java для анализа данных.

Здесь автор упоминает несколько приемов, которые могут нам помочь:

protobufs и наборы данных

До того, как они использовали GBDT, данные представляли собой файл CSV, после запуска нейронной сети они следовали этому формату данных, преобразовали CSV в файл feed_dict и передали его в сеть. Но обнаружил, что загрузка графического процессора составляет всего 25%.

Позже они использовали protobufs и наборы данных, чтобы избежать конвертации формата данных во время обучения.Этот шаг привел к 17-кратному ускорению обучения, а загрузка графического процессора достигла 90%.

статические функции

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

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

Библиотека нейронных сетей Java

Вот краткое введение, они сами разработали библиотеку нейронной сети Java.

Гиперпараметр

В этой части ничего нет ==!

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

Затем есть вес инициализации, который, по их мнению, является случайным между -1 и 1, лучше, чем установка всех 0.

Скорость обучения и размер партии ничего не изменили~~~

Важность функций

Автор также провел здесь некоторый анализ, и мы просто резюмируем его следующим образом:

Распределение баллов

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

АВ-тест

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

переставить некоторые функции

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

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

####Характерный анализ результатов

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

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

Суммировать

Как сказано в конце статьи, они считают, что их применение глубокого обучения в поиске только начинается.

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

Этот процесс исследования, по сути, проверяет ваше знакомство и понимание бизнеса.

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

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