--- language: nl license: mit base_model: microsoft/mdeberta-v3-base pipeline_tag: question-answering tags: - question-answering - extractive-qa - information-extraction - dutch - nederlands - multilingual --- # Arlo Extract 1.0 **Arlo** is een Nederlandse modelfamilie voor snelle, getypeerde beslissingen. Waar een taalmodel tekst genereert die je daarna moet interpreteren, geeft Arlo direct een waarde terug waar software mee kan werken — altijd met een confidence score. Dit model dekt het **Extraction**-primitief: getypeerde velden uit vrije tekst halen. Datums, bedragen, kenmerken, locaties, namen — je stelt per veld een vraag en krijgt de letterlijke waarde uit de tekst terug. ## Arlo in actie ## Wat dit model onderscheidt Het model wijst een stuk van de originele tekst aan als antwoord. Het verzint dus niets: wat je terugkrijgt staat er letterlijk, op de positie waar het model het gevonden heeft. En staat het gevraagde veld er niet in, dan zegt het model dat — `value` is dan `None` in plaats van een plausibel klinkende gok. Dat laatste is waar veel extractie-oplossingen op stukloopt. Een ontbrekend veld moet leeg blijven, niet ingevuld worden met het dichtstbijzijnde stukje tekst. ## Gebruik ```python from transformers import AutoModel, AutoTokenizer model = AutoModel.from_pretrained("NoaberAI/arlo-extract", trust_remote_code=True) tokenizer = AutoTokenizer.from_pretrained("NoaberAI/arlo-extract") model.extract(tokenizer, "Melding: kapotte straatverlichting aan de Julianalaan ter hoogte van " "huisnummer 42, gemeld op 3 september 2026.", "Waar is het probleem?") # {"value": "Julianalaan", "confidence": 1.00} ``` ### Meerdere velden tegelijk ```python model.extract_fields(tokenizer, "Factuur 4471 van Bakkerij Jansen, totaalbedrag 47 euro 50, " "vervaldatum 15 oktober 2026.", { "factuurnummer": "Wat is het factuurnummer?", "bedrag": "Wat is het totaalbedrag?", "vervaldatum": "Wat is de vervaldatum?", }) # {"factuurnummer": {"value": "4471", "confidence": 1.00}, # "bedrag": {"value": "47 euro 50", "confidence": 0.84}, # "vervaldatum": {"value": "15 oktober 2026", "confidence": 1.00}} ``` ### Een veld dat er niet in staat ```python model.extract(tokenizer, "Het pakket wordt morgen bezorgd door PostNL.", "Wat kost de bezorging?") # {"value": None, "confidence": 0.93} ``` ## Hoe het werkt Het model voorspelt voor elke positie in de tekst hoe waarschijnlijk het is dat daar een antwoord begint en eindigt. De beste combinatie daarvan is de kandidaat-span. Die kandidaat wordt vervolgens afgewogen tegen een aparte "geen antwoord"-score. Alleen als de beste span duidelijk sterker is dan die drempel, wordt hij teruggegeven. De drempel (`null_bias`) is gekalibreerd op een validatieset en zit in de modelconfiguratie — je hoeft er zelf niets aan te doen. ### Vraagformulering Hoe specifieker de vraag, hoe scherper het antwoord. Vraag je "Waar is het probleem?" dan krijg je de locatie; vraag je "Wat is er kapot?" dan krijg je het object. Twee vragen op dezelfde tekst leveren dus netjes twee verschillende velden op: ```python model.extract_fields(tokenizer, "Kapotte lantaarnpaal aan de Julianalaan ter hoogte van huisnummer 42.", {"object": "Wat is er kapot?", "locatie": "Aan welke straat is het probleem?"}) # {"object": {"value": "lantaarnpaal", "confidence": 1.00}, # "locatie": {"value": "Julianalaan", "confidence": 1.00}} ``` ## Ook op andere talen Het model is op Nederlands getraind, maar de backbone (`mdeberta-v3-base`) is multilingual en dat blijft merkbaar. Dezelfde factuur in drie talen, met de vraag in de taal van het document: ```python model.extract(tok, "Invoice 8842 from Baker Jones, due date March 3rd 2027.", "What is the due date?") # {"value": "March 3rd 2027", "confidence": 1.00} model.extract(tok, "Rechnung 8842 von Bäcker Jones, Fälligkeitsdatum 3. März 2027.", "Was ist das Fälligkeitsdatum?") # {"value": "3. März 2027", "confidence": 1.00} model.extract(tok, "Facture 8842 de Boulanger Jones, date d'échéance 3 mars 2027.", "Quelle est la date d'échéance?") # {"value": "3 mars 2027", "confidence": 1.00} ``` Handig voor administraties die ook buitenlandse facturen verwerken. ## De Arlo-familie Arlo bestaat uit drie modellen die samen een complete laag vormen voor gestructureerde beslissingen. Ze delen dezelfde backbone-architectuur en hetzelfde output-contract — een waarde plus een confidence — en zijn onafhankelijk of gecombineerd te gebruiken. | Model | Primitieven | Waarvoor | |---|---|---| | [arlo-classify](https://huggingface.co/NoaberAI/arlo-classify) | Choice, Noul | categoriseren, routeren, waarheidsvragen | | [arlo-score](https://huggingface.co/NoaberAI/arlo-score) | Score | numeriek beoordelen tegen een rubric | | **[arlo-extract](https://huggingface.co/NoaberAI/arlo-extract)** | Extraction | getypeerde velden uit tekst halen | Extraction wordt sterker in combinatie met de andere twee: `arlo-classify` bepaalt wat voor soort document je voor je hebt, en op basis daarvan stel je gericht de juiste extractievragen. Een factuur vraagt om andere velden dan een bezwaarschrift. ```python soort = classify.choice(tokenizer_c, tekst, ["factuur", "bezwaarschrift", "melding"]) velden = VELDEN_PER_SOORT[soort[0]["label"]] resultaat = extract.extract_fields(tokenizer_e, tekst, velden) ``` ## Technische details - **Backbone**: `microsoft/mdeberta-v3-base` (~280M parameters) - **Kop**: extractive question answering (start/eind-posities) - **Taal**: Nederlands - **Trainingsdata**: Nederlandstalige extractieve QA-data, aangevuld met domeinspecifieke voorbeelden in de stijl van meldingen, aanvragen en formele correspondentie — inclusief vragen waarop géén antwoord in de tekst staat - **Hardware**: getraind op een NVIDIA A100 - **Licentie**: MIT Gemaakt door [NoaberAI](https://huggingface.co/NoaberAI).