Saya memiliki banyak string alamat:
1600 Pennsylvania Ave, Washington, DC 20500 USA
Saya ingin mengurai mereka menjadi komponen-komponen mereka:
street: 1600 Pennsylvania Ave
city: Washington
province: DC
postcode: 20500
country: USA
Tetapi tentu saja datanya kotor: itu berasal dari banyak negara dalam banyak bahasa, ditulis dengan cara yang berbeda, mengandung kesalahan ejaan, ada bagian yang hilang, memiliki sampah tambahan, dll.
Saat ini pendekatan kami adalah menggunakan aturan yang dikombinasikan dengan fuzzy gazetteer matching, tetapi kami ingin menjelajahi teknik pembelajaran mesin. Kami telah memberi label data pelatihan untuk pembelajaran yang diawasi. Pertanyaannya adalah, seperti apa masalah pembelajaran mesin ini? Tampaknya tidak benar-benar pengelompokan, atau klasifikasi, atau regresi ....
Yang paling dekat yang bisa saya pikirkan adalah mengklasifikasikan setiap token, tetapi kemudian Anda benar-benar ingin mengklasifikasikan semuanya secara bersamaan, memuaskan kendala seperti "paling banyak harus ada satu negara;" dan benar-benar ada banyak cara untuk tokenize string, dan Anda ingin mencoba masing-masing dan memilih yang terbaik .... Saya tahu ada sesuatu yang disebut penguraian statistik, tetapi tidak tahu apa-apa tentang itu.
Jadi: teknik pembelajaran mesin apa yang bisa saya eksplorasi untuk mengurai alamat?
sumber
Jawaban:
Ini dapat dilihat sebagai masalah pelabelan urutan , di mana Anda memiliki urutan token dan ingin memberikan klasifikasi untuk masing-masingnya. Anda dapat menggunakan model Markov tersembunyi (HMM) atau bidang acak bersyarat (CRF) untuk menyelesaikan masalah. Ada implementasi HMM dan CRF yang baik dalam paket sumber terbuka yang disebut Mallet .
Dalam contoh Anda, Anda harus mengonversi input ke format di bawah ini. Selain itu, Anda harus menghasilkan fitur tambahan.
sumber
Saya harus memecahkan masalah yang sangat mirip untuk memvalidasi apakah suatu alamat valid atau tidak.
Biasanya alamat memiliki struktur "1600 Pennsylvania Ave, Washington DC, 20500"
Sebuah string seperti
"Aku turun 2000 langkah dan mencapai Pennsylvania Ave di Washington DC."
bukan alamat yang valid.
Ini dapat diselesaikan dengan teknik klasifikasi seperti SVM, Neural Networks dll.
Idenya adalah untuk mengidentifikasi serangkaian fitur utama. Beberapa di antaranya adalah:
1) Apakah nama jalan dimulai dengan nomor blok yang valid. Sebagian besar nomor blok AS adalah angka (mis. 1200) atau angka yang diikuti oleh satu huruf (120A) atau angka yang mengikuti satu huruf (misalnya S200).
2) Jika alamat diformat dengan baik, nama jalan berakhiran sufiks seperti Ave untuk jalan, Dr untuk Drive, Blvd untuk Boulevard. Dimungkinkan untuk mendapatkan daftar sufiks jalanan AS dari situs USPS.
3) Jumlah kata di bidang alamat jalan juga bisa menjadi fitur yang menarik. Jika ada terlalu banyak kata, mungkin itu bukan alamat yang valid. Misalnya lihat contoh di atas.
4) Berapa banyak kata yang muncul antara nomor blok dan akhiran jalan di bidang alamat?
Ini dapat digunakan untuk melatih algoritma pembelajaran dan model yang dihasilkan dapat digunakan untuk memvalidasi apakah alamat yang diberikan valid atau tidak.
sumber
Ini sedikit peretasan yang tidak memerlukan solusi Anda sendiri: membalikkan geocoding. Ini bisa memberi Anda data yang lebih bersih atau benar-benar melakukan semua pekerjaan untuk Anda.
Misalnya, inilah beberapa kode Stata dengan
geocode3
dari SSC, yang menggunakan Google. Saya kira ini mirip dengan Fuzzy Gazetteer . Alamat pertama cukup berantakan, yang kedua bersih, dan yang ketiga adalah asing. Perangkat lunak lain dapat menangani ini juga.Ini bekerja dengan cukup baik:
Kremlin memang memiliki format yang sangat berbeda.
sumber
Ini terdengar seperti masalah yang harus dipecahkan dengan klasifikasi LSTM dua arah. Anda menandai setiap karakter sampel sebagai satu kategori misalnya
jalan: 1 kota: 2 provinsi: 3 kode pos: 4 negara: 5
Sekarang, latih classifier Anda berdasarkan label ini. Ledakan!
sumber