Сегодня мы запустили Яндекс.Город. Это сервис, который поможет вам быстро выбрать нужную организацию — будь то ближайший салон красоты, ресторан для празднования дня рождения или хороший боулинг-клуб. Яндекс.Город учитывает при поиске ваши конкретные пожелания (например, наличие веранды или гостевой парковки) и показывает подробности — в том числе рейтинг и отзывы посетителей. Любую организацию можно найти через строку поиска, и у каждой есть своя карточка, с фотографиями и справочной информацией.
В интернете огромное количество площадок, где пользователи делятся мнениями о самых разных организациях. Это очень здорово, но на чтение всех отзывов, особенно если они разбросаны по десятку сайтов, обычно нет ни времени, ни желания. Чтобы сэкономить время наших пользователей, в Яндекс.Городе мы показываем на страницах организаций рейтинг и самые информативные части наиболее полезных отзывов.
Быстрее всего выбрать подходящее место можно с помощью рейтинга организации. Рейтинг основан на мнениях людей и представляет собой одно число — от 0 до 10. Если рейтинга недостаточно, все подробности можно узнать из отзывов. Отзывы — одна из самых технологически интересных и сложных частей Яндекс.Города. Их нужно собрать, отфильтровать и проанализировать, отделив отзывы ботов от мнений живых людей, а информативные сообщения от бессодержательных. Чтобы показывать в Городе только достоверные и полные отзывы, мы создали специальную технологию. И в этой публикации расскажем, как она работает.
Сбор и анализ отзывов
Сначала мы вручную отобрали сайты с самым качественным контентом и договорились с ними. Это один из немногих ручных этапов работы, почти всё остальное происходит автоматически. Мы собрали и систематизировали все отзывы и оценки посетителей этих сайтов. Кроме того, мы использовали отзывы пользователей Яндекса на наших сервисах — такие отзывы проходят модерацию.
В самом общем виде технология работы с отзывами выглядит примерно так:
Собранные отзывы с сайтов партнёров фильтруются — таким образом отсеиваются, например, отзывы с обсценной лексикой и дубли. Кроме того, все отзывы обязательно проходят проверку на достоверность. Для этого используется несколько автоматических систем, которые отфильтровывают подозрительные отзывы — те, которые могли оставить боты или недобросовестные авторы. Алгоритм анализирует их и принимает решение, учитывая историю публикаций автора, его индивидуальные особенности, динамику и качество добавленных отзывов об организации.
Извлечение фактов
После фильтрации в базе остаются только достоверные отзывы, содержащие полезную информацию. Однако и таких отзывов может быть очень много, поэтому необходимо тщательно проанализировать их тексты, чтобы выделить самые ценные и найти в них наиболее важные фрагменты. Есть отзывы простые — например, «Кофе холодный, зато атмосфера супер». Их анализировать просто. А есть большие и подробные, над которыми нужно серьёзно поработать, чтобы получить ёмкие и информативные сниппеты — то есть те фрагменты, которые будут показаны в карточке организации.
В обычном тексте данные не структурированы. Это не удивительно, ведь люди делятся впечатлениями, а не заполняют анкету. Чтобы понять, какая часть отзыва наиболее информативна, нужно извлечь из него факты — языковые конструкции, содержащие параметр и его характеристику (например, «чай» — «восхитительный»), и понять, положительно или отрицательно они характеризуют организацию. Кроме всего прочего, тут важно учитывать, что для выбора организации больше подходят впечатления о каких-то её качествах, а не, допустим, о погоде за окном.
Как происходит извлечение фактов, лучше всего показать на примере. Возьмём такой отзыв:
«В дурном настроении я брёл по Невскому проспекту, мимо проносились толпы туристов, город был наполнен рокотом автомобилей, а из свинцового цвета неба лил дождь. "Что ж, в этом весь Петербург", — подумал я и свернул на Большую Конюшенную улицу. Уже на подходе к Конюшенной площади я заприметил яркую вывеску — "Бар слона". И, несмотря на то, что каламбур в названии, на мой вкус, был простоват, я решил выяснить, какие марки портвейна там подают.
Как и следовало ожидать, меня встретили: сигаретный дым, шум беснующейся молодежи и грохот современной "музыки" во всем её великолепии. Я занял место у бара, и почти сразу на меня обратил внимание расторопный бармен.
Выбор портвейна в заведении оказался замечательным, я выбрал привычный PORTO CRUZ, незамедлительно его получил и занялся изучением обстановки: интерьер определенно радовал глаз, и атмосфера, несмотря на шум, была приятной».
Для начала алгоритм постарается выделить фрагменты текста, похожие на факты (конструкции вида «параметр + характеристика»).
Очевидно, что далеко не все конструкции, похожие на факты, нам подходят. На следующем этапе алгоритм с помощью специальных словарей выделяет только те параметры и характеристики, которые относятся непосредственно к организации.
Словари, с которыми сверяется наш алгоритм, содержат несколько тысяч параметров, характеристик и значений этих характеристик (значение может быть положительным или отрицательным), которые мы потом используем при расчёте рейтинга. Словари помогают понять, что пара «бармен — расторопный» нам подходит, а «небо — свинцового цвета» — нет. А также, что характеристика «расторопный» имеет положительное значение.
Как видно, в первой части отзыва преобладают эмоции, а во второй — впечатления о заведении. Поэтому для страницы организации в Яндекс.Городе алгоритм может предложить такой сниппет:
«...почти сразу на меня обратил внимание расторопный бармен. Выбор портвейна в заведении оказался замечательным… интерьер определенно радовал глаз, и атмосфера, несмотря на шум, была приятной…»
Чтобы пользователь сразу видел важные факты об организации, в веб-версии Яндекс.Города мы выделяем их в тексте отзыва. Выглядит это так:
О некоторых популярных объектах пользователи пишут много и охотно. Алгоритм может отобрать для одной организации несколько сотен отзывов. Чтобы пользователю было проще с ними работать, мы ранжируем отзывы с учётом их свежести и информативности. Выше в списке оказываются последние отзывы из тех, которые содержат достаточно фактов.
Пока алгоритм извлечения фактов из текста лучше всего работает с отзывами о ресторанах и гостиницах. В дальнейшем мы научим его анализировать отзывы и о других организациях.
Расчёт рейтинга
С помощью выделенных из текстов отзывов параметров, их характеристик, а также оценок пользователей, их лайков и дислайков мы можем превратить каждый отзыв в число. Это и есть основа для расчёта рейтинга организаций.
Как и любой рейтинг, рейтинг организаций в Яндекс.Городе ценен, только если он будет объективным и устойчивым к накруткам. Поэтому, помимо отзывов и оценок, при расчёте рейтинга мы учитываем множество факторов, причём с разным весом. На рейтинг влияют, например, свежесть отзыва и качество источника. Рейтинг появляется на странице организации только после того, как мы накопим достаточное число достоверного материала для его расчёта.
Для некоторых категорий организаций Яндекс.Город умеет показывать рейтинг отдельных аспектов. Например, для ресторанов по отдельности могут оцениваться кухня, сервис или интерьер, а для гостиниц — размещение и питание. Алгоритм извлечения фактов из текста соотносит факты, полученные из отзыва, с аспектами и даёт аспектам положительную или отрицательную оценку.
Иногда какая-нибудь мелочь вроде количества льда в коктейле может сыграть решающую роль при выборе бара на вечер пятницы. А узнать о таких вещах обычно можно только из отзывов. Поэтому делитесь мнениями о кафе, барах и других организациях, чтобы и вам, и другим людям выбирать было проще. Чем больше полезных отзывов, тем полнее будет информация в Яндекс.Городе.
Сервис Яндекс.Город работает по всей России. В Яндекс.Город можно попасть с компьютера — на gorod.yandex.ru или смартфона — приложение доступно в App Store и Google Play.