Machine Learning, NLP

Анализ комментариев клиентских менеджеров по результатам коммуникаций с клиентами

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

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

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

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

Результаты коммуникаций с клиентами легко выгружать из отчетных систем компании. Благодаря этому возможно получить статистику по причинам оттока клиентов, базирующуюся на взаимодействии клиента с менеджером, использовав ряд различных аудиторских digital-инструментов автоматизированной обработки текста, среди которых один из наиболее полезных – библиотека NLTK.

NLTK это одна из ведущих библиотек для NLP, написанная на языке python. Пакет предоставляет множество возможностей, таких как: статистическая и символьная обработка данных, визуализация, а также содержит корпус текстов. Мы сосредоточимся на предобработке данных при помощи данной библиотеки. Для примера воспользуемся абзацем из соответствующей статьи в Википедии.

NLTK позволяет разбить текст на токены. Сделать это можно разными способами. Рассмотрим три из них.

Перед тем как приступить к этому необходимо загрузить пакет с пунктуацией.

import nltk as nltk
nltk.download('punkt') 

Первый это разбивка текста на предложения.

from nltk import sent_tokenize
tokens = sent_tokenize(text)
['Библиотека NLTK, или NLTK, — пакет библиотек и программ …',
 'Содержит графические представления и примеры данных.',
 'Сопровождается обширной документацией, включая книгу …']

Второй позволяет нам получить отдельные слова в тексте.

from nltk import word_tokenize
tokens = word_tokenize(text)
tokens[:10]

['Библиотека', 'NLTK', ',', 'или', 'NLTK', ',', '—', 'пакет', 'библиотек', 'и']

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

from nltk import regexp_tokenize
tokens = regexp_tokenize(text, '[\w]+')
tokens[:10]
['Библиотека', 'NLTK', 'или', 'NLTK', 'пакет', 'библиотек', 'и', 'программ', 'для', 'символьной']

Также при помощи NLTK можно удалить стоп слова. Стоп слова – это союзы, предлоги, частицы, которые не несут большой смысловой нагрузки и только мешают дальнейшему анализу текста. Применять очистку от стоп слов нужно в зависимости от ваших задач. К примеру частица ‘не’ также входит в список, но несет важную смысловую нагрузку. В самых примитивных вариантах bag of words частица ‘не’ нам будет только мешать, однако в более сложных подходах может оказаться полезна.

from nltk.corpus import stopwords
nltk.download('stopwords')
stops = stopwords.words("russian")
filtered_tokens = [token for token in tokens if token not in stops]
print("Общее количество слов --- {}".format(len(tokens)))
print("Количество слов после очистки --- {}".format(len(filtered_tokens)))

Общее количество слов --- 49
Количество слов после очистки --- 39

При помощи NLTK также можно произвести стемминг слов для русского языка. Стемминг представляет собой выделение основы слов путем отбрасывания их окончаний, суффиксов и прочих малозначимых частей.

from nltk.stem import SnowballStemmer
snowball = SnowballStemmer(language="russian")
stemed_filtered_tokens = [snowball.stem(token) for token in filtered_tokens]
stemed_filtered_tokens
['библиотек', 'NLTK', 'NLTK', 'пакет', 'библиотек', 'программ', 'символьн', 'статистическ', 'обработк', 'естествен', 'язык', 'написа', 'язык', 'программирован', 'Python']

После подготовки слова можно разбить на n-грамы.

from nltk import ngrams
n = 3
threegrams = ngrams(stemed_filtered_tokens, n)

for three in threegrams:
  print(three)
('библиотек', 'NLTK', 'NLTK')
('NLTK', 'NLTK', 'пакет')
('NLTK', 'пакет', 'библиотек')
('пакет', 'библиотек', 'программ')
…

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

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

Советуем почитать