Язык местоположений Оценка умения генеративного ИИ в геокодировании

Mестоположения и геокодирование оценка генеративного ИИ

Прикладной проект, подробно описывающий производительность LLM для геокодирования по сравнению с современными геокодировочными API

Фото Sylwia Bartyzel на Unsplash

Современное удобство набора местоположения в строке поиска вашего телефона и его автоматического отображения на карте часто принимается как должное. Но вы когда-нибудь задумывались о том, как на самом деле работает это бесшовное взаимодействие и перевод между текстом и картами? Ответ на этот вопрос – геокодирование.

Esri, глобальный лидер в области геопространственного программного обеспечения, определяет геокодирование как “процесс преобразования описания местоположения – такого как пара координат, адрес или название места – в местоположение на поверхности Земли”. Геокодирование – это то, что обеспечивает расширенные функциональные возможности, которые находятся в навигационных приложениях, картографических сервисах и платформах географической информатики (ГИС).

С появлением генеративного искусственного интеллекта и больших языковых моделей (LLMs) таких как GPT от OpenAI, Bard от Google или LLaMA от Meta, появляются отличные возможности использования этих технологий для геопространственных приложений. Использование этих технологий может варьироваться от генерации кода с помощью Copilot от GitHub до сегментации изображений с помощью Segment Anything Model (SAM) от Meta, или даже потенциально для геокодирования.

В этой статье будет рассмотрена пригодность использования “из коробки” генеративного искусственного интеллекта для геокодирования неструктурированных описаний местоположений. Оценка будет проведена на небольшом наборе данных о дорожно-транспортных происшествиях в Миннесоте. Через этот анализ будет исследована эффективность стандартных LLM в задачах геокодирования и исследован один из потенциальных геопространственных применений генеративного искусственного интеллекта по сравнению с преобладающими традиционными подходами.

Понимание геокодирования и его интеграция с искусственным интеллектомСовременные геокодеры состоят из двух неотъемлемых компонентов: справочного набора данных и алгоритма геокодирования. Справочные данные часто содержат явные и относительные описания мест, прикрепленные к географическому местоположению, что означает, что к местоположению привязаны не только явные описания, такие как адреса, но и более неструктурированные описания мест. Затем может использоваться алгоритм сопоставления для нахождения подходящих соответствий между входным описанием и описаниями, содержащимися в справочном наборе данных. Один простой пример алгоритма сопоставления может быть использование алгоритма интерполяции для определения местоположения улицы по оценке положения между двумя известными адресами.

Концепция предиктивного геокодирования, использующего искусственный интеллект и машинное обучение для улучшения процесса геокодирования, имеет долгую историю. Были предложены и использованы техники, включающие обработку естественного языка (NLP) и глубокое обучение, что привело к различным уровням успеха. Использование искусственного интеллекта и машинного обучения в геокодировании – это не новое развитие. Однако появление генеративного искусственного интеллекта представляет собой новую границу для геокодирования, подобно тому, как это происходит во многих других областях.

Преодоление сложностей и исследование будущих возможностейКак вы знаете, LLM обучаются с использованием огромного объема текстовых данных, полученных из интернета, книг, журнальных статей и различных других источников. Это часто, если не всегда, не содержит полной геопространственной информации. Отсутствие геопространственных данных обучения в LLM оказывает влияние на потенциал и применимость в понимании и решении геопространственных задач. Без основных специализированных знаний в области, как можно ожидать хороших результатов от модели при решении сложной проблемы?

Ответ прост: нельзя.

В этом анализе я оцениваю пригодность LLM в качестве самостоятельного показателя и в контексте рабочих процессов с использованием традиционных методов ГИС. Результаты подчеркивают известный факт – новые технологии могут быть впечатляющими, но это не всегда приводит к улучшению производительности при решении сложных задач.

Кейс-стади: Неструктурированные описания местоположений автомобильных аварий

Сбор и подготовка данныхДля тестирования и количественной оценки возможностей геокодирования LLM был случайным образом выбран список из 100 неструктурированных описаний местоположений автомобильных аварий в Миннесоте из набора данных, полученных из веб-скрапинга. Координаты истинного положения для всех 100 аварий были созданы вручную с использованием различных картографических приложений, таких как Google Maps и приложение Traffic Mapping Application (TMA) Миннесотского департамента транспорта.

Ниже приведены примеры описаний местоположений.

US Hwy 71 at MN Hwy 60, WINDOM, округ Коттонвуд

EB Highway 10 near Joplin St NW, ELK RIVER, округ Шербурн

EB I 90 / HWY 22, FOSTER TWP, округ Фэрбо

Международная трасса 75, пункт 403, округ Сен-Винсент

65 Highway / King Road, округ Брансвик, округ Канабек

Как видно из приведенных выше примеров, существует широкий спектр возможностей для структурирования описания и определения местоположения. Один из примеров – четвертое описание, которое содержит номер мили-маркера, который гораздо меньше вероятности совпадения в процессе геокодирования, поскольку такая информация обычно не включается в какие-либо справочные данные. Поиск истинных координат для подобных описаний в значительной степени основывался на использовании Системы линейного определения местоположения (LRS) Департамента транспорта Миннесоты, которая предоставляет стандартизированный подход к измерению дорог во всем штате, в котором мили-маркеры играют важную роль. Доступ к этим данным можно получить через ранее упомянутое приложение TMA.

Методология и стратегии геокодированияПосле подготовки данных было создано пять отдельных блокнотов для тестирования различных процессов геокодирования. Их конфигурация следующая.

1. Google Geocoding API, используется для обработки необработанных описаний местоположения2. Esri Geocoding API, используется для обработки необработанных описаний местоположения3. Google Geocoding API, используется для обработки стандартизированных описаний местоположения с использованием OpenAI GPT 3.54. Esri Geocoding API, используется для обработки стандартизированных описаний местоположения с использованием OpenAI GPT 3.55. OpenAI GPT 3.5, используется как геокодер сам по себе

В общем, Google и Esri геокодеры использовались как для необработанных описаний, так и для описаний, которые были стандартизированы с использованием краткого промпт-запроса, переданного модели OpenAI GPT 3.5. Код на Python для процесса стандартизации можно увидеть ниже.

def standardize_location(df, description_series):    df["ai_location_description"] = df[description_series].apply(_gpt_chat)        return df    def _gpt_chat(input_text):    prompt = """Приведите следующее описание местоположения в текст,             который можно передать в API геокодирования. Возвращайте только             текстовый вывод."""        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]

Четыре тестовых случая, использующих геокодеры API, использовали следующий код для отправки API-запросов соответствующим геокодерам и получения результирующих координат для всех 100 описаний.

# Esri геокодерdef 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}"

# Google геокодерdef 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}"

Дополнительно, был протестирован еще один процесс использования GPT 3.5 в качестве геокодера самого по себе, без помощи какого-либо геокодирующего API. Код для этого процесса выглядел практически идентично коду стандартизации, использованному выше, но содержал другой призыв, показанный ниже.

Геокодируйте следующий адрес. Верните широту (Y) и долготу (X) максимально точно. При ответе верните только текстовый вывод в следующем формате: X, Y

Метрики производительности и выводыПосле разработки различных процессов каждый процесс был запущен и были рассчитаны несколько метрик производительности как по времени выполнения, так и по точности геокодирования. Эти метрики перечислены ниже.

        |  Процесс геокодирования  |  Среднее  | Станд. откл. |  MAE   |  RMSE  |        | ------------------- | --------- | ------------ | ------ | ------ |        | Google с GPT 3.5     | 0.1012    | 1.8537       | 0.3698 | 1.8565 |        | Google с Raw         | 0.1047    | 1.1383       | 0.2643 | 1.1431 |        | Esri с GPT 3.5       | 0.0116    | 0.5748       | 0.0736 | 0.5749 |        | Esri с Raw           | 0.0001    | 0.0396       | 0.0174 | 0.0396 |        | GPT 3.5 геокодировка | 2.1261    | 80.022       | 45.416 | 80.050 |

       |  Процесс геокодирования  | 75% ET  | 90% ET  | 95% ET  | Время выполнения |       | ------------------- | --------- | --------- | --------- | ---------------- |       | Google с GPT 3.5     | 0.0683    | 0.3593    | 3.3496    | 1м 59.9с        |       | Google с Raw         | 0.0849    | 0.4171    | 3.3496    | 0м 23.2с        |       | Esri с GPT 3.5       | 0.0364    | 0.0641    | 0.1171    | 2м 22.7с        |       | Esri с Raw           | 0.0362    | 0.0586    | 0.1171    | 0м 51.0с        |       | GPT 3.5 геокодировка | 195.54    | 197.86    | 199.13    | 1м 11.9с        |

Метрики подробно объяснены здесь. Среднее представляет собой среднюю ошибку (в терминах манхэттенского расстояния или общей разницы между X и Y от истинного значения в десятичных градусах). Станд. откл. представляет собой стандартное отклонение ошибки (в терминах манхэттенского расстояния в десятичных градусах). MAE представляет собой среднюю абсолютную ошибку (в терминах манхэттенского расстояния в десятичных градусах). RMSE представляет собой квадратный корень из среднеквадратичной ошибки (в терминах манхэттенского расстояния в десятичных градусах). 75%, 90%, 95% ET представляют собой порог ошибки для данного процента (в терминах евклидового расстояния в десятичных градусах), что означает, что для данного процента указанный процент записей попадает в расстояние от истинного значения, соответствующее полученному результату. Наконец, время выполнения просто представляет собой общее время, затраченное на выполнение процесса геокодирования на 100 записях.

Ясно, что GPT 3.5 работает гораздо хуже сам по себе. Однако, если исключить несколько выбросов (которые модель отметила как находящиеся в других континентах), в целом результаты этого процесса выглядят не слишком необычными, по крайней мере, визуально.

Интересно также отметить, что процесс стандартизации LLM на самом деле снизил точность, что я лично нашел немного удивительным, поскольку моя цель при введении этого компонента была надеяться на небольшое улучшение общей точности процесса геокодирования. Стоит отметить, что сами призывы могли быть частью проблемы здесь, и стоит дополнительно исследовать роль “промпт-инжиниринга” в геопространственных контекстах.

Последний основной вывод из этого анализа – разница во времени выполнения, с которой любой процесс, включающий использование GPT 3.5, выполняется значительно медленнее. Геокодирующий API Esri также медленнее, чем Google, в этой настройке. Однако не было проведено строгого тестирования, поэтому эти результаты следует учитывать.

Заключительные мыслиХотя “из коробки” геокодирующие возможности модели GPT 3.5 от OpenAI могут не соответствовать уровню современных геокодеров, тестирование подчеркивает потенциально многообещающий прогноз. Результаты подчеркивают существенные возможности для улучшения, что указывает на то, что в ближайшем будущем геопространственные возможности моделей больших языковых моделей (LLMs) имеют много возможностей для улучшения и в конечном итоге могут повлиять на геокодирование, каким мы его знаем.

Существует множество конкретных случаев использования, где LLM-модели могут быть достаточными для геокодирования. Однако, как показывает данный пример, есть несоответствие между возможностями LLM-моделей и требованиями геокодирования, требующего высокой точности при мелком пространственном разрешении. Поэтому, хотя LLM-модели имеют потенциал, данный пример демонстрирует важность точности и достоверности для определенных приложений.

В целом, генеративное искусственное интеллект представляет собой захватывающую инновацию с широкими и далеко идущими последствиями и возможностями в области географии и ГИС, включая использование геокодирования. Непрерывные усовершенствования продолжают происходить с ошеломляющей скоростью, что позволяет продолжать продвигаться в разработке интеграций между генеративным искусственным интеллектом и геопространственными данными каждый день.

Ссылки:[1] Участники Википедии, Геокодирование адресов (2023), Википедия[2] A. Хассан, Будущее геопространственного искусственного интеллекта (2023), Наука о пространственных данных[3] L. Мириан, Что такое LLM-модели и как их используют в генеративном искусственном интеллекте? (2023), Компьютерный мир

Благодарности:Я хотел бы выразить свою благодарность доктору Брайану Рунку за его бесценную поддержку, руководство и экспертное мнение в разработке и рецензии данной статьи.