Techniki uczenia maszynowego do analizowania ciągów?

30

Mam wiele ciągów adresów:

1600 Pennsylvania Ave, Washington, DC 20500 USA

Chcę parsować je na ich komponenty:

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

Ale oczywiście dane są brudne: pochodzą z wielu krajów w wielu językach, napisane na różne sposoby, zawierają błędy ortograficzne, brakuje fragmentów, mają dodatkowe śmieci itp.

Obecnie naszym podejściem jest stosowanie reguł w połączeniu z dopasowywaniem rozmytych gazeterów, ale chcielibyśmy poznać techniki uczenia maszynowego. Oznaczyliśmy dane szkoleniowe do nadzorowanego uczenia się. Pytanie brzmi: jaki to problem uczenia maszynowego? Tak naprawdę nie wydaje się być skupieniem, klasyfikacją ani regresją ...

Najbliższe, co mogę wymyślić, to sklasyfikowanie każdego tokena, ale wtedy naprawdę chcesz sklasyfikować je wszystkie jednocześnie, spełniając ograniczenia, takie jak „powinien istnieć co najwyżej jeden kraj;” i tak naprawdę istnieje wiele sposobów na tokenizację łańcucha, a ty chcesz wypróbować każdy z nich i wybrać najlepszy ... Wiem, że istnieje coś takiego jak analizowanie statystyczne, ale nic o tym nie wiem.

Więc: jakie techniki uczenia maszynowego mogę badać w celu analizowania adresów?

Jay Hacker
źródło
Nie jestem ekspertem od twojego problemu na wysokim poziomie, jeśli chodzi o udzielenie odpowiedzi, ale myślę, że pierwszym krokiem do uczenia maszynowego jest budowanie funkcji informacyjnych, a następnie wybór odpowiedniej metody, biorąc pod uwagę ich strukturę. Masz dużo struktury; znaki alnum a nie-alnum, tokeny numeryczne vs alfa, liczba tokenów pomiędzy „,” podziałami, długości tokenów numerycznych. np. podziel na „,” i policz, ile tokenów w każdym podziale (adres ulicy vs miasto / stan vs. informacje geograficzne); oblicz strlen z tokenów numerycznych (adres i kod pocztowy). Dają one funkcje, na których można klastrować.
muratoa
Zobacz dzielenie tekstu .
alt
2
Zobacz także rozpoznawanie nazwanych jednostek i bardziej ogólne zadanie wydobywania informacji
Yuval F
@YuvalF Sugeruję, aby uczynić to odpowiedzią. Czy możesz trochę rozwinąć, może przykładowy papier, w którym zastosowano metodę ML?
steffen
Bardzo interesuje mnie również ten konkretny problem - który polega na ułożeniu adresów mailowych w części składowe. Próbujemy to zrobić na urządzeniu mobilnym bez domniemania łączności z usługą odwrotnego geokodowania, taką jak Google. Można założyć, że mamy na pokładzie źródło powiązanych danych dotyczących miasta, stanu, kraju i kodu pocztowego. Jakakolwiek pomoc - zarówno wskazówki - jak i chęć nawiązania kontaktu z szalonym zespołem startupowym w tym problemie jest serdecznie i otwarcie mile widziana.

Odpowiedzi:

10

Może to być postrzegane jako problem z etykietowaniem sekwencji , w którym masz sekwencję tokenów i chcesz podać klasyfikację dla każdego z nich. Możesz użyć ukrytych modeli Markowa (HMM) lub warunkowych pól losowych (CRF), aby rozwiązać problem. Istnieją dobre implementacje HMM i CRF w pakiecie open source o nazwie Mallet .

W swoim przykładzie powinieneś przekonwertować dane wejściowe na poniższy format. Ponadto należy wygenerować dodatkowe funkcje.

1600 STREET
Pennsylvania STREET
Ave STREET
, OUT
Washington CITY
, OUT
DC PROVINCE
20500 POSTCODE
USA COUNTRY
William Fernandes
źródło
1
Nie sądzę, aby standardowy tagger sekwencji (taki jak HMM CRF) przyniósł w tej sytuacji bardzo dobre wyniki. Wynika to z ograniczeń, że grupy znaczników są ciągłe i że każdy znacznik występuje tylko raz na sekwencję. Nie sądzę, że można łatwo zmodyfikować wyszukiwanie, aby uwzględnić te informacje, albo ze względu na zależność od przeszłych / przyszłych znaczników o dowolnej odległości (ale mogę się mylić).
alt
@alto Uważam, że CRF bierze pod uwagę kontekst sąsiedni. HMM nie widzi stanu z przeszłości, masz rację, że prawdopodobnie nie zadziałałoby to zbyt dobrze.
JT
1

Musiałem rozwiązać bardzo podobny problem, aby sprawdzić, czy adres jest prawidłowy czy nieprawidłowy.

Zazwyczaj adres ma strukturę „1600 Pennsylvania Ave, Washington DC, 20500”

Ciąg taki jak

„Zszedłem 2000 kroków i dotarłem do Pennsylvania Ave w Waszyngtonie”.

nie jest prawidłowym adresem.

Można to rozwiązać za pomocą technik klasyfikacji, takich jak SVM, sieci neuronowe itp.

Chodzi o to, aby zidentyfikować kluczowy zestaw funkcji. Niektóre z nich mogą być:

1) Czy nazwa ulicy zaczyna się od prawidłowego numeru bloku? Większość amerykańskich numerów bloków to albo cyfry (np. 1200) albo cyfra, po której następuje pojedyncza litera (120A) lub liczba po jednej literze (np. S200).

2) Jeśli adres jest dobrze sformatowany, nazwy ulic kończą się przyrostkami, takimi jak Ave dla alei, Dr dla Drive, Blvd dla Boulevard. Istnieje możliwość uzyskania listy sufiksów ulic USA ze strony USPS.

3) Ciekawą funkcją może być również liczba słów w polu adresu ulicy. Jeśli jest za dużo słów, prawdopodobnie nie jest to prawidłowy adres. Np. Patrz przykład powyżej.

4) Ile słów występuje między numerem bloku a sufiksem ulicy w polu adresu?

Można ich użyć do wyuczenia algorytmu uczenia się, a model wynikowy można wykorzystać do sprawdzenia, czy dany adres jest prawidłowy, czy nie.


źródło
1

To trochę hack, który nie wymaga własnego rozwiązania: odwrotne geokodowanie. Może to zapewnić czystsze dane lub wykonać całą pracę za Ciebie.

Na przykład, oto kod Stata z geocode3SSC, który używa Google. Myślę, że jest to podobne do Fuzzy Gazetteer . Pierwszy adres jest dość niechlujny, drugi jest czysty, a trzeci jest obcy. Inne oprogramowanie może sobie z tym poradzić.

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)

Działa to dość dobrze:

. 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  

Kreml ma całkiem inny format.

Dimitriy V. Masterov
źródło
0

Brzmi to jak problem do rozwiązania z dwukierunkową klasyfikacją LSTM. Na przykład tagujesz każdy znak próbki jako jedną kategorię

ulica: 1 miasto: 2 prowincja: 3 kod pocztowy: 4 kraj: 5

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

Teraz wytrenuj klasyfikator w oparciu o te etykiety. Bum!

Fardin
źródło