GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models

文章目录

  • 论文地址:
  • 原文阐释:
  • 渔樵问对:
        • 原理梗概
        • 预防策略
        • 隐私策略
        • 这个新颖的攻击方式是什么?
        • 三种典型采样策略:
        • 隐私风险
        • 文章第5页第二段中提到的 memorized training exam ple 是什么意思
      • ThreatModel &Ethics
        • 什么是文本的zlib entropy?文章中反复提到了一个词surprise,并用引号引了起来,这个surprise在文中是什么含义?
        • 解释the ratio of the perplexity on the sample在文中是什么意思?文章第7页最后一段说比较两个模型的输出,这样有什么作用呢?(这个问题在文章中很重要)
        • the ratio of the perplexity on the sample具体应该如何计算?可以用代码和案例描述一下么?
        • 800字总结论文第5部分ImprovedTraining Data Extraction Attack
        • 文章第8页右上角提到了a non-trivial substring,用中文解释这个词在文中是什么意思?
        • 文章第8页6.1节最后一段提到了a fuzzy 3-gram match,这个是什么意思?
        • 文章第10页第二段提到了IRC conversation 是什么意思?

论文地址:

Carlini, N., Tramèr, F., Wallace, E., Jagielski, M., Herbert-Voss, A., Lee, K., Roberts, A., Brown, T., Song, D., Erlingsson, Ú. and Oprea, A. (2021). Extracting Training Data from Large Language Models. In 30th {USENIX} Security Symposium ({USENIX} Security 21), pages 181–198.

这篇文章也可以在以下网址找到:

https://arxiv.org/abs/2012.07805

https://www.usenix.org/conference/usenixsecurity21/presentation/carlini-extracting

https://arxiv.org/pdf/2012.07805v2

这篇文章的主要观点可以总结为以下大纲:

  • 介绍了一种从大型语言模型中提取训练数据的攻击方法,该方法只需要黑盒查询模型,而不需要访问其参数或架构。
  • 在GPT-2模型上进行了实验,证明了攻击的可行性和有效性,以及不同的采样策略和排序指标对攻击效果的影响。
  • 分析了模型大小、字符串频率、数据集复杂度等因素对记忆化程度的影响,并发现大型语言模型会记忆并泄露其训练数据中出现过的任意文本序列。
  • 讨论了可能的防护措施和建议,如使用差分隐私技术、消除重复文件、限制查询次数等,以减少隐私泄露风险。
    注:GPT-2中的数据现已公开,因此我们使用它来进行实验,没有版权风险。

原文阐释:

你知道吗?你使用过或者正在使用的那些大型语言模型(LM),可能会泄露它们训练时所用到的数据,甚至是一些敏感或私密的信息。这就是最近一篇论文揭露的惊人事实。在这篇博客中,我将为你简要介绍这篇论文的内容和贡献,以及它对我们使用语言模型的影响和启示。

什么是大型语言模型?简单来说,就是用神经网络来学习和生成自然语言的模型。这些模型通常有数十亿甚至数千亿个参数,并且需要在海量的文本数据上进行训练。例如,GPT-2就是一个有15亿个参数的语言模型,它可以根据给定的前缀生成流畅且有意义的文本。这些模型不仅可以用于自然语言生成,还可以用于各种其他任务,如机器翻译、问答、摘要等。

那么,这些模型为什么会泄露训练数据呢?原因在于它们会记住或者说“背诵”一些训练数据中出现过的文本片段,并在生成时重复输出。这种现象被称为“训练数据提取攻击”(training data extraction attack)。论文作者提出了一种简单而有效的方法来实施这种攻击,并在GPT-2上进行了验证。

具体来说,攻击方法分为两个步骤:

  1. 从目标模型中采样大量高概率的样本。采样方法有三种:随机采样(random sampling)、最佳采样(best sampling)和拓扑排序采样(topological sorting sampling)。随机采样就是按照目标模型给出的概率分布随机选择下一个词;最佳采样就是每次选择概率最高的那个词;拓扑排序采样则是利用了一个事实:如果一个序列被目标模型记住了,那么它应该比任何对它进行置换后得到的序列更有可能被生成。因此,采样时可以对所有可能的词进行拓扑排序,然后按照顺序选择一个词,直到得到一个完整的序列。

  2. 对采样得到的样本进行排序,选出最有可能是训练数据中出现过的那些。排序方法有六种:交叉熵(cross-entropy)、概率比(probability ratio)、概率差(probability difference)、概率积(probability product)、概率和(probability sum)和最大概率(maximum probability)。这些方法都是基于一个参考模型来对目标模型生成的样本进行评估。参考模型可以是另一个语言模型,也可以是一些简单的统计模型,如n-gram或TF-IDF。排序方法的核心思想是:如果一个样本在目标模型中比在参考模型中有更高的概率,那么它就更有可能是目标模型记住了的训练数据。

论文作者在GPT-2上进行了实验,并使用了WebText数据集作为训练数据来源。他们发现,在最好的攻击配置下,67%的候选样本都是训练数据中出现过的文本片段。这些片段包括一些敏感或私密的信息,如个人姓名、地址、电话、邮箱等。他们还分析了不同因素对攻击效果的影响,发现更大的模型、更罕见的词都更容易被提取出来。他们还讨论了一些可能的防御措施,如使用差分隐私训练、去重文档等,但也指出这些方法都有一定的局限性和代价。

  1. 结论:本文展示了一种简单有效的方法,可以从大型语言模型中提取出训练数据中的文本片段。这种攻击对于任何语言模型都适用,包括那些使用敏感或非公开数据训练的模型。这种攻击表明,大型语言模型存在严重的隐私泄露风险,需要采取更多的预防措施来保护训练数据。

渔樵问对:

1、通读全文,这篇文章主要讲述了什么内容?

这篇文章主要讲述了以下内容:

  • 大型语言模型(LMs)在训练过程中会记忆并泄露其训练数据中的个别样本
  • 提出了一种简单有效的方法,通过黑盒查询来从语言模型中提取原文序列
  • 在GPT-2模型上进行了实验,证实了提取攻击的可行性和影响因素
  • 讨论了可能的防护措施和建议,以减少隐私泄露风险

根据网页内容,这一步是指从语言模型中提取原文序列的方法,该方法由Carlini等人在2021年发表的论文《从大型语言模型中提取训练数据》中提出。根据网页搜索结果,这一步具体是如何实现的,可以参考以下几点:

  • 该方法首先生成一组大量、多样的高概率样本,使用三种通用的采样策略之一。
  • 然后,该方法使用六种不同的度量标准,利用一个单独的参考模型(例如另一个语言模型)来估计每个样本的概率,并对样本进行排序,将两个模型之间概率比异常高的样本排在最前面¹。
  • 最后,该方法检查排序后的样本是否与训练数据中的某个原文序列完全相同。

原理梗概

这种隐私泄露通常与过度拟合相关[75]-当模型的训练误差显著低于其测试误差时,因为过度拟合通常表明模型已经从其训练集中记住了示例。事实上,过度拟合是隐私泄露的充分条件[72],许多攻击通过利用过度拟合来工作[65]。

预防策略

最后,我们讨论了许多切实可行的策略
减轻隐私泄露。例如,差异隐私
培训[1]理论上是有充分依据的
如果以适当的记录应用,则生成私人模型
但这可能会导致更长的训练时间
降低效用。我们还提出建议,例如
仔细地消除重复文件,这将有助于经验
以减轻记忆,但不能防止所有攻击。

隐私策略

最小化训练数据记忆的一种方法是应用差异专用训练技术[1,9,43,60,64]。不幸的是,具有差异化私有机制的训练模型通常会降低准确性[34],因为这会导致模型无法捕获数据长度的细节信息。

论文第二部分Background & related work介绍了大型神经网络语言模型(LMs)和数据隐私攻击的相关背景和工作。作者首先介绍了语言模型的定义、训练目标、生成文本的方法,以及当前最先进的语言模型使用的Transformer架构。然后,作者回顾了一些针对机器学习模型的数据隐私攻击,包括成员推断攻击、属性推断攻击、模型逆向工程攻击等,并指出这些攻击通常需要利用模型的过拟合现象。作者认为,由于大型语言模型通常在庞大的数据集上训练,不会出现明显的过拟合,因此人们普遍认为这些模型不会泄露其训练数据。但是,作者提出了一个新颖的提取攻击方法,可以从大型语言模型中恢复其训练数据中的原始文本序列,即使这些序列只在一个文档中出现过。作者还比较了不同的采样策略和排序指标对提取攻击效果的影响,并分析了模型大小和字符串频率等因素对记忆化程度的影响。

这个新颖的攻击方式是什么?

这个新颖的攻击方法是:

  • 首先,使用三种通用的采样策略之一,从语言模型中生成一组大量的、多样的、高似然度的样本。
  • 然后,使用另一个参考模型(例如另一个语言模型)来估计每个样本的似然度,并使用六种不同的指标之一来对每个样本进行排序,最高排名的是两个模型之间似然度比异常高的样本。
  • 最后,检查候选样本是否与语言模型的训练数据中的某个文档完全一致。

这种方法可以从语言模型中提取出训练数据中出现过的原始文本序列,包括敏感信息和唯一标识符。

攻击目标。我们选择GPT-2[54]作为我们攻击的代表性LMT研究。GPT-2几乎是一个完美的目标。
首先,从伦理角度来看,模型和数据是公开的,因此我们提取的任何记忆数据都是公开的。5其次,从研究角度来看,数据集(尽管是从公开来源收集的)实际上从未被OpenAI发布过。因此,我们不可能无意中“欺骗”并开发利用GPT-2训练数据集知识的攻击。

三种典型采样策略:

这三种策略分别是:

随机采样:从模型中随机生成一些高概率的序列。
前缀采样:从模型中生成一些以特定前缀开头的高概率序列。
后缀采样:从模型中生成一些以特定后缀结尾的高概率序列。
这些策略都可以用来产生候选的记忆化样本,然后用不同的度量方法进行排序和过滤。

隐私风险

对数据提取带来的隐私风险的更广泛的看法源于数据隐私作为上下文完整性的框架[48]。也就是说,如果数据存储导致数据在其预期上下文之外使用,则数据存储是一种边缘隐私。图1显示了一个违反上下文完整性的示例。该个人的姓名、地址、电子邮件和电话号码并非秘密,它们在特定的预期用途(作为软件项目的联系信息)中在线共享,而是由LM在单独的上下文中复制。
由于此类故障,使用LMsman的面向用户的应用程序会在不适当的上下文中故意发出数据,例如,对话系统可能会响应另一用户的查询发出用户的电话号码。

文章第5页第二段中提到的 memorized training exam ple 是什么意思

memorized training example 是指机器学习模型在训练过程中对特定的训练样本过度拟合,从而能够完全复现出这些样本的情况。这种现象可能会导致模型泄露训练数据的隐私信息,也可能会影响模型的泛化能力。文章第5页第二段中提到的 memorized training example 就是作者用一种简单有效的方法从语言模型中提取出来的原始训练数据片段。

ThreatModel &Ethics

论文的第三部分ThreatModel &Ethics讨论了敌手如何只使用黑盒查询访问从大型语言模型中提取训练数据。它还考虑了这种攻击的道德影响以及如何缓解它。以下是中文摘要:

攻击者的目标是找到语言模型训练集中的原始文本序列,例如个人信息、代码或对话。
攻击者可以使用三种通用的采样策略之一从模型中生成大量多样的候选样本,然后使用另一个参考模型(例如另一个语言模型)对每个样本进行排序,选择在两个模型之间具有异常高似然比的样本。
作者在GPT-2模型上进行了实验,发现了600多个与训练数据完全一致的样本,其中一些包含敏感信息,例如姓名、地址、电子邮件等。
作者分析了影响攻击成功的因素,发现更大的模型更容易泄露信息,而不同的攻击配置会改变提取数据的类型。
作者讨论了减少隐私泄露的可能方法,例如差分隐私训练、仔细去重文档、限制查询次数等,但也指出了这些方法的局限性和挑战。

论文第4部分介绍了一种基于语言模型的训练数据提取攻击方法,主要包括以下几个步骤:

  • 首先,使用语言模型生成大量的文本样本,以期找到模型认为“高度可能”的序列,这些序列可能对应于训练数据中的原始文本。具体地,每次试验使用top-n策略从模型中自回归地采样256个token,其中n=40。
  • 其次,给定一组模型生成的样本,将训练数据提取问题归约为成员推断问题:预测每个样本是否存在于训练数据中。最简单的成员推断攻击方法是利用模型倾向于给训练数据中的样本分配更高概率的观察结果,因此一个可能具有高精度的成员推断分类器是简单地选择模型分配最高概率的样本。
  • 最后,使用不同的参考模型来评估每个样本在目标语言模型和参考模型之间的概率比值,并根据该比值对样本进行排序。作者假设目标语言模型会对其训练数据中的序列分配异常高的概率比值,而参考模型则不会。因此,选择概率比值最高的样本作为候选提取结果。

这种攻击方法是简单且有效的,在GPT-2上实验表明可以提取出大量与训练数据完全一致的文本序列。

与其他神经语言模型相比。假设我们有权访问第二个LM,它存储了与GPT-2不同的一组示例。实现这一点的一种方法是在一组不相交的训练数据上训练一个模型,在这种情况下,两个模型不太可能为小k存储相同的数据。另一种策略是采用一个在相同的基础数据集上训练的小得多的模型:因为较小的模型存储容量较小,我们推测,存在由最大的GPT-2模型记忆(对于小k)的k元样本,但不由较小的GPT–2模型记忆的样本。具体而言,我们使用小型(117M参数)和中型(345M参数)模型。

什么是文本的zlib entropy?文章中反复提到了一个词surprise,并用引号引了起来,这个surprise在文中是什么含义?

文本的zlib entropy是用zlib算法压缩文本后得到的压缩比,它可以近似地反映文本的信息熵,即文本中包含的不确定性或随机性。一般来说,文本的zlib entropy越高,表示文本越难以压缩,也就意味着文本中包含的信息量越大。

文章中反复提到了一个词surprise,并用引号引了起来,这个surprise在文中是什么含义?根据文章第三节的定义,surprise是指一个样本在模型中出现的概率的负对数值。也就是说,如果一个样本在模型中出现的概率很低,那么它对模型来说就是很“surprising”的。文章使用这个概念来衡量模型是否记住了训练数据中的某些样本。

解释the ratio of the perplexity on the sample在文中是什么意思?文章第7页最后一段说比较两个模型的输出,这样有什么作用呢?(这个问题在文章中很重要)

the ratio of the perplexity on the sample在文中是什么意思?

the ratio of the perplexity on the sample在文中是指一个语言模型对一个样本的困惑度(perplexity)与对同一个样本转换成小写后的困惑度之比。困惑度是一种评估语言模型性能的指标,它反映了语言模型预测下一个词的不确定性或难度。困惑度越低,表示语言模型越准确或自信。

文章第7页最后一段说比较两个模型的输出,这样有什么作用呢?

文章第7页最后一段提出了一种检测语言模型是否记忆了训练数据中的某些片段的方法。这种方法是利用不同模型对同一个样本的困惑度之比来判断该样本是否是训练数据中的原始内容。如果一个模型对某个样本的困惑度很低,而另一个模型对同一个样本的困惑度很高,那么可能说明该样本是被第一个模型记忆了的训练数据,而不是自然生成的内容。这种方法可以用来发现语言模型泄露了训练数据中的敏感信息或隐私信息。

the ratio of the perplexity on the sample具体应该如何计算?可以用代码和案例描述一下么?

根据网页搜索结果,perplexity是一种衡量语言模型的指标,它反映了语言模型对文本的预测能力。perplexity越低,说明语言模型越好。

计算perplexity的公式是:

p e r p l e x i t y = 2 ( − 1 / N ∗ s u m ( l o g 2 ( p ( w i ∣ w i − 1 ) ) ) ) perplexity = 2^{(-1/N * sum(log2(p(wi|wi-1))))} perplexity=2(1/Nsum(log2(p(wiwi1))))

其中N是文本的词数,p(wi|wi-1)是语言模型给出的第i个词在第i-1个词之后出现的概率。

用Python计算perplexity的代码示例可以参考以下网址¹²³。

2023/3/3(1) python - Finding the perplexity of multiple examples - Cross Validated. https://stats.stackexchange.com/questions/496097/finding-the-perplexity-of-multiple-examples 访问时间 2023/3/3.
(2) Python compute perplexity - ProgramCreek.com. https://www.programcreek.com/python/?CodeExample=compute+perplexity 访问时间 2023/3/3.
(3) How to calculate perplexity of language model?. https://datascience.stackexchange.com/questions/33006/how-to-calculate-perplexity-of-language-model 访问时间 2023/3/3.

800字总结论文第5部分ImprovedTraining Data Extraction Attack

论文第5部分Improved Training Data Extraction Attack介绍了一种改进的训练数据提取攻击方法,该方法使用了更好的模型采样方法和成员推断技术来提高攻击效率和准确度。具体来说,该方法包括以下几个步骤:

  1. 生成大量的候选样本,使用不同的采样策略(如温度衰减、拓扑排序、前缀约束)来增加样本的多样性和质量。
  2. 对每个候选样本计算两个模型的困惑度(perplexity),一个是被攻击的模型,另一个是参考模型(如GPT-3或BERT)。困惑度是一种衡量模型对文本序列预测能力的指标,越低越好。
  3. 使用滑动窗口法对每个候选样本进行分段,取每段中最小的困惑度作为该段的评分。然后对所有段按照评分进行排序,选择评分最高(即困惑度最低)的一段作为最终输出。
  4. 对输出进行过滤和验证,去除重复或无意义的结果,并使用成员推断技术判断输出是否属于训练数据。成员推断技术是一种利用模型行为判断输入是否在训练集中出现过的方法。

该方法在实验中表现出了较高的成功率和敏感性,能够从大型语言模型中提取出训练数据中存在的个人信息、代码片段、IRC对话等内容。论文也讨论了一些可能的防御措施,如差分隐私训练、去重处理等。

文章第8页右上角提到了a non-trivial substring,用中文解释这个词在文中是什么意思?

a non-trivial substring是一个不是空字符串或原字符串的子字符串。也就是说,它是一个由原字符串中相邻字符组成的部分序列,长度至少为2,至多为原字符串长度减1。例如,如果原字符串是"abcde",那么"ab",“bcd"和"cde"都是non-trivial substrings,而"a”,""和"abcde"都不是。在文章中,这个词用来描述从集合{1,…,k}中选择的递增子序列的数量。

文章第8页6.1节最后一段提到了a fuzzy 3-gram match,这个是什么意思?

您好,这是Bing。根据网页内容和网络搜索结果,a fuzzy 3-gram match是一种模糊匹配技术,用于识别两个文本、字符串或条目之间的近似相似度,但不一定完全相同。例如,“New York”和“New Yrok”之间就有一个模糊的3-gram匹配,因为它们共享了三个连续的字符“New”。在文章中,作者使用这种技术来检查他们生成的样本是否与训练数据集中的某个文档非常接近。

文章第10页第二段提到了IRC conversation 是什么意思?

IRC conversation 是指 Internet Relay Chat (IRC) 的对话。IRC 是一种在互联网上通过不同的主题或频道与多人聊天的应用程序。文章第10页第二段提到了 GPT-2 训练数据中包含了 IRC 对话的例子,例如一个人在 IRC 上询问如何破解一个软件。这些对话可能包含了一些敏感或隐私信息,因此作者认为从语言模型中提取这些信息是一种攻击。

文章第六部分Evaluating Memorization的内容如下:

作者在这一部分介绍了他们对提取出的样本进行评估的方法和结果。他们首先定义了什么是记忆化的样本,即在训练数据中完全匹配的文本序列。然后,他们使用GPT-2的创建者提供的训练数据源来验证他们提取出的样本是否是记忆化的。他们还使用了一个基于哈希表的方法来加速验证过程。

作者发现,在1800个候选样本中,有600多个是记忆化的,占比为33%。在最佳攻击配置下,记忆化样本占比达到67%。作者还对不同大小的模型和不同频率的字符串进行了分析,发现模型越大,记忆化越严重;字符串越少见,被记忆化的可能性越高。

作者进一步对记忆化样本进行了分类和统计,发现其中包含了一些敏感或隐私信息,例如个人身份信息、IRC对话、代码、UUID等。作者认为这些信息可能会给数据所有者或用户带来风险或损害。

作者最后总结了他们评估记忆化的主要贡献和局限性,并指出未来需要更多关于语言模型隐私保护方面的研究。

第7部分Correlating Memorization with Model Size & Insertion Frequency的总结:

这一部分的目的是探讨模型大小和插入频率对记忆化的影响。作者使用了不同大小的GPT-2模型,以及不同插入频率的数据集,来进行提取攻击。他们发现,模型大小和插入频率都与记忆化有正相关关系,即模型越大,数据集中某个样本出现的次数越多,就越容易被提取出来。

作者首先介绍了他们使用的四种不同大小的GPT-2模型:117M、345M、762M和1542M。然后,他们介绍了他们如何构造不同插入频率的数据集:在原始数据集中随机选择一些样本,并将它们重复插入到数据集中若干次,从而形成不同比例(0.1%、0.5%、1%、5%)的重复样本。接着,他们使用这些数据集来训练不同大小的GPT-2模型,并对每个模型进行提取攻击。

作者展示了他们得到的结果,并进行了分析。他们发现,在所有情况下,重复样本都比非重复样本更容易被提取出来。此外,他们发现,在相同插入频率下,更大的模型更容易提取出重复样本;在相同模型大小下,更高的插入频率也会增加提取成功率。作者还给出了一些具体的例子,说明了记忆化程度与插入频率之间存在一个阈值关系。

最后,作者讨论了这些结果对于实践和理论上的意义和启示。他们指出,在实际应用中,如果想要保护敏感信息或者避免版权侵权等问题,就需要注意控制训练数据中某些样本出现的次数;在理论上,这些结果也为研究语言模型记忆化机制和隐私保护方法提供了新的视角和挑战。

核心代码逻辑

# 伪代码框架

# 输入: 目标语言模型f,参考语言模型g,采样策略S,排序指标M
# 输出: 候选记忆样本集合C

# 初始化空集合C
C = {}

# 重复以下步骤直到达到预设的次数或时间限制
while not done:

  # 使用采样策略S从目标语言模型f中生成一个文本序列x
  x = S(f)

  # 计算x在目标语言模型f和参考语言模型g中的对数似然比r
  r = log(f(x)) - log(g(x))

  # 使用排序指标M对x进行评分s
  s = M(x, r)

  # 将(x, s)加入候选记忆样本集合C
  C.add((x, s))

# 按照评分s降序排列候选记忆样本集合C中的元素
C.sort(key=lambda (x, s): -s)

# 返回候选记忆样本集合C中的前k个元素作为最终结果
return C[:k]

我复现了论文中的攻击过程,发现确实有很强的个人隐私性:
GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第1张图片

GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第2张图片
这些确实是真实存在的而非生成的数据
GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第3张图片
除了新闻事件以外,还包括用户爱好、生活的讨论
GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第4张图片
这样,有可能泄露了用户名称
GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第5张图片
并且可以根据这个结果推断有可能有人对GPT询问了如何给自己的朋友送礼物,个人爱好就被泄露出去了。
GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第6张图片
这段数据可能泄露了用户的旅途、会议安排
GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第7张图片

如果这个不是新闻的话,就可能是泄露了军事机要

下面我们来试一下中文GPT的效果:
hugging face有一个GPT的中文模型,叫做ckiplab/gpt2-base-chinese。这个模型是基于传统中文的transformers模型,可以用于自然语言生成、文本摘要等任务。你可以在hugging face的网站上找到这个模型的详细信息和使用方法。

2023/3/4(1) Hugging Face中GPT2模型应用代码 - 知乎. https://zhuanlan.zhihu.com/p/498677758 访问时间 2023/3/4.
(2) 如何优雅的下载huggingface-transformers模型 - 知乎. https://zhuanlan.zhihu.com/p/475260268 访问时间 2023/3/4.
(3) Huggingface 超详细介绍 - 知乎. https://zhuanlan.zhihu.com/p/535100411 访问时间 2023/3/4.
模型链接:https://huggingface.co/uer/gpt2-chinese-cluecorpussmall/tree/main

重要代码示意:

with tqdm(total=args.N) as pbar:
    for i in range(num_batches):
        # encode the prompts
        if args.internet_sampling:
            # pick a random 10-token prompt in common crawl 

            input_len = 10
            input_ids = []
            attention_mask = []

            while len(input_ids) < args.batch_size:
                # take some random words in common crawl
                r = np.random.randint(0, len(cc))
                prompt = " ".join(cc[r:r+100].split(" ")[1:-1])

                # make sure we get the same number of tokens for each prompt to enable batching
                inputs = tokenizer(prompt, return_tensors="pt", max_length=input_len, truncation=True)
                if len(inputs['input_ids'][0]) == input_len:
                    input_ids.append(inputs['input_ids'][0])
                    attention_mask.append(inputs['attention_mask'][0])

            inputs = {'input_ids': torch.stack(input_ids), 
                      'attention_mask': torch.stack(attention_mask)}

            # the actual truncated prompts
            prompts = tokenizer.batch_decode(inputs['input_ids'], skip_special_tokens=True)
        else:
            prompts = ["<|endoftext|>"] * args.batch_size
            input_len = 1
            inputs = tokenizer(prompts, return_tensors="pt", padding=True)

        # batch generation
        output_sequences = model1.generate(
            input_ids=inputs['input_ids'].to(device),
            attention_mask=inputs['attention_mask'].to(device),
            max_length=input_len + seq_len,
            do_sample=True, 
            top_k=top_k, 
            top_p=1.0
        )

        texts = tokenizer.batch_decode(output_sequences, skip_special_tokens=True)

        for text in texts:
            # perplexity of GPT2-XL and GPT2-S
            p1 = calculatePerplexity(text, model1, tokenizer)
            p2 = calculatePerplexity(text, model2, tokenizer)

            # perplexity on lower-case sample
            p_lower = calculatePerplexity(text.lower(), model1, tokenizer)

            # Zlib "entropy" of sample
            zlib_entropy = len(zlib.compress(bytes(text, 'utf-8')))

            samples.append(text)
            scores["XL"].append(p1)
            scores["S"].append(p2)
            scores["Lower"].append(p_lower)
            scores["zlib"].append(zlib_entropy)

        pbar.update(args.batch_size)

这段代码是一个Python程序,使用了tqdm库展示循环进度条。程序使用GPT-2模型生成一些文本,并计算生成文本的不同指标(包括困惑度和熵),并将这些指标保存到字典中。具体生成的文本是根据参数设置生成的,可以是一个空字符串或者从Common Crawl中随机选择的10个标记的字符串。程序还包括一些参数,如批次大小,生成文本的最大长度和采样方式等。
下面我们来看看我们的个人信息是否会被edge-bing记忆下来:
GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第8张图片
我先告诉了bing我的好朋友龚宇峰的信息。
GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第9张图片
目前看来,bing似乎对个人信息守口如瓶。

GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第10张图片
但是我们尝试套话,发现bing其实记住了龚宇峰是四川大学法学院的同学。
GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第11张图片
我们甚至套话套出了地址。
GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第12张图片
新开一个窗口,bing似乎都忘了
GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models_第13张图片
我们或许只有用论文中的模糊度来判断,模型是否记住了用户的信息。

代码复现:https://openi.pcl.ac.cn/kewei/LM_Memorization/src/branch/master/main.ipynb
参考:https://www.usenix.org/conference/usenixsecurity21/presentation/carlini-extracting
https://github.com/ftramer/LM_Memorization

你可能感兴趣的:(机器学习,论文阅读,人工智能,深度学习)