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


30

У мене дуже багато адресних рядків:

1600 Pennsylvania Ave, Washington, DC 20500 USA

Я хочу їх розібрати на компоненти:

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

Але, звичайно, дані брудні: вони надходять з багатьох країн багатьма мовами, написані різними способами, містять неправильні написання, відсутні шматки, має зайві сміття тощо.

Зараз наш підхід полягає у використанні правил у поєднанні з нечітким узгодженням газет, але ми хотіли б вивчити методи машинного навчання. Ми позначили дані про навчання для контрольованого навчання. Питання в тому, яка це проблема машинного навчання? Це насправді не здається кластеризацією, класифікацією чи регресією ....

Найближчим, що я можу придумати, було б класифікувати кожен маркер, але тоді ви дійсно хочете класифікувати їх одночасно, задовольняючи обмеження на кшталт "має бути як мінімум одна країна;" і дійсно є багато способів токенізації рядка, і ви хочете спробувати кожен і вибрати найкраще .... Я знаю, що існує річ, яка називається статистичний аналіз, але нічого про це не знаю.

Отже: які методи машинного навчання я міг би вивчити для розбору адрес?


Я не є експертом з вашої проблеми високого рівня щодо розміщення відповіді, але я думаю, що перший крок до машинного навчання - це побудова інформативних особливостей, а потім вибір методу, який є правильним з огляду на їх структуру. У вас багато структури; alnum vs non-alnum знаків, числових по відношенню до альфа-лексем, лексеми підраховуються між ',' розбиттями, числовою довжиною лексеми. наприклад, розділити на "," і порахувати, скільки маркерів у кожному розділі (адреса вулиці проти міста / штату та конкретної географічної інформації); calc strlen числових жетонів (адреса вулиці та поштовий індекс). Вони надають функції, на яких можна кластеризувати.
muratoa

Погляньте на фрагменти тексту .
альт

2
Подивіться також на розпізнавання названої сутності та більш загальне завдання вилучення інформації
Yuval F

@YuvalF Я пропоную зробити це відповіддю. Чи можете ви трохи розробити, можливо, приклад паперу, де використовується метод ML?
steffen

Мене дуже цікавить і ця конкретна проблема - яка структурує поштові адреси в її складові частини. Ми намагаємося зробити це на мобільному пристрої без припущень щодо підключення до зворотного сервісу геокодування, такого як googles. Добре вважати, що у нас є вбудоване джерело пов'язаних даних, що стосуються міста, штату, країни та поштового індексу. Будь-яка допомога - чи то покажчики - чи бажаючи співпрацювати з шаленою командою стартапів щодо цієї проблеми, щиро і відкрито вітається.

Відповіді:


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 Пенсильванія Авеню, Вашингтон, 20500"

Рядок типу

"Я спустився на 2000 кроків і досяг проспекту Пенсільванії у Вашингтоні."

не є дійсною адресою.

Це можна вирішити класифікаційними методами, такими як SVM, Neural Networks тощо.

Ідея полягає у визначенні ключового набору ознак. Деякі з них можуть бути:

1) Чи починається назва вулиці з дійсного номера блоку. Більшість американських номерів блоків - це або цифри (наприклад, 1200), або число, за яким слідує одна літера (120А), або число, що слідує за однією літерою (наприклад, S200).

2) Якщо адреса добре відформатована, назви вулиць закінчуються суфіксами, як Ave for avenue, Dr for Drive, Blvd for Boulevard. Можна отримати список вуличних суфіксів США з сайту 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

Тепер тренуйте свій класифікатор на основі цих міток. Бум!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.