Любая современная компания заботится о своей репутации. Фразы: «Ваше мнение очень важно для нас» или «Оцените вашу покупку», «Вы бы порекомендовали нашу компанию?» буквально преследуют нас на каждом шагу на сайтах магазинов, поликлиник и даже Госуслуг. Правительственные учреждения на ряду с другими компаниями стали заинтересованными в оценке своей работы и тоже обращают на это внимание. Медицинские учреждения не будут продлевать контракты со специалистами, у которых на протяжении долгого времени преобладает отрицательный фон. Поставщики услуг стараются постоянно отслеживать реакцию потребителей на товары и услуги для того, чтобы сделать свой сервис более доступным и качественным, а значит конкурентоспособным. Народное мнение помогает другим потребителям составить представление об учреждении, заведении, продукте или сервисе до того, как он будет приобретен и тем самым позволяет избежать ошибок при покупках. Крупные компании в обязательном порядке содержат в своем штате структуры по борьбе с оттоком клиентов, пиар-отделы, в работе которых ключевым фактором является своевременная реакция на запросы потребителей. Как же построить работу подобных структур без повышения затрат и повысить их скорость реагирования? В качестве одного из примеров рассмотрим применение машинного обучения для оперативного анализа большого количества отзывов респондентов.



Мультиязычность



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



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



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



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

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

Машинное обучение



Одним из элегантных способов устранения подобных задач может стать машинное обучение. В настоящее время для этого даже нет необходимости глубоко разбираться в математике. К примеру, достаточно воспользоваться MS Azure Cognitive Service



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



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



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



Cognitive service



Прежде всего необходимо подключится к услуге MS Azure Cognitive Service и получить доступ к API который анализирует заданный текст и возвращать его характеристики. Этот процесс не сложен и будет рассмотрен более подробно в отдельной статье



Обратится к API можно двумя способами с помощью HTTP запроса и с помощью клиента. В частности, для .net необходимо подключить пакет


далее вызвать API
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://northeurope.api.cognitive.microsoft.com/text/analytics/v2.0/languages"); 

httpWebRequest.Method = "POST"; 
httpWebRequest.Headers.Add("Content-Type:application/json"); 
httpWebRequest.Headers.Add("Ocp-Apim-Subscription-Key:61..."); 
var documents = new Documents(); 
documents.Add(new Document(Description)); 
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
{ 
  string json = JsonConvert.SerializeObject(documents); 
  streamWriter.Write(json); 
  streamWriter.Flush(); 
  streamWriter.Close(); 
} 

и разобрать полученный ответ


var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
String response; 
using (var streamReader = new StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8)) 
{ 
  response = streamReader.ReadToEnd(); 
} 
var result = JsonConvert.DeserializeObject<DocumentsResult>(response); 
var doc = result.documents[0].detectedLanguages[0]; 

Если записать полученные данные в БД то получим следующее


(Пример добавлен после комментария пользователя к статье)


Анализ результатов



Проанализируем полученные результаты, для этого построим несколько отчетов, воспользовавшись программным комплексом FastReport который имеет в своей поставке open-source версию

youtu.be/Tyu7v24zer0

Включаем сортировку по тональности (1- позитивная, 0-негативная) получаем сгруппированные вверху позитивные отзывы и сгруппированные внизу негативные.

youtu.be/HbuXMuDZFmo

При необходимости можно сгруппировать отзывы по языкам и отправить соответствующие отчеты в региональные подразделения

youtu.be/YF8RG3g5FRs

Заключение



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

Ссылки



github.com/ufocombat/Languages-open
azure.microsoft.com/ru-ru/services/cognitive-services/text-analytics
www.fast-report.com/en
youtu.be/Tyu7v24zer0
youtu.be/HbuXMuDZFmo
youtu.be/YF8RG3g5FRs

Комментарии (3)


  1. windrider
    28.03.2019 22:32

    Идея (API) вроде и неплохая. Но результат (на скриншоте) какой-то не очень:
    «Я не говорю по-португальски»: sentiment = 0,279.
    «Нифига непонятно как это работает»: sentiment = 0,555.
    И особенный привет с Obrigado: 100% English, sentiment = 0,753.
    Там точно не ГСЧ?


    1. ufocombat Автор
      28.03.2019 22:38

      Eu nao falo portugues
      Language: Portuguese (100%)
      Sentiment: 34%

      Я не говорю по-португальски
      Language: Russian (100%)
      Sentiment: 44%

      Obrigado — определяет не верно подтверждаю
      Language: English (100%)
      Sentiment: 75%

      А вот если написать слово правильно Obrigada то дает такой результат
      Language: Portuguese (100%)
      Sentiment: 77%


  1. mtivkov
    29.03.2019 19:14

    Хорошо бы еще дописать (или это в следующей статье?) сколько будет стоить обращение к MS Azure Cognitive Service