?论文 • 数据 (Yelp/OpenReview/PubMed) • 项目页面
该存储库实现了增强私有进化 (Aug-PE) 算法,利用对大型语言模型 (LLM) 的推理 API 访问来生成差分私有 (DP) 合成文本,而无需模型训练。我们比较 DP-SGD 微调和 Aug-PE:
在下面
03/13/2024
:项目页面可用,其中概述了算法及其结果。03/11/2024
:代码和 ArXiv 论文可用。 conda env create -f environment.yml
conda activate augpe
数据集位于data/{dataset}
其中dataset
是yelp
、 openreview
和pubmed
。
从此链接下载 Yelp train.csv
(1.21G) 和 PubMed train.csv
(117MB) 或执行:
bash scripts/download_data.sh # download yelp train.csv and pubmed train.csv
数据集描述:
预计算私有数据的嵌入(Aug-PE 算法中的第 1 行):
bash scripts/embeddings.sh --openreview # Compute private embeddings
bash scripts/embeddings.sh --pubmed
bash scripts/embeddings.sh --yelp
注意:计算 OpenReview 和 PubMed 的嵌入相对较快。但是,由于 Yelp 的数据集规模较大(190 万训练样本),该过程可能需要大约 40 分钟。
在给定隐私预算的情况下,计算notebook/dp_budget.ipynb
中数据集的 DP 噪声级别
要使用 Wandb 进行可视化,请在dpsda/arg_utils.py
中使用您的密钥和项目名称配置--wandb_key
和--project
。
利用 Hugging Face 的开源法学硕士来生成合成数据:
export CUDA_VISIBLE_DEVICES=0
bash scripts/hf/{dataset}/generate.sh # Replace `{dataset}` with yelp, openreview, or pubmed
一些关键的超参数:
noise
:DP 噪声。epoch
:我们使用 10 个 epoch 进行 DP 设置。对于非 DP 设置,我们对 Yelp 使用 20 个 epoch,对其他数据集使用 10 个 epoch。model_type
:huggingface 上的模型,例如 ["gpt2", "gpt2-medium", "gpt2-large", "meta-llama/Llama-2-7b-chat-hf", "tiiuae/falcon-7b-instruct" 、“facebook/opt-6.7b”、“lmsys/vicuna-7b-v1.5”、 “mistralai/Mixtral-8x7B-Instruct-v0.1”]。num_seed_samples
:合成样本的数量。lookahead_degree
:合成样本嵌入估计的变化数量(Aug-PE 算法中的第 5 行)。默认值为 0(自嵌入)。L
:与生成候选合成样本的变体数量有关(Aug-PE 算法中的第 18 行)feat_ext
:在 Huggingface 句子转换器上嵌入模型。select_syn_mode
:根据直方图投票或概率选择合成样本。默认为rank
(Aug-PE 算法中的第 19 行)temperature
:LLM 生成的温度。使用DP合成文本对下游模型进行微调,并在真实测试数据上评估模型的准确性:
bash scripts/hf/{dataset}/downstream.sh # Finetune downstream model and evaluate performance
测量嵌入分布距离:
bash scripts/hf/{dataset}/metric.sh # Calculate distribution distance
对于结合了所有生成和评估步骤的简化流程:
bash scripts/hf/template/{dataset}.sh # Complete workflow for each dataset
我们通过 Azure OpenAI API 使用闭源模型。请在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' ,
},
}
这里的engine
可以是 Azure 中的gpt-35-turbo
。
运行以下脚本生成合成数据,在下游任务上对其进行评估,并计算真实数据和合成数据之间的嵌入分布距离:
bash scripts/gpt-3.5-turbo/{dataset}.sh
我们使用 GPT-3.5 的文本长度相关提示来控制生成文本的长度。我们在这里引入几个额外的超参数:
dynamic_len
用于启用动态长度机制。word_var_scale
:用于确定targeted_word的高斯噪声方差。max_token_word_scale
:每个单词的最大标记数。我们根据targeted_word(提示中指定)和max_token_word_scale设置LLM生成的max_token。使用笔记本计算真实数据和合成数据之间的文本长度分布差异: notebook/text_lens_distribution.ipynb
如果您发现我们的工作有帮助,请考虑引用如下:
@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 }
}
如果您对代码或论文有任何疑问,请随时发送电子邮件至 Chulin ([email protected]) 或提出问题。