Skip to main content

DP-ST

PyPI version GitHub stars License

Code repository for the EMNLP 2025 paper: Leveraging Semantic Triples for Private Document Generation with Local Differential Privacy Guarantees

Getting Started

Installation

You can now install DP-ST directly as a Python package.

# Install the core runtime engine
pip install dpst

# Install the optional data-preparation extensions required for the initial setup
pip install "dpst[setup]"

Note on Heavy Runtimes: We highly recommend installing the correct flavor of PyTorch matching your hardware's CUDA capability before installing this package.

More installation notes and tips

We have done our best to configure DP-ST and its set environment variables such that it can run as smoothly as possible on all setups. However, vLLM is currently quite finicky, so there may be some holdups with your runtime.

  • VLLM_ENABLE_V1_MULTIPROCESSING="0": Forces vLLM to run in-process. Under WSL2 (if applicable to you), spawned worker subprocesses fail the UvaBuffer check (UVA is not available).
  • You will likely have to run (uv) pip uninstall torchcodec following installation, as this library creates compatability issues.
  • For the default embedding model (jina-embeddings-v3), you may see warnings like flash_attn is not installed. Using PyTorch native attention implementation. While these are generally safe to ignore, we highly recommend installing flash-attn (already in the requirements), as we have noticed particularly with jina-embeddings-v3 that not doing so leads to headaches and odd behavior. This can be done with the following:
git clone https://github.com/Dao-AILab/flash-attention.git
cd flash-attention/
export TORCH_CUDA_ARCH_LIST="12.0"
export FLASH_ATTN_CUDA_ARCHS="120"
export FLASH_ATTENTION_FORCE_BUILD=TRUE
uv pip install . --no-build-isolation --no-cache-dir

Please also make sure to pass hf_token to initizalization, if applicable to reconstruction model you have chosen.

Automated Database & Cluster Setup

In order to run DP-ST, you must first run the preparation stage as described in the paper. This includes booting up your local vector database, extracting triples from a public text corpus, clustering them, and storing them locally.

Ensure your local Weaviate instance is running, then execute the following automated command in your terminal:

dpst setup

Note: This can take a very long time! We recommend you set it and forget it. Alternatively, you can tweak the max_rows parameter of initialize_database to use less texts for the database preparation.

The above replaces the legacy workflow of manually executing Triple2DB.ipynb and triple_cluster.ipynb. The command will automatically stream the FineWeb public corpus dataset, extract/embed triples into Weaviate, run the MiniBatchKMeans allocations (50k, 100k, and 200k), and write the resulting cluster assets straight into the package data directory. If you prefer a more tailored approach, we still recommend using the notebooks.

Usage

Running DP-ST is simple once the automated setup has completed:

from dpst import DPST

# Initialize the engine (specify mode: "50k", "100k", or "200k")
X = DPST(mode="50k", model_checkpoint=MODEL_NAME, hf_token=TOKEN)

# Privatize your text corpus
private_texts = X.privatize([TEXTS], epsilon=DOC_PRIVACY_BUDGET) # or epsilon=LIST_OF_EPSILONS (for epsilon sweeps)

# Cleanup all resources (recommended!)
X.cleanup()

MODEL_NAME refers to the model used for text reconstruction (i.e., the Llama-3.2 models we use in the work), and hf_token is only necessary for gated models on Hugging Face.

Running other DP Methods

In this repository (under the comparison directory), you will find a number of scripts (*_perturb.py) to reproduce the privatized texts as performed in our work.

The code for DP-BART and DP-Prompt can be found in LLMDP.py. DP-MLM can be found here and the code for TEM can be found here.

We also include the evaluation code for cosine similarity (CS.py) and G-Eval (Geval.ipynb), located in evaluation.

NOTE: in all provided notebooks, please make sure to include the correct libraries and link the paths accordingly. This is necessary for the code to run correctly!

Citation

If you use this code in your research, please consider citing the published work:

@inproceedings{meisenbacher-etal-2025-leveraging,
    title = "Leveraging Semantic Triples for Private Document Generation with Local Differential Privacy Guarantees",
    author = "Meisenbacher, Stephen  and
      Chevli, Maulik  and
      Matthes, Florian",
    editor = "Christodoulopoulos, Christos  and
      Chakraborty, Tanmoy  and
      Rose, Carolyn  and
      Peng, Violet",
    booktitle = "Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing",
    month = nov,
    year = "2025",
    address = "Suzhou, China",
    publisher = "Association for Computational Linguistics",
    url = "https://aclanthology.org/2025.emnlp-main.455/",
    doi = "10.18653/v1/2025.emnlp-main.455",
    pages = "8976--8992",
    ISBN = "979-8-89176-332-6"
}

Metadata

Release files for dpst 0.3.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dpst 0.3.9
File Size Uploaded
dpst-0.3.9.tar.gz 16.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dpst 0.3.9
File Interpreter ABI Platform
dpst-0.3.9-py3-none-any.whl Python 3 none any Details

Total release size: 31.1 kB

Release files / dpst-0.3.9.tar.gz

Download URL dpst-0.3.9.tar.gz
Size 16.7 kB
Tags Source
SHA-256 checksum
How to use checksums
6267b065870798fcf3902c082a8c4810bb5e19543e13d2d744938dcc5c86debf
BLAKE2b-256 checksum
How to use checksums
8cf47a82218159e14fc33a210a8ed7a4b5e64f8bce560993d49b0146f52044cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / dpst-0.3.9-py3-none-any.whl

Download URL dpst-0.3.9-py3-none-any.whl
Size 14.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9d92189bcc148666daae75b3a9a09436458921948372127317b45ef755379090
BLAKE2b-256 checksum
How to use checksums
e0ffc1d5cc36198550080e0288f2826f625f0795096748e723815b58255f3fe0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release history Release notifications | RSS feed

This release

0.3.9 This release

2 release files

0.3.8

2 release files

0.3.5

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page