Трибуна Anton Lebedev
691

Understand Reviews – сервис для анализа отзывов в App Store и Google Play

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

В закладки
Аудио

Почему мы решили этим заняться?

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

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

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

Как проверяли востребованность идеи?

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

За 2 недели мы проконсультировались с 20 компаниями, для которых мобильные приложения являются важной частью бизнеса. Мы выяснили, что большинство из них анализируют отзывы в App Store и Google Play, составляют отчеты и учитывают их при дальнейшем планировании. Более того, нам удалось продать свое решение нескольким компаниям, еще не имея готового продукта!

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

Как сделать отчеты точными и полезными?

Существующие сервисы предлагают лишь семантический анализ отзывов – они не учитывают контекст использования слов или фраз, что не позволяет точно и полностью извлечь смысл из отзывов.

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

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

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

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

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

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

На этом скриншоте показана часть возможного варианта отчета. Все отзывы разбиты по смыслам.

В результате мы получаем отчет, содержащий по-настоящему важную информацию. За каждым тегом стоит действительный смысл, включающий тему и отношение к ней пользователя. В то время как существующие сервисы позволяют собирать данные лишь по широким и абстрактным категориям, например «Design» и «Bugs», наше решение делает возможным гораздо более глубокую разметку отзывов, включая и уникальные для каждого приложения детали.

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

Итоги

Нам удалось разработать систему анализа отзывов, которая помогает уже десятку разработчиков. Наши услуги стоят от $39 в месяц. Если вы хотите принять участие в бета-тестировании, оставьте заявку на нашем сайте: understand.reviews

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Anton Lebedev", "author_type": "self", "tags": [], "comments": 7, "likes": 22, "favorites": 20, "is_advertisement": false, "subsite_label": "tribuna", "id": 63562, "is_wide": false, "is_ugc": true, "date": "Fri, 05 Apr 2019 08:55:03 +0300" }
Акции банка «Тинькофф»
19,20$
0,04$
{ "id": 63562, "author_id": 87218, "diff_limit": 1000, "urls": {"diff":"\/comments\/63562\/get","add":"\/comments\/63562\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/63562"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199116, "last_count_and_date": null }

7 комментариев 7 комм.

Популярные

По порядку

Написать комментарий...
1

Очень интересно чем вы отличаетесь от других подобных сервисов?

Ответить
3

Илья, хороший вопрос. :)

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

Например отзыв: "Пришел штраф по гос. номеру на мою машину и через неделю штраф сам заплатился, как так. В базе ГИБДД не было штрафа. Недоработка"

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

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

Ответить
1

Крутая идея!
Анализируете только со сторов отзывы или парсите ещё интернет?

Ответить
1

Спасибо за комментарий :)

На данном этапе только сторы. В дальнейшем рассматриваем возможность анализировать отзывы из интернета, опросы по NPS, тикеты в support и прочее. :)

Ответить
0

...

Ответить
1

Странно, что комментарии нельзя удалять. Я ошибся уже второй раз, пришлось ставить многоточия вместо удаления :)

Ответить
0

Спасибо за комментарий :)

На данном этапе только сторы. В дальнейшем рассматриваем возможность анализировать отзывы из интернета, опросы по NPS, тикеты в support и прочее. :)

Ответить
0
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Команда калифорнийского проекта
оказалась нейронной сетью
Подписаться на push-уведомления
{ "page_type": "default" }