El Lenguaje de las Ubicaciones Evaluando la Proficiencia de la IA Generativa en la Geocodificación
Evaluación de la IA Generativa en Geocodificación
Un proyecto aplicado que detalla el rendimiento de LLMs para la geocodificación, en comparación con las API modernas de geocodificación
La comodidad moderna de escribir una ubicación en la barra de búsqueda de tu teléfono y verla aparecer automáticamente en un mapa es algo que a menudo se da por sentado. Pero ¿alguna vez te has preguntado cómo funciona realmente esta interacción y traducción fluida entre texto y mapas? La respuesta a esta pregunta es la geocodificación.
Esri, líder global en software geoespacial, define la geocodificación como “el proceso de transformar una descripción de una ubicación, como un par de coordenadas, una dirección o el nombre de un lugar, en una ubicación en la superficie de la Tierra”. La geocodificación es lo que permite las funcionalidades avanzadas que se encuentran en aplicaciones de navegación, servicios de mapas y plataformas de ciencia de la información geográfica (GIScience). Varios proveedores como Esri, Google, Mapbox y otros ofrecen API de geocodificación que pueden tomar descripciones de ubicación y devolver valores de latitud y longitud, o coordenadas, para las descripciones dadas, lo que nos permite pensar de manera espacial sobre los datos.
Con el surgimiento de la IA generativa y los Modelos de Lenguaje Grande (LLMs) como GPT de OpenAI, Bard de Google o LLaMA de Meta, surgen excelentes oportunidades para aprovechar estas tecnologías en aplicaciones geoespaciales. Los usos son diversos, desde generación de código con Copilot de GitHub hasta segmentación de imágenes con el Modelo de Segmentación de Cualquier Cosa (SAM) de Meta, o incluso potencialmente para geocodificación.
En este artículo, se examinará la idoneidad de utilizar IA generativa “listas para usar” para la geocodificación de descripciones de ubicación no estructuradas. Esta evaluación se realizará en un pequeño conjunto de datos de accidentes de vehículos en Minnesota. A través de este análisis, se buscará la efectividad de los LLM estándar en tareas de geocodificación y la exploración de uno de los posibles casos de uso geoespaciales de la IA generativa, en comparación con los enfoques convencionales predominantes.
Comprendiendo la Geocodificación y su Integración con la IALos geocodificadores modernos constan de dos componentes esenciales: un conjunto de datos de referencia y un algoritmo de geocodificación. Los datos de referencia a menudo contienen descripciones explícitas y relativas de lugares vinculadas a una ubicación geográfica, lo que significa que no solo las descripciones explícitas como las direcciones están vinculadas a una ubicación, sino que también las descripciones menos estructuradas de lugares están vinculadas a ubicaciones. Luego, se puede utilizar un algoritmo de coincidencia para encontrar coincidencias adecuadas entre una descripción de entrada y las descripciones que se encuentran en el conjunto de datos de referencia. Un ejemplo simple de un algoritmo de coincidencia podría ser el uso de un algoritmo de interpolación para ubicar la posición de una dirección de calle estimando la posición entre dos direcciones conocidas.
- Aquí están los primeros oradores para la Cumbre de Negocios AiX de ...
- Optimización Bayesiana e Hyperband (BOHB) Ajuste de Hiperparámetros...
- Descodificando el algoritmo de búsqueda binaria con ejemplos
El concepto de geocodificación predictiva, que emplea IA y aprendizaje automático para mejorar el proceso de geocodificación, tiene una larga historia. Se han propuesto y utilizado técnicas que incluyen el procesamiento de lenguaje natural (NLP) y el aprendizaje profundo, con resultados diversos. El uso de IA y ML en geocodificación no es un desarrollo reciente. Sin embargo, la aparición de la IA generativa se presenta como una nueva frontera para la geocodificación, al igual que lo ha hecho en numerosos otros ámbitos.
Navegando Desafíos y Explorando Oportunidades FuturasComo sabrás, los LLM se entrenan utilizando una gran cantidad de datos textuales extraídos de Internet, libros, artículos de revistas y diversas fuentes. Esto a menudo, si no siempre, carece de información geoespacial integral. Esta falta de datos de entrenamiento geoespaciales en los LLM tiene implicaciones en el potencial y la aplicabilidad para comprender y resolver desafíos geoespaciales. Sin conocimientos fundamentales específicos del dominio, ¿cómo podemos esperar que un modelo funcione bien en un problema complejo?
La respuesta es que simplemente no podemos.
En este análisis, evaluo la idoneidad de los LLM como referencia independiente y dentro del contexto de flujos de trabajo que utilizan métodos tradicionales de GIScience. Los resultados subrayan un punto familiar: si bien la nueva tecnología puede ser impresionante, no siempre conduce a un rendimiento mejorado al abordar desafíos complejos.
Caso de Estudio: Descripciones de Ubicación No Estructuradas de Accidentes de Automóviles
Recopilación y Preparación de DatosPara probar y cuantificar las capacidades de geocodificación de los LLM, se seleccionó al azar una lista de 100 descripciones de ubicación no estructuradas de accidentes de vehículos en Minnesota a partir de un conjunto de datos extraídos de la web. Las coordenadas de referencia para los 100 accidentes fueron creadas manualmente utilizando diversas aplicaciones de mapeo como Google Maps y la Aplicación de Mapeo de Tráfico del Departamento de Transporte de Minnesota (TMA).
Se muestran a continuación algunas descripciones de ubicación de muestra.
US Hwy 71 en MN Hwy 60, WINDOM, Condado de Cottonwood
EB Highway 10 cerca de Joplin St NW, ELK RIVER, Condado de Sherburne
EB I 90 / HWY 22, FOSTER TWP, Condado de Faribault
Hitos de la autopista 75 403, SAINT VINCENT TWP, Condado de Kittson
65 Highway / King Road, BRUNSWICK TWP, Condado de Kanabec
Como se puede ver en los ejemplos anteriores, hay una amplia variedad de posibilidades en cuanto a cómo se puede estructurar la descripción, así como lo que define la ubicación. Un ejemplo de esto es la cuarta descripción, que incluye un número de hito, que es mucho menos probable que se encuentre en cualquier proceso de geocodificación, ya que esa información generalmente no se incluye en ningún tipo de datos de referencia. Encontrar las coordenadas reales para descripciones como esta dependió en gran medida del uso del Sistema de Referencia Lineal (LRS) del Departamento de Transporte de Minnesota, que proporciona un enfoque estandarizado de cómo se miden las carreteras en todo el estado, en el cual los hitos juegan un papel vital. Estos datos se pueden acceder a través de la aplicación TMA mencionada previamente.
Metodología y estrategias de geocodificaciónDespués de preparar los datos, se configuraron cinco cuadernos separados para probar diferentes procesos de geocodificación. Sus configuraciones son las siguientes.
1. API de geocodificación de Google, utilizada en la descripción de ubicación en bruto2. API de geocodificación de Esri, utilizada en la descripción de ubicación en bruto3. API de geocodificación de Google, utilizada en una descripción de ubicación estandarizada con OpenAI GPT 3.54. API de geocodificación de Esri, utilizada en una descripción de ubicación estandarizada con OpenAI GPT 3.55. OpenAI GPT 3.5, utilizado como un geocodificador en sí mismo
En resumen, las APIs de geocodificación de Google y Esri se utilizaron tanto en las descripciones en bruto como en las descripciones que se estandarizaron utilizando una breve indicación que se introdujo en el modelo OpenAI GPT 3.5. El código Python para este proceso de estandarización se puede ver a continuación.
def standardize_location(df, description_series): df["ai_location_description"] = df[description_series].apply(_gpt_chat) return df def _gpt_chat(input_text): prompt = """Estandarice la siguiente descripción de ubicación en texto que podría ser alimentado en una API de geocodificación. Cuando responda, solo devuelva el texto de salida.""" response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": prompt}, {"role": "user", "content": input_text}, ], temperature=0.7, n=1, max_tokens=150, stop=None, ) return response.choices[0].message.content.strip().split("\n")[-1]
Los cuatro casos de prueba que utilizan las APIs de geocodificación utilizaron el siguiente código para realizar solicitudes a sus respectivos geocodificadores y devolver las coordenadas resultantes para las 100 descripciones.
# Geocodificador Esridef geocode_esri(df, description_series): df["xy"] = df[description_series].apply( _single_esri_geocode ) df["x"] = df["xy"].apply( lambda row: row.split(",")[0].strip() ) df["y"] = df["xy"].apply( lambda row: row.split(",")[1].strip() ) df["x"] = pd.to_numeric(df["x"], errors="coerce") df["y"] = pd.to_numeric(df["y"], errors="coerce") df = df[df["x"].notna()] df = df[df["y"].notna()] return df def _single_esri_geocode(input_text): base_url = "https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer/findAddressCandidates" params = { "f": "json", "singleLine": input_text, "maxLocations": "1", "token": os.environ["GEOCODE_TOKEN"], } response = requests.get(base_url, params=params) data = response.json() try: x = data["candidates"][0]["location"]["x"] y = data["candidates"][0]["location"]["y"] except: x = None y = None return f"{x}, {y}"
# Geocodificador de Googledef geocode_google(df, description_series): df["xy"] = df[description_series].apply( _single_google_geocode ) df["x"] = df["xy"].apply( lambda row: row.split(",")[0].strip() ) df["y"] = df["xy"].apply( lambda row: row.split(",")[1].strip() ) df["x"] = pd.to_numeric(df["x"], errors="coerce") df["y"] = pd.to_numeric(df["y"], errors="coerce") df = df[df["x"].notna()] df = df[df["y"].notna()] return df def _single_google_geocode(input_text): base_url = "https://maps.googleapis.com/maps/api/geocode/json" params = { "address": input_text, "key": os.environ["GOOGLE_MAPS_KEY"], "bounds": "43.00,-97.50 49.5,-89.00", } response = requests.get(base_url, params=params) data = response.json() try: x = data["results"][0]["geometry"]["location"]["lng"] y = data["results"][0]["geometry"]["location"]["lat"] except: x = None y = None return f"{x}, {y}"
Además, se probó un último proceso utilizando GPT 3.5 como el propio geocodificador, sin la ayuda de ninguna API de geocodificación. El código para este proceso se veía casi idéntico al código de estandarización utilizado anteriormente, pero presentaba una indicación diferente, que se muestra a continuación.
Geocode la siguiente dirección. Devuelva una latitud (Y) y una longitud (X) lo más precisas posible. Al responder, solo devuelva el texto de salida en el siguiente formato: X, Y
Métricas de rendimiento e informaciónDespués de desarrollar los diversos procesos, se ejecutó cada proceso y se calcularon varias métricas de rendimiento, tanto en términos de tiempo de ejecución como de precisión de geocodificación. Estas métricas se enumeran a continuación.
| Proceso de Geocodificación | Media | DesvEst | MAE | RMSE | | ---------------------------- | ------- | ------- | ------- | ------- | | Google con GPT 3.5 | 0.1012 | 1.8537 | 0.3698 | 1.8565 | | Google con Raw | 0.1047 | 1.1383 | 0.2643 | 1.1431 | | Esri con GPT 3.5 | 0.0116 | 0.5748 | 0.0736 | 0.5749 | | Esri con Raw | 0.0001 | 0.0396 | 0.0174 | 0.0396 | | Geocodificación con GPT 3.5 | 2.1261 | 80.022 | 45.416 | 80.050 |
| Proceso de Geocodificación | 75% ET | 90% ET | 95% ET | Tiempo de ejecución | | ---------------------------- | ------- | ------- | ------- | ------------------ | | Google con GPT 3.5 | 0.0683 | 0.3593 | 3.3496 | 1m 59.9s | | Google con Raw | 0.0849 | 0.4171 | 3.3496 | 0m 23.2s | | Esri con GPT 3.5 | 0.0364 | 0.0641 | 0.1171 | 2m 22.7s | | Esri con Raw | 0.0362 | 0.0586 | 0.1171 | 0m 51.0s | | Geocodificación con GPT 3.5 | 195.54 | 197.86 | 199.13 | 1m 11.9s |
Las métricas se explican con más detalle aquí. La Media representa el error promedio (en términos de distancia Manhattan, es decir, la diferencia total de X e Y respecto a la verdad absoluta, en grados decimales). DesvEst representa la desviación estándar del error (en términos de distancia Manhattan, en grados decimales). MAE representa el error absoluto medio (en términos de distancia Manhattan, en grados decimales). RMSE representa el error cuadrático medio (en términos de distancia Manhattan, en grados decimales). 75%, 90%, 95% ET representa el umbral de error para ese porcentaje dado (en términos de distancia euclidiana, en grados decimales), lo que significa que para un porcentaje dado, ese porcentaje de registros cae dentro de la distancia resultante respecto a la verdad absoluta. Por último, el tiempo de ejecución simplemente representa el tiempo total utilizado para ejecutar el proceso de geocodificación en 100 registros.
Claramente, GPT 3.5 tiene un rendimiento mucho peor por sí solo. Aunque, si eliminamos un par de valores atípicos (que el modelo etiquetó como ubicados en otros continentes), en su mayoría los resultados de ese proceso no parecen estar demasiado fuera de lugar, al menos visualmente.
También es interesante ver que el proceso de estandarización de LLM en realidad disminuyó la precisión, lo cual personalmente me sorprendió un poco, ya que mi intención al introducir ese componente era esperanzadamente mejorar ligeramente la precisión general del proceso de geocodificación. Vale la pena señalar que las indicaciones en sí mismas podrían haber sido parte del problema aquí, y es válido explorar más a fondo el papel de la “ingeniería de indicaciones” en contextos geoespaciales.
La última conclusión principal de este análisis son las diferencias en el tiempo de ejecución, donde cualquier proceso que incluya el uso de GPT 3.5 se ejecuta significativamente más lento. La API de geocodificación de Esri también es más lenta que la de Google en esta configuración. Sin embargo, no se realizaron pruebas rigurosas, por lo que estos resultados deben tenerse en cuenta en consideración.
Reflexiones finalesAunque las capacidades de geocodificación “listas para usar” del modelo GPT 3.5 de OpenAI quizás no se equiparen a la sofisticación de los geocodificadores modernos, las pruebas destacan una perspectiva potencialmente prometedora. Los resultados resaltan un amplio margen de mejora, lo que sugiere que en un futuro previsible, las capacidades geoespaciales de los Modelos de Lenguaje Amplio (LLMs) tienen muchas oportunidades para mejorar y eventualmente tener un impacto en la geocodificación tal como la conocemos.
Existen muchos casos de uso específicos donde los LLM podrían ser suficientes para la geocodificación, tal como se presenta. Sin embargo, como muestra este ejemplo, existe una discrepancia entre las capacidades de los LLM y las exigencias de las tareas de geocodificación que requieren un alto nivel de precisión a una resolución espacial fina. Por lo tanto, aunque los LLM tienen potencial, este ejemplo demuestra la importancia de la precisión y la exactitud para ciertas aplicaciones.
En general, la IA generativa se presenta como una innovación emocionante con implicaciones y oportunidades amplias y de gran alcance en el ámbito de la geografía y los SIG, incluido el uso de la geocodificación. Los avances continuos se realizan a un ritmo impresionante, lo que permite seguir progresando en el desarrollo de integraciones entre la IA generativa y la geoespacialización cada día.
Referencias:[1] Colaboradores de Wikipedia, Geocodificación de direcciones (2023), Wikipedia[2] A. Hassan, El futuro de la IA geoespacial (2023), Ciencia de Datos Espaciales[3] L. Mearian, ¿Qué son los LLM y cómo se usan en la IA generativa? (2023), ComputerWorld
Agradecimientos: Me gustaría expresar mi agradecimiento al Dr. Bryan Runck por su invalorable apoyo, orientación y experiencia al contribuir en la edición y revisión de este artículo.