Onze collega Marcel-Jan heeft een hobbyproject om astronomie nieuws te ontvangen en sorteren. Lang verhaal kort: hij verzamelt nu nog links naar interessante nieuwsartikelen over astronomie met de hand. En dit wilde hij graag automatiseren, zodat hij meer tijd heeft om het eigenlijke nieuws te lezen.
Wat Marcel-Jan wil is dat een artikel, op basis van de inhoud, getagd wordt met een paar trefwoorden en dat het in één hoofdcategorie wordt geplaatst. Bijvoorbeeld: een artikel over de ontdekking van vulkanen op Venus kan tags hebben als “Venus”, “vulkanisme”, “NASA”, “Magellan” en de hoofdcategorie is “Venus”.
Dus hoe doe je dat in Python? Dat heeft Marcel-Jan opgezocht en volgens Stack Overflow moet hij boeken gaan lezen over data mining en Natural Language Text Processing. Hmm, een beetje overkill voor een hobbyproject. Dus hij vroeg zich af: “Kan ChatGPT het niet doen?”
ChatGPT, wie kent het niet? Het zogenaamde Large Language Model bleek de afgelopen maanden tot heel veel in staat. Misschien ook dit?
En wat blijkt? ChatGPT kan dit! Marcel-Jan leerde hoe hij ChatGPT aan het werk kon zetten in Python via deze video van Harisson Kinsley.
Zoals Harisson in de video uitlegt heb je een OpenAI account nodig. En gebruik van ChatGPT is niet heel duur, maar ook niet gratis. Zie meer over de prijzen op deze site: Pricing. Pakweg 50 ChatGPT verzoeken zoals Marcel-Jan ze uitgevoerd heeft bleken een paar dollarcent te kosten. Mocht je gaan experimenteren met ChatGPT vergeet dan niet voor de zekerheid gebruikslimieten in te stellen. Zo kom je niet opeens tot onaangename verrassingen.
Hoe vraag je ChatGPT om tags te bedenken voor een stuk tekst? Het idee is om ChatGPT een vraag te sturen met daarin de tekst die gecategoriseerd moet worden. De hele vraag plus te analyseren tekst komt daarom in een string in de trant van: “Categoriseer deze tekst met één tot vijf tags: <tekst van het artikel hier>”.
newstext = “As Canada celebrates its first astronaut to go to the moon, it is starting a new project that could eventually enable a Canadian to walk on the lunar surface. <gevolgd door meer tekst>”
user_input = f”Categorise this text with one to five tags:\n\n {newstext}”
message_history.append({“role”: “user”, “content”: f”{user_input}”})
completion = openai.ChatCompletion.create(
model=”gpt-3.5-turbo”,
messages=message_history
)
reply_content = completion.choices[0].message.content
print(reply_content)
En het werkt! Hier zijn de tags die het maakt voor dit artikel over de Ariane 5 raket voor ESA’s JUICE missie naar Jupiter en zijn manen:
https://www.spacedaily.com/reports/Ariane_5_flight_VA260_Juice_fully_integrated_and_ready_for_rollout_999.html:
space mission, Ariane 5, Juice mission, Jupiter exploration, European Spaceport.
Dat is inderdaad een prima resultaat.
Laten we een ander artikel nemen: https://www.newscientist.com/article/2367734-tonight-is-your-best-chance-to-see-mercury-in-the-night-sky/
Wat maakt ChatGPT ervan?
Mercury, solar system, astronomical observations, space viewing, celestial events.
Ook dit resultaat is prima.
En toen probeerde Marcel-Jan hetzelfde voor dit artikel:
https://www.spacewar.com/reports/Thule_Air_Base_Gets_New_Name_999.html
- U.S. Space Force
- Greenland
- Department of Defense
- Pituffik Space Base
- Cultural heritage
Huh! Wat? Waarom maakt ChatGPT deze tekst nu opeens heel anders op? Ook opmerkelijk is dat er dit keer geen punt aan het eind van het resultaat staat.
Dus resultaten van ChatGPT 3.5 kunnen best inconsequent zijn. Dat kan verholpen worden door ChatGPT opdracht te geven het resultaat te leveren in komma gescheiden formaat:
user_input = f”Categorize this text with one to five tags:\n\n {item[‘summary_detail’]}.” \
f” Print the tags separated by commas.”
Maar dat is dus wel een leermoment: je moet heel specifiek zijn in je verzoek aan ChatGPT.
Een hoofdcategorie kiezen
Nu wilde Marcel-Jan dat ChatGPT één hoofdcategorie koos uit een lijst van mogelijkheden. Want zo houdt hij zelf zijn lijst met astronomie nieuwsberichten bij. Dit is de lijst:
user_followup = f”Also categorize this text in one of the following categories:\n\n {astro_categories}”
message_history.append({“role”: “user”, “content”: f”{user_followup}”})
completion = openai.ChatCompletion.create(
model=”gpt-3.5-turbo”,
messages=message_history
)
reply_content = completion.choices[0].message.content
print(reply_content)
Laten we kijken wat ChatGPT er van maakt. Voor het artikel over de Ariane 5 raket die geprepareerd wordt voor de Europese Jupiter-missie komt hij inderdaad met een keurig resultaat:
Jupiter.
Dat is prima. Beetje vreemd van de punt aan het eind, maar die kun je later wegfilteren. Door naar het artikel van de Space Force basis op Groenland. Dit is wat ChatGPT koos als de hoofdcategorie:
Earth, Miscellaneous.
Hee, wacht even. De opdracht was om slechts één categorie te kiezen.
Of neem het resultaat voor dit artikel over NASA’s Orion ruimteschip: https://www.spacedaily.com/reports/Orion_stretches_its_wings_ahead_of_first_crewed_Artemis_mission_999.html
Wat koos ChatGPT?
Kennedy Space Center and Orion spacecraft fall under "Miscellaneous".
Technisch gezien goed, maar onhandig in de verdere verwerking. En soms komt ChatGPT met uitgebreide feedback, zoals op dit artikel: https://www.spacedaily.com/reports/The_worlds_first_3D_printed_closed_afterburning_cycle_liquid_rocket_engine_successfully_flew_999.html.
De tags kiest hij goed:
space technology, rocketry, China, Tianbing Technology, TH-11V engine.
Maar dit geeft hij als antwoord op de hoofdcategorie:
The text should be categorized under "space technology" and "rocketry" as these are the most relevant categories. It doesn't fit neatly into any of the specific celestial bodies or topics listed in the second prompt, nor does it relate to artificial intelligence or meteorites.
Klinkt redelijk, maar in de verdere verwerking hebben we er niet zo veel aan. Daar moet je dus op bedacht zijn: ChatGPT is geen REST API. Het praat Engels terug.
Marcel-Jan probeerde de vraag wat aan te scherpen: kies slechts 1 categorie en als het niet past, kies dan Diversen (Miscellaneous):
user_followup = f”Also categorize this text in only one of the following categories:\n\n {astro_categories}.” \
f”If it doesn’t fit in any of these categories, categorize it under Miscellaneous.”
Dit leverde gemengde resultaten op. Neem bijvoorbeeld de keuze die ChatGPT maakt voor dit artikel van Space.com:
https://www.space.com/best-free-star-trek-tng-and-picard-3d-prints . De tags die ChatGPT kiest, zijn correct:
pop culture, television, 3D printing, Star Trek, Picard
En welke hoofdcategorie kiest ChatGPT vervolgens?
Telescopes
Telescopen? Echt? Het woord komt in het hele artikel niet voor (behalve een keer in een banner).
De resultaten van dit experiment zijn fascinerend.
Allereerst: ChatGPT kan echt wel wat. Het programmeren van het categoriseren van teksten was zonder ChatGPT een tijdrovend karwei geweest. En de tags waar het mee komt zijn prima.
Maar: als je ChatGPT 3.5 denkt te gaan gebruiken in een data pipeline, wees dan zeer bedacht op de vreemde resultaten die dat kan opleveren. En de code zal rigoureus getest moeten worden, om vreemde problemen in de datakwaliteit te voorkomen. Want soms is ChatGPT even inconsequent als een mens.
DIKW Intelligence
Wattbaan 1
3439 ML Nieuwegein