Utilizing ChatGPT to Enhance ExploreHere Marker Data

9 Min

Over the past several years I’ve been building ExploreHere, an iOS and Android app that lets you explore local history via ~180k historical markers & interpretive signs anywhere in the world.

These historical markers are put up along roadways, trails and national parks by local historical societies looking to educate the public on history that happened at that location. For over a decade the Historical Marker Database (HMDB) has been aggregating data of each historical marker. Their data includes photos, location info and the marker’s text.

ExploreHere Logo

Historical Marker Examples

To give more context to the problem I’ll be solving, here are some examples of historical markers you might come across during your travels.

The Power of Apollo

Photo by Brandon D Cross

“The most powerful liquid-fueled rocket engine ever produced, the F-1 engine, was a critical component in sending astronauts to the moon during the Apollo Program. Developed under the direction of Wernher von Braun, the Saturn V rocket was the largest operational vehicle ever produced. Standing 36 stories high and weighing over 6 million pounds (2,721,554.25 kg) it required a cluster of five F-1 engines generating more than 7.5 million pounds (33,361,662 N) of thrust to lift the rocket off the pad. Within three minutes, the rocket would be traveling at a speed of 6,000 mph (9,556 kph) and an altitude of 38 miles (61,16 km). It was said at the time that except for a nuclear explosion, the launching of a Saturn V rocket was the loudest man-made noise ever produced. Just one F-1 engine provided as much thrust as all three space shuttle main engines combined. Engine Data: Saturn V F-1 Engine Height: 18.5 ft (5.6 m) Diameter: 12.2 ft (3.7 m) Propellants: Liquid Oxygen (LOX) and Kerosene (RP-1) Weight: 18,5000 lbs (8.391.5 kg) Lift-off thrust: 2,000,000 lbs”

Power’s Ferry

“Established 1835 by James Power, (1790-1870). Maj. Gen. O. O. Howard’s 4th A. C. (Army of the Cumberland) [US], moved from Vining’s station to this vicinity July 9, 10, 1864. Newton’s (2d) div. was diverted to Roswell to support Garrard’s cav. Stanley’s (1st) and Wood’s (3d) camped 3 mi. N. near Soap Creek, July 10. Stanley crossed the Chattahoochee on Schofield’s pontoon bridge at mouth of Soap Cr. and moved S. on the other side to cover Power’s Ferry where Wood crossed on a pontoon bridge July 12. Newton, back from Roswell, crossed July 13. Stanley’s and Newton’s men built a trestle bridge at the upper island, July 14-16.”

The Polo Player

The Polo Player

“William Behrends — The Polo Player. The bronze Polo Player is the work of William Behrends, one of the nation’s foremost sculptors. Educated both in the U.S.A. and Europe, Behrends has won some of the nation’s top sculpture awards. His commissioned works are on display at the New York Hilton, the Tennessee state capitol building, in the Charleston, SC city hall, in the main atrium of the beautiful Renaissance Center in Detroit, and at the Houston Astrodome. He is most famous for his portrait sculpture and lifesize works.”

After reviewing each of the markers above; we can see some markers represent events, people, or places that vary in interest and importance. If you were passing each of those markers, which one would you stop at and want to see? The rest of this post is going to describe how we can use ChatGPT to turn our unstructured text descriptions into structured data that will allow us to do more advanced and expensive computations.

ChatGPT Scoring & Clustering

Using ChatGPT I built a prompt that takes a markers title and description and tells ChatGPT to assign the marker a score on how “historically important” ChatGPT believes it is. The prompt includes a rubric, defining a scale from 1-10 with a detailed criteria for each score.

Here’s the specific prompt I used when computing these historical scores

Given the following scale from 1-10 rank the following copy. Reply as a JSON object with a score and an justification description key. For example: {"score": integer-here, "description": "Justification of the score."},
1 - Not significant: Text with little to no impact on history, mostly unknown and not associated with any important events, people, or developments.
2 - Minor significance: Text with some historical impact, possibly related to local or regional events or people but not enough to be widely recognized or have lasting effects.
3 - Some significance: Text that had a notable impact on a specific region, group of people, event, or period, either as part of important events, originating from or related to influential figures, or representing a specific time or location.
4 - Significant: Text that played a role in shaping a larger population, region, or development, and resulted in enduring changes, often tied to key historical events and figures.
5 - Important: Text that had a major impact on a country, society, or field of study, with continuing consequences and historical recognition.
6 - Very important: Text that significantly influenced multiple countries, regions, societies, or fields, and has had a lasting impact on the course of history.
7 - Pivotal: Text that directly facilitated transformative change, either through its association with transformative figures, events, or by being central to major historical developments.
8 - Transformative: Text that fueled substantial change within a country or multiple regions and continues to have a lasting influence today. It might be tied to key figures, events, or developments that shaped the course of history.
9 - Monumental: Text with a widespread and transformative impact on a global scale, but not necessarily symbolizing an entire era or way of life. This might encompass iconic figures, groundbreaking events, or places of global importance.
10 - Iconic: The most profound text that revolutionized the course of history and symbolize an entire era or way of life. These might include individuals, places, events, or things that continue to impact global developments significantly, affecting social, economic, and cultural matters on a large scale.

I would have loved to include an example with each score, however doing so would have dramatically increased the number of prompt tokens for each run. In the end, I don’t think adding an example would have increased the quality of results.

Since ChatGPT can be ‘influenced’ by previous answers, I found it critically important to treat each marker as a new clean instance of ChatGPT. This allows me to produce a ~deterministic and reproducibly consistent score for a given title and description.

Scoring Results

After about 3 days of computing these scores with ChatGPT, here’s the distribution of Historical Marker scores that ChatGPT assigned each marker.

Marker Distribution

When I first saw these results, I was a bit surprised at the weight of 3’s & 4’s in the database. Were historical markers only mildly-important? Oh wait… that makes sense. Historical Markers are inherently self limiting. If something isn’t important at all, why would someone put up a historical marker that costs thousands of dollars? Conversely, Historical Markers represent a POINT of historical information such as a single battle, a single speech, a single establishment. Rather than a marker representing the entirety of the Civil War, we get hundreds of markers like “Power’s Ferry” shown above.

Along with the score, I had ChatGPT output its rationale and justification for each marker score. So, as a gut check; here’s how ChatGPT scored the above markers:

  • The Power of Apollo – 7: The copy describes a pivotal moment in history, where the F-1 engine played a critical role in sending astronauts to the moon during the Apollo Program. The Saturn V rocket was the largest operational vehicle ever produced, and the F-1 engine generated more than 7.5 million pounds of thrust to lift the rocket off the pad. The copy also provides specific data about the engine, including its height, diameter, weight, and lift-off thrust, which adds to its significance.
  • Power’s Ferry – 3: The text has some significance as it describes the establishment of Power’s Ferry and its role in the movement of troops during the Civil War. It provides insight into the logistics of the war and the importance of transportation infrastructure.
  • The Polo Player – 1: This text is not significant in terms of historical impact. It is simply a description of a bronze sculpture and its creator, with no connection to any important events, people, or developments.

This fits inline with how I would have ranked each of these markers. What about you?

This score cluster the markers across “Historically Important”. In the future, I’d like to continue scoring the markers across different factors such as “Scientifically Important” or “Ecologically Important”, then a marker can be described as a collection of scores. These collections of scores could then be scored for similarity between each other via cosine distance, and new groups of markers could be found from those results.

ElevenLabs Audio Guide

Thanks to the amazing work done over at ElevenLabs, it’s possible to turn text into speech thats indistinguishable from a human. You can build a custom voice and then use it to generate audio based on any text you pass it.

I scoured the internet for some open-source audio that sounded like it would make a great audio guide, used it as input to train a custom ElevenLabs voice.

Since ElevenLabs can get pretty expensive (I estimate it would cost me ~$18k to have audio for every marker), I limited the generated audio to just markers with a score of 7 or above, and I used the summarized audio as the input. Like ChatGPT, this took me 3 days to run across my dataset, but the output is incredible… I generated over 2 million characters, and got audio-book quality audio for the most historically important 3,401 markers.

Here’s an example of the output; can you tell this is AI generated?

I’m now working on an ExploreHere app update that will allow users to play the audio directly in the app as well as a drive mode, which will auto-play audio markers whenever they are in range.

Wrap Up

All in, the work done in this post cost ~$1k, which, for what I got out of it is pretty incredible. I was able to write all the code for these processes in total in about a weekend. Comparing that to traditional methods of scoring/clustering, or keyword and data abstraction ChatGPT is a economic way to apply ML processes to your unstructured dataset to make them more useful!

In the future I’d like to group markers together into ‘tours’ and apply the ranking process again to see what groupings of markers are more interesting when viewed together than individually.

If you have any other suggestions send me an email at me@wesvance.com, I’d love to hear how you are using ChatGPT in your applications!

Author Avatar

Wesley Vance

I design and code full stack, travel and outdoor, apps while traveling in my van visiting and educating people on the National Parks of the world!

Post a Comment

Love this article? I bet you’d love more!

Helpful, awesome and spam-less articles right to your inbox, every Wednesday - Just for subscribers.