How ankudat/thesis works
This repository is a thesis research project comparing German financial-text anonymization pipelines, with a Flask demonstrator as a user-facing companion. Its main workflow is synthetic-note generation, validation and annotation, shared dataset splits, independent anonymization experiments, then evaluation of detection, leakage, semantic preservation and re-identification risk. The README documents multiple model families and an external API baseline; those are represented as parallel approaches, not a single processing chain. Source excerpts are partial, so the graph omits uncertain internal calls and treats documented but unsampled capabilities at their supported directory paths.
Main entry points: results Pipeline outputs · splits Train/dev/test · validate_data.py Validate notes · datenwertschoepfung_baseline.py API baseline
Components 27
Dataset preparation
- Generate notes
src/data_generation/generate_data.py - Validate notes
src/data_generation/validate_data.py - Annotation import
src/data_generation/label_studio_transformation.py - Split export
src/data_generation/export_data_splits.py
Anonymization approaches
- spaCy + BERT
src/anonymization/classical_baseline.py - Presidio
src/anonymization/presidio_baseline.py - Fine-tuned BERT
src/anonymization/bert_finetune_ner.py - LLM tag-replace
src/anonymization/llm_tag_and_replace.py - QLoRA fine-tune
src/anonymization/llm_finetune_ner.py - Prompt rewriting
src/anonymization/llm_prompt_anonymize.py - API baseline
src/anonymization/datenwertschoepfung_baseline.py
Evaluation
- NER evaluation
src/anonymization/evaluation_utils.py - Semantic metrics
src/metrics/semantic_preservation.py - Leakage analysis
src/metrics/leakage_breakdown.py - Judge and attack
src/metrics/llm_judge_gemini.py - Miss analysis
src/metrics/classify_ner_misses.py
Web demonstrator
- Flask demo
demo/app.py
Data and results
- Raw notes
data/raw/german_financial_data_raw.json - Validated data
data/processed/german_financial_data_cleaned.json - Annotated notes
data/label_studio/20260302_Export_Label_Studio_Client_Notes.json - Train/dev/test
data/splits - Pipeline outputs
results
Other components
- Researcher
- Gemini API
- Label Studio
- Anonymizer API
- Demo user
Connections 34
- Researcher → Generate notes: initiates
- Generate notes → Gemini API: requests generation
- Generate notes → Raw notes: writes
- Validate notes → Raw notes: reads
- Validate notes → Gemini API: audits
- Validate notes → Validated data: writes
- Annotation import → Validated data: reads
- Annotation import → Label Studio: prepares import
- Label Studio → Annotated notes: exports annotations
- Split export → Annotated notes: reads
- Split export → Train/dev/test: writes
- spaCy + BERT → Train/dev/test: evaluates data
- Presidio → Train/dev/test: evaluates data
- Fine-tuned BERT → Train/dev/test: trains and evaluates
- LLM tag-replace → Train/dev/test: evaluates data
- QLoRA fine-tune → Train/dev/test: trains and evaluates
- Prompt rewriting → Train/dev/test: evaluates data
- API baseline → Train/dev/test: evaluates data
- spaCy + BERT → Pipeline outputs: writes outputs
- Presidio → Pipeline outputs: writes outputs
- Fine-tuned BERT → Pipeline outputs: writes outputs
- LLM tag-replace → Pipeline outputs: writes outputs
- QLoRA fine-tune → Pipeline outputs: writes outputs
- Prompt rewriting → Pipeline outputs: writes outputs
- API baseline → Anonymizer API: calls
- API baseline → Pipeline outputs: writes outputs
- NER evaluation → Pipeline outputs: scores predictions
- Semantic metrics → Pipeline outputs: measures preservation
- Leakage analysis → Pipeline outputs: measures leakage
- Judge and attack → Pipeline outputs: judges outputs
- Judge and attack → Gemini API: requests judgments
- Miss analysis → Pipeline outputs: classifies misses
- Demo user → Flask demo: submits text
- Flask demo → Demo user: returns anonymization