? Documento • Datos (Yelp/OpenReview/PubMed) • Página del proyecto
Este repositorio implementa el algoritmo Augmented Private Evolution (Aug-PE), aprovechando el acceso API de inferencia a grandes modelos de lenguaje (LLM) para generar texto sintético diferencialmente privado (DP) sin necesidad de entrenamiento del modelo. Comparamos el ajuste fino de DP-SGD y Aug-PE:
Bajo
03/13/2024
: La página del proyecto está disponible, que describe el algoritmo y sus resultados.03/11/2024
: El código y el papel ArXiv están disponibles. conda env create -f environment.yml
conda activate augpe
Los conjuntos de datos se encuentran en data/{dataset}
donde dataset
es yelp
, openreview
y pubmed
.
Descargue Yelp train.csv
(1.21G) y PubMed train.csv
(117 MB) desde este enlace o ejecute:
bash scripts/download_data.sh # download yelp train.csv and pubmed train.csv
Descripción del conjunto de datos:
Incrustaciones previas al cálculo de datos privados (línea 1 en el algoritmo Aug-PE):
bash scripts/embeddings.sh --openreview # Compute private embeddings
bash scripts/embeddings.sh --pubmed
bash scripts/embeddings.sh --yelp
Nota: Computar incrustaciones para OpenReview y PubMed es relativamente rápido. Sin embargo, debido al gran tamaño del conjunto de datos de Yelp (1,9 millones de muestras de entrenamiento), el proceso puede tardar aproximadamente 40 minutos.
Calcule el nivel de ruido DP para su conjunto de datos en notebook/dp_budget.ipynb
dado el presupuesto de privacidad
Para la visualización con Wandb, configure --wandb_key
y --project
con su clave y nombre de proyecto en dpsda/arg_utils.py
.
Utilice LLM de código abierto de Hugging Face para generar datos sintéticos:
export CUDA_VISIBLE_DEVICES=0
bash scripts/hf/{dataset}/generate.sh # Replace `{dataset}` with yelp, openreview, or pubmed
Algunos hiperparámetros clave:
noise
: ruido DP.epoch
: utilizamos 10 épocas para la configuración de DP. Para la configuración sin DP, utilizamos 20 épocas para Yelp y 10 épocas para otros conjuntos de datos.model_type
: modelo en huggingface, como ["gpt2", "gpt2-medium", "gpt2-large", "meta-llama/Llama-2-7b-chat-hf", "tiiuae/falcon-7b-instruct" , "facebook/opt-6.7b", "lmsys/vicuña-7b-v1.5", "mistralai/Mixtral-8x7B-Instruct-v0.1"].num_seed_samples
: número de muestras sintéticas.lookahead_degree
: número de variaciones para la estimación de incorporación de muestras sintéticas (línea 5 en el algoritmo Aug-PE). El valor predeterminado es 0 (autoincrustación).L
: relacionado con el número de variaciones para generar muestras sintéticas candidatas (línea 18 en el algoritmo Aug-PE)feat_ext
: modelo de incrustación en transformadores de oraciones huggingface.select_syn_mode
: selecciona muestras sintéticas según los votos del histograma o la probabilidad. El valor predeterminado es rank
(línea 19 en el algoritmo Aug-PE)temperature
: temperatura para la generación de LLM.Ajuste el modelo posterior con texto sintético DP y evalúe la precisión del modelo en datos de prueba reales:
bash scripts/hf/{dataset}/downstream.sh # Finetune downstream model and evaluate performance
Mida la distancia de distribución de incrustación:
bash scripts/hf/{dataset}/metric.sh # Calculate distribution distance
Para un proceso simplificado que combine todos los pasos de generación y evaluación:
bash scripts/hf/template/{dataset}.sh # Complete workflow for each dataset
Utilizamos un modelo de código cerrado a través de la API Azure OpenAI. Configure su clave y punto final en apis/azure_api.py
MODEL_CONFIG = {
'gpt-3.5-turbo' :{ "openai_api_key" : "YOUR_AZURE_OPENAI_API_KEY" ,
"openai_api_base" : "YOUR_AZURE_OPENAI_ENDPOINT" ,
"engine" : 'YOUR_DEPLOYMENT_NAME' ,
},
}
Aquí engine
podría ser gpt-35-turbo
en Azure.
Ejecute el siguiente script para generar datos sintéticos, evaluarlos en la tarea posterior y calcular la distancia de distribución de incrustación entre los datos reales y sintéticos:
bash scripts/gpt-3.5-turbo/{dataset}.sh
Usamos indicaciones relacionadas con la longitud del texto para GPT-3.5 para controlar la longitud del texto generado. Aquí presentamos varios hiperparámetros adicionales:
dynamic_len
se utiliza para habilitar el mecanismo de longitud dinámica.word_var_scale
: variación del ruido gaussiano utilizada para determinar la palabra_objetiva.max_token_word_scale
: número máximo de tokens por palabra. Configuramos max_token para la generación de LLM en función de target_word (especificada en el mensaje) y max_token_word_scale. Utilice el cuaderno para calcular la diferencia de distribución de la longitud del texto entre datos reales y sintéticos: notebook/text_lens_distribution.ipynb
Si encuentra útil nuestro trabajo, considere citarlo de la siguiente manera:
@inproceedings {
xie2024differentially,
title = { Differentially Private Synthetic Data via Foundation Model {API}s 2: Text } ,
author = { Chulin Xie and Zinan Lin and Arturs Backurs and Sivakanth Gopi and Da Yu and Huseyin A Inan and Harsha Nori and Haotian Jiang and Huishuai Zhang and Yin Tat Lee and Bo Li and Sergey Yekhanin } ,
booktitle = { Forty-first International Conference on Machine Learning } ,
year = { 2024 } ,
url = { https://openreview.net/forum?id=LWD7upg1ob }
}
Si tiene alguna pregunta relacionada con el código o el artículo, no dude en enviar un correo electrónico a Chulin ([email protected]) o abrir un problema.