Briljant

Waarom AI, LLM’s en Python (nog) niet alle beloftes waarmaken

co-auteur: Gerwin. Een praktijkcase over het automatiseren van ALT-teksten voor toegankelijkheid

TL;DR: Na het succesinzichtsvolle content-embeddings project wilden Gerwin, Annegien en ik LLM’s gebruiken voor ALT tags (specifiek goede ALT tags voor toegankelijkheid). Uiteindelijk bedachten we om AI en Python inzetten om 7.100 productafbeeldingen automatisch van kwalitatieve ALT-teksten te voorzien. Ondanks echt heel veel testen en hertesten van verschillende prompts en modellen (BLIP, Azure Computer Vision, GPT-4 Vision) lukte het niet om aan de gestelde kwaliteitseisen te voldoen. Dit blog beschrijft wat werkte, wat echt niet werkte, en de belangrijkste lessen. Automatisering (of zoals we het hier noemen automagischering, is geweldig, maar heeft, net als kennis, grenzen – vooral bij digitale toegankelijkheid waar context en nuance cruciaal zijn.

De uitdaging: 7.100 afbeeldingen en de toegankelijkheid-puzzel

We zijn bij BG van nature vrij sceptisch over nieuwe technologieën en AI-hypes. We geloven pas in iets als het zich in de praktijk bewijst. Toch laten we ons graag verrassen en daarom gingen we, nadat we erachter kwamen dat LM’s veel valkuilen hebben, deze uitdaging aan: Kun je met AI, LLM’s en een beetje Python duizenden kledingafbeeldingen automatisch voorzien van perfecte ALT-teksten?

De aanldeiding

Goede ALT-teksten zijn cruciaal. Niet alleen voor organische optimalisatie, maar vooral voor digitale toegankelijkheid. Voor een kledingmerk wilden we duizenden productafbeeldingen laten beschrijven volgens strikte richtlijnen:

  • Focus op het kledingstuk uit de H1
  • Vermelding van kleur, aanzicht (vooraanzicht, zijaanzicht, achteraanzicht) en camerastandpunt (full body, detail)
  • Geen ruis: geen achtergrondinfo, geen andere kledingstukken

Gerwin heeft veel tijd en energie gestoken om een GPT te maken die op basis van zeer duidelijke kaders echt goede ALT tags kan formuleren. Hieruit kwamen ondanks veel finetuning zeer veel hallucinaties, dus er was noodzaak om te kijken hoe we visuele analyse konden oppassen. Beschrijven wat er echt op een afbeelding staat. Dat kan, maar is alleen mogelijk met het uploaden van individuele afbeeldingen in chatGPT, wij wilden het alleen op schaal, want 7.100 afbeeldingen. Dus niet alleen een upload in een LLM, maar juist een automatisering die op basis van productURL alle afbeeldingen in een Gallery vind en die vervolgens zelf gaat analyseren.

Met LLM en Python moet dit toch gewoon goed te doen zijn? Nou, niet dus hoor.

Een barre tocht door de LLM-jungle

We hebben lang getest, gesleuteld en gefinetuned. Geen enkele tool deed precies wat we nodig hadden, hoe slim of geavanceerd ze ook leken. Hier een inhoudelijk overzicht van wat we geprobeerd hebben:

1. BLIP (Bootstrapped Language Image Pretraining)

Wat is het? Een open-source model dat is getraind om afbeeldingen te beschrijven.

VoordelenNadelen
Toegankelijk, open-sourceGetraind op generieke beelden
Snel te integreren in PythonBegrijpt context niet
Documentatie beschikbaarMist nuance in kledingbeschrijvingen

Onze ervaring: BLIP herkende wel ‘man met kleding’, maar snapte niets van context. Aanzicht, camerastandpunt of specifieke focus op het juiste kledingstuk? Kansloos. Uren gestoken in prompt-tuning en toch steeds dezelfde beperkingen.

# Voorbeeld van onze BLIP-implementatie
from PIL import Image
import requests
from transformers import BlipProcessor, BlipForConditionalGeneration

processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base")

image = Image.open(requests.get(image_url, stream=True).raw)
inputs = processor(image, return_tensors="pt")

# Poging tot prompt aanpassing (werkte niet goed)
prompt = "a clothing item, describe color, viewpoint and camera angle"
inputs = processor(image, text=prompt, return_tensors="pt")

out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
# Output: "a man wearing a red shirt" (mist aanzicht, camerastandpunt, etc.)

 

2. Azure Computer Vision

Wat is het? Microsoft’s enterprise-grade beeldherkenningsdienst.

VoordelenNadelen
Stabiele APITe oppervlakkige beschrijvingen
Goede documentatieFocus op verkeerde elementen
SchaalbaarKleurdetectie vaak incorrect

Onze ervaring: Ondanks alle parameters leverde Azure beschrijvingen op die te oppervlakkig waren. Het zag “person” en “indoor”, maar vergat het belangrijkste: het kledingstuk centraal stellen. Dominante kleuren sloegen vaak op de achtergrond of de broek, terwijl het om het T-shirt ging.

3. GPT-4 Vision & GPT-4 Turbo

Wat is het? OpenAI’s nieuwste modellen met visuele herkenningscapaciteiten.

VoordelenNadelen
Sterke taalbegripMoeite met visuele details
Flexibele promptingInconsistente output
Context-awarenessAPI-kosten en limieten

Onze ervaring: Hier hadden we hoge verwachtingen van, maar al snel bleek dat Vision-modellen moeite hebben met detailniveau. Aanzicht werd vaak geraden of genegeerd. Daarnaast beperkte toegang en limieten in verwerkingscapaciteit. We hebben geprobeerd met chained prompts en context, maar de output bleef inconsistent.

4. Google Apps Script integratie

Wat is het? Scripttaal voor automatisering binnen Google Workspace.

VoordelenNadelen
Integratie met Google SheetsGeen beeldherkenning
Automatisering van workflowsPuur hulpmiddel, geen oplossing
LaagdrempeligBeperkingen in verwerkingssnelheid

Onze ervaring: Uiteindelijk bleek dit meer een hulpmiddel voor dataverwerking dan een oplossing voor de kern: kwalitatieve beeldherkenning en tekstgeneratie. Het vulde hooguit enkele gaten, maar loste niets fundamenteels op.

5. OFASys & DeepSeek

Wat is het? Experimentele modellen met focus op multimodale taken.

VoordelenNadelen
State-of-the-art beloftesInstallatieproblemen
Open-sourceDownloadrestricties
Theoretisch sterkNiet specifiek voor kleding

Onze ervaring: Downloadrestricties, VPN-pogingen, dependency-issues… Zelfs als we het model binnenhaalden, bleek dat ook deze modellen niet specifiek genoeg waren voor onze kledingcase. A ffing waste of time :-D.

6. Fallback naar GPT voor verfijning

VoordelenNadelen
Kan ruwe output verbeterenGarbage in = garbage out
Goede tekstuele aanpassingenGokken zonder visuele input
SchaalbaarKostbaar en inefficiënt

Onze ervaring: Een slimme poging om ruwe AI-output te laten verbeteren door GPT. Maar zoals altijd: garbage in = garbage out. Zonder goede visuele input bleef GPT gokken. We hebben prompt na prompt herschreven, maar zonder relevante basisinformatie blijft ook GPT beperkt.

De harde lessen en bevestigingen

Na lang experimenteren hebben we een aantal belangrijke inzichten opgedaan:

  • AI is krachtig, maar geen menselijke specialist
  • LLM’s begrijpen taal, maar missen visueel inzicht zonder perfecte input
  • Digitale toegankelijkheid vereist nuance die AI nog niet goed aankan
  • Automatisering vraagt om meer dan tools; het vraagt om slimme structuren en systemen
  • Leuk kunnen spelen met LLM’s en Python maakt je geen specialist, leren hoe je modellen echt traint wel

Het is dus niet gelukt om volledig automatisch perfecte ALT-teksten te genereren, maar we zijn wél veel wijzer geworden over wat wél en niet werkt. En vooral ook over dat de vervolgstap, het zelf trainen van een model, niet op onze planning komt :-).

Wat werkte dan wel?

Hoewel we dus niet tot een 100% geautomatiseerde oplossing kwamen, hebben we er wel leuke zaken uit kunnen halen:

  1. Halucinaties zijn echt: Een GPT maken klinkt leuk maar na talloze slechte voorbeelden van anderen nu ook zelf gezien dat het lastig is 100% output te krijgen
  2. Semi-automatische workflow: Een combinatie van automatische basisbeschrijvingen met menselijke verfijning was efficiënter dan volledig handmatig werk
  3. Categorisering vooraf: Door afbeeldingen eerst te categoriseren (bijv. “man in t-shirt”, “vrouw in jas”) kunnen we gerichtere opdrachten geven
  4. Batch-processing en error-handling: Onze Python-scripts zorgden voor robuuste verwerking, zelfs als individuele API-calls faalden, maar dat finetunen was een lang proces, maar is nu wel de basis geworden

De praktische takeaways

Voor anderen die vergelijkbare projecten overwegen, hier enkele praktische lessen:

  1. Begin klein: Test je aanpak eerst op 20-40 afbeeldingen voor je gaat opschalen, want het is opnieuw, opnieuw, opnieuw
  2. Wees realistisch: Verwacht geen perfectie, maar denk in termen van schalen en efficientie (en knutselen)
  3. Combineer technologieën: Geen enkele tool deed alles – de combinatie is vaak de beste oplossing voor de puzzel
  4. Maak heldere richtlijnen: Hoe beter je afbakening, hoe duidelijker je kunt bepalen of de output bruikbaar is
  5. Kies voor een combi van automatisering en “zelfdoen”: Soms is 70% automatisering met 30% zelfdoen fijn, soms is het andersom

Conclusie: Bevestiging van wat we eigenlijk al wisten

Generatieve AI, LLM’s en Python zijn geweldige hulpmiddelen, maar geen wondermiddel. Zeker als het aankomt op digitale toegankelijkheid en contextuele beschrijvingen. Je hebt gelukkig zoals altijd, veel meer nodig dan alleen technologie — je hebt inzicht, structuur en vooral realistische verwachtingen nodig.

Wat we vooral wilden bereiken met deze case, is dat je met LLM/Python-projecten goed moet nadenken over processen. Dat werd eerder al bevestigd in de andere Python-case, waarin we met embeddings de relevantie berekende tussen klantvragen en content. Dáár werkte het goed, omdat de taak beter paste bij de sterktes van LLM’s: tekstuele semantiek in plaats van visuele interpretatie.

Dus ja, het is niet geworden wat we hoopten, maar het heeft ons opnieuw geleerd hoe belangrijk het is om technologie in te zetten waar het écht waarde toevoegt.

 

Persoonlijke noot: Net als bij de vorige blog over content-embeddings delen we dit als inspiratie en leermoment. We zijn geen AI-experts of developers, maar een praktijkprofessionals die graag experimenteren. Er zijn ongetwijfeld betere manieren om dit aan te pakken – laat het weten als jij die kent!

Lees eens meer blogs