Dizeleri ayrıştırmak için makine öğrenme teknikleri?


30

Çok fazla adres dizgim var:

1600 Pennsylvania Ave, Washington, DC 20500 USA

Onları bileşenlerine göre ayrıştırmak istiyorum:

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

Ancak elbette veriler kirli: birçok ülkede birçok dilde geliyor, farklı şekillerde yazılmış, yazım hataları var, eksik parçalar var, fazladan önemsiz şeyler var.

Şu anda yaklaşımımız bulanık gazete eşleştirme ile birleştirilmiş kurallar kullanmak, ancak makine öğrenme tekniklerini araştırmak istiyoruz. Denetimli öğrenme için eğitim verilerini etiketledik. Asıl soru, bu nasıl bir makine öğrenmesi problemi? Gerçekten kümelenme, sınıflandırma veya gerileme gibi görünmüyor.

En yakınımda bulabildiğim en yakın şey, her bir simgeyi sınıflandırmak olacaktır, ancak o zaman hepsini aynı anda sınıflandırmak istersiniz; ve gerçekten bir dizgiyi tokenize etmenin birçok yolu var, ve her birini denemek ve en iyisini seçmek istiyorsunuz.

Öyleyse: adresleri ayrıştırmak için hangi makine öğrenme tekniklerini keşfedebilirim?


Bir cevap göndermek için üst düzey probleminizde uzman değilim, ancak makine öğreniminde ilk adımın bilgilendirici özellikler oluşturmak olduğunu ve ardından yapılarına göre verilen yöntemi seçmek olduğunu düşünüyorum. Çok fazla yapınız var; alnum vs alnum olmayan karakter, sayısal vs alfa belirteçleri, ',' bölmelerini sayar, sayısal belirteç uzunluklarını belirtir. örneğin ',' şeklinde bölün ve her bölmede kaç tane jeton bulunduğunu sayın (sokak adresi - şehir / eyalet - coğrafi özel bilgi); sayısal belirteçlerin kalsit strlen (sokak adresi vs posta kodu). Bunlar size kümelendirebileceğiniz özellikler sunar.
muratoa

Metin öbeklerine bir göz atın .
alto


@YuvalF Bunu bir cevap haline getirmeyi öneriyorum. Bir ML metodunun kullanıldığı örnek bir makaleyi biraz detaylandırabilir misiniz?
steffen

Bu özel sorunla da çok ilgileniyorum - bu da bir e-posta adresini bileşen parçalarına göre yapılandırıyor. Bunu, googles gibi ters bir coğrafi kodlama servisine bağlantı konusunda hiçbir varsayım olmadan mobil bir cihazda yapmaya çalışıyoruz. Şehir, eyalet, ülke ve posta koduyla ilgili yerleşik bir veri kaynağımızın olduğunu varsaymak mümkündür. Herhangi bir yardım - ya işaretçiler - ya da bu konuda çılgınca bir başlangıç ​​ekibiyle ilişki kurmaya istekli, içtenlikle ve açıkça kabul edilir.

Yanıtlar:


10

Bu, bir dizi jetona sahip olduğunuz ve her biri için bir sınıflandırma yapmak istediğiniz bir dizi etiketleme sorunu olarak görülebilir . Sorunu çözmek için gizli Markov modellerini (HMM) veya koşullu rasgele alanları (CRF) kullanabilirsiniz. Mallet adlı bir açık kaynak paketinde HMM ve CRF'nin iyi uygulamaları var .

Örnekte, girişi aşağıdaki biçime dönüştürmelisiniz. Ayrıca, ekstra özellikler üretmelisiniz.

1600 STREET
Pennsylvania STREET
Ave STREET
, OUT
Washington CITY
, OUT
DC PROVINCE
20500 POSTCODE
USA COUNTRY

1
Standart bir sekans etiketleyicisinin (örneğin bir CRF HMM'si) bu durumda çok iyi sonuçlar vereceğini sanmıyorum. Bunun nedeni, etiket gruplarının bitişik olması ve her bir etiketin yalnızca sekans başına bir kez gerçekleşmesidir. Aramayı bu bilgiyi içerecek şekilde kolayca değiştirebildiğinizi sanmıyorum (keyfi / uzaktaki geçmiş / gelecekteki etiketlere bağlı olduğu için (bu konuda yanılmış olabilirim).
alto

@alto CRF'nin komşu bağlamı göz önüne aldığına inanıyorum. HMM geçmiş durumu göremiyor, muhtemelen çok iyi sonuç vermeyeceği konusunda haklısın.
JT

1

Bir adresin geçerli veya geçersiz olup olmadığını doğrulamak için benzer bir sorunu çözmek zorunda kaldım.

Adres genellikle "1600 Pennsylvania Ave, Washington DC, 20500" yapısına sahiptir.

Gibi bir dize

“2000 basamaktan düştüm ve Washington DC'de Pennsylvania Ave'ye ulaştım.”

geçerli bir adres değil.

Bu, SVM, Yapay Sinir Ağları vb. Gibi sınıflandırma teknikleriyle çözülebilir.

Fikir, bir anahtar özellikler seti tanımlamaktır. Bunlardan bazıları olabilir:

1) Sokak adı geçerli bir blok numarasıyla mı başlıyor? ABD blok numaralarının çoğu ya sayılardır (örneğin 1200) veya tek bir harfle (120A) izleyen bir sayı veya tek bir harften sonra bir sayıdır (örneğin S200).

2) Adres iyi biçimlendirilmişse, cadde adları cadde için Ave, Drive için Dr, Boulevard için Blvd gibi son eklerle biter. ABD sokak eki listesini USPS sitesinden elde etmek mümkündür.

3) Sokak adresi alanındaki kelimelerin sayısı da ilginç bir özellik olabilir. Çok fazla kelime varsa, muhtemelen geçerli bir adres değil. Örneğin yukarıdaki örneğe bakınız.

4) Adres alanı içinde blok numarası ile sokak eki arasında kaç kelime var?

Bunlar bir öğrenme algoritmasını eğitmek için kullanılabilir ve elde edilen model verilen bir adresin geçerli olup olmadığını doğrulamak için kullanılabilir.


1

Bu, kendi çözümünüzü gerektirmeyen bir keskidir: ters coğrafi kodlama. Bu size ya temiz veriler verebilir ya da aslında tüm işleri sizin için yapabilir.

Örneğin, işte geocode3Google’ı kullanan SSC’den bazı Stata kodları . Sanırım bu Fuzzy Gazetteer'e benziyor . İlk adres oldukça dağınık, ikincisi temiz, üçüncüsü yabancı. Başka bir yazılım da bununla başa çıkabilir.

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)

Bu oldukça iyi çalışıyor:

. 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  

Kremlin'in oldukça farklı bir formatı var.


0

Bu iki yönlü LSTM sınıflandırmasıyla çözülecek bir problem gibi gözüküyor. Örneğin, her bir karakteri bir kategori olarak etiketlersiniz.

cadde: 1 şehir: 2 il: 3 posta kodu: 4 ülke: 5

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

Şimdi, sınıflandırıcınızı bu etiketlere göre eğitin. Boom!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.