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?
źródło
Odpowiedzi:
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.
źródło
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
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
geocode3
SSC, 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ć.Działa to dość dobrze:
Kreml ma całkiem inny format.
źródło
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
Teraz wytrenuj klasyfikator w oparciu o te etykiety. Bum!
źródło