У меня много адресных строк:
1600 Pennsylvania Ave, Washington, DC 20500 USA
Я хочу разобрать их на составляющие:
street: 1600 Pennsylvania Ave
city: Washington
province: DC
postcode: 20500
country: USA
Но, конечно, данные грязные: они поступают из многих стран на многих языках, написаны по-разному, содержат орфографические ошибки, пропуски, лишний мусор и т. Д.
Прямо сейчас наш подход состоит в том, чтобы использовать правила в сочетании с нечетким соответствием газетера, но мы хотели бы изучить методы машинного обучения. Мы пометили данные обучения для контролируемого обучения. Вопрос в том, что это за проблема машинного обучения? Это не похоже на кластеризацию, классификацию или регрессию ...
Самое близкое, что я могу придумать, это классифицировать каждый токен, но тогда вы действительно хотите классифицировать их все одновременно, удовлетворяя ограничениям типа «должно быть не более одной страны»; и действительно, есть много способов токенизации строки, и вы хотите попробовать каждый из них и выбрать лучший .... Я знаю, что существует вещь, называемая статистическим анализом, но ничего не знаю об этом.
Итак: какие методы машинного обучения я мог бы изучить для анализа адресов?
источник
Ответы:
Это можно рассматривать как проблему маркировки последовательности , в которой у вас есть последовательность токенов и вы хотите дать классификацию для каждого из них. Вы можете использовать скрытые модели Маркова (HMM) или условные случайные поля (CRF) для решения проблемы. Есть хорошие реализации HMM и CRF в пакете с открытым исходным кодом Mallet .
В вашем примере вы должны преобразовать ввод в формат ниже. Кроме того, вы должны генерировать дополнительные функции.
источник
Мне пришлось решить очень похожую проблему, чтобы проверить, является ли адрес действительным или недействительным.
Обычно адреса имеют структуру "1600 Pennsylvania Ave, Washington DC, 20500"
Строка, такая как
«Я прошел 2000 ступеней и достиг Пенсильвании в Вашингтоне».
не является действительным адресом.
Это можно решить с помощью методов классификации, таких как SVM, нейронные сети и т. Д.
Идея состоит в том, чтобы определить ключевой набор функций. Некоторые из них могут быть:
1) Название улицы начинается с правильного номера блока. Большинство номеров блоков США представляют собой либо числа (например, 1200), либо число, за которым следует одна буква (120A), либо число, следующее за одной буквой (например, S200).
2) Если адрес правильно отформатирован, названия улиц заканчиваются суффиксами, такими как Ave для проспекта, Dr для Drive, бульвар для бульвара. Получить список суффиксов улиц США можно с сайта USPS.
3) Количество слов в поле адреса улицы также может быть интересной особенностью. Если слов слишком много, возможно, это неправильный адрес. Например, см. Пример выше.
4) Сколько слов встречается между номером блока и суффиксом улицы в поле адреса?
Их можно использовать для обучения алгоритма обучения, а полученную модель можно использовать для проверки правильности заданного адреса.
источник
Это что-то вроде хака, который не требует вашего собственного решения: обратного геокодирования. Это может либо дать вам более чистые данные, либо фактически сделать всю работу за вас.
Например, вот код Stata с
geocode3
SSC, который использует Google. Я думаю, это похоже на Fuzzy Gazetteer . Первый адрес довольно грязный, второй чистый, а третий чужой. Другое программное обеспечение может справиться с этим также.Это работает достаточно хорошо:
У Кремля совсем другой формат.
источник
Это звучит как проблема, которую необходимо решить с помощью двунаправленной классификации LSTM. Вы помечаете каждый символ образца как одну категорию, например
улица: 1 город: 2 провинция: 3 почтовый индекс: 4 страна: 5
Теперь тренируйте свой классификатор на основе этих меток. Boom!
источник