11 min read · May 7, 2024

Deep dive: Legacy problemen oplossen met behulp van AI

Deep dive: Legacy problemen oplossen met behulp van AIDit artikel maakt deel uit van een diepgaand onderzoek naar technische problemen die we tegenkomen en hoe we deze oplossen bij Decoders.

Wat doe je als je bloggegevens beschadigd raken en het verwijderen van deze inhoud je SEO-score ernstig zou schaden? Amenitiz had een serieus probleem met hun blog tijdens de laatste migratie naar een nieuwe server. Ze hadden 600 blogartikelen in 6 talen, die ze schreven over onderwerpen die interessant waren voor de branche. Maar ergens onderweg verloren ze alle speciale karakters "éíáiôèêî" en zelfs "'" ging verloren tijdens de verhuizing van een legacy-systeem. Nu zou je 6 content moderators kunnen sturen om deze 600 artikelen te repareren. Of je zou één iemand met een laptop kunnen sturen 👨‍💻.


Image https://decoders-content-production.s3.eu-central-1.amazonaws.com/media/cleaning_goal_min_45c0bf025d.png

Het probleem is een aantal gebroken tekens in een WordPress blog. Stap één: Haal alle gegevens op. Gelukkig heeft WordPress een API beschikbaar om de inhoud op te halen en bij te werken. Deze API kan worden gebruikt om gegevens te exporteren en ook voor ons probleem om de inhoud bij te werken. Dus hebben we de automatisch gegenereerde sitemap uit WordPress gehaald, alle blogberichten afzonderlijk opgevraagd en lokaal opgeslagen. Zo hebben we iets om mee te spelen.


De inhoud bevatte twee problemen die waren ontstaan na de laatste migratie. Een daarvan was absolute URL's in de inhoud, die we hebben opgelost door wat intelligente find-and-replace te doen. Het is vrij eenvoudig, vooral als je een tijdje met Github Copilot blijft praten. Het kan je vrij snel helpen om de nodige oplossingen te vinden. Maar nu is het moeilijk om een geschikte vervanging te vinden voor de �-tekens in de inhoud. Deze tekens werden ingevoegd wanneer de codering van een tabel niet klopte, en dit teken heeft geen informatie over wat het eerst was. Deze tekens kunnen in elk woord voorkomen, of zelfs een enkele letter kan dit teken worden.


Het probleem is een aantal gebroken tekens in een WordPress blog. Stap één: Haal alle gegevens op. Gelukkig heeft WordPress een API beschikbaar om de inhoud op te halen en bij te werken. Deze API kan worden gebruikt om gegevens te exporteren en ook voor ons probleem om de inhoud bij te werken. Dus hebben we de automatisch gegenereerde sitemap uit WordPress gehaald, alle blogberichten afzonderlijk opgevraagd en lokaal opgeslagen. Zo hebben we iets om mee te spelen.



De inhoud bevatte twee problemen die waren ontstaan na de laatste migratie. Een daarvan was absolute URL's in de inhoud, die we hebben opgelost door wat intelligente find-and-replace te doen. Het is vrij eenvoudig, vooral als je een tijdje met Github Copilot blijft praten. Het kan je vrij snel helpen om de nodige oplossingen te vinden. Maar nu is het moeilijk om een geschikte vervanging te vinden voor de �-tekens in de inhoud. Deze tekens werden ingevoegd wanneer de codering van een tabel niet klopte, en dit teken heeft geen informatie over wat het eerst was. Deze tekens kunnen in elk woord voorkomen, of zelfs een enkele letter kan dit teken worden.



Op het eerste gezicht is het onmogelijk om een vervanging te vinden voor een enkele �; alle speciale tekens waar het geen raad mee wist, werden vervangen door dit teken. Dus laten we proberen de scope te verbreden naar het woord, bijvoorbeeld cl�vacances, tr�s vari�es, r�ver, sacr�, renomm�e, h�teli�res. Je realiseert je misschien dat deze blogposts vooral gaan over talen die veel speciale tekens gebruiken, zoals Frans en Portugees, en dat onze inhoud gaat over hoteliers, aka Amenitiz's business. Maar ik spreek geen Frans of Italiaans. Dus moest ik op zoek naar iemand die dat wel doet of een AI die zogenaamd goed is in taalverwerking om een vervanging voor deze woorden te krijgen.



Praten met AI gebeurt meestal verbaal, waarbij je een vraag stelt en de AI een antwoord teruggeeft dat een natuurlijk persoon zou kunnen geven. Dat is niet echt wat ik hier wil; ik wil vertellen wat het probleem is [Fix my problem plz, I need a replacement for the corrupted word "h�teli�res"]. Antwoord [Dit lijkt een coderingsprobleem te zijn. Het juiste woord is "hôtelière"]. Hmm, behulpzaam maar behoorlijk vervelend om vervolgens het antwoord te kunnen vinden als antwoord. Dus, om te beginnen, voegde ik wat systeeminvoer toe waarin stond dat het slechts één woord en één woord of niets moest teruggeven. Met wat controles gaf dit me een input-output flow waarmee ik in code kon werken.



Goed, laten we het uitvoeren... ongeveer 60% van de tijd komt het met iets semi-nauwkeurigs. Nogmaals, mijn Frans is behoorlijk slecht, dus ik heb het door een collega laten nakijken. Maar dat lost 60% van de vreemde tekens op, geen 100%. Laten we eens kijken of we het beter kunnen doen. Ik merkte dat de AI alleen de juiste uitvoer gaf als je de juiste invoer en instructies gaf. Dus probeerde ik het wat context te geven. Deze gebroken woorden zoals h�teli�res worden bijvoorbeeld gebruikt in een zin:


Cette stabilité fait la renommée de ces chaînes h�teli�res de luxe, mais ne permet aucune personnalisation ciblée selon la clientèle.


Met wat regex en codeermagie keek ik vooruit en achteruit in de tekst om de zin, of in ieder geval een groot deel ervan, te achterhalen.


Image https://decoders-content-production.s3.eu-central-1.amazonaws.com/media/cleaning_blog_pipeline_min_5a5df0003c.png

Nu we alles bij elkaar hebben gebracht, weet de AI het woord dat we willen repareren en in welke taal het is; het zal me slechts één woord terugsturen en heeft context over waar het woord wordt gebruikt. En nu hebben we een oplossing die goed genoeg is om op schaal te gebruiken. De eerste tests toonden correcte oplossingen voor 95% van de vragen die ik stelde. Ik ben begonnen met het opslaan van alle inputs en de antwoorden van ChatGPT, zodat we dezelfde vraag niet twee keer stellen. Uiteindelijk heb ik een paar euro uitgegeven aan OpenAI credits, wat content moderators dagen of weken gekost zou hebben om op te lossen.



Als je dit verhaal leuk vond of benieuwd bent naar meer van dit soort verhalen, volg ons dan op LinkedIn.


Johannes SandersDeveloper @ Decoders