Data & MoreNLP Engineeringgithub.com/dataandmore/ai-profiler

Vet exakt vilken personlig data som finnsgömd i filerna.

En flerspråkig NLP-motor som skannar dokument som redan indexerats i Elasticsearch, identifierar namn, platser och datum, klassificerar sedan känsligt språk i GDPR:s särskilda kategorier och skriver varje fynd tillbaka på dokumentet. Datan lämnar aldrig kundens eget sökkluster.

Hämta, profilera, spara. Upprepa.

15+dedikerade språkmodeller
3detektionsalgoritmer
9känsliga kategorier
1kuppgiftsködjup
Avsnitt 01Översikt

En motor, två ingångar

Samma detektionskärna (handle_doc) driver en högvolymsbakgrundspipeline och en realtidsslutpunkt. Batcharbete flödar från vänster till höger genom schemaläggaren, en begränsad kö och en pool av spaCy-processer; realtidsslutpunkten matar ett enstaka textstycke direkt in i kärnan och returnerar JSON.

KÄLLA SCHEMALÄGGARE PROCESSER KÄRNA MOTTAGARE Elasticsearch index: data DS_Status: REQUEST_AI Schemaläggare söker varje cykel search-after, 50/sida maxsize 1000 Processpool spaCy spaCy SPACY_WORKERS: 2 handle_doc detektionskärnan 1 · skyddsräcken 2 · språkdirigering 3 · matchare Elasticsearch DS_Status: FINISHED POST /profile-text realtid, enstaka text på begäran JSON tillbaka
Batchdataväg Realtidsslutpunkt Process / resultat Detektionskärna
Avsnitt 02Uppdraget

Hitta den känsliga datan, märk upp den, lämna tillbaka den

Profileraren läser dokument som redan indexerats i Elasticsearch. För vart och ett identifierar den namn, platser och datum, och söker sedan efter språk som avslöjar särskilda kategorier av personuppgifter: hälsa, religion, politik, sexuell läggning, etnicitet, kriminellt förflutet, fackligt medlemskap och arbetsrelaterade åtgärder. Varje träff taggas med en typ, den matchade texten och dess position, och sparas sedan tillbaka på dokumentet – så att efterlevnadsarbetet utgår från fakta snarare än gissningar.

Avsnitt 03Två sätt att komma in

En pipeline och enslutpunkt

Läge A

Schemalagd pipeline

En bakgrundstråd söker kontinuerligt i Elasticsearch efter dokument som flaggatsDS_Status: REQUEST_AI och matar dem till en pool av processer. Detta är hur bulkarkiv profileras.

Läge B

REST-slutpunkt

EnPOST /profile-text väg profilerar ett enstaka textstycke på begäran och returnerar färgkodade träffar som JSON. En/health väg rapporterar driftstatus.

Avsnitt 04Batchpipelinen

Från flaggat dokument till färdigprofil

Vid uppstart väntar applikationen på att Elasticsearch-klustret ska bli tillgängligt, och lanserar sedan schemaläggaren och processpoolen. Cykeln nedan upprepas i det oändliga.

  • 01 Schemaläggaren frågar Elasticsearch. Varje cykel skannar den data indexet efter dokument där DS_Status = REQUEST_AI, sidväxling 50 åt gången med search-after.
  • 02 Varje dokument blir en uppgift. Dokument omsluts som uppgifter och skickas till en delad multiprocessing-kö. Om kön fylls pausar schemaläggaren, vilket ger ett naturligt mottryck så att minnesanvändningen förblir begränsad.
  • 03 Arbetare hämtar uppgifter. En pool av spaCy-arbetarprocesser (2 som standard) hämtar uppgifter parallellt, kör detektionskärnan och sammanfogar eventuella befintliga etiketter som redan finns på dokumentet.
  • 04 Detektionskärnan körs. Texten screenas, språkdirigeras och passeras genom upp till tre detektionsalgoritmer. Detta är handle_doc, utökat nedan.
  • 05 Resultat skrivs tillbaka. Fynd dedupliceras och massuppdateras på dokumentet, och statusen sätts till FINISHED. Även vid fel växlar statusen till FINISHED, så att ingenting ombearbetas i oändlighet.
Skrivet tillbaka

Per dokument

DS_EntryType_Count
DS_EntryType_List
DS_EntryType_Values
DS_EntryType_Index
DS_ProfiledAt
DS_Status = FINISHED
Mottryck på en 1 000 djup kö håller hela pipelinen inom ett fast minnesomfång, oavsett hur stort arkivet är.
Avsnitt 05Inuti kärnan

Screena, dirigera och sedan matcha

Innan någon modell körs handle_doc filtrerar bort arbete som inte ska utföras, och väljer sedan rätt verktyg för språket. Först därefter aktiveras matcharna.

dokumenttext + detekterat språk Skyddsräcken endast vitlistade typer hoppa över json · xml · log trunkera > 20 000 tecken släpp okänt språk Dirigering har beroende mönster? ja → hela texten nej → dela meningar Matchare NER nyckelordsfaser beroendegrammatik deduplicera + sammanfoga etiketter → skriv tillbaka
Steg 1

Bestäm vad som ska bearbetas

Endast vitlistade dokumenttyper profileras (doc, docx, pdf, eml, txt med flera). Strukturerade format som json, xml och log hoppas över. Text längre än 20 000 tecken flaggas och trunkeras, och innehåll med okänt språk ignoreras.

Steg 2

Välj språkstrategi

Om ett språk har grammatiska beroendemönster analyseras hela texten på en gång. Annars delas texten upp i meningar och varje mening analyseras i tur och ordning, med den flerspråkiga modellen som universell reservlösning.

Avsnitt 06Detektionsalgoritmer

Tre perspektiv på samma text

Varje fynd bär en prefixad etikett så att nedströmssystem vet hur det hittades. De tre perspektiven körs över samma mening och deras resultat sammanfogas.

"Jane behandlades för diabetes." en mening, tre perspektiv Igenkänning av namngivna entiteter statistisk modell · personer, datum Nyckelordsfrasmatchare lemmamedveten · fångar böjningar Beroendegrammatik subjekt + känsligt objekt S_PER · S_PER_FULL · S_DATE "Jane" befordrad till ett namnfynd S_K_HEALTH "diabetes" från hälsoordboken S_S_HEALTH subjektet "Jane" + objektet "diabetes" bekräftat
01 · NER

Namngivna entiteter

spaCy:s statistiska modell identifierar personer, organisationer, platser, datum och tider. Namn med rätt form (två till tre distinkta alfabetiska ord, inga siffror) befordras till fynd med fullständigt namn.

etiketter: S_PER, S_PER_FULL, S_ORG, S_GPE, S_LOC, S_DATE
02 · Nyckelord

Frasmatchning

En lemmamedveten frasmatchare söker igenom termer från kundspecifika ordlistor med känsligt vokabulär och fångar därigenom böjda former snarare än enbart exakta strängar.

labels: S_K_<TYPE>
03 · Grammatik

Beroendematchning

Grammatiska mönster bekräftar ett verkligt påstående: en person eller ett tillåtet pronomen är subjekt och ett känsligt nyckelord är objekt. Detta minskar antalet falska positiva träffar genom att kräva kontext, inte bara ett ord.

labels: S_S_<TYPE>
Avsnitt 07Vad det identifierar

Särskilda kategorier och identifierare

De exakta kategorierna styrs av kundspecifika ordlistor som läses in från Elasticsearch, vilket innebär att varje prenumeration enbart kan aktivera de typer som är relevanta för er verksamhet.

GDPR:s särskilda kategorier

Känsliga personuppgifter

Hälsa och symptomReligiös övertygelsePolitisk övertygelse Sexuell läggningEtniskt ursprungKriminellt beteende Fackligt medlemskapAnställningsavslutAnställningsvarning
Namngivna entiteter

Personliga identifierare

PersonFullständigt namnOrganisationPlats Ort / GPEDatumTidNationalitet / grupp
Avsnitt 08Räckvidd

Byggd för skalbarhet och räckvidd

15+språkmodeller
3detektionsmetoder
1kuppgiftsködjup
9känsliga kategorier

Dedikerade modeller levereras för engelska, danska, tyska, nederländska, franska, italienska, spanska, svenska, norska, finska, polska, portugisiska, litauiska, kroatiska (som även täcker serbiska, bosniska och montenegrinska) samt ukrainska, med en flerspråkig modell som täcker allt övriga och en universell meningsdelare som grund.

Avsnitt 09Under huven

Tech-stacken

WebblagerFlask + Gunicorn :8000
NLP-motorspaCy 3.8 + Torch (CPU)
Samtidighetmultiprocessing pool
DatalagerElasticsearch 8.11
Ordlistorper-company, via IAM service
PaketeringDocker, python:3.12
Resiliensprocess recycle every 12h
Brusreduceringfalse-positive suppression lists
På en rad

Hämta, profilera, lagra. Upprepa.

AI Profiler omvandlar ett stilla arkiv av dokument till en märkt karta över personuppgifter – allt inom kundens eget sökkluster – så att efterlevnadsarbetet utgår från fakta snarare än antaganden.

github.com/dataandmore/ai-profiler