iKnow Review Analyzer (iKRA)
Intro
С помощью технологии InterSystems iKnow мы сделали систему оценки отзывов под названием iKnow Reviews Analyzer (iKRA). О прототипе проекта можно прочитать здесь. iKRA анализирует текстовые отзывы пользователей, автоматически выставляя численную оценку предмету исследования. Эти функции могут быть очень кстати, например, на сайтах онлайн-продаж, тематических форумах или сборниках медиа контента. Другими словами, везде, где идет обсуждение сообществом каких-либо вещей.
Что делает решение?
iKnow Reviews Analyzer выполняет анализ любой предметной области, будь то сфера онлайн-продаж бытовой техники или же бронирование туристических отелей в жарких странах. Для получения результатов необходимо пройти следующие ключевые шаги:
- собрать отзывы в интересующей нас предметной области;
- создать словари — базу слов для расчета;
- создать область для загрузки и анализа данных;
- запустить модель на расчет;
- попить кофе / подождать;
- посмотреть результаты.
Пример использования
Теперь как это выглядит на практике… В качестве примера будем анализировать отзывы по смартфонам. Отберем пять производителей:
- Apple;
- HTC;
- LG;
- Samsung;
- Sony.
Допустим, что у каждого из них нас интересует по две модели смартфонов. Для каждой выбранной модели загрузим по 50 отзывов — в итоге 500. Комментарии возьмем с Яндекс.Маркет:
Каждый из отзывов разместим в отдельном файле и для удобства используем следующую схему расположения файлов (Рисунок 1):
Рисунок 1. Иерархия расположения файлов
В скобках приведена общая оценка смартфона, которую поставил пользователь при написании отзыва. Она заносятся в метаданные и используются впоследствии для оптимизации алгоритма расчета. Исходные отзывы находятся здесь.
Для проведения анализа необходимо создать домен iKnow — хранилище неструктурированных данных. Подробно останавливаться на этом не будем, так как данный вопрос подробно описан здесь.
Когда домен создан и заполнен отзывами, приступим к анализу его содержимого. При выборе смартфона для меня являются критичными следующие параметры:
- производительность;
- качество связи;
- комфортабельность/удобство.
Для простоты дальнейшего повествования введу следующие понятия:
- категория — параметр, подлежащий оценке;
- функциональный (ф) маркер — термин, который характеризует оцениваемый параметр/категорию;
- функциональный словарь — множество ф-Маркеров;
- эмоциональный (э) маркер — слово отражающее отношение автора к описываемому предмету;
- эмоциональный словарь — множество э-Маркеров.
На основе выбранных характеристик составляем функциональный словарь, где для каждой из указанных категорий отбираем ф-Маркеры — определяющие слова. Например, для категории «производительность» это могут быть: «быстродействие», «процессор», «память», «скорость», «ядро» и так далее. Все ф-Маркеры заносятся в специальный файл. На Рисунке 2 представлен пример категории «Perfomance»/«Производительность»:
Рисунок 2. ф-Маркеры
Далее составляем эмоциональный словарь, наполняя его соответствующими э-Маркерами. Весь список здесь не привести, но для наглядности перечислю некоторые из них: «хороший», «удобный», «понравился», «проблемный», «недостаток». э-Маркеры придают позитивный или негативный окрас предложению в тексте. Каждому э-Маркеру будет соответствовать численная оценка. Для простоты используем +1 для положительных, -1 для отрицательных. Все э-Маркеры так же заносятся в специальный файл. На Рисунке 3 представлен пример э-Маркеров:
Рисунок 3. э-Маркеры
После того, как словари готовы, можно произвести расчет оценок. Для этого на вкладке «Домены» выбираем нужный и жмем «Выполнить расчет» (Рисунок 4):
Рисунок 4. Расчет оценок
Чтобы посмотреть результат, открываем таблицу класса ikra.Dictionary.MarksUnit — который содержит оценки по каждой модели смартфона или обращаемся к классу ikra.Dictionary.MarksReview — который содержит оценки по каждому отдельному отзыву. Информация выводится в портале управления. Выбираем раздел SQL и просматриваем интересующую нас таблицу. На Рисунке 5 приведен пример просмотра таблицы класса ikra.Dictionary.MarksUnit.
Рисунок 5. Просмотр таблицы ikra.Dictionary.MarksUnit
С помощью DeepSee посмотрим, что же у нас получилось. Мы создали куб, который использует результаты расчета оценок по категориям и построили график для каждого исследуемого аппарата (Рисунок 6):
Рисунок 6. График оценок по категориям
Среди проанализированных данных первые места распределились следующим образом:
- производительность — HTC ONE;
- качество связи — HTC ONE;
- комфортабельность/удобство — Samsung Galaxy S5 SM-G900F.
А что если надо добавить еще одну категорию?
Ранее, для оценки каждой отдельной категории приходилось прописывать соответствующее свойство класса вручную. Это создавало неудобство, когда при анализе новых предметных областей менялись категории и их количество, возникала необходимость правки кода при каждом таком изменении, что, очевидно, самое веселое и продуктивное использование времени. Чтобы выйти из этой ситуации мы рассмотрели два варианта решения:
- Резервирование большого числа свойств класса;
- Использование базы данных.
Первый вариант позволяет забыть о постоянно меняющемся числе категорий, не заморачиваясь со структурой БД. Но хранить такой объем свойств неудобно, да и к тому же никто не гарантирует, что не возникнет большее число оцениваемых параметров. От этого пути мы отказались.
Второй вариант решает задачу с неопределенным числом категорий и не требует фиксированного количества памяти под хранение каждого экземпляра класса. На основе БД система легко подстраивается под расчет любой предметной области с любым количеством категорий.
Учитывая преимущества второго варианта, в системе iKRA реализован именно он.
Добавление новой категории
«И тут я понял, что мне необходимо оценить еще один параметр смартфона — камеру! (Уж если ловить покемонов, то с удовольствием)»
Добавить новую категорию не составляет труда, для этого изменим состав функционального словаря и впишем новое название — Camera (Рисунок 7).
Рисунок 7. Добавление категории Camera
Определим категорию, добавив ф-Маркеры на соответствующей вкладке (Рисунок 2).
На вкладке домены выбираем нужный и запускаем расчет (Рисунок 4).
Дожидаемся окончания и переходим к просмотру (Рисунок 8):
Рисунок 8. Обновленный график оценок по категориям
Ура! Мы легко ввели новую категорию и оценили ее. Теперь картина выглядит следующим образом:
- камера — iPhone 4S
- производительность — HTC ONE;
- качество связи — HTC ONE;
- комфортабельность/удобство — Samsung Galaxy S5 SM-G900F.
Продолжение следует
Теперь мы быстро и без затрат на переписывание кода получаем оценки любых категорий продуктов по их отзывам. Сейчас для этого надо настроить словарь и запустить расчет. Сложным местом пока остается процесс загрузки отзывов в базу данных, но о решении этого вопроса мы поговорим в следующей статье.
» GitHub