Время прочтения: 3 мин.

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

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

К примеру, мы исследуем процесс отправки смс от банка клиенту. У нас имеется набор данных (~180 000 строк), где содержится дата и время, ID клиента, но вместо типа смс у нас есть поле с смс-текстом произвольного содержания. Содержание может быть разного формата, многие из них схожи, некоторые могут быть уникальными. В тексте смс содержатся специфические слова, символы и связи между словами.

Задача состоит в том, что необходимо кластеризовать данные, на неопределенное число групп по содержанию смс сообщения. В результате сформированные группы окажутся типами смс, то есть этапами процесса (activity).

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

  when sms_text like '%Сейчас для вас нет доступных кредитных продуктов%'
	  then 'Нет доступных кредитных продуктов'

	   when sms_text like '%Вам не одобрена кредитная карта%' or sms_text like '%кредитная карта не одобрена%'
	  then 'Отказ в оформлении кредитной карте'

	  when sms_text like '%Вам одобрена%кредитная карта%'
	  then 'Одобрена кредитная карта'

	   when sms_text like '%Заказ кредитной карты. Код%'
	  then 'Заказ кредитной карты'

	  when sms_text like '%заявка на изготовление карты принята%'

	  then 'Заявка на изготовление карты принята'
	  
	   when sms_text like '%Карта заблокирована по вашему обращению. Денежными средствами вы сможете%' or sms_text like  '%заблокирована. Остаток на%'
	  then 'Блокировка карты по обращению'

         else NULL

	    end as activity

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