Press "Enter" to skip to content

Polisis: Automated Analysis and Presentation of Privacy Policies

 

 

笔记作者:

IzaiahSun

 

原文作者:Hamza Harkous, Kassem Fawaz, Remi Lebret, Florian Schaub, Kang G. Shin, and Karl Aberer

 

原文标题:Polisis: Automated Analysis and Presentation of Privacy Policies Using Deep Learning

 

原文来源:

usenix security 18

 

原文链接:

https://www.usenix.org/system/files/conference/usenixsecurity18/sec18-harkous.pdf

 

这篇论文发表在USENIX 2018上,这篇文章中提出了一种处理隐私政策的方式,能够从繁杂冗长的隐私政策中提取处关键信息。这个框架的核心是一个以隐私为中心的语言模型,使用了130k个隐私政策作为数据。同时开发了一种新颖的层次化神经网络分类器,同时考虑了高层次的角度以及细粒化的信息。开发了一个应用程序能够同时处理结构化的和非结构化的查询,这个模型能够达到$88.4\%$的准确度。除此之外还开发了一个机器人,在前三个选项中能有$82\%$的准确度。

 

可以在这边访问它的demo(https://pribot.org/polisis)。

 

架构

架构图

这整个框架分为三个部分,分别是应用层,数据层和机器学习层。应用层提供了细粒化的隐私政策信息。在这一层,Query Module接收用户提交的查询信息,在下层提取出用户想要查询的隐私政策内容,然后一个Class Comparison模块被用于匹配用户查询块和隐私政策类别,然后把结果返回给应用层。在数据层,首先去爬取隐私政策所在的网页,然后,把它们分割成语意连贯,合适大小的片(使用图中第二步中的Segmenter)。每个分片结果可以独立地同时被程序接口和人类理解(原文的can be independently consumed)。机器学习层为了实现一个多角度的分析功能,需要有丰富且精细的标记(annotation)这一层从数据层中的Segmenter中接受隐私政策切片,以及从应用层接收用户查询作为输入。片段分类器(Segment Classifier)概率地为每个段分配一组描述其数据实践的类-值对。比如说一条消息(一个segment)的类型的是位置信息的概率$p=0.65$。同样,使用请求分析器(Query Analyzer)从用户请求中提取隐私类,交给类比较器(Class Comparison)。

 

数据层

 

为了预处理隐私策略,数据层在三个阶段使用了分段器(Segmenter)模块:提取、列表处理和分段。数据层不需要任何信息,只需要到隐私策略的所在的网页链接。

 

隐私策略提取

 

首先使用Chrome Headless对目标网页进行爬取,等待网页加载完,以及js脚本被加载以及执行完。Segmenter首先会移除无关的HTML标签,包括script标签,页眉页脚内容,侧边栏及导航栏,注释以及CSS样式。

 

尽管很多在线的隐私政策页面含有一些变化的视图(如弹出窗口,标签切换,可折叠或可展开的段落),但这些内容已经作为HTML文档的一部分被加载结束了,这些的展开和收起都是使用离线的JavaScript脚本完成的。

 

为了验证上面的猜想,我们收集了Alexa.com上面的200个网站的隐私政策页面,使用了一个字符串模糊匹配的方法。使用爬虫收集到的数据和人工访问的数据相似性达到了$99.08\%$。

 

列表聚合

 

接下来,Segmenter会处理文档中所有的有序/无序列表,因为列表中的内容往往跟上面的文本会有一定关联,直接当作普通文本处理,会得到比较大的噪声值。

段落聚合示意图

这边处理列表主要分为两类:一是短列表,我们认为它不超过20个词,就像上图中的内部列表;另一种是长列表,就像上图中的外部列表。短列表Segmenter会直接将每一项和引导句子结合起来,形成一个一个单独的段落(用 <p>
标签包裹起来)。而对于长列表将会转换成一系列的段落,每一段都是独特的元素,将每一段和引导句子结合起来生成一系列段落。(总结,短列表拼成一句,长列表分成多句)

 

隐私政策分片

 

首先会根据HTML中的标签(主要是 <div>
<p>
)进行初始的分段。然后对于一些过长的段落,使用GraphSeg算法(一种生成语义一致片段的无监督学习算法)。它依赖于单词嵌入(word embedding)来生成片段作为相关(语义相似)句子的片段。为此,我们使用自定义的、特定于领域的单词嵌入,这些单词嵌入是我们使用130K隐私策略的语料库生成的。最后,Segmenter将一系列细粒度的片段输出到机器学习层,在机器学习层进行自动分析。

 

机器学习层

 

机器学习层主要包括两个部分:一个是无监督学习算法,从未标记的数据集中构建特定领域(隐私政策)的词向量(Word Embedding);二是一个监督学习模块,构建了一个新颖的分层的隐私政策相关的文本分类器,使用神经网络,来处理单词向量。

 

隐私相关的词嵌入

 

传统的文本分类方法方法依靠于单词和它们的出现频率,泛化能力较差,特别是在一个小规模,且有一定局限数据集上训练。

 

单词嵌入解决了这个问题,它以一种无监督的方式从大型语料库中提取通用词向量,并使它们能够用于新的分类问题(迁移学习)。分类器中的特征不再是词本身,而是成为词向量。因此,由语义相似的词组成的两个文本段将由向量空间中接近的两组词向量(即特征)来表示。这使得文本分类器能够解释训练集之外的单词,只要它们是用于训练单词向量的大型语料库的一部分。

 

虽然存在通用的预训练嵌入,例如Word2vec和GloVe,但是特定领域的嵌入可以获得更好的分类精度。因此,我们为隐私策略域训练了自定义单词嵌入。为此,我们创建了一个包含13万条隐私政策的语料库,隐私政策来源于Google Play。利用这个语料库,我们使用fastText训练了一个单词嵌入模型。使用fastText的一个主要优点是,除了单词之外,它还允许训练子单词(或大小为3到6的字符n-gram)的向量。因此,即使我们在语料库之外有单词,我们也可以通过组合它们的组成子词的向量来为它们分配向量。这对于解释涉及自由形式用户查询的应用程序中出现的拼写错误非常有用。

 

分类数据集

层次分类模型

尽管,隐私相关的词嵌入为分类器提供了很多帮助,但是训练一个分类器来检测一些细粒度的片段需要带标签的数据,这边使用了OOP-115数据集。这个数据集包括115个被专业人士(法学院学生)人工标记的隐私政策。这些标记分为两类,一个是段落级的分片,分为上图中的10个高层次类别。然后,分类者选择分片中的一些部分,使用属性-值对来标记数据,如:

 

数据类型:位置

目的:广告

……

 

分层多标签分类器

 

为了解释策略文本中的多个粒度级别,我们构建了一个分类器层次结构,这些分类器在处理问题的特定部分时进行了单独的训练。

 

在顶层,分类器预测输入段x的一个或多个高级类别(按照上一个图中的灰色方块)。我们训练了一个多标签分类器,它为我们提供了每个高级类别$c_i$发生的概率$p$。除了允许每个片段有多个类别外,使用多标签分类器可以通过简单地将分类概率与阈值0.5进行比较来确定某个类别是否存在于某个分片中。

 

对于那些低层次的类别,一系列分类器被用来预测每一个属性的一个或多个值。我们可以训练一系列多标签分类器来进行属性级的分类。每一个分类器会生成概率值$p(v_j|x)$,对于每一个值$v_j\in V(b)$,其中$b$指特定的属性。比如说,$b$为信息类型,那幺$V(b)$可能是{Financial, Location, User Profile, Health, demographics, cookies……}

 

这种层次结构的一个重要结果是,解释属性级分类器的输出取决于类别的概率。例如,当占主导地位的高级类别是“策略更改(Policy Change)”时,属性“保留期(Data Retention中的Retention Period)”的值的概率是无关的。因此,对于类别$c_i$,在层次结构中,只考虑从该类别下属性。

 

我们在所有分类器内部使用卷积神经网络(CNNs)有两个主要原因,这在类似的分类任务中也很常见。首先,CNNs使我们能够集成预先训练好的单词嵌入,为分类器提供更好的泛化能力。第二,CNN可以识别某一些token是不是良好的指标对于一个指定的类型,通过一种它们在输入片段中的位置是不变的的方式。

分类器神经网络结构

我们在两个层次上使用相似的CNN架构来进行分类,如上图所示。使用NLTK中的PENN Treebank tokenization,将片段分割成token。嵌入层输出这些标记的词向量。我们冻结了该层,防止其权重被更新,以保持隐私策略相关的嵌入中所有单词之间的学习语义相似性。接下来,词向量通过卷积层,卷积层的主要作用是在k个字的窗口上应用一个非线性函数(一个校正的线性单元ReLU)。然后,最大池化层将不同窗口产生的向量组合成一个向量。然后,该向量通过具有ReLU激活函数的第一个全连接层,最后通过第二个全连接层。对最后一层的输出使用sigmoid拟合,以获得可能输出类的概率。采用多标签交叉熵(categorical-crossentropy)作为分类器的损失函数。

 

最后,一共训练了20个属性级的分类器,以及两个类型层的分类器(分别应对片段匪类和非结构化查询)。对于前者,所有的类别都在图三中展示了;对于后者,Other类被忽略了,因为对于用户输入来说,不存在Other类。训练效果如下图所示:

分类效果

应用层

 

对于Polisis,支持结构化查询和非结构化查询。结构化查询是预测的隐私类和策略片上的一阶逻辑谓词的组合。如$\exist s(s\in policy\wedge information\_type(s)=location\wedge purpose(s)=marketing\wedge user\_choice(s)=opt-out)$。而非结构化查询则是自然语言问句。对于一个查询的响应是一组满足谓词的段(对于结构化查询)或匹配用户问题(对于非结构化的查询)。

 

处理非结构化数据

 

我们的第二个Polisis应用程序是PriBot,它支持对隐私政策进行自由形式的查询(以用户问题的形式)。开发PriBot的动力主要来自对话优先设备的兴起,如语音激活的数字助理(如Amazon Alexa和Google Assistant)和智能手表。对于这些设备,链接到隐私策略或大声朗读的现有技术是不可用的。它们可能要求用户在不同的设备上访问与隐私相关的信息和控件,从长远来看这是不可取的。

 

为了支持这些新形式的服务以及该领域中对自动化客户支持的需求,我们将PriBot作为一种直观且用户友好的方法来交流隐私信息。PriBot实时、高精度地回答用户从以前看不到的隐私政策中提出的问题。接下来,我们将形式化的自由隐私QA问题形式化,然后描述我们如何利用Polisis来构建PriBot。

 

问题结构化

 

首先,PriBot的输入包括一个用户问题$q$,这个问题是关于隐私政策的,PriBot将这个问题传送到机器学习层,以及把隐私政策的链接传递的数据层。机器学习层会标记问题$q$,然后根据这个类别,获得每一个段中的属性-值对。这边就涉及到了一个答案排名的问题。

 

排序算法

 

为了回答用户的问题,PriBot通过计算答案$a$和问题$q$之间的接近度得分$s(q, a)$对每个潜在答案$a$进行排序。这在应用层的类比较模块中。为了计算$s(q, a)$,我们进行如下操作。给定段分类器的输出,答案用向量表示:

对于每一个类别$c_i$和值$v_j$,相似的,我们给出了请求分析的结果:

 

接下来,我们计算答案的高级分类的确定性度量。该度量值由预测类别的归一化概率分布($p_n$)的熵得出:

 

类似于两个向量之间的点积,我们计算得分$s(q, a)$为:

由于答案通常比问题更长,并且涉及更多重要特征,因此该分数优先考虑包含问题中重要特征的答案。最小值函数和分母用于将$[0,1]$范围内的分数标准化。

 

评价指标

 

排名分数是一个内部指标,它指定每个部分与问题的接近程度,但并不传递PriBot向用户报告正确答案的确定性。直觉上,当(1)答案在语义上与问题相距较远(即$s(q, a)$较低),(2)Polisis对问题的解释含糊不清(即,将问题分为多个高级类别,从而产生较高的分类熵),或(3)当问题包含未知单词(例如,非英语语言或拼写错误太多)。考虑到这些标准,我们计算置信指标如下:

其中,分类确定性测度$cer(q)$的计算与公式(1)中的$cer(a)$类似,并且$s(q, a)$根据公式(2)计算。已知词分数frac(q)是基于问题词在我们的策略嵌入语料库的词汇中的存在。

 

可能的冲突答案

 

另一个挑战是向用户显示可能相互冲突的答案。一个答案可以描述一般共享条款,而另一个则指定了一个例外(例如,一个答案指定“共享”,另一个答案指定“不共享”)。为了缓解这个问题,我们使用了与机器学习层相同的CNN分类器。并利用OPP-115数据集的可选标签形式:“does”vs“does not”来表示是否存在共享/收集。我们的分类器的交叉验证F1得分为$95\%$。因此,我们可以使用这个分类器来检测排名靠前的答案之间的潜在差异。因此,PriBot的UI可以向用户突出显示潜在的冲突答案。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注