Tengo muchas cadenas de direcciones:
1600 Pennsylvania Ave, Washington, DC 20500 USA
Quiero analizarlos en sus componentes:
street: 1600 Pennsylvania Ave
city: Washington
province: DC
postcode: 20500
country: USA
Pero, por supuesto, los datos están sucios: provienen de muchos países en muchos idiomas, están escritos de diferentes maneras, contienen errores ortográficos, faltan piezas, tiene basura adicional, etc.
En este momento, nuestro enfoque es utilizar reglas combinadas con la coincidencia difusa del diccionario geográfico, pero nos gustaría explorar técnicas de aprendizaje automático. Hemos etiquetado los datos de capacitación para el aprendizaje supervisado. La pregunta es, ¿qué tipo de problema de aprendizaje automático es este? Realmente no parece ser agrupación, clasificación o regresión ...
Lo más cercano que se me ocurre sería clasificar cada ficha, pero entonces realmente desea clasificarlas todas simultáneamente, satisfaciendo restricciones como "debería haber como máximo un país"; y realmente hay muchas maneras de tokenizar una cadena, y desea probar cada una y elegir la mejor ... Sé que existe una cosa llamada análisis estadístico, pero no sé nada al respecto.
Entonces: ¿qué técnicas de aprendizaje automático podría explorar para analizar direcciones?
fuente
Respuestas:
Esto puede verse como un problema de etiquetado de secuencia , en el que tiene una secuencia de tokens y desea dar una clasificación para cada uno. Puede usar modelos ocultos de Markov (HMM) o campos aleatorios condicionales (CRF) para resolver el problema. Hay buenas implementaciones de HMM y CRF en un paquete de código abierto llamado Mallet .
En su ejemplo, debe convertir la entrada al siguiente formato. Además, debe generar funciones adicionales.
fuente
Tuve que resolver un problema muy similar para validar si una dirección es válida o no válida.
Por lo general, la dirección tiene la estructura "1600 Pennsylvania Ave, Washington DC, 20500"
Una cadena como
"Bajé 2000 escalones y llegué a Pennsylvania Ave en Washington DC".
No es una dirección válida.
Esto se puede resolver mediante técnicas de clasificación como SVM, redes neuronales, etc.
La idea es identificar un conjunto clave de características. Algunos de estos podrían ser:
1) ¿El nombre de la calle comienza con un número de bloque válido? La mayoría de los números de bloque de EE. UU. Son números (por ejemplo, 1200) o un número seguido de una sola letra (120A) o un número que sigue a una sola letra (por ejemplo, S200).
2) Si la dirección está bien formateada, los nombres de las calles terminan en sufijos como Ave para avenida, Dr para Drive, Blvd para Boulevard. Es posible obtener la lista de sufijos de calles de los EE. UU. Desde el sitio de USPS.
3) El número de palabras en el campo de la dirección de la calle también puede ser una característica interesante. Si hay demasiadas palabras, probablemente no sea una dirección válida. Por ejemplo, vea el ejemplo anterior.
4) ¿Cuántas palabras aparecen entre el número de bloque y el sufijo de la calle en el campo de dirección?
Estos pueden usarse para entrenar un algoritmo de aprendizaje y el modelo resultante puede usarse para validar si una dirección dada es válida o no.
fuente
Este es un truco que no requiere su propia solución: geocodificación inversa. Esto puede brindarle datos más limpios o realmente hacer todo el trabajo por usted.
Por ejemplo, aquí hay un código Stata con
geocode3
de SSC, que usa Google. Supongo que esto es similar a Fuzzy Gazetteer . La primera dirección es bastante desordenada, la segunda es limpia y la tercera es extranjera. Otro software puede manejar esto también.Esto funciona razonablemente bien:
El Kremlin tiene un formato bastante diferente.
fuente
Esto suena como un problema a resolver con la clasificación bidireccional LSTM. Etiqueta cada carácter de la muestra como una categoría, por ejemplo
calle: 1 ciudad: 2 provincia: 3 código postal: 4 país: 5
Ahora, entrene su clasificador basado en estas etiquetas. ¡Auge!
fuente