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

Street Group — одна из самых быстрорастущих PropTech-компаний в Великобритании, которая стремится улучшить опыт агентов и их клиентов, пока они перемещаются домой. Наш широкий спектр инновационных программных продуктов зависит от качества и согласованности нашей базы данных недвижимости в Великобритании. Процесс сопоставления исходных адресов необработанных строк из наших различных источников загрузки базы данных с их соответствующими стандартными почтовыми адресами Royal Mail с уникальным идентификационным номером собственности (UDPRN) играет фундаментальную роль в обеспечении надежности наших данных. Однако привязка этих необработанных записей адресов может создать проблему для раскрытия всего потенциала наших интегрированных (пространственных) источников данных.

Для этой цели мы разработали современную модель сопоставления адресов, чтобы связать входные необработанные адреса с соответствующими UDPRN Royal Mail.

Решение для машинного обучения/NLP

С входным необработанным адресом и его почтовым индексом мы можем просмотреть базу данных Royal Mail, чтобы получить соответствующие UDPRN и адреса для этого почтового индекса. Цель состоит в том, чтобы разработать решение NLP, которое будет оценивать сходство между элементами адреса (см. таблицу ниже). Используя простую модель, основанную на правилах, можно получить определенные совпадения адресов. Однако по мере того, как исходные необработанные адреса становятся более неорганизованными и неформатированными, этот подход не всегда будет работать. «10A 3 FLOOR FULHAM BROADWAY» может привести к тому, что модель на основе правил выберет «квартира 10 3 fulham Broadway»в отличие от «квартира на третьем этаже 10a fulham Broadway». . Это указывает на то, что есть значительные возможности для улучшения с использованием некоторых более продвинутых методов НЛП/МО.

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

Если мы знаем соответствующий UDPRN для нескольких миллионов объектов недвижимости в Великобритании, мы можем создать сильно искаженный набор обучающих данных для бинарной классификации, например:

Чтобы сгенерировать функции, которые будут переданы в нашу модель машинного обучения, мы выполнили некоторые шаги предварительной обработки из Y. Лин и др. (2020):

  1. Мы проанализировали все строки адресов с помощью хорошо зарекомендовавшей себя предварительно обученной библиотеки синтаксического анализатора адресов Conditional Random Field (CRF) libpostal.
>> parse_address('10a 3 floor FULHAM BROADWAY', language='EN', country='GB')
[('10a', 'house_number'), ('3 floor', 'level'), ('fulham broadway', 'road')]

Существуют дополнительные элементы адреса, поддерживаемые libpostal, и они могут быть предоставлены как заполнение, генерирующее вектор элемента адреса в форме:

vector1 = [nan, nan, nan, '10a', nan, nan, '3 floor', nan, nan, nan, nan, 'fulham broadway', nan, nan, nan, nan, nan, nan, nan, nan]

Аналогично для соответствующей пары адресов Royal Mail.

>> parse_address('third floor flat 10a fulham broadway', language='EN', country='GB')
[('10a', 'house_number'), ('third floor flat', 'level'), ('fulham broadway', 'road')]

и соответствующий адресный вектор

vector2 = [nan, nan, nan, '10a', nan, nan, 'third floor flat', nan, nan, nan, nan, 'fulham broadway', nan, nan, nan, nan, nan, nan, nan, nan]

2. Вычислить сходство Яро-Винклера между компонентами вектора элемента адреса, порождая вектор сравнения.

comp_vector = [0. , 0. , 0. , 1. , 0. , 0. , 0.3, 0. , 0. , 0. , 0. , 1. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ]

3. Обучить встраивания FastText на все адреса Royal Mail, используя в качестве токенов элементы адреса, предоставленные libpostal. После обучения вычислите косинусное сходство между представлениями встраивания vector1 и vector2 и добавьте результат в comp_vector.

4. Вычислить сходство Жаккара между входными строками.

5. Добавьте дополнительные функции сравнения между входными строками, такие как количество ненулевых адресных элементов в vector1 и vector2 соответственно, а также количество символов в каждой входной адресной строке.

Полученный сравнительный вектор для каждой пары адресов можно отформатировать в кадр данных pandas, как показано ниже. Часто косинусное сходство (cossim) и сходство Жаккара (jaccard_similarity) дают четкое указание на правильное совпадение адресов, но это не всегда так.

Наконец, мы обучили бинарный классификатор XGBoost предсказывать, является ли пара совпадением, на основе сгенерированных сравнительных признаков. Веса классов нужно было передать в конструктор классификатора, так как было около 95% несовпадающих адресов (метка 0) против 5% совпадений (метка 1). Таким образом, вклад положительного класса в функцию потерь был увеличен, чтобы учесть дисбаланс классов.

Модель достигла точности 99,1% на известном наборе данных UDPRN, остальные 0,9% составляют ошибки, допущенные моделью на основе правил, создавшей метки. Кроме того, модель позволила сопоставить еще 80 % адресов без UDPRN, из которых примерно 60 % имели высокий показатель достоверности (т. е. высокую вероятность XGBoost).

Развертывание

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

В дополнение к конвейеру Kubeflow нам также нужно было, чтобы эта модель была доступна через конечную точку API. Конечная точка будет извлекать необходимые объекты метаданных из конвейера (то естьобученную модель, обученные вложения и словарь адресов и почтовых индексов) и, получив необработанный адрес и почтовый индекс, вернет закодированный UDPRN и оценка достоверности совпадения — мы выбрали FastAPI для обслуживания модели. Развертывание этой конечной точки оказалось сложным из-за длительного времени загрузки модели в созданном образе Docker; словарь адресов и встраивания FastText довольно велики, и их загрузка в память занимает несколько минут, что приводит к сложностям при использовании облачного запуска GCP. Наконец, конечная точка была развернута с использованием автономного Kubernetes, при этом объекты модели все еще извлекались из конвейера Kubeflow.

Заключение

Этот проект был очень поучительным как с точки зрения разработки модели НЛП, так и с точки зрения ее развертывания. Другие решения НЛП, такие как SiameseLSTM или простые косинусные модели сходства, также были изучены, но комбинация CRF и метрик сходства строк с моделью XGBoost оказалась самой высокой в ​​наших данных.

Рекомендации

  • Ю. Лин и др. (2020). Архитектура глубокого обучения для сопоставления семантических адресов, International Journal of Geographical Information Science, 34:3, 559–576, DOI: 10.1080/13658816.2019.1681431
  • С. Комбер и Д. Аррибас-Бел (2019). Инновации машинного обучения в сопоставлении адресов: практическое сравнение word2vec и CRFИнновации машинного обучения в сопоставлении адресов: практическое сравнение word2vec и CRF, Transactions in GIS, 23:334–348, DOI: 10.1111/tgis.12522
  • Руи Сантос, Патрисия Мурриета-Флорес и Бруно Мартинс (2018). Учимся комбинировать несколько метрик сходства строк для эффективного сопоставления топонимов, International Journal of Digital Earth, 11:9, 913–938, DOI: 10.1080/17538947.2017.1371253