Вход
Регистрация

Введение в проблему

Большое количество сведений о клиентах, имеющееся в базах данных, хранятся в неудобном для автоматической обработки виде, например, адресная информация. Чаще всего она пишется в строки вида "г. Рязань ул. Электрозаводская 63". Насколько эта информация пригодна для автоматической обработки? Можно ли и нужно ли ее применять?

Я думаю, что нужно применять обязательно. Бизнес должен быть ориентирован на клиента. А для того, чтобы удовлетворить его запросы, желательно знать о клиенте как можно больше. Адрес – одна из важных составляющих информации о клиенте. Известно, что потребности людей в маленьких и больших городах различны. Потребности меняются даже в зависимости от района города, в котором живешь. Все эти сведения есть в адресе (город, улица и т.п.), но в совершенно непригодном для работы виде.

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

Для нормального использования адресной информации необходимо разделить адрес на составляющие – разложить все "по полочкам".

Рисунок 1 - Пример разложения адреса на составляющие

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

При работе с большими объемами данных вы наверняка столкнетесь с проблемой дублирования информации, когда один и тот же клиент вводится в список клиентов дважды. Компания с названием "Компьютер-сервис" есть, наверно, в каждом крупном городе. В таких случаях необходимо анализировать адрес. Вот тут и возникает проблема. Один и тот же адрес каждый вводит по-своему. Не стоит винить в этом сотрудников, т.к. они пишут так, чтобы поняли другие люди. Люди то поймут, а вот программа – нет.

Но задача решаема при помощи метода, описанного ниже.

Принцип работы механизма разбора

Для начала нужно четко определиться с задачей. Наша цель – преобразовать строку адреса к форме.

Рисунок 2 - Схема преобразования строки адреса к форме

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

Человек обычно способен разобрать даже самый трудно различимый адрес. Поэтому попробуем проанализировать, как же он решает эту задачу. На мнение о том, что означает тот или иной элемент в строке, влияет следующее:

  1. Характерные особенности написания объектов. Например, если строка состоит из 6 цифр подряд, то это, скорее всего, индекс.
  2. Положение термина относительно сокращений и обозначений различного рода типов объектов. Например, если встречается последовательность вида "ул. ХХХ", то, скорее всего, ХХХ – это улица.
  3. Относительное положение анализируемого слова в предложении. В России принято при написании адреса начинать с крупной административной единицы и двигаться к меньшей. Правда, в англоговорящих странах – наоборот.
  4. Если вы знаете тип этого слова, то можно сразу, особо не раздумывая, отнести его к нему. Проще говоря, Москву вы сразу отнесете к городам.

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

Реализация

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

Придумать способ кодирования/декодирования информации

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

Подготовить обучающую выборку

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

Рисунок 3 - Пример преобразования адреса в шаблон

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

Обучение нейросети и перенос ее на сайт

Обучающая выборка была пропущена через Neural Network Wizard. Результат обучения был сохранен в nnw-файле. Наиболее сложный участок был пройден. Есть способ кодирования/декодирования и обученная нейросеть.

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

Область применения

Пропустив адресную информацию через систему разбора, вы получите следующее:

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