Техника машинного обучения для разбора строк?

30

У меня много адресных строк:

1600 Pennsylvania Ave, Washington, DC 20500 USA

Я хочу разобрать их на составляющие:

street: 1600 Pennsylvania Ave
city: Washington
province: DC
postcode: 20500
country: USA

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

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

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

Итак: какие методы машинного обучения я мог бы изучить для анализа адресов?

Джей Хакер
источник
Я не эксперт по вашей проблеме высокого уровня в том, что касается публикации ответа, но я думаю, что первым шагом к машинному обучению является создание информативных функций, а затем выбор метода, который является правильным с учетом их структуры. У вас много структуры; alnum против не-alnum символов, числовые против альфа-токенов, количество токенов между ',' split, числовые длины токенов. например, разделить на ',' и подсчитать, сколько токенов в каждом разделении (адрес улицы, город / штат или географическая информация); calc strlen из числовых токенов (почтовый адрес и почтовый индекс). Это дает вам возможности, на которых вы можете кластеризоваться.
Муратоа
Посмотрите на фрагмент текста .
альт
2
Также посмотрите на распознавание именованных сущностей и более общую задачу извлечения информации
Yuval F
@YuvalF Я предлагаю сделать это ответ. Не могли бы вы немного рассказать, возможно, в качестве примера, где использовался метод ML?
Штеффен
Меня также очень интересует эта конкретная проблема - структурирование почтовых адресов в составные части. Мы пытаемся сделать это на мобильном устройстве без предположений о подключении к службе обратного геокодирования, такой как Google. Можно предположить, что у нас есть встроенный источник связанных данных, касающихся города, штата, страны и почтового индекса. Любая помощь - либо указатели - либо желание сотрудничать с сумасшедшей командой стартапов по этой проблеме от всей души и открыто приветствуется.

Ответы:

10

Это можно рассматривать как проблему маркировки последовательности , в которой у вас есть последовательность токенов и вы хотите дать классификацию для каждого из них. Вы можете использовать скрытые модели Маркова (HMM) или условные случайные поля (CRF) для решения проблемы. Есть хорошие реализации HMM и CRF в пакете с открытым исходным кодом Mallet .

В вашем примере вы должны преобразовать ввод в формат ниже. Кроме того, вы должны генерировать дополнительные функции.

1600 STREET
Pennsylvania STREET
Ave STREET
, OUT
Washington CITY
, OUT
DC PROVINCE
20500 POSTCODE
USA COUNTRY
Уильям Фернандес
источник
1
Я не думаю, что стандартный меток последовательности (например, HMM CRF) даст очень хорошие результаты в этой ситуации. Это связано с тем, что группы тегов являются смежными и что каждый тег встречается только один раз для каждой последовательности. Я не думаю, что вы можете легко изменить поиск, чтобы включить эту информацию либо из-за зависимости от прошлых / будущих тегов произвольного расстояния (хотя я могу ошибаться в этом).
альт
@alto Я считаю, что CRF учитывает соседний контекст. HMM не может видеть прошлое, вы правы, что это, вероятно, не очень хорошо работает.
JT
1

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

Обычно адреса имеют структуру "1600 Pennsylvania Ave, Washington DC, 20500"

Строка, такая как

«Я прошел 2000 ступеней и достиг Пенсильвании в Вашингтоне».

не является действительным адресом.

Это можно решить с помощью методов классификации, таких как SVM, нейронные сети и т. Д.

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

1) Название улицы начинается с правильного номера блока. Большинство номеров блоков США представляют собой либо числа (например, 1200), либо число, за которым следует одна буква (120A), либо число, следующее за одной буквой (например, S200).

2) Если адрес правильно отформатирован, названия улиц заканчиваются суффиксами, такими как Ave для проспекта, Dr для Drive, бульвар для бульвара. Получить список суффиксов улиц США можно с сайта USPS.

3) Количество слов в поле адреса улицы также может быть интересной особенностью. Если слов слишком много, возможно, это неправильный адрес. Например, см. Пример выше.

4) Сколько слов встречается между номером блока и суффиксом улицы в поле адреса?

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


источник
1

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

Например, вот код Stata с geocode3SSC, который использует Google. Я думаю, это похоже на Fuzzy Gazetteer . Первый адрес довольно грязный, второй чистый, а третий чужой. Другое программное обеспечение может справиться с этим также.

clear
set obs 3
gen address =""
replace address = "Big Foot Museum in Felton CA" in 1
replace address = "1600 Pennsylvania Ave, Washington, DC 20500 USA" in 2 
replace address = "ул. Ильинка, д. 23 103132, Москва, Россия" in 3
geocode3, address(address)
gen coord = string(g_lat) + "," + string(g_lon)
geocode3, reverse coord(coord)

Это работает достаточно хорошо:

. list r_addr , clean noobs

                                                                             r_addr  
                                      121 San Lorenzo Avenue, Felton, CA 95018, USA  
    1600 Pennsylvania Avenue Northwest, President's Park, Washington, DC 20500, USA  
                                         ulitsa Ilyinka, 23, Moscow, Russia, 101000  

У Кремля совсем другой формат.

Димитрий Васильевич Мастеров
источник
0

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

улица: 1 город: 2 провинция: 3 почтовый индекс: 4 страна: 5

1600 Pennsylvania Ave, Washington, DC 20500 USA
111111111111111111111, 2222222222, 33 44444 555

Теперь тренируйте свой классификатор на основе этих меток. Boom!

Fardin
источник