Давно хотел написать свою статью о технологии iKnow. Прошло три года с момента ее появления, но публикаций о применении этой технологии в русскоязычных решениях до сих пор не было.
Объяснение этому довольно простое – не было полноценной поддержки русского языка.
Но с каждым новым релизом, начиная с Cache 2013.1, ситуация меняется в лучшую сторону.
И вот, наконец, мы решили реализовать первый проект на iKnow. Подробнее о том, как это произошло, что сработало, а что нет, читайте в моей статье.
Итак, как я уже сказал, до сих пор не было приложений и реальных русскоязычных решений, созданных с помощью iKnow, хотя поддержка семантической модели для русского языка впервые появилась в версии 2013.1. В какой-то момент стало понятно, что то, что работает для латинских языков, не подходит для русского (как и для всех славянских языков).
И это связано с разнообразием форм, которые может принимать одно слово.
Когда iKnow анализирует текст, подсчитываются понятия (здесь можно предположить, что понятие — существительное), а понятия «яблоко», «яблоки» и «яблоки» являются совершенно разными терминами и считаются отдельно.
Поэтому, например, рецепт приготовления шарлотки iKnow сможет понимать как статью об обслуживании электрических духовок, ведь термин «духовка» (включить «духовку», открыть «духовку», выключить «печь» и др.
) будут встречаться в тексте чаще, чем отдельные формы слова «яблоко».
В этом была трудность.
И использование его помогло с этим справиться лемматизация – инструмент для приведения слова в нормальный вид. И вот в Cache 2015.1 FieldTest появилась поддержка лемматизации, реализованная с помощью библиотеки Hunspell. Это означает, что можно создавать полноценные приложения для анализа данных из текстов на русском и украинском языках.
И мне сразу захотелось сделать что-то, что было бы отличным практическим примером использования iKnow и в то же время не бесполезным аналогом «Hello world».
И такая задача нашлась! Нам была предоставлена база данных из 27 000 отзывов о 100 самых популярных отелях Турции и Египта.
Сразу был определен круг приоритетных задач, которые предстояло решить.
Впрочем, обо всём по порядку.
Что такое туристический обзор? Это, прежде всего, неструктурированные данные или текст (понятие «неструктурированный текст», которым любят пользоваться многие, мне кажется бессмысленным).
Люди, возвращаясь из отпуска (мы рассматривали пляжный отдых), заходят на портал, оценивают отель, в котором жили, или категории этого отеля, например, сервис, питание, гостеприимство и т. д. Затем описывают отдых в своими словами, отмечая, что хорошо, а что плохо.
Числовые оценки отдыха (например, по пятибалльной шкале) — это метаданные, которые администрация портала может легко использовать для расчета рейтингов отелей.
Но зачастую люди просто пишут текст и забывают его оценить.
Таких случаев довольно много – в нашем проекте больше половины отзывов содержат только текст, без числовых оценок.
Получается, что такой обзор для целей рейтинга бесполезен.
Поэтому первая задача, которую нужно было решить, — научить iKnow рассчитывать рейтинг отеля исключительно на основе текста отзыва.
Остальные задачи также были сформулированы достаточно быстро:
- рассчитать рейтинг отдельных категорий отелей (комфорт, сервис, питание, гостеприимство, территория, расположение);
- оценить, насколько этот расчет соответствует оценкам, которые дали себе авторы обзора;
- синтезировать заключительную фразу о пребывании в отеле (например: «Из 653 отдыхающих в отеле 278 человек (43%) отмечают вежливость и дружелюбие персонала, 220 отдыхающим (34%) понравилась еда в ресторанах, и 76 гостей (12%) хотели бы еще раз отдохнуть здесь");
- научитесь определять самые полезные отзывы, чтобы в первую очередь предлагать их посетителям портала;
- найти подозрительные и заказные отзывы, написанные пряниками в рекламных целях и зачастую имеющие мало общего с печальной реальностью;
Теперь мне нужно объяснить, что это такое я знаю и чего от него можно добиться без значительных усилий.
iKnow — это технология, позволяющая анализировать тексты.
iKnow API — набор функций для работы с неструктурированными данными.
Существует также графический интерфейс, который позволяет визуализировать результаты индексации текста и извлекать полезную информацию из данных.
Когда мы загружаем что-то в iKnow, на выходе получается тот же текст, но разделенный на концепции и связи между ними.
Понятия в предложениях обычно представляют собой подлежащие и объекты.
В большинстве случаев связями между понятиями являются глаголы, глагольные формы или предлоги.
Кроме того, iKnow может точно подсчитать, сколько раз в обзоре путешествия упоминаются термины «отель», «море», «пляж» или «пищевое отравление».
Пример разбиения предложения на понятия и отношения.
Понятия выделены желтым цветом, связи подчеркнуты, а неважные слова отмечены серым цветом.
Что еще мы можем получить из текста, зависит в основном от нашей фантазии и еще немного от разнообразия iKnow API. Как я могу оценить отель по тексту отзыва? Ниже представлен один из подходов расчета числовых характеристик по тексту.
Первое, что нужно сделать, это разбить весь текст на части.
iKnow API позволяет разделить предложения или в способы .
С предложениями все просто, это часть текста, ограниченная точками, вопросительными или восклицательными знаками и точками с запятой.
Путь — это часть предложения, содержащая связанные понятия.
На практике в большинстве случаев пути и предложения одни и те же.
И только сложные или сложные предложения состоят из нескольких путей.
В номере обнаружили обещанных в отзывах муравьев.
, Мы позвонили на ресепшн и сообщили им о нашей проблеме.
В целом это предложение, а частично — путь.
Мы разделили текст на предложения.
Вторая задача – понять, о чем говорится в предложении.
Другими словами, нам необходимо определить, о какой категории отеля идет речь в этом предложении.
Для этого вам понадобятся словари так называемых функциональных маркеров.
Например, если в предложении присутствуют термины «ресторан», «сок», «чай», то мы говорим о категории «еда», а сами термины включаем в словарь маркеров этой категории.
К напиткам в ресторанах и барах относятся порошковые соки, газированные напитки, чай, растворимый кофе, вино и пиво, крепкий алкоголь в барах.
Наш словарь функциональных маркеров содержал около 300 терминов, относящихся к 6 оцениваемым категориям отелей.
И вот что важно: если бы не было лемматизации, то для корректной работы системы все формы этих 300 слов пришлось бы внести в словарь.
Да, на первый взгляд это не непосильная задача.
Но что, если словарь вырастет? На первом этапе словари маркеров формировались вручную.
В них вошли термины, которые встретились во время корректуры первых 200 рецензий.
На втором этапе словарь расширялся автоматически с помощью алгоритма обучения словаря, построенного с использованием возможностей iKnow. В результате объем словаря увеличился в среднем на порядок.
Хорошо, теперь мы знаем, что говорится в этом предложении.
Еще неизвестно, понравилось это рецензенту или нет. Другими словами, необходимо определить эмоциональную окраску предложения.
Для этого был создан словарь эмоциональных маркеров.
Как правило, в русском языке эмоциональную окраску придают прилагательные (вкусный кофе, удобный вход в море и т. д.).
Также можно принять во внимание существительные, имеющие явные коннотации (грязь, массовое отравление алкоголем, радость).
И вот начинается «волшебство», когда из текста формируются числовые оценки, графики и таблицы.
Мы можем подсчитать количество положительных и отрицательных терминов, примененных к категориям отелей для каждого отдельного отзыва, а затем определить долю положительных.
Для расчета я использовал следующую формулу: Оценка = N_положительный/(N_положительный+N_отрицательный) Вы получаете число от 0 до 1. Причём, чем лучше отель, тем ближе это значение к 1. Если умножить это число на определённый коэффициент, например 5, то можно получить рейтинг отеля по пятибалльной шкале.
, что и было сделано.
Следующая задача — убедиться, что все это имеет смысл.
Это был, пожалуй, ключевой момент в работе.
Чтобы понять, как рейтинги, рассчитанные с помощью iKnow, коррелируют с рейтингами автора, мы построили график, включивший все оцениваемые нами отели.
Рисунок 1. Соотношение авторского и расчетного рейтингов.
Средние значения авторских рейтингов отелей показаны здесь синим цветом, а рассчитанные iKnow – зеленым.
Как видите, корреляция явно существует. И хотя окончательные выводы делать пока рано, уже сейчас ясно, что этот подход работает и его можно развивать дальше.
Разумеется, такой алгоритм количественной оценки отелей и их параметров работает при статистически большом количестве отзывов: в нашем случае рейтинги формировались, когда количество отзывов было не менее 20 для каждого отеля.
Кстати, хочу отметить, что для построения аналитики я использовал другую технологию Intersystems — ДипСи .
Следующими задачами, которые нужно было решить, был поиск полезных и персонализированных отзывов.
Здесь все довольно просто, нужно лишь сформулировать соответствующие критерии.
Вот, например, критерии полезности обзора:
- В обзоре описано максимальное количество категорий отелей.
То есть здесь можно прочитать об уровне обслуживания, комфортности номера, качестве еды и т. д.
- отзыв должен быть эмоционально сбалансированным.
Не должно быть только голой критики или только восторженных описаний.
Как правило, людям нравятся одни вещи и недовольны другими.
То есть отзыв должен содержать как положительные, так и отрицательные эмоциональные маркеры.
- Рейтинг отеля, рассчитанный на основе такого отзыва, должен быть близок к среднему рейтингу.
Хотелось бы отметить, что со стороны iKnow было бы слишком самонадеянно утверждать однозначно, что заказной отзыв, но назвать отзыв подозрительным и привлечь к нему внимание администратора туристического портала вполне возможно.
Отдельно хотелось бы сказать про DeepSee, который поддерживает возможность использования измерений и метрик на данных из iKnow. Здесь много интересной, а главное полезной для туристов информации, которую помимо статических рейтингов можно получить из отзывов.
С помощью анализатора выяснилось, что оценки меняются в зависимости от месяца и от года к году.
И все это хорошо видно на графиках DeepSee.
Рисунок 2. Изменение рейтинга отеля по месяцам
Попробую подвести итог проделанной работы.
Нам удалось реализовать первый значимый проект на iKnow на русском языке.
Обладая достаточным воображением и богатством API iKnow, вы можете создавать довольно сложные решения.
В будущем мы планируем превратить анализатор отзывов об отелях в универсальный инструмент, ведь в Интернете полно отзывов: о фильмах, машинах, телефонах и т.д. Но было бы неправильно говорить только о преимуществах, не упомянув о проблемах, с которыми мне пришлось столкнуться.
Таких проблем две:
- обработка отрицательных предложений;
- несовершенство лемматизации.
Как, например, система может оценить следующую фразу: Не могу сказать, что пляж нам не понравился.
или В итоге наш личный отдых прошел ХОРОШО, но в этот отель я больше никогда не поеду! iKnow может обнаружить наличие отрицания в предложении, но сложно определить с уверенностью, что именно отрицается.
Особенно эта проблема характерна для русского языка, где в предложении нет строго установленного порядка слов.
Что делать с такими предложениями решать вам, варианты: обратить вспять оценку эмоциональных маркеров (умножить на -1), полностью игнорировать такие предложения или оставить все как есть.
В любом случае это приведет либо к потере информации, либо к потере точности анализа отдельных предложений.
И вообще не понятно, как анализировать сарказм.
Существует также проблема с лемматизацией.
Он существует и работает, но иногда производит совершенно чудесные вещи.
Например, предложный падеж от существительного отель - "о гостинице" сводится к животноводческому термину "отел", а "зеленая дикая слива" трансформируется в сантехнический термин "зеленая дикая слива".
Однако я думаю, что нам следует быть оптимистами и верить, что эти проблемы со временем будут решены.
Работа над улучшением iKnow продолжается.
В этой статье нет никаких технических подробностей или подробностей.
Я буду рад рассказать о них и о том, как создавать свои собственные приложения iKnow в дальнейшем.
Теги: #cache #intersystems #deepsee #анализ текста #Анализ настроений #анализ отзывов #анализ настроений #анализ настроений #анализ настроений #Интеллектуальный анализ данных
-
Экспресс-Аудит Хостинг-Сайтов
19 Oct, 24 -
Diveintohtml5 Перенесен В Движок Приложения
19 Oct, 24 -
Смс-Уведомления Своими Руками
19 Oct, 24