Рекомендации и отзывы

Подавляющее большинство B2C-сервисов быстро осознают стратегическую важность надежных систем рекомендаций для повышения коэффициента конверсии и укрепления доверия клиентов. Наиболее распространенные стратегии основаны [3] на сегментации пользователей в соответствии с их личными характеристиками (возрастной диапазон, пол, интересы, социальные взаимодействия и т. д.) или на оценках, которые они дали конкретным элементам. Последний подход обычно основан на явных отзывах (например, оценка от 0 до 10), которые обобщают общий опыт. К сожалению, в обоих случаях есть недостатки.

Персональные данные становится все труднее получить, и последние правила (например, GDPR) позволяют пользователю взаимодействовать со службой без сбора данных. Кроме того, надежный личный профиль должен быть построен с использованием многих атрибутов, которые часто скрыты и могут быть выведены только с использованием прогностических моделей. И наоборот, неявные отзывы легко собрать, но их крайне мало. Стратегии, основанные на факторизации матрицы пользовательских элементов [3], легко реализовать (учитывая возможность использования параллельных алгоритмов), но расхождение между количеством оценок и количеством продуктов обычно слишком велико, чтобы можно было провести точную оценку. .

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

Предположения

Мы предполагаем, что пользователь представлен как действительный вектор признаков фиксированной длины Nu:

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

Стандартные подходы к моделированию тем (например, LDA [1]) могут использоваться для обнаружения тем, определенных в большом наборе (корпусе) обзоров, однако эта стратегия может привести к большому количеству непоследовательных результатов. Основные причины:

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

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

Эту проблему можно решить с помощью различных решений глубокого обучения (таких как Word2Vec [5], GloVe [6] или FastText [7]), но мы сосредоточились на Word2Vec с моделью Skip-Gram. Основная идея состоит в том, чтобы обучить глубокую нейронную сеть, чтобы найти наилучшее векторное представление слова с учетом контекста, в котором оно находится во всех документах. Общая структура сети показана на следующем рисунке:

Каждый отзыв разбит на подотзывы по 2n слов вокруг основного, которые мы передаем в качестве входных данных. Цель процесса обучения — заставить сеть перестроить контекст с учетом опорной точки. Поскольку векторы довольно длинные (100–300 32-битных значений с плавающей запятой), процесс будет сходиться к глобальному решению, в котором семантически схожие слова помещаются в очень плотные шары, радиус которых значительно меньше, чем все подпространство словаря. Следовательно, например, слово «комната» будет неявно синонимом «камеры», а косинусное расстояние между двумя векторами будет крайне малым. Поскольку многие люди используют жаргонные термины в своих обзорах (вместе со смайликами или другими специальными символами), этот подход гарантирует надежность, необходимую для оценки контента без нежелательных предубеждений. Для получения дополнительных технических деталей я предлагаю прочитать [5], однако общая динамика обычно основана на случайной инициализации векторов и процессе обучения, где выходной слой состоит из единиц softmax, представляющих вероятность каждого слова. Поскольку этот подход неосуществим с учетом количества слов, в качестве стоимостных функций используются такие методы, как Hierarchical Softmax или Negative Contrastive Estimations. В целом, после нескольких итераций (10–50) глобальное представление согласуется с лежащей в основе семантической структурой.

Наша модель

Для создания рекомендателя мы отобрали 500 000 обзоров, написанных на английском языке, и использовали Gensim [9] для создания векторного представления после базовой предварительной обработки NLP (в частности, удаления стоп-слов и пунктуации). Размер вектора был выбран равным 256, чтобы оптимизировать поддержку графического процессора на следующих этапах.

Как объяснялось ранее, стандартный LDA нельзя применять к векторам слов, но Das et al. предложил решение [2], которое позволяет моделировать темы как многомерные распределения Гаусса. Как заметили авторы, этот выбор предлагает оптимальное решение для вещественных представлений, которые можно сравнивать с помощью евклидова расстояния. Пример показан на следующем рисунке:

Что мы наблюдаем в конце обучения:

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

Gaussian LDA требует указать желаемое количество тем. В нашем проекте мы начали со 100 тем и после нескольких оценок сократили их количество до 10. Пример из 3 тем (в контексте отзывов об отелях Берлина) показан в следующей таблице:

Это всего лишь несколько избранных слов, но в ходе нашего анализа мы отфильтровали много избыточных терминов. Впрочем, это легко проверить, например:

Чтобы лучше понять отзывы и использовать их для создания профилей пользователей, мы также использовали модель анализа настроений, которая обучена выполнять то, что мы назвали «рудиментарным анализом». Другими словами, нам нужно извлечь значение каждого агностического слова (например, «Кровать») с учетом небольшого окружающего контекста. Рассмотрим следующий пример:

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

Каждый коэффициент βi представляет собой среднее настроение (нормализованное между -1,0 и 1,0) для конкретной темы. Поскольку каждый обзор охватывает только подмножество тем, мы предполагаем, что большинство βi=0. Например, в предыдущем случае мы рассматриваем только ключевые слова: номер, гостиница, площадь и расположение, которые относятся соответственно к темам t1="Комната/Качество" и t3="Местоположение". В данном случае атрибут «дешевый» имеет нейтральную окраску, так как это слово можно использовать и для обозначения отелей низкого качества. Результирующий вектор становится:

После того, как все обзоры обработаны (в начале процесс является чисто пакетным, но становится пошаговым на этапе производства), мы можем получить векторы характеристик профиля пользователя как:

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

Нейронная модель для выполнения анализа настроений показана на следующей схеме:

Набор данных был помечен выбором ключевых слов и их относительной тональности. Роль «селектора векторов Word» заключается в создании «механизма внимания», который позволяет сосредоточиться только на соответствующих частях. В частности, он получает всю последовательность и позиции целевых ключей и выводит синтетический вектор, который подается в следующую подсеть.

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

Выход сети состоит из 15 гиперболических тангенсов, которые представляют настроения по каждой теме. Такой выбор позволил отбросить нейтральные настроения, так как их ценность близка к нулю. В нашей практической реализации мы установили порог вывода, чтобы принимать абсолютные значения больше 0,1. Этот выбор позволил уменьшить шум в прогнозах, сохранив при этом очень высокую точность. Обучение было проведено с использованием 480 000 отзывов, а проверка была выполнена на основе 20 000 отзывов. Окончательная точность проверки составляет около 88%, но более глубокие модели с большими корпусами показывают лучшие результаты. Альтернативный подход основан на слое LSTM, который фиксирует структурную последовательность обзора:

LSTM чрезвычайно полезны, когда обзоры не очень короткие. В этом случае своеобразная способность обнаруживать долгосрочные зависимости позволяет обрабатывать контексты, в которых целевое ключевое слово и уточняющие элементы не очень близки. Например, предложение типа: «Отель, который мы забронировали с помощью службы Acme, предложенной нашим другом, действительно превосходен» требует более сложной обработки, чтобы сеть не застряла в коротких контекстах. Seq2Seq с вниманием был успешно протестирован с целью получения синтетических векторов, в которых наиболее важные элементы могут быть немедленно обработаны. Мы также заметили, что свертки обучаются намного быстрее, когда они справляются со стандартизированными структурами. Этот подход вместе с другими улучшениями является целью будущих разработок.

От профилей пользователей к рекомендациям

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

  • Кластеризация пользователей: в этом случае пользователи группируются с использованием K-средних и спектральной кластеризации (это особенно полезно, поскольку кластеры часто невыпуклы) на более высоком уровне. Затем каждый кластер сопоставляется с использованием алгоритмов Ball-Tree и k-Nearest Neighbours, выбирая наиболее похожих пользователей в соответствии с переменным радиусом. Поскольку векторы функций представляют собой комментарии и скрытые пожелания, очень близкие пользователи могут делиться своим опытом, и, следовательно, движок предлагает новые элементы в разделе обнаружения. Этот подход является примером совместной фильтрации, которую можно настроить с помощью дополнительных параметров (предложения в реальном времени, близость к месту проведения мероприятия и т. д.).
  • Местное предложение: всякий раз, когда необходимы рекомендации с геопространственными ограничениями, мы можем усилить вес темы (например, рядом с аэропортом) или, когда это возможно, мы используем мобильный GPS для определения местоположения и создания местного района.
  • Item-tag-match: когда элементы помечены, профили используются двумя способами:
  • Переоценить пометку (например, «В отеле есть спутниковое телевидение» большинством отзывов определяется как ложное, и его вес уменьшается)
  • Немедленное сопоставление пользователей и элементов без необходимости совместной фильтрации или других подходов к кластеризации.

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

Цель состоит в том, чтобы пересмотреть рекомендации с учетом общих факторов между каждым элементом и профилем пользователя. Предположим, что пункт i был рекомендован, потому что он соответствует положительным предпочтениям по темам t1, t3, t5. Если пользователь отправит сообщение с отрицательным отзывом, движок переоценит эти темы, используя экспоненциальную функцию (на основе количества полученных отзывов). И наоборот, положительная обратная связь увеличит вес. Этот подход основан на простой стратегии обучения с подкреплением, но позволяет выполнять точную настройку для каждого отдельного пользователя.

Выводы

Рекомендации становятся все более важными, и во многих случаях от них зависит успех службы. Наш опыт научил нас, что обзоры более «приемлемы», чем опросы, и предоставляют гораздо больше информации, чем явные отзывы. Современные методы глубокого обучения позволяют обрабатывать естественный язык и все жаргонные выражения в режиме реального времени с точностью, сравнимой с человеческим агентом. Более того, всякий раз, когда обзоры предварительно фильтруются, чтобы удалить весь спам и бессмысленные отзывы, их содержание отражает каждый личный опыт часто намного лучше, чем простой рейтинг. В наших будущих разработках мы планируем внедрить движок в различных отраслях, собирая обзоры вместе с общедоступными твитами с определенными хэштегами и расширяя возможности «рудиментарного анализа настроений» с помощью более глубоких моделей и различных стратегий векторов слов (например, FastText, который работает с фонем и не имеет потери исполнения с редкими словами).

Первоначально опубликовано на Bonaccorso.eu (ссылка).

использованная литература

  1. Блей Д.М., Нг А.Ю., Джордан М.И., Скрытое распределение Дирихле, Журнал исследований машинного обучения 3/2003
  2. Дас Р., Захир М., Дайер К., Gaussian LDA для тематических моделей с встраиванием слов, Материалы 53-го ежегодного собрания Ассоциации вычислительной лингвистики и 7-й Международной объединенной конференции по обработке естественного языка, 07/2015
  3. Бонаккорсо Г., Алгоритмы машинного обучения, второе издание, Packt Publishing, 2018 г.
  4. Бонаккорсо Г., Освоение алгоритмов машинного обучения, Packt Publishing, 2018 г.
  5. Миколов Т., Суцкевер И., Чен К., Коррадо Г., Дин Дж., Распределенные представления слов и фраз и их композиционность, arXiv:1310.4546[cs.CL]
  6. Пеннингтон Дж., Сочер Р., Мэннинг К.Д., GloVe: глобальные векторы для представления слов, Стэнфордский университет
  7. Жоулин А., Грейв Э., Бояновски П., Миколов Т., Набор хитростей для эффективной классификации текстов, arXiv:1607.01759[cs.CL]
  8. Бонаккорсо Г., классификация текста Reuters-21578 с Gensim и Keras, https://www.bonaccorso.eu/2016/08/02/reuters-21578-text-classification-with-gensim-and-keras/
  9. https://radimrehurek.com/gensim/models/word2vec.html