事件处理系统

文档序号:1409748 发布日期:2020-03-06 浏览:5次 >En<

阅读说明:本技术 事件处理系统 (Event processing system ) 是由 洛伦佐·艾伯顿 阿利斯泰尔·约瑟夫·巴斯蒂安 蒂莫西·大卫·巴登 于 2018-03-16 设计创作,主要内容包括:在事件处理系统处,平台的用户事件被处理以提取有关该平台的用户的聚合信息。在系统处接收与用户事件有关的查询,并且从该查询确定至少一个查询参数。公开了各种隐私控件,以用于确保响应于查询而释放的任何信息都不能被用来个体地标识用户或推断有关个体用户的信息。(At an event processing system, user events of a platform are processed to extract aggregated information about users of the platform. A query relating to a user event is received at the system and at least one query parameter is determined from the query. Various privacy controls are disclosed for ensuring that any information released in response to a query cannot be used to individually identify a user or infer information about an individual user.)

事件处理系统

技术领域

本发明涉及一种用于处理事件的系统。

背景技术

存在着多种上下文,在其中提取与平台的用户有关的聚合信息和匿名信息是有用的。

例如,了解受众在社交媒体平台上正在发布和消费的内容是很多人长时间以来的目标。社交数据的价值被估计为1.3万亿美元,但其中大部分尚未开发。由于所存在的社交媒体内容的海量性和多样性,以及在流行的社交媒体平台(如脸书(Facebook)、推特(Twitter)、领英(LinkedIn)等)上的用户数量庞大,因此提取相关信息具有挑战性。由于保护社交媒体用户的隐私至关重要,因此这也变得更具挑战性。

如今,在名为DataSift PYLON下可用的数据平台连接到来自各种社交媒体平台(数据源)的社交数据的实时提要,并通过复杂的数据增强、过滤和分类引擎来披露见解,并通过数据源所需的适当的隐私协议为数据提供分析。

它允许从这些社交媒体平台上的帖子、分享、重新分享、点赞、评论、查看、点击和其他社交交互中获取见解。对社交媒体数据采用隐私优先的方法,由此(除其他事项外)以聚合和匿名的形式专门提供结果,这种形式使得无法单独识别任何社交媒体用户。

在事件处理的上下文中,需要在各种上下文中分析平台上的独特用户数量,平台不仅是事件对应于社交交互的社交媒体平台,而且是具有其他类型的用户事件的其他类型的平台。

发明内容

为了保护用户隐私,期望对从处理诸如记录社交媒体平台上的社交交互的事件之类的用户事件的系统中发布信息施加限制,该事件被处理以提取关于社交交互的聚合信息。目的是确保永远不会从系统释放的聚合信息中识别出个体用户,并防止可归因于个体用户的任何信息的释放。

根据本发明,在事件处理系统处,平台的用户事件被处理以提取关于平台的用户的聚合信息。在系统处接收与用户事件有关的查询,并且从该查询中确定至少一个查询参数(过滤条件)。

本文公开了各种新颖的隐私控件,以用于确保响应于查询而释放的任何信息都不能被用来个体地识别用户或被归因于个体用户。这些可以个体地使用或结合起来使用,下面将详细介绍各种示例。

本发明的第一方面涉及一种处理平台的用户事件以提取关于该平台的用户的聚合信息的方法,该方法包括在事件处理系统处:接收与该用户事件有关的查询;从该查询中确定至少一个查询参数;向该用户事件应用精确计数过程,以用于通过个体地识别和计数那些用户事件来计算针对满足该至少一个查询参数的用户事件集合的精确计数;生成用于该精确计数过程的误差数据;使用所生成的误差数据来在该精确计数过程中引入人为误差,从而生成针对该用户事件集合的近似计数,其与该精确计数偏差一个不可预测量;通过释放包括针对满足该至少一个查询参数的该用户事件集合的该近似计数或从该近似计数中导出的聚合信息来响应相关查询。

本发明的发明人已经认识到,在使用精确计数过程导出聚合信息的情况下,其中对用户事件个体地进行计数(而不是例如基于HyperLogLog或其变体之一的概率估计过程),这可以将系统开放给某种类型的攻击,在这种攻击中,有可能在某些情形中从释放的信息中识别个体用户或推断有关特定用户的信息。下文将详细解释这种攻击,但现在只要知道通过将人为误差故意引入到计数过程中并使用带有此故意误差的计数作为用于对查询进行响应的基础,可以使攻击无效。

在实施例中,该计数是针对满足该至少一个查询参数的该用户事件集合的独特用户计数,或者是针对满足该至少一个查询参数的该用户事件集合的事件计数。可替代地,可以以这种方式生成独特用户计数和事件计数。

该方法可以包括量化该近似计数的步骤,该聚合信息包括量化的计数或从该量化的计数中导出。

对于不精确的独特用户计数,该方法可以包括将不精确的用户计数与阈值进行比较的步骤,其中响应于确定该不精确的独特用户计数不小于由该阈值所指示的最小允许用户计数来释放该聚合信息。

从针对多个存储桶中的每个存储桶的该查询中可以确定至少一个查询参数。可以对每个存储桶应用该精确计数过程,对于每个存储桶个体地不可预测地生成相应的误差数据,并使用该误差数据来在针对该存储桶的该精确计数过程中引入人为误差,从而为每个存储桶生成不精确的存储桶计数,从而在该存储桶计数上展现出不同的人为误差。也就是说,为了确保该存储桶计数上的误差范围。

该方法可以包括量化每个不精确的存储桶计数以用于释放的步骤。

还可以生成所有存储桶上的总体计数,对应于所有存储桶计数的总和。例如,这可以是索引中所有事件的总体计数,也可以是索引事件中满足从查询中确定的至少一个总体查询参数的事件子集(即具有两个过滤阶段,以隔离感兴趣事件,然后提供对那些事件的结果细分)。精确计数过程也可以被应用于为索引中的用户事件或满足至少一个总体查询参数的用户事件的子集生成不精确的总计数,每个存储桶对应于其(另一个)子集,以使个体存储桶计数提供总体计数的细分。

存储桶计数可以是独特用户计数,将其每一个与存储桶编校阈值进行比较,其中不精确的独特用户计数低于由存储桶编校阈值所指示的最小用户计数的任何存储桶被编校。也就是说,将扣留针对该存储桶的聚合信息。

总体计数可以是总体独特用户计数,并且该方法包括将总体独特用户计数与门控阈值进行比较以确定是否接受或者拒绝该查询的步骤,其中响应于确定总体独特用户计数至少是门控阈值所指示的最小用户计数,该查询被接受。

每个用户事件可以在针对该用户事件的保留期到期时从该事件处理系统中被清除,从而一旦被清除则该用户事件就不被计数。

低于年龄阈值的用户的用户事件可以不被计数。

每个用户事件可以包括该平台用户之一的标识符,并且该计数可以是从该用户事件集合中的该用户标识符生成的独特用户计数。

该精确计数过程可以包括:计算针对满足该至少一个查询参数的该用户事件集合的精确计数;以及一旦被计算出就使用该误差数据来修改该精确计数,以生成与该精确计数偏差不可预测量的该近似计数。例如,可以从该精确计数的百分比范围中不可预测地选择该不可预测量。

可替代地,当生成计数时,可以在该过程的一些其他(一个或多个)阶段引入人为误差。

本发明的第二方面涉及一种处理平台的用户事件以提取关于该平台的用户的聚合信息的方法,该方法包括在事件处理系统处:接收与该用户事件有关的查询;从该查询中确定至少一个查询参数;计算针对满足该至少一个查询参数的用户事件集合的独特用户计数;比较该独特用户计数和计量阈值;并且如果该独特用户计数超过该计量阈值所指示的最大允许用户计数,则拒绝该查询。

此上限是一种简单有效的方法,可以防止在本文中被称为“计量”的情况,该计量是指对大量战略性用户群使用广泛的查询以推断有关整个平台上活动的信息,诸如在给定时间段内在社交媒体平台上(任何形式的)社交交互或(任何人口统计数据的)活动用户的总数。

在实施例中,可以从索引中的用户事件的代表性样本来估计与计量阈值比较的独特用户计数。

如果独特用户计数没有超过最大允许用户计数,则可以从索引中的更大数量的用户事件(例如,索引中的所有用户事件)重新计算独特用户计数。

可以将重新计算的用户计数与门控阈值进行比较,并且在该事件中,如果重新计算的用户计数小于门控阈值所指示的最小允许用户计数,则拒绝该查询;否则接受该查询。

可以将计量阈值设置为针对平台的全局独特用户计数的函数,例如将计量阈值设置为平台的全局独特用户计数的百分比。

可以取决于对用户事件的统计分析来设置计量阈值。

本发明的第三方面涉及一种处理平台的用户事件以提取关于该平台的用户的聚合信息的方法,该方法包括在事件处理系统处:接收与该用户事件有关的查询;从该查询中确定至少一个查询参数;生成针对满足该至少一个查询参数的用户事件集合的至少一个计数;将量化应用于该至少一个计数以生成用于释放的至少一个量化计数,该量化计数是多个允许量化值之一,其中该量化具有可变量化范围,该量化范围是该允许量化值的相邻对之间的差。

在实施例中,对于较大的允许量化值,该量化范围可以增加。

例如,量化范围可以相对于该允许量化值“线性地”增加,使得量化步长随受众规模(独特用户数目)线性地缩放。举例来说,一组可能的量化规则可能如下:

针对查询的受众规模 每个存储桶上的量化步长
<10,000个独特用户 向下舍入到最接近的100
<50,000个独立用户 向下舍入到最接近的500
<100,000个独特用户 向下舍入到最接近的1000
<500,000个独特用户 向下舍入到最接近的5000

请注意,这只是一个示例,并且步长可以是非线性的(例如,它们可以随着受众规模的增加而平方增加)。

可以生成多个计数,并且可以将量化应用于所有计数。

本发明的第四方面涉及一种处理平台的用户事件以提取关于该平台的用户的聚合信息的方法,该方法包括在事件处理系统处:接收与该用户事件有关的查询;从该查询中确定至少一个查询参数;计算针对满足该查询参数的用户事件集合的独特用户计数;设置针对该查询的可变门控阈值为所述至少一个查询参数的函数;比较独特用户计数和针对该查询设置的门控阈值;并且如果独特用户计数小于针对该查询设置的门控阈值所指示的最小允许用户计数,则拒绝查询,由此最小允许用户计数取决于该至少一个查询参数。

在实施例中,该至少一个查询参数可以包括用户属性,并且该可变门控阈值可以设置为用户属性的函数。

本发明的第五方面涉及一种处理平台的用户事件以提取关于该平台的用户的聚合信息的方法,该方法包括在事件处理系统处:接收与该用户事件有关的查询;从该查询中确定至少一个查询参数;针对满足该至少一个查询参数的用户事件集合,计算误差裕度至少为百分之二的近似计数;将量化应用于该近似计数以生成量化计数;通过释放包括量化计数或从量化计数中导出的聚合信息来响应查询。

用至少2%的误差裕度(E)计算用户事件集合的近似计数(CA),因为它与针对该集合的精确计数(CE)偏差一个不可预测量(D),其中D符合具有标准偏差(σ)的概率分布,并且误差裕度E被定义如下:

也即是:

Pr(D=d)=f(d)

其中Pr(D=d)是D=d的概率,并且f(d)是标准偏差σ至少为精确计数CE的2%的概率分布。

在获取针对用户事件的计数的上下文中,这是一个比可能预期的大得多的误差。然而,本发明的发明人已经认识到,当与量化结合时,该量级的误差确保了由系统释放的信息被匿名化。特别地,这种组合提供了针对下面详细阐述的“集合平衡攻击”形式的强大保护。为了实现这一点,通常期望在大约2-3%之间的误差裕度E是足够的。

该误差可以是人为地引入到精确计数过程中的误差,也可以是概率计数估计过程所固有的误差,前提是采取步骤来确保此误差的足够量级。即,误差裕度可以是将人为误差引入到应用于用户事件的精确计数过程中的结果,或者它可以是应用于用户事件以生成计数的概率计数估计过程所固有的。

在实施例中,误差裕度可以至少是百分之三。

量化可以至少具有一百的量化范围(例如,可以通过将其舍入到最接近的一百来量化计数)。

注意,特别是关于第一和第五方面,偏差是“不可预测的”,因为外部观察者不可能根据提交给系统的不同查询结果来预测将对新的给定查询引入什么偏差,因此偏差对外部观察者来说是随机的。因此,偏差不仅在偏差是不确定的时候,而且在偏差是确定的但是在对于不了解它是如何被创建的系统用户(即,不了解用于创建偏差的过程或者不了解该过程已经应用的基础数据的系统用户)来说是不可预测的时候都被认为是不可预测的。为避免疑问,应注意,术语“随机”和“随机化”与术语“不可预测的”可互换使用,并且因此不仅限于不确定性行为,还包括在这种意义上显得是随机的确定性行为。

例如,根据本发明的第一方面,可以在真正随机的意义上生成误差数据(例如,基于量子力学现象,在这种情况下,即使知道如何确定偏差也无法预测偏差)但是也可以在伪随机的意义上生成误差数据,在这种情况下,在不知道偏差是如何生成的情况下偏差是不可预测的并且显得是随机的。例如,在通过将算法应用于种子来伪随机地生成偏差的情况下,该偏差是不可预测的,并且因此在不了解算法和种子的情况下显得是随机的。(还应注意,为避免疑问,对于任何给定查询引入的偏差程度甚至由于量化而可能从系统释放的信息中是无法导出的)。

在任何上述内容中,平台可以是用于发布和消费内容的内容发布平台,用户事件与该内容发布平台的用户的内容的发布和消费有关。

然而,应注意,尽管本文中提及的“用户事件”可以与社交媒体平台上的社交交互(发布/消费内容)有关,但是本发明不限于此,并且该系统可以被用于处理其他类型的事件。该平台可以是具有便于用户操作的用户基础的任何平台。例如,该平台提供者可以是电信运营商如Vodafone或Verizon、租车/乘车共享平台如Uber、在线商场如亚马逊、以及用于管理病历的平台。事件例如可以是经由平台实施、安排或执行的通话记录、乘车记录、财务交易记录、病历变更等。在许多情形中,从此类事件中提取匿名和聚合信息是有益的,其中需要获得对此类事件集合上的诸如独特用户计数或事件计数之类的计数。

在这方面,应注意,本文中关于社交媒体平台的交互事件(内容项目)的所有描述均等同地适用于社交媒体以外的平台的其他类型的事件。每个用户事件可以是与之相关联的与用户有关的任何事件。每个用户事件可以与平台的用户之一执行的动作或者另外与平台的用户之一有关的动作相关,并且包括该用户的标识符。即,每个用户事件可以是平台上与用户相关的动作的记录。

这样的事件可以包括与它们相关的用户属性和/或针对动作的元数据或与之相关联,从而允许使用本文所述的任何技术来处理(例如,过滤和/或聚合)那些事件,例如以对满足过滤器的事件数量进行计数(例如,从查询中导出或在查询中定义的至少一个查询参数)以及那些事件上的独特用户数量。

本发明的另一方面涉及一种事件处理系统,该事件处理系统包括:保存可执行指令的计算机储存器;以及一个或多个处理单元,其被配置为执行那些指令以执行本文公开的任何方法步骤或系统功能。

本发明的另一方面涉及一种计算机程序产品,该计算机程序产品包括存储在计算机可读存储介质上的可执行指令,并且该可执行指令在事件处理系统处被执行时被配置为执行本文公开的任何方法步骤或系统功能。

附图说明

为了更好地理解本发明,并且为了示出可以如何实现本发明的实施例,通过示例的方式对以下附图进行参考,其中:

图1A示出了内容处理系统的索引构建器的示意性框图;

图1B示出了内容处理系统的实时过滤和聚合组件的示意性框图;

图2示出了其中可以实现内容处理系统的计算机系统的示意性框图;

图3示出了根据本发明的内容处理系统的框图;

图4示出了以用户为中心的内容处理系统的示例;

图5示出了用于对索引中的事件进行过滤和计数的方法的流程图,并且图5A示出了应用于某些事件的方法的示例;

图6示出了有序数据结构的示意图;

图7示出了某些隐私控件的高级示意图;

图7A示出了最小受众规模的门控的示例;

图7B示出了量化和编校的示例;和

图8图示出了计量防止技术的示例。

具体实施方式

图1A示出了用于处理社交媒体平台的内容项目604的内容处理系统的一部分的高级概述。

每个内容项目604——在本文中也被称为“交互事件”或简称为“事件”——是社交媒体平台上的“交互”(社交交互)的记录,其可以是社交媒体用户发布一条新内容或消费一条现有内容。稍后给出不同的发布或消费动作的示例。这些事件由社交媒体平台提供,其在此上下文中被称为“数据提供者”。它们作为一个实时数据流或多个实时数据流(例如,用于不同类型事件的不同流)而被提供,实时数据流在本文中也被称为“水带”(firehose)。也即是说,当发生对应的社交交互时,在内容处理系统的索引构建器600处实时接收事件604。

可以在索引构建器600内创建诸如索引602之类的索引。索引是在其中存储事件602的选择性地制成的副本以进行处理的数据库。例如,索引可以是由查询用户——即希望向其提交查询的内容处理系统的用户(诸如客户)——创建以供他自己使用的定制数据库,或者索引也可以是由内容处理系统的运营商创建以供多个客户使用的共享索引。索引602保存所选事件604的副本,由索引构建器600的过滤组件608根据指定的过滤规则来选择这些副本。在本文中被称为针对索引602的“交互过滤器”606中定义这些过滤规则。以稍微不同的术语来看,索引可以被视为全局数据库的部分副本(全局数据库是从数据提供者处接收到的所有事件的集合),其通过创建与交互过滤器606相匹配的事件604的副本而被填充。

可以在“记录”过程中创建索引602,该过程通过提供交互过滤器606来进行初始化,并且从初始化的定时开始运行以便从该点以后在事件实时发生时捕获事件。索引也可能包含历史事件。当与交互过滤器606相匹配的事件变得可用时,由过滤组件608应用交互过滤器608,以便从水带捕获那些事件。从社交媒体平台上发生新的社交交互时,从数据提供者处获取“实时”水带作为输入并实时捕获匹配事件的意义上来说,该过程是实时过程。记录过程继续运行,直到客户606(在定制索引的情况下)或服务提供者(在共享索引的情况下)选择暂停它,或者在一些情况下例如在违反对客户的系统限制时,它可以自动暂停。

每个事件604包括已经执行了对应交互的社交媒体用户的用户标识符。如稍后进一步详细解释的,当事件604到达过滤组件608时,优选地,每一个事件都包括与它相关的内容的副本;某些“原始”事件(即由数据提供者提供的事件)在首次被提供时可以不包括实际内容,在这种情况下,可以在内容处理系统的在其中执行“上下文构建”的“增强”阶段获得并添加该实际内容。

数据提供者从社交媒体平台的用户数据例如从社交媒体用户的社交媒体账户(以对隐私敏感的方式-参见下文)使社交媒体用户的用户属性可用。这种用户属性的显著特性是:它们是自声明的,即社交媒体用户自己已经声明了那些属性(与需要从内容本身推断出的用户属性相反)。这些属性可以与原始事件分开提供,原始事件表示来自数据提供者的内容的发布和消费。例如,可以提供属性水带,其实时地传达社交媒体简档的创建或修改。在那种情况下,作为上下文构建的一部分,可以使用来自属性水带的用户属性来增强与内容的发布和消费有关的事件604,以使每个增强事件604包括针对已经执行过交互的社交媒体用户的用户属性集合的副本。

上下文构建背后的想法是向在某些方面缺少上下文的事件添加上下文。例如,传入事件中的用户标识符(ID)可能只是一个匿名令牌(以保护用户隐私),它没有孤立的含义;通过添加用户属性关联。在数据库术语中,可以将上下文构建视为非规范化(垂直联接)的一种形式。另一示例当数据提供者提供“点赞”或与先前事件的其他互动的单独水带的示例。

客户或服务提供者不限于简单地设置他的交互过滤器606的参数;也可以自由地设置由索引构建器600的分类组件612用来对过滤后的事件进行分类的规则。即,客户/服务提供者可以选择创建分类器610,以定义用于生成元数据并在事件被存储在索引602中之前将元数据附着到事件上的分类规则。例如,这些分类规则可以是默认的,也可以是经由内容处理系统的API所提供的库规则,或者它们可以是客户或服务为特定应用而自己编码的规则。

附着到事件604上的个体元数据在本文中被称为“标签”。标签可以包括例如主题指示符、情绪指示符(例如,指示对某个主题的肯定、否定或中立的情绪)、数值分数等,客户或服务提供者可以根据需要自由定义标签。例如,它们可以是基于简单关键字分类的规则(例如,将某些关键字分类为与某些主题相关,或者当它们出现在一条内容中时表达肯定的情绪;或者将肯定分数归因于某些关键字,将否定分数归因于其他关键字,并设置规则以在一条内容上将个体分数结合以给出总体分数),或使用更高级的机器学习处理,例如用以识别以自然语言表达的情绪、意图等的自然语言识别,或用以识别内容的图像数据中的某些品牌、商品等的图像识别。将(从与它们相关的内容派生的)元数据标签添加到事件中的过程在下文中被称为“丰富化”。

除了通过丰富化添加的定制标签之外,当事件在水带中被接收时可能已经具有一些标签,例如指示对应交互的定时的时间戳、地理位置数据等。

在根据客户的定制定义以这种方式将(附加)标签附着到事件的情况下,将过滤后和丰富化的事件存储在索引602中,随着接收到越来越多与交互过滤器608相匹配的事件,将随着时间的推移而填充索引602。

可以以这种方式创建多个索引,以服务提供者/客户期望的任何方式为不同的应用量身定制。

重要的是要注意,特别是在隐私社交媒体数据的情况下,即使客户使用自己的规则创建了索引602,并且代表他将该索引保存在内容处理系统中,也永远不允许他直接访问它。相反,仅允许他运行对索引602的受控查询,该查询返回从其内容派生的、与内容发布平台上的内容的发布和/或消费有关的聚合信息。由内容共享系统释放的聚合信息被匿名化,即以无法识别个体社交媒体用户的方式来进行制定和释放。这部分地是通过基于交互和独特用户计数(见下文)来编译信息的方式来实现的,并且部分地是通过编校仅涉及少量用户(例如,少于一百个)的信息来实现的。

下面将对查询进行更详细的讨论,但现在足以说用于匿名聚合信息的两个基本构建块是:

1)交互计数,和

2)关联的独特用户计数。

这些计数既可以针对整个索引602而被生成,也可以(在大多数情况下)针对索引602中定义的事件子集而被生成,这些计数可以如它们在本文中所指的那样根据“查询过滤器”对索引602中保存的事件进行进一步过滤而被隔离。综上所述,这些传达了每个独特用户针对有关事件集合(子集)的交互次数,这是对有关事件集合(子集)的总体用户行为的有力度量。

交互计数只是索引306或子集中的事件的数量,独特用户计数是这些事件之中的独特用户的数量。也就是说,对于在整个索引602上的查询,满足(匹配)索引的交互过滤器606的事件的数量以及共同执行对应交互的独特社交媒体用户的数量;对于在由(一个或多个)查询过滤器定义的索引602的子集上的查询,交互计数是也与该(一个或多个)查询过滤器(例如606a、606b,图1B-参见下文)相匹配的事件的数量以及共同执行对应交互子集的独特社交媒体用户的数量。连续的查询过滤器可以被应用于,例如,隔离特定的用户人群或特定的主题集,然后将那些结果细分为“存储桶”。注意,这并不意味着必须连续提交查询;单个查询可以请求结果的一个细分或多个细分,并且提供此细分所需的过滤层都可以响应该查询而被执行。例如,针对按性别和国家定义的人口统计结果可以被细分为时间序列(每个存储桶是一个时间间隔),或者可以根据性别、最流行主题等按频率分布进行细分。可以以直观的方式在诸如仪表板之类的用户界面上图形地呈现这些结果。稍后将对此进行详细描述。

例如,在对聚合查询(独特用户和交互)的响应中按性别(“男”、“女”、“未知”之一)和年龄范围(“18-25”、“25-35”、“35-45”、“45-55”、“55+”之一)进行聚合,可以针对以下每个存储桶生成计数:

Figure BDA0002270496310000131

Figure BDA0002270496310000141

尽管它们很简单,但是这些基本构建块非常强大,特别是在与索引602中丰富化的事件中的用户属性和定制的元数据标签耦合时。例如,通过为索引602中的不同事件子集生成交互和用户计数,通过根据用户属性和标签的不同组合进行过滤而对该计数进行隔离,外部客户可以提取出非常丰富的信息,例如关于高度针对性的用户人群的特定喜好或厌恶(基于在那些人群上展现的社交交互)或在索引或索引子集上的最流行主题,而无需允许外部客户直接访问索引602本身。

例如,当要识别特定用户人群中的趋势时的一个有用概念是“过度索引”的概念。这是这样一个观念:特定人群对某种类型的交互比平均交互更多。当要隔离实际上特定于特定人群的行为时,这是非常有用的。例如,可能在人群内,某个主题所观察到的每个独特用户的交互次数明显多于其他主题(暗示用户更频繁地发布或消费与该主题相关的内容)。但是,这可能只是因为这是一个非常流行的主题,而且其他人群也观察到相似的每个独特用户的交互次数。因此,这并没有传达有关目标人群本身的具体信息。但是,例如,一个主题针对目标用户人群而过度索引,即,在目标人群之中观察到每个独特用户的交互次数比在更广泛的人群之中每个独特用户的交互次数更多,那么这传达了特定于有关目标人群的信息。

通过示例的方式,图1B示出了内容处理系统的实时过滤和聚合组件652,其实现了用以利用两个阶段的过滤来响应查询以给出响应于该查询的细分的步骤。

在过滤的第一阶段654a中,将第一查询过滤器626a应用于索引602(被示为多个索引中的一个)以隔离与第一查询过滤器626a相匹配的事件的子集656。第一查询过滤器626a可以例如由客户在查询中明确地定义,以便隔离他感兴趣的(一个或多个)特定主题的用户的(一个或多个)特定人群(或两者的组合)。

在过滤的第二阶段654b中,将第二查询过滤器262b(存储桶过滤器)应用于事件的子集656。将每个存储桶过滤器应用来隔离子集656中满足该存储桶过滤器的事件,即,对应的存储桶中的事件,以便可以为该存储桶计算出总交互和用户计数。在响应于查询而返回的结果集合660中,包括了针对每个存储桶的总用户和交互计数(在此示例中被标记为针对存储桶1-4的656.1-4)以及针对整个事件的子集656的总用户和交互计数。示出结果660以图形形式呈现在用户界面上,该用户界面是仪表板654。即,结果660被表示为在显示器上显示给客户的图形信息。还可以例如以JSON格式将基本结果集合660提供给客户,以使客户可以轻松地将他自己的处理应用于其上。

可以在第一阶段过滤626a处以这种方式隔离多个子集,并且可以在第二阶段626b处将每个子集细分为多个存储桶。

存储桶可以例如是基于时间的,即每个存储桶包含在不同时间间隔内的子集656中的事件。这些作为图形时间序列655a被示为呈现在仪表板654上,其中时间沿着x轴并且计数或从计数导出的度量(诸如每个独特用户的交互次数)沿着y轴,这是一种根据时间来表示细分的方便且直观的方式。作为另一个示例,存储桶可以是基于主题的(例如,以提供子集656中的最流行主题的细分)或者是基于用户的(例如,根据年龄、性别、地点、工作职能等提供细分)、或者两者的结合。在这种情况下,将结果表示为频率分布或直方图655b可能是方便的,以允许针对不同的存储桶在计数或从计数中导出的度量(例如,每个用户的交互)之间进行容易的比较。应当理解,这些仅仅是示例,并且可以以在某些情况下可能更方便的不同方式表示针对不同存储桶的结果。例如通过在仪表板654上显示在整个子集656上的总用户和交互次数或每个独特用户的交互总数等等,针对每个存储桶的信息可以与针对整个子集656的等效信息并排显示,以便进行比较。例如,仪表板654可以作为客户可经由互联网访问的Web界面的一部分而被提供。

图2示出了计算机系统的示意性框图,其中各种设备连接到诸如互联网的计算机网络102。这些包括连接到网络102并且由社交媒体平台的用户106操作的用户设备104。

术语“社交媒体平台”在本文中是指诸如社交网络之类的内容发布平台,其允许社交媒体用户106通过发布内容以供其他社交媒体用户106消费来经由社交媒体平台进行社交交互,以及消费其他社交媒体用户106已发布的内容。社交媒体平台可以具有以这种方式进行社交交互的大量用户106——数以万计甚至更多。当今最大的社交媒体平台目前拥有接近20亿用户的用户基础。发布的内容可以具有多种格式,其中文本、图像和视频数据是一些最常见的形式。从社交媒体平台的任何用户106可以访问的意义上而言,一条已发布的内容可以是“公开”的(在一些情况下,可能需要社交媒体平台内的账户,而在其他情况下,任何Web用户都可以访问之),也可以是“隐私”的,其中仅使社交媒体用户106的有限子集(诸如共享用户的朋友)可以访问它。即,使隐私内容仅由发布它的用户所选择的有限受众访问。社交媒体平台的用户106之间的友谊和其他关系可以体现在社交媒体平台的社交图中,该社交图是以计算机可读格式表示那些关系的由计算机实现的数据结构。通常,可以从诸如智能电话、平板电脑和其他智能设备之类的各种不同用户设备104或诸如膝上型计算机或台式计算机之类的其他通用计算设备访问社交媒体平台。这可以经由网络浏览器或者备选地经由针对有关的社交媒体平台的专用应用(app)。社交媒体平台的示例包括领英(LinkedIn)、脸书(Facebook)、推特(Twitter)、汤博乐(Tumblr)等。

社交媒体用户106可以通过在平台上生成诸如状态更新、帖子等等之类的新内容或者通过发布指向诸如文章等等之类的外部内容的链接来在社交媒体平台上发布内容。例如通过点赞、再次分享、评论、点击或以其他方式与该内容互动、或者例如在新闻提要等中简单地在不主动与之互动的情况下向他们显示该内容(即在一些上下文中,向社交媒体用户显示一条内容本身就是一种消费动作,为此创建一个交互事件,因为假定用户已经看到了所显示的内容),他们可以消费由其他社交媒体用户106发布的内容片段。也就是说,术语“消费”既可以涵盖主动消费也可以涵盖被动消费,在主动消费中,很明显用户已经做出了故意消费一条特定内容的选择,在被动消费中仅知道已经使一条特定内容可供用户使用并且假定他已经消费了它。

为了实施社交媒体系统,提供了至少一个数据中心形式的后端基础设施。通过示例的方式,图2示出了连接至网络102的第一和第二数据中心108a、108b,但是将理解,这仅是示例。大型社交媒体系统尤其可以由地理分布在世界各地的大量数据中心来实现。每个数据中心108a、108b被示出为包括多个服务器110。每个服务器110是物理计算设备,其包括至少一个处理单元112(例如,CPU)以及可对其进行访问的电子储存器114(存储器)。个体服务器110可以包括多个处理单元112;例如大约五十个。个体数据中心可以包含数十个、数百个甚至数千个这样的服务器110,以便提供处理社交媒体用户106之间经由社交媒体平台进行的大量社交交互所需的非常显著的处理和存储器资源。为了发布新内容并消费现有内容,用户设备104经由网络102来与数据中心108a、108b通信。在每个数据中心108a、108b内,数据可以经由该数据中心的内部网络基础设施(未显示)来在不同服务器110之间通信。在必要时,不同数据中心108a、108b之间的通信可以经由网络102或经由直接连接数据中心的专用主干116来进行。本领域技术人员将熟悉社交媒体的技术及其可能的实现,因此在本文中将不对其进行进一步的描述。

潜在的大量社交媒体用户106之间的频繁且多样化的社交交互包含大量信息,这些信息在许多不同的上下文中都是有价值的。然而,处理该内容以提取有意义且与特定查询相关的信息提出了各种挑战。

所描述的本发明的实施例提供了一种内容处理系统,其以上面概述的方式处理上述类型的事件,以便以与那些查询有关的目标信息来响应来自查询用户120的查询。查询用户120操作计算机设备118,在计算机设备118处他们可以生成这样的查询并将其提交给内容处理系统。

现在将参考图3描述包括内容处理系统202的数据处理系统200,图3是针对系统300的示意性框图。

内容处理系统202被示为包括内容管理器204、以及属性管理器206、内容处理组件208和查询处理机210。内容处理系统202的内容管理器204、属性管理器206、内容处理组件208和查询处理机210是功能组件,表示在内容处理系统202内实现的不同高级功能。

在硬件级别,可以在社交媒体系统后端本身的数据中心108a、108b中(或者在那些数据中心中的至少一个中)实现内容处理系统202。即,通过存储在电子储存器114中并在处理单元112上执行的内容处理代码模块。由处理单元112从电子储存器114中取得内容处理代码模块的计算机可读指令,以用于在处理单元112上执行,以便执行本文所述的内容处理系统202的功能性。在社交媒体数据中心108a、108b本身中实现内容处理系统202通常是更有效的,并且还为社交媒体用户106提供更高级别的隐私和安全性,这在查阅以下内容后将变得显而易见。然而,也可以在单独的数据中心中实现它(尤其是在仅处理公共内容时),该数据中心经由互联网102从社交媒体平台接收(一个或多个)水带。

如下面所解释的,内容管理器204和属性管理器206形成内容处理系统202的隐私化阶段210a的一部分。它们进行协作以通过在事件和用户属性被传递给内容处理组件208之前从事件和用户属性中移除所有用户身份来为社交媒体用户提供内部隐私层。内容处理组件208和查询处理机210构成内容处理系统202的内容处理阶段210b,在该阶段处理事件和属性而无需访问用户在社交媒体平台中的基本身份。这种隐私化对于隐私内容尤其重要。

删除用户身份所采取的步骤可以被看作是匿名化的一种形式。但是,为避免疑问,应注意,移除用户身份并不能完全匿名化事件212或用户数据,因为仍然有可能通过基于用户的属性和行为进行仔细的分析来识别个体用户。出于这个原因,内容处理系统202永远不会释放匿名事件和用户数据,并且在移除用户身份之上采取上述附加匿名步骤,以确保永远不会从系统202释放的聚合信息中识别出个体用户。

为了实施隐私化,内容管理器204接收社交媒体平台的事件212,其中,如所指出的,每个事件212表示已经在社交媒体平台上发生的社交交互,并且包括执行该交互的社交媒体用户106之一的用户标识符214。即,发布或消费了与事件相关的该条内容的用户。事件212中的用户标识符214构成了社交媒体用户106的公共身份。例如,这些可以是用户名、句柄或对于其他可以访问有关的发布内容的社交媒体用户106可见或以其他方式可访问的其他标识符。作为隐私化阶段210a的一部分,内容管理器修改事件212,以用修改后的事件222中的对应的匿名用户标识符224替换公共标识符214,其可以例如是随机生成的令牌。在内容处理阶段210b内,匿名令牌224充当公共标识符214的替代物。内容管理器204以一致的方式用匿名令牌224替换公共标识符214,使得在公共标识符214和对应的令牌224之间存在一对一的关系。但是,使公共标识符214本身在任何时候都不可被内容处理阶段210b访问。

除了这些匿名标识符224允许将每个用户的事件链接在一起这一事实之外,这些匿名令牌224不传达关于社交媒体用户106本身的身份的任何信息。

如此,属性管理器206的重要功能是生成在本文中被称为“匿名用户描述”240之一。每个匿名用户描述240包括用于社交媒体用户106之一的属性集合,并且与用于该用户的匿名用户标识符224相关联。在图3B的示例中,每个匿名用户描述240包括匿名用户标识符224的副本,并且与修改后的事件222分开地提供给内容处理组件208。这继而又允许内容处理组件208通过将匿名用户描述240中的匿名令牌与事件224中的那些相匹配并用那些属性来增强那些事件,从而使个体事件222与有关的针对用户的属性链接在一起。用户描述240可以随着用户属性改变或随着新用户信息变得可用而被更新,以并入后续事件中。可替代地,可以改为将用户属性作为事件222本身的一部分而提供给内容处理组件208。

属性管理器206可以从社交媒体系统本身的用户数据242确定用于匿名用户描述240的用户属性226。例如,形成社交媒体系统内的社交媒体用户的账户的一部分的用户数据。社交媒体用户数据242可以例如包括基本人群信息,诸如性别、年龄等。由此,属性管理器206可以确定基本用户属性,诸如性别属性、年龄(或年龄范围)属性等。

从社交媒体系统本身的用户数据242确定的用户属性在本文中被称为第一类型的用户属性,或者等效地被称为“原生”属性(对于社交媒体平台本身来说是原生的)。属性管理器206还可以能够在某些情形中从其他数据源确定其他类型的用户属性。

查询处理机210处理由查询用户120提交给内容处理系统202的传入查询。这些查询本质上是对与社交媒体系统内的内容的发布和/或消费有关的聚合信息的请求。如上所指出的,这可以涉及应用(一个或多个)查询过滤器,其中一般来说,可以根据用户属性226和/或标签的任何期望的组合来定义查询过滤器。内容处理组件208对事件222进行过滤以过滤出与查询过滤器不匹配的任何事件。

查询的基本元素实质上落入以下两个类别之一中:指定用户人群的元素(根据用户属性);和指定特定内容的元素(根据标签)。对于前者,目的是对事件222过滤出期望的人群之外的用户(按用户属性进行过滤)。对于后者,目的是过滤出与特定标签无关的事件(按元数据进行过滤)。

例如,对于根据一个或多个用户属性和一个或多个标签(参见上文)定义的查询,内容处理组件208过滤出没有那些属性的用户的任何事件222以及与那些标签不匹配的任何事件222,仅留下具有那些属性的用户的并且也与那些标签相匹配的事件。从过滤后的事件(即剩余事件)中,内容处理组件208可以提取期望的聚合和匿名信息。

应当理解,这是出于说明目的而呈现的相对简单的示例,当然可以构建更复杂的查询并返回具有更详细信息的结果。例如,针对指定用户人群(如由属性集合所定义的)的任何热门主题的常规查询可以作为结果而返回一个或多个流行主题以及正在与该主题互动的并且在该人群中的独特用户数量。作为另一个示例,请求关于指定主题流行的人群的信息的一般查询可以返回用户属性集合以及具有那些属性并且最近与该主题互动过的独特用户数量。在这里,上面提及的过度索引的概念变得很相关:例如,对查询的响应可以识别主题被过度索引的人群(就属性而言),即表明该主题不仅在该人群内流行,而且比所有人群(或至少更广泛的人群)上的平均水平更流行。

如所指出的,诸如主题之类的某些类型的标签,可以通过处理多条已发布内容216本身来生成——例如在文本的情况下使用自然语言处理而在静态图像或视频的情况下使用图像识别。可以在删掉用户身份之前或之后(或二者)执行此丰富化。

提交给内容处理系统202的查询被实时处理和响应,其中在此特定上下文中,实时意味着在内容处理系统202处接收到查询与内容处理系统202返回结果之间只有两秒钟或更短的延迟。响应于查询本身的提交,由内容处理组件208执行响应于查询所需的过滤。即,当查询被接收时,内容处理组件208实时地执行过滤。事件的任何预处理或丰富化不需要被实时执行,并且例如可以在系统的相关部分处接收到事件时被执行。

一旦已经根据需要对事件222进行了过滤以响应有关的查询,内容处理组件208就从过滤后的事件中实时提取关于社交媒体平台上的社交交互的匿名聚合信息。即,关于社交媒体用户106发布和/或消费的内容的聚合信息。

显而易见的是,随着内容处理系统202的使用,将不断生成新的事件212。例如,对于流行的社交媒体平台,随着用户频繁发布新内容或消费现有内容,每分钟可以生成数十万个新事件。为了处理大量数据,仅在有限的时间间隔(例如30天左右)内将所得的匿名事件222保留在匿名内容处理阶段210b中。在那种情况下,响应于查询而返回的结果仅与该时间间隔内社交媒体平台内的活动有关。

可替代地,保留事件222的时间量可以取决于事件本身,而不是代替这种性质的总括保留规则。例如,与较流行的内容有关的事件可以被保留更长的时间。这允许基于请求而释放针对较流行内容的旧信息。

图3还示出了本发明的一个实施例中的内容处理组件210的细节。内容处理组件被示为包括增强组件272,其接收事件222和用户描述224。例如,这些可以在分开的水带中被接收。增强组件利用用户属性226来增强事件224。也就是说,对于事件222中的每一个,增强组件向该事件222添加与该事件222中的用户标识符相关联的用户属性的副本。增强事件223被传递到索引构建器274,其对应于图1A中的索引构建器600,并且如上所述操作以创建填充有选定和丰富化的增强事件223的索引278。使内容处理组件210的实时过滤和聚合组件276可访问索引278,其如上面参考图1B所述进行操作,以便在被查询处理机210指令这样做时实时过滤和聚合索引中的事件。在图3A中还示出了索引278以及过滤和聚合组件276。根据保留策略从索引278中清除事件223。

如上面所指示的,尽管隐私化阶段210a对于隐私内容特别重要,但它不是必不可少的,并且在一些上下文中对于公共内容尤其可以被省略。在那种情况下,可以使用公共标识符214代替匿名标识符224,将上述技术直接应用于原始事件212项目。

下面参考图4描述在一些上下文中优选的用于内容处理系统202的架构,但是首先解释导致该架构的一些考虑因素。

存在各种上下文,在其中期望在针对特定查询所选择的数据集合上计算独特用户数量。例如,对于请求细分为多个存储桶的查询,如上所述,针对每个存储桶的计数。

在当前被用来处理大量时间相关数据的大多数索引系统中,事件是按时间组织的。例如,可以根据时间在诸如数据库服务器之类的多个节点上对事件进行“分片”(水平分割)。这是分片时间相关事件的自然方法,诸如来自数据提供者的传入水带中的事件。

通过以时间为中心的分片,在多个节点上获得近似独特用户计数的存储器有效的方式是使用概率数据结构,诸如HyperLogLog++。除了空间有效之外,HyperLogLog(HLL)数据结构还具有一个方便的性质,即,可以将在一个节点上计算出的对象与在另一节点上计算出的对象合并,并且所得的HLL对象仍然可以给出对两个(或更多)节点上的不同作者数量的良好近似;也就是说,误差率仍然很低,并且不会因为将多个对象合并在一起而增加。

在当前上下文中,即使在单个查询中,也会有需要检索被细分为可能数千个存储桶的信息。例如,可能期望过滤索引278中特定年龄范围和国家的人的事件,并通过在其上应用附加的过滤方法(例如通过其工作职能、通过每个行业工作职能分享的热门文章,等等)返回按其行业细分为存储桶的人的计数。利用HLL,生成对这种性质的单个查询的响应可能需要生成数千个HLL对象。此外,单个用户可以一次运行多个查询,并且最重要的是,可以存在多个用户同时使用该系统,这意味着为所有查询用户处理每个节点上的HLL对象(并通过网络传送它们以针对每个查询对它们进行合并)的总体存储器需求变得非常重要。

与上述类型的以时间为中心的索引系统对照而言,图4的内容处理系统202具有以用户为中心的索引架构,该架构允许在减少存储器需求的情况下快速地确定在与过滤器相匹配的事件集合之中独特用户的计数。就存储器使用和计算速度二者而言,均以高于HLL的效率获得计数。在下面描述的主要实施例中,没有利用HLL对象,并且与HLL对照而言,产生了精确计数。然而,描述了替代实施例,其中利用了HLL对象并且计数是估计。

通过更改数据在磁盘上的布局方式以及在群集的各个节点上的分布方式,可以获得这种提高的效率。

不是根据时间对事件进行分组,而是根据用户对事件进行分组:想法是将针对特定用户的所有事件分配给同一节点以便在该节点上进行处理,并将其连续存储在该节点处的本地储存器中,即,使得针对不同用户的事件不会在本地储存器中被交织在一起。这样,为了计算针对某个查询的独特用户数量,仅对满足所应用的过滤器的不同用户之间的边界进行计数就足够了,而无需存储到目前为止遇到的所有用户ID的记录(否则将需要这种记录来跟踪已计数的用户)。此外,由于针对给定用户的所有数据都被发送到同一节点,因此对所有节点上的独特计数求和也是安全的,而不会出现用户被“重复计数”的风险(即同一用户被多次计数)。

如上所指出,独特用户计数是可以由内容处理系统202释放的基本信息片段之一,并且本技术允许其被快速提取以响应于查询而迅速释放。独特用户计数也与隐私策略方面高度相关:如上所指出,为了维护社交媒体用户106的隐私,希望实施约束何时可以释放此类信息的隐私策略。特别地,只有在该存储桶中的独特用户的总数超过最小阈值时,才可以释放针对任何给定存储桶的信息的释放,如果不满足该阈值,则对其进行编校。也就是说,对于任何给定的查询,每个对应的存储桶都需要满足隐私策略。利用本技术,可以非常快速地为每个存储桶生成用户计数,从而允许对每个存储桶执行非常快速的检查,以确定是否有必要对该存储桶应用编校。因此,利用这种以用户为中心的架构,可以以比HLL更高的效率响应查询,并可以确保强大的隐私约束。

通过将按用户的数据路由到针对一系列用户的指明节点,并在每个节点处实施“分段”(stage)合并,可以实现对按用户分组的数据进行维护,在“分段”合并中,将新数据(新事件)临时“停放”(即,临时存储)在该节点的“分段区域”(队列)中,并实施周期过程以对新数据进行排序并将其与该节点处已有的现有事件合并。

图4示出具有以用户为中心的架构的内容处理系统202的示意性框图,其被示出为包括多个处理节点302(“内容处理器”)。节点302是处理设备,每个包括至少一个并且优选地包括多个处理单元,诸如CPU。即,处理节点302是计算机设备,诸如服务器。处理单元可以例如是单核处理器或多核处理器的个体核心。无论如何,每个处理单元都是物理单元,其可以通过与同一内容处理服务器中执行该服务器内的并行处理的其他处理单元同时从该处理单元可访问的存储器中获取内容处理代码的指令并执行这些指令来执行内容处理代码。此外,每个节点302可以与其他节点302同时执行这样的处理,以在节点302上对在内容处理系统202处在(一个或多个)水带中接收到的传入事件316(诸如图2的匿名事件222)执行并行处理。

在图4中示出了八个个体节点302a-h,但是在实践中预期可以使用更多的处理节点来处理在流行的社交媒体平台上发布和消费的大量内容。节点302进行协作以实现图3的实时过滤和聚合组件276,以便有效地对事件进行过滤和计数。

图4的节点302是位于数据中心中的服务器,并且例如可以是社交媒体平台本身的数据中心108a、108b之一中的一组服务器110。数据中心具有由数据中心的内部高速网络基础设施提供的内部网络312,节点302可以经由该内部网络312来与内容处理系统202的其他组件进行通信。

每个节点302都可以访问其自己的本地计算机储存器(即对该节点是本地的),在其中它可以存储和修改数据以执行其内容处理功能,分别针对节点302a-h被标记为303a-h。这可以包括易失性和/或非易失性存储器,例如固态或磁性储存器(或两者的组合)。术语“磁盘”有时被用作节点处的本地储存器的简写,尽管应该理解,该术语不一定暗示传统的旋转磁盘储存器,还涵盖了固态储存器(例如)。

节点302也可以访问共享计算机储存器314;也就是说,在两个或多个节点312之间共享并且可以经由数据中心的内部网络312访问。它可以位于数据中心本身,或者它也可以位于外部并可以经由连接到内部网络312的外部连接进行访问(或两者的组合)。

除了在内容处理系统202的节点302上执行的内容处理代码之外,控制代码也在内容处理系统202内被执行。控制代码经由内部网络312在节点302上协调内容处理,以确保其以有效且可靠的方式进行实施。可以在节点302之一处或在数据中心的单独计算机设备处执行此操作,也可以以分布式的方式在多个此类设备处执行此操作,前提是以允许其对节点302的总体可见和控制的方式。

在这方面,内容处理系统202被示为包括内容分配器304、过滤器协调器306和总计数生成器308。这些是内容处理系统202的功能组件,表示由控制代码当在内容处理系统202内被执行时所实现的不同高级功能。组件304-308被示为连接到内部网络312,以表示需要协调这些功能的数据中心内的信令是经由本地网络312而发生的这一事实。

如所指示的,图4的内容处理系统202的关键特征是,表示社交媒体平台上的社交交互的传入事件316——即,社交媒体用户发布新内容或消费现有内容——被分配给个体节点302以用于基于那些事件中的用户ID进行处理,以便将具有匹配用户ID(即,对应于同一社交媒体用户)的所有事件分配给同一节点。即,基于执行该交互的用户的(匿名)身份来分配表示交互的每个事件。即,用于社交媒体平台的每个独特用户标识符被精确地指派给节点302之一,并且那个节点负责过滤和聚合与该独特标识符相关联的所有事件。

注意,在当前上下文中,在将针对该用户的所有事件(对应于该用户执行的所有社交交互)分配给该节点的意义上,将用户标识符精确地指派给该节点,并且该节点在执行系统的实时过滤和聚合功能性(即,图3中的组件276)时独自负责过滤和聚合那些事件(以生成局部交互和用户计数——见下文)。它不排除制作事件的其他副本和/或为了其他目的(例如,作为备份功能的一部分)对系统中其他位置的那些事件进行附加处理的可能性。

可以根据下面描述的排序函数,通过使用用户ID将用户指派给节点。然而,其他技术也是可能的,例如,用户到不同节点上的分发策略可基于用户ID的哈希,而不是用户ID本身。而且,除了用户被分组的事实之外,在不同的用户群组之间没有隐式排序的要求。最重要的是,针对任何特定用户的事件始终在同一节点上被处理。

可以为每个节点指派现有用户标识符集合U内的一系列用户标识符。用数学术语来说,可以相对于集合U和已定义的顺序关系′<′来定义有序的用户标识符集合,其中,对于所有u1,u2≠u1∈U,u1<u2或u2<u1。从这些术语来看,节点302被指派了用户ID范围:

·节点303a:[u0,u1]

·节点302b:[u1+1,u2]

·节点302c:[u2+1,u3]

·等等,

其中,[a,b]标示子集a,b以及相对于顺序关系“<”在a和b之间的U中的所有值。顺序关系的定义是任意的,前提是它在内容处理系统202内一致地被应用,但是它可以方便地反映典型的数学约定,诸如在字母数字字符或十六进制等情况下的自然数或字母的顺序。图4中图示了示例,其中示出了分别分配给节点302f、302g的事件316f、316g的范围。

注意,尽管以这种方式分配事件范围很方便,但这不是必需的。重要的是,将针对同一用户ID的所有事件分配给同一节点302。

在节点302a-302h的每一个处,分配给该节点的事件被存储在该节点处的磁盘上(即,分别在本地储存器303a-h中),并根据用户ID在其中进行分组,即分组在连续的群组中。即,将它们存储在数据结构中,该数据结构针对指派给该节点的每个用户ID具有一个群组,与该用户ID相关联的所有事件(并且只是那些事件)都存储在该群组中。

如下面所解释的,本地储存器中的这种分组操作允许极其快速和有效的过程,其中同时执行事件的过滤和计数以生成针对该过滤器的独特用户计数。

将针对用户的事件保存在物理上连续的存储位置中,特别是在处理数十亿个事件的系统中,则可以获得特别的优势。可能需要“冻结”索引并在足够的新数据到达时周期性地创建新索引。在创建新索引时,事件在本地储存器中的连续物理存储位置减少了磁盘上的碎片化,并允许在执行过滤和计数过程时更快地访问本地储存器。但是,分组只能是逻辑分组,不一定要在物理级别上反映出来,但是可以预期,物理分组将是性能有益的。

举例来说,图4分别示出了对于分配给节点302f的事件316f,针对用户IDusr4692、usr4693、usr4696、...、usr7929、usr7929A的群组gpr1、grp2、gpr3、...、grpN-1、grpN。

实施此分组的一种便捷方法是,只需如图4的示例中那样相对于排序函数“>”对本地储存器中的用户ID进行分类即可。也就是说,分配给每个节点302的事件范围可以被存储在本地储存器中的有序数据结构中,根据事件中的用户标识符进行排序,其中每个群组然后在该上下文中就是针对该群组的用户ID的事件范围。关于有序数据结构,参考图6,示出了简单列表数据结构500,其中每个事件504a、504b、504c与到存储另一个事件(即列表中的下一个事件)的存储位置的相应指针Pa、Pb、Pc或指示列表中下一个事件的某个其他指示符(并且以下所有描述同样适用于其他此类指示符)相关联地存储在相应的存储位置处。应当理解,这是用于本发明目的的简化示例,并且取决于上下文,可以使用更复杂的有序数据结构。将新事件分配给该节点时,可以将其存储在任何可用的存储位置处,并更新指针以保留顺序。例如,图6示出了在将针对用户ID“usr4692”的新事件504d指派到节点302f之后,先前指向针对“usr4693”的第一事件(504c)的针对事件316b(也为usr4692)的指针Pb可以如何被替换为指针Pb′,该指针Pb′指向新事件316d被存储在本地储存器303f中的位置;并且现在将新事件504d与指向事件504c的指针相关联地存储。不必更改物理存储位置,但是可以选择这样做,以进行优化从而防止磁盘上的过多碎片化。

请注意,以这种方式对磁盘上的事件进行分类也不是必不可少的:根本的效率节省源自根据用户ID(以任何顺序)对事件进行分组,每个独特用户ID一个群组。分类只是实现分组的一种便捷且有效的方式。

可以将新事件的添加作为上面提及的分段合并的一部分来执行。新分配的事件被临时保存在节点302的队列中,然后与该节点处的现有事件周期性地成批合并(可选地,在每次合并时对磁盘上的事件进行一些物理级别的碎片整理)。可替代地,可以在分配新事件时实时添加新事件(可能有一些周期性的碎片整理)。

以这种方式,在整个内容处理系统202内,在节点302上根据用户ID将事件精确地分组。

换句话说,节点302实现了一种形式的分布式数据库(分布在数据中心内),其中存储了事件316,并且根据用户ID在节点302上将数据库(水平)划分为全局(水平)分区,也被称为“分片”,其中每个节点302具有一个分片。选择分片边界,以便它们永远不会针对同一用户划分事件,即,将针对同一用户的所有事件划分在同一分片中,从而使分片边界始终与群组边界重合。如下面更详细解释的,这允许节点302并行处理分片,以为每个分片(即,在每个节点302处)生成局部独特用户计数,并且在所有分片(即所有节点302)上的局部用户计数可以简单地进行求和以生成总用户计数,而没有重复计数的风险。

如所指示的,时间相关的事件的传入流通常不以这种方式基于用户ID进行分区——更常见的是根据时间对此类事件进行水平分区。

除了在节点302上的这种“全局”分区以外,在每个节点302处,还可以局部地进一步将分片划分为(水平)子分区,以用于在该节点处进行处理,再次使得子分区不针对同一用户划分计数项目的群组,即针对同一用户的所有事件被划分在该分片的同一子分区中,使得子分区边界也始终与群组边界重合。鉴于以下内容将显而易见,这允许并行处理在每个服务器302处的子分区,以在该服务器处生成针对这些子分区的相应局部独特用户计数,然后可以将这些计数进行简单地求和以生成针对服务器(即针对整个分片)的局部用户计数。

例如,分片可以按每个CPU一个子分区来进行子划分。即,在每个节点302内,可以将指派给该节点302(服务器)的每个用户标识符精确地指派给该服务器中的CPU之一,其中具有该ID的事件由该同一CPU处理。即,每个服务器处的每个事件群组都被指派给一个负责处理这些事件的CPU。

一种备选方案是在处理线程之间进行子划分。哪一个最佳取决于架构上下文。基本思想是避免由于CPU不得不在多个线程之间进行上下文切换而导致效率低下。如果主要瓶颈是CPU利用率,那么使CPU专用于每个数据分区是最大化本地CPU缓存和总体处理吞吐量的好方法。如果主要瓶颈是存储器、网络或其他资源,那么具有比CPU核心更多的分区可能是有效的,因为可以通过在闲置时间更好地利用CPU来补偿上下文切换的开销。注意,如本文中使用的术语,CPU核心或线程可以是内容处理器,而本技术被应用于例如服务器的CPU核心或线程上。

每个节点302可以访问其有序数据结构中的每个事件中的元数据和用户属性。内容本身或内容的令牌化(tokenised)版本(请参阅下文)都与元数据一起被保存。通过示例的方式,图4示出了分别用于事件316f、316g中的用户标识符的元数据317f、318f和用户属性318f、318g的集合。

过滤器协调器306可以指令所有节点302根据期望过滤器来过滤其分配的事件,其中主要目的是获得满足期望过滤器的所有节点302上的独特用户总数的计数。可以在提交给系统的查询中定义过滤器,并且在这种上下文中,可以将过滤器协调器306和总计数生成器308视为查询处理机210的一部分。在上述系统的上下文中,过滤器可以是交互过滤器或查询过滤器,例如被用来为给定存储桶生成结果的查询过滤器。如上所指出,可以应用多个(可能是数千个)查询过滤器来响应单个查询,并为每个查询生成计数。

可以根据用户属性或事件元数据(诸如元数据标签(请参见上文))或两者的组合来定义过滤器。

对于根据一个或多个用户属性的集合A1所定义的过滤器,具有匹配用户属性的事件满足该过滤器。对于根据一个或多个标签的集合T1所定义的过滤器,具有匹配标签的事件满足该过滤器。

在讨论过滤操作之前,先描述如何存储内容。内容项目可以被整体保存——例如如果可能需要逐字记录特定字段(例如标题)作为分发查询中的值(稍后讨论)。可替换地,如下面所解释的,可以仅保存索引令牌,而丢弃原始内容。

为了使得通过某些关键字有效过滤大型文档语料库,可以使用标准索引技术(称为“反向索引”),其中将每个文档令牌化为个体项目,然后为语料词典中的每个项目创建查找表,每个都指向出现该项目的文档ID列表。例如,以两个文档的简化示例为例:

Doc001:the brown fox jumps over the lazy dog

(棕色的狐狸跳过了懒狗)

Doc002:the dog jumps over the sofa

(狗跳到沙发上)

反向索引:

Figure BDA0002270496310000321

这样,如果需要知道哪些文档中提到了“dog”(狗)一词,那么所要做的就是针对反向索引的单次查找,而不必每次都扫描语料库中的每一单个文档。

如果系统不要求逐字地返回原始文档,则仅存储“令牌化的”反向索引就足以过滤和返回正确的文档ID。在这种情况下,考虑到原始文件在编索引后被丢弃,如果需要重新索引操作,则必须保留副本。

内容处理系统202的关键灵活性是可以对属性A1和标签T1的任何期望的组合执行过滤。也就是说,过滤器F(T1,A1)能够基于内容本身(基于一个或多个标签T1)、已经发布或消费该内容的用户(基于一个或多个属性)、或两者的结合来隔离内容项目。例如,对于简单的过滤器F=[T1 AND A1],任何事件,其:

·与(所有)(一个或多个)那些标签T1相匹配的,和

·与(所有)(一个或多个)那些属性A1相关联的与该过滤器相匹配(并且没有其他事件)。但是,也可以使用诸如AND(与)、OR(或)和NOT(非)之类的逻辑运算符的组合来定义更复杂的过滤器。

这样的过滤器构成了用于复杂查询的强大构建块,这些过滤器允许从过滤后的事件中提取有关特定人群(根据属性A1定义)的用户之间分享的特定内容类型(根据标签T1定义)的丰富信息的。

关于术语,术语“过滤后的事件”(或类似事件)是指确实满足过滤器的事件子集。也就是说,在所有其他事件都已被过滤出之后的其余事件。当针对用户的至少一个事件当前被指派给满足过滤器的节点302之一时,该用户被称为满足该过滤器。

目的是确定:

1)在所有节点302上满足该过滤器的独特事件的总数。

2)在所有节点302上满足该过滤器F(TA,A1)的独特用户的总数;和

如上所指出,这两条信息在其用于分析可用数据时是强大的构建块。

该信息分别被体现在由总计数生成器308以下面将描述的方式所生成的总用户计数和总交互计数中。

关于2),将每个用户标识符独特地仅指派给一个节点、并将所有事件分配给该节点以进行过滤和聚合的主要优势在于,当被指令应用任何给定的过滤器时,每个节点都可以简单地计数满足该过滤器分配给它的事件子集以生成局部用户计数的独特用户数量。由于不同节点之间的用户或事件不存在重叠,因此可以分别简单地将所有节点302上的局部用户计数求和在一起以生成总用户计数,而没有重复计数用户的风险。此外,通过在每个节点处根据用户对事件进行分组,可以在同时对事件进行过滤和计数的有效边界计数过程中导出该计数。

参考图5和图5A,现在将描述生成用于目标分区的局部用户计数的过程,其中事件被同时过滤并被选择性地计数(即,仅当它们满足过滤器时才被计数)。图5示出了该过程的流程图,并且图5A是通过示例的方式图示出了该过程的某些原理的图形。

该过程可以并行地应用于作为整体的每个分片,在该分片被分配到的节点302处以生成针对该分片的局部用户计数。然而,在处理服务器302具有多个处理单元的情况下,优选地将其并行地应用于该分片的每个子分区,以生成用于那些子分区的相应的局部用户计数,然后可以将其求和以生成针对那个分片的局部用户计数。因此,将过程应用于其上的目标分区可以是分片或分片的子分区。

该过程开始于步骤S202,由过滤器协调器306指示所有节点302应用过滤器F(T1,A1)。

边界计数变量(boundaryCount)被用来通过对满足过滤器的任何事件群组之间的边界进行计数来对满足过滤器的独特用户总数进行计数,这是可能的,因为它们是根据用户ID进行分组的。交互计数变量(interactionCount)通过简单地计算满足过滤器的所有事件来计算满足过滤器的交互总数。

图5A图示出了针对过滤器F=[T1 AND A1]分别应用于节点302f和302g的事件316f和316g的边界计数原理。满足过滤器[T1 AND A1]的事件——即,其用户具有(所有)(一个或多个)属性A1且与(所有)(一个或多个)标签T1相匹配的事件——在右侧以粗体示出并在左侧与不满足过滤器的其余事件分开;后者在左侧也以灰色示出,并且包括这样的事件:这些事件的用户具有属性A1但不匹配标签T1,反之亦然。如图所示,针对特定用户可能存在满足过滤器的多个事件;但是,尽管这肯定与交互计数密切相关,但它不应影响独特用户计数。相反,对于后者,重要的是其余事件群组之间的边界数量(显示为粗黑线)。当根据用户ID对事件进行分组(例如分类)时,可以非常有效地对这些边界进行计数,并且可以简单地将多个分区上的最终边界计数求和,而没有重复计数的风险。

返回图5,将边界计数变量(boundaryCount)和交互计数变量(interactionCount)初始化为零(S204),并且对于第一事件群组(206)——即,指派给目标分区的第一用户ID——依次处理该群组中的事件以确定那些事件中的任何事件是否与过滤器F相匹配(S208)。即,从该群组中的第一事件开始,该过程在对当前群组执行的边界计数过程S208中,逐个检查每个事件以确定其是否与过滤器F相匹配,直到该群组中的所有事件都已被检查。

从当前群组中的第一事件开始,边界计数过程S208针对当前群组如下进行。

在步骤S210处,处理当前群组中的当前事件以确定其是否与过滤器F相匹配。如果不匹配,则该方法进行至步骤S216,在此,如果尚未到达群组的末端,即,当前群组中仍然存在要被检查的(一个或多个)事件,则边界计数过程S208针对当前群组中的下一个事件继续(218),针对该事件从步骤S210开始。

但是,如果在步骤S210处当前事件确实与过滤器F相匹配,则该方法取决于是否是在当前群组中第一次找到与过滤器F相匹配的事件而进行分支(S210):

·如果是,则将边界计数变量增加1(S212),并将交互计数变量增加1(S214)。尽管以该顺序示出,但是步骤S212-214可以以相反的顺序执行或并行地执行。这两个计数器都增加,因为匹配事件不仅表示与过滤器F相匹配的另一次交互,而且还表示由尚未计数的用户所执行的。

·如果不是,则该方法直接分支到步骤S210以增加交互计数变量(interactionCount)而不增加边界计数变量(borderCount)。这是因为,尽管该事件构成独特交互,但它是由已被计数的用户所执行的。

从步骤S214开始,在一个或两个计数器增加的情况下,过程进入步骤S216,并且从那里如上所述地进行。

当到达当前群组的末端时(S216,“是”分支),该方法进行到步骤S220,在这里,如果仍然还有至少一个要被检查的群组(即,分区中的一个或多个用户尚未被检查),则对分区中的下一群组(即下一个用户)重复上述的边界计数过程S208(222),针对下一群组中的第一事件从步骤S210开始——请注意,现在当过程移至下一个用户时,如果找到满足过滤器F的另一事件,则必须再次增加边界计数变量(S212)。

一旦分区中的每个群组都被完全检查,该方法就在步骤S224处终止(S220,“否”分支)。显而易见的是,此时的边界计数变量和交互计数变量值分别反映了针对刚刚处理的分区的满足过滤器F的独特用户总数和事件总数。

对于分片的子分区(在适用的情况下),可以简单地将在该分片的所有子分区上生成的最终计数求和,以给出针对该分片的局部用户和交互计数,而没有在用户计数中重复计数用户的风险。同样,在所有分片之中,可以简单地将针对那些分片的局部用户计数求和,以给出整个系统202整体上的总用户和交互计数,而同样没有重复计数用户的风险。

应当指出,图5的过程是示例性的,并且设想了仍在本发明的范围内的优化和扩展。例如,在一些上下文中,有可能跳过针对某些用户的事件来优化过程,其中已经确定那些用户不具有所期望的属性。

而且,该过程可以被很容易地扩展到两个以上的变量。即,可以使用附加的计数器来增加被提取的信息的水平。

例如,在是查询过滤器F并请求将该过滤结果细分为多个存储桶B1、...、BM(即,F定义了索引中的子集,并对该子集进行附加过滤以提供细分)的情况下,可以为每个存储桶维护相应的计数器,以在该过程的单次迭代中为每个存储桶提供计数。在那种情况下,除了期望针对由F定义的子集的总计数之外,还可以针对每个存储桶更新分开的交互和边界计数器。

隐私策略:

如上所指示,为了实施稳健的隐私策略,将各种隐私控件置于来自内容处理系统的信息输出上,以确保始终保留用户的隐私。目的是防止在结果中识别个体用户,并还防止泄露可归因于个体用户的用户特性(例如,防止结果被用来推断特定社交媒体用户的年龄、性别或其他用户属性)。

现在将更详细地描述这些隐私控件,以及对这些约束导致各种攻击媒介无效的解释。鉴于以下内容将变得显而易见,这些约束不仅非常有效,可以抵御多种攻击媒介,而且它们还可快速应用,并且易于用户理解。它们还可以被动态更新,即“即时”更新,而无需停机。

隐私策略的一些重要方面可以总结如下:

·结果的量化和最小受众规模:通过对查询结果进行集合代数,防止在较大的受众内披露较小的受众;

·编校控件:针对总体受众和每个数据存储桶的独特作者的最少数量;

·抖动/噪声:通过在必要时在量化之前稍微“模糊”结果来防止其他攻击,或者以其他方式确保在量化之前以足够的误差生成计数(请参见下文)。

另外,在针对该用户事件的保留期届满(例如,从该事件发生的时间起约30天)后,将从索引中清除每个用户事件,由此事件一旦被清除就不被计数。而且,永远不对18岁阈值以下用户的用户事件进行计数。

图7示出了示意性的高级概览,其图示了与受众规模门控、量化和编校相关的某些基本原理。

框702表示要在其上将要运行查询的索引中的所有事件。也就是说,满足用于构建该索引的交互过滤器(~606,图1A)的所有事件。如所指出的,用户可以对索引中的事件702的子集运行查询。例如,用户可能希望将查询的参数限制为某些主题或特定的用户人群(年龄、性别、工作职能等)。举例来说,示出了用于第一和第二查询的第一和第二子集704a、704b,其分别由第一和第二查询过滤器来定义(~626a,图1B)。

受众规模的门控:

根据隐私策略,仅允许对具有至少最小数量的独特用户的事件子集进行查询。即,针对满足查询过滤器的事件的总体独特用户计数至少与最小受众规模的门控阈值S一样大。这可以是固定阈值,诸如S=1000个用户;在这种情况下,所有总体独特身份用户计数少于此阈值的查询过滤器都将被完全拒绝,该查询过滤器根本不会返回任何信息。在图7中,事件的第二子集704b上的独特用户计数低于最小受众规模的门控阈值,因此,第二查询被完全拒绝(框706),而没有释放关于该第二子集704b的信息。然而,事件的第一子集704a上的独特用户计数超过最小受众规模的门控阈值,因此,第一查询被接受(框708)。因此,响应于第二查询生成结果集合709以用于释放给用户。

通过示例的方式,图7A示出了如何拒绝“阿拉米达的百事可乐爱好者”的查询过滤器,因为索引内满足该查询过滤器的总体独特用户数目(第二子集704b)低于最小受众规模门控阈值S。但是,“旧金山、奥克兰或阿拉米达的百事可乐爱好者”的查询过滤器被接受,因为索引中有更多的用户满足该过滤器(第一子集704a),以至于针对该查询的总体独特用户计数超过了最小受众规模门控阈值S。

量化:

对于已接受的查询,在响应于查询而释放任何聚合信息之前,也会对结果进行量化和选择性地编校。量化意味着当将计数组织在存储桶中时(~656.1-4,图1B),它们会在出现在已释放的信息中之前被“舍入”。此外,如果存储桶的用户计数低于某个特定数目,则对该存储桶进行完全编校,以使针对该存储桶的用户计数和交互计数都不被释放。在一些情况下,可能根本不会揭示经过编校的存储桶的存在。在这种情况下,还会编校存储桶名称以及计数:在某些情况下,尤其是在针对某个字段的可能值完全列表不是先验的时候,仅知道某个存储桶存在(尽管其体量低于编校阈值)可能本身已代表信息的泄漏。

返回图7,对于被接受的查询,将量化和编校应用于所得的用户计数和交互计数(图7,框710)。在该示例中,响应于第二查询,提供了针对事件704a的第一子集的结果的细分,例如按年龄、性别、工作职能、主题或其组合等等细分。即,为事件704a的较窄子集(存储桶)提供个体计数,每个子集由在查询过滤器之上所应用的存储桶过滤器(~626b,图1B中)来定义。举例来说,图7示出了事件704a的子集内的三个存储桶。

例如,可以通过将针对每个存储桶的用户和交互计数向下舍入到所选整数ΔQ的最接近倍数来对它们进行量化。也就是说,使得释放给客户的任何计数始终都是量化值集合中匹配的一个:

{Qn}={Q0=0,Q1=ΔQ,Q2=2*ΔQ,Q3=3*ΔQ,Q4=4*ΔQ,..}

其中那些值Qn在本文中被称为“量化边界”。在这种上下文中,ΔQ构成了量化的固定“量化范围”,即相邻的量化边界对之间的差,之所以是固定的是因为它对于所有相邻的量化边界对都是相同的。也就是说,对于所有n,Qn+1-Qn=ΔQ:

·Q1-Q0=ΔQ

·Q2-Q1=ΔQ

·Q3-Q2=ΔQ

·Q4-Q3=ΔQ

·等等。

图7中的结果集合也被示出为包括针对事件704a的子集作为整体的总体独特用户计数和总体交互计数。这些也以相同的方式被量化。

未量化的(原始)计数永远不会被系统释放——只有量化的计数才被释放给客户,并且那些只有在其不小于编校阈值时才被释放。

编校:

在针对任何给定存储桶的独特用户计数小于编校阈值R的情况下,针对该存储桶的结果将被“编校”,即针对该存储桶既不释放独特用户计数,也不释放交互计数。也就是说,除了在某些情形中可能从该结果推断出针对该存储桶的独特用户少于R个这一事实之外,针对该存储桶的所有信息都将被扣留。为方便起见,可以选择R=ΔQ,以便具有量化用户计数为零的任何存储桶被编校。但是,这不是必不可少的,例如可以设置更高的编校阈值。

已针对特定存储桶编校了结果的事实可以在结果集合709中被明确指示(如图7中针对存储桶2),或者用户计数和交互计数二者都可以被简单地给定为零。可替代地,可以简单地将该存储桶一起从结果集合709中省略,从而从结果集合709中看不出来曾经考虑过此存储桶。例如,在客户请求按主题进行细分的情况下,可能根本不会向客户揭示针对未达到反应阈值的主题的存储桶。

图7B示出了特定示例,其中根据年龄组级对结果集合709进行细分。也就是说,存储桶对应于用户年龄组级。对于每个年龄组级,系统内都会生成(未量化的)用户和交互计数,但从未被释放(请注意,图7B中针对每个存储桶仅示出一个计数)。首先,对这些进行量化,或者——对于其独特用户计数低于编校阈值R的任何年龄组级——对其进行编校,以使针对该年龄组级的独特用户计数和交互计数都不被释放。

攻击场景演练

同质群组攻击

最小受众规模门控(阈值S)确保可以仅分析特定规模的受众。这使恶意用户更难于执行“同质群组搜索攻击”,其中,通过其在共享同一属性的人类群组的成员身份来推断个体的敏感属性。这是因为在较大的受众中安排同质性非常困难,尤其是在分析其有机活动而不是静态受众时。

集合平衡攻击

面对使得只有超过100位作者的存储桶是可见的约束,集合平衡攻击试图通过比较来自多个较大受众的结果来检索个体的人口统计数据属性。

假设攻击者知道某个特定的男人在特定的一天在独特的主题标签上发推文,并且想发现他的年龄。他通过运行两个查询来尝试此操作:

查询A:所有女性的年龄细分。

查询B:包括在独特的主题标签上发推文的所有女性和男性在内的受众的年龄细分;

所有女性的年龄细分被用作“填充”:由于所有女性的受众都很大,因此他希望得到针对两个查询的结果,因此他比较了A和B中给出的针对每个年龄组级的计数,期望其中一个存储桶具有更高计数,可能对应于该个体男人所属的小用户群组。通常选择填充集合,以使其与观察中的小集合互斥(即,两个集合没有重叠,因此集合差异操作很简单)——在此示例中,所有女性对比特定男性。例如,在不进行量化的情况下,他得到的结果可能看上去如下:

Figure BDA0002270496310000411

显而易见,有关的男性在45-54岁年龄组级中显示为额外的用户,而他的推文则显示为该年龄组级中的额外的交互。因此,攻击者可以推断该男性的年龄为45-54岁。

但是,通过对结果进行量化,在这种场景中,在99%的情况下查询A和B将返回相同的量化计数。例如,在上面的示例中,在释放之前将每个计数向下舍入至最接近的百位,从而完全隐藏了结果内的男性:

Figure BDA0002270496310000421

但是,在填充的大小为99mod 100的情况下,仍然会出现可以检测到添加的个体的情形,例如,假设实际上未量化的结果为:

Figure BDA0002270496310000422

在这种情况下,返回的量化结果将是:

Figure BDA0002270496310000423

Figure BDA0002270496310000431

在这种特定情况下,即使未量化的结果从未被释放,仍然有可能从针对查询B的较高量化的用户计数中推断出有关的男性的年龄为45-54岁。

再举一个示例,假设有关的男性在一天中在独特的主题标签上发布了三则推文。在这种情况下,基本计数可能例如是:

Figure BDA0002270496310000432

这给出了以下的量化计数:

Figure BDA0002270496310000433

同样,在这种情况下,这次有可能从查询B上较高量化的交互计数中推断出该男性的年龄组级。

为了利用这一点,恶意用户将必须能够精确地控制“观众”受众的大小(即,填充),并且内容处理系统的性质使得这非常困难。在所述系统的上下文中,“所有女性群组”实际上是在给定时间段内积极发布/消费内容的所有女性,即,它不仅基于会员基础的人口统计数据性质,而且还基于他们的活动。这种活动很难控制,使得很难设计对量化边界进行集合平衡攻击。尽管如此,尽管利用它存在固有的困难,但它仍然是一个不容忽视的潜在脆弱点。

但是,还应指出,在上述攻击演练中,暗含了这些计数没有误差的假设。

当使用HLL或其他概率计数方法时,情况并非如此:例如,受众规模计数在被量化之前固有地包括一些随机噪声,并且因此仅是具有固有误差的近似计数。噪声是独特作者计数算法的实现所固有的,该算法依赖于概率数据结构,而不是个体计数的用户事件。这同样适用于交互计数的概率估计。

作为上下文,考虑HLL及其变体所基于的一些原理是有用的。核心来讲,HLL利用以下观察结果:对一组值进行哈希处理时——即,对每个值应用哈希函数以生成固定长度的位元序列(哈希值),其中每个位元为1或0的概率或多或少是50/50,并且与其他位元无关——那么,对于足够大的数据集,所得的哈希值将类似于:

Figure BDA0002270496310000441

Figure BDA0002270496310000451

现在,以另一种方式并以非常高级的方面来看待此,例如,当以这种方式计算出的一组哈希值中观察到具有0000000001xx形式的单个哈希值,很有可能在原始集合中有~1000个独特值[预期1000的0.1%=1个这样的哈希值]。应用于事件时,可以对每个事件进行哈希处理,并且实质上,系统需要跟踪的是在哈希值中迄今为止观察到的最长0游程,以估计观察到的独特事件的数量,而不必对那些事件各个地进行计数。HLL在此基础上构建非常粗略的近似,以便减少误差裕度——但基本前提是相同的。

本发明的发明人已经认识到,利用这种概率估计技术,可以对结果计数中的固有误差进行调整以抵消对量化边界的集合平衡攻击。也就是说,可以将固有误差调整为使得它足够大,以使攻击者无法将查询A和B中针对给定存储桶的量化计数之间的差异归因于个体用户的活动,而不是固有误差。HLL及其变体的误差率取决于集合中可能ID的基数以及分配给每个HLL对象的存储器的量(并且可以通过调整存储器分配来调整误差率)。

注意,HLL及其变体仅是一些示例。其他概率过程也可以被用来生成近似计数。通常,利用概率计数,可以依靠固有误差来提供必要的保护,前提是其具有足够的量级——即至少2-3%。这可能需要一些调整以确保足够的误差。

然而,本发明的发明人还认识到,在转移到改为各个地识别并计数满足过滤器的用户事件的上述类型的精确计数过程时,固有误差消失。如果没有替代品,则系统将更容易受到这种形式的集合平衡攻击。这适用于精确的用户计数过程和精确的交互计数过程。

为了防止这种情况,在使用精确计数过程的情况下,在某种程度上与直觉相反,在内容处理系统202内应用了小的随机“抖动”(人为的随机误差),以在对它们进行量化之前将一些故意的误差引入到原本精确的用户和交互计数中。也就是说,人为的误差数据是随机生成的,并用来将故意的误差引入到原本精确的计数过程中(即,除了该误差外,其是精确的)。结果是一个不精确的(近似)计数,该计数与如果没有此误差数据时所获得的精确计数有一个随机量偏差。近似计数与实际值足够接近以确保有用,但不精确以便保护个人隐私(当然,有时近似计数可能恰好等于精确计数,其中随机应用的偏差恰好为零——重要的是不能保证这一点,因此在多个计数上展现一系列不同的随机偏差以确保不确定性)。

例如,可以为每个计数(总体用户计数和交互计数)随机生成正/负偏移,并应用该计数。

首先计算精确计数、然后将误差应用于此精确计数可能是方便的。这样,可以从总计数的百分比范围内随机选择误差值,例如,预期大约为精确计数的±2%的误差是足够的,尽管这是取决于上下文的,并且可以取决于受众的规模而有所不同。通常,与计数本身相比,计数中的误差是小的,以确保计数仍然是有用的度量,但误差又是大到足以掩盖个体用户及其量化边界附近的活动。达到适当的平衡将取决于上下文,并且可以根据本文提出的教导通过常规设计过程来实现。

可以在计数过程的任何阶段引入此误差。例如,在图4的架构中,可以由总计数生成器308将抖动直接应用于所有节点上的计数,但是也可以将其应用于节点302处的局部计数。在任何事件中,结果是,内容处理系统202为每个存储桶生成不精确的用户和交互计数,其对应于被有意调节了随机选择的量的在整个事件上的精确用户和交互计数。

将为每个计数各个地生成此类误差数据,以确保它们在所生成的计数集合上展现出一系列不同的误差。

如所指出的,本文中的术语“随机”被用来意指以上所阐述的意义上是不可预测的。在HLL的特定情况下,应注意的是,固有HLL抖动是确定性的,因为将其应用于同一组用户ID时始终得到相同的结果,而与每个用户出现的频率或顺序无关(当然>0)。这是HLL的益处之一:如果同一查询运行两次,只要独特用户数量保持不变,则相同的结果将返回两次。但是,在不同的查询之间,抖动仍然是不可预测的,因此,HLL抖动仍被认为是本文中使用的随机的/不可预测的。

通常,在一些上下文中,最好对重复查询应用相同的抖动,因为它可以提供更加一致且因此直观的结果——重要的是,抖动在不同查询之间是不可预测的,因为这可以提供所期望的保护。

计量战略人口

在社交媒体的上下文中,本文中的“计量”是指通过运行非常广泛的查询来获取或推断有关整个平台上的活动的信息的尝试。极端的情况是试图获取有关平台所有用户活动的信息,例如针对特定类型平台上的所有社交交互的交互计数(例如,点赞、分享、帖子、推文、转推等等)或给定月份中针对所有活动用户(在任何人口统计数据中)的用户计数。

存在用于防止这种计量的各种方法。

可以将运营模型限制为每日体量设上限的“隐私记录”(即,定制索引-参见上文)模型。也就是说,在任何给定日期,每个客户只被允许在其任何索引中记录最多一定数量的事件。对于大型社交媒体平台,这可能是足够的,例如其中上限实际上可能相当于例如少于平台上总体日常活动的1%。但是,对于较小的平台,其中每日上限占日常活动的比例要高得多,可能需要采取附加的步骤来防止计量。

而且,在某些情形中,限制为隐私操作模型可能是不希望的。

合同中也可能禁止计量,并且可以通过提交的分析查询对其进行监视。经由用于提交查询的账户,可以将所有使用情况跟踪到公司或其他客户。但是,这不一定这么直截了当,并且监视需要专用资源,并且可能容易出错。

因此,在共享索引的情况下,其中(例如)所有事件均被保存并且任何客户都可以在共享索引上运行查询,或者在较小的平台上,其中对隐私定制索引的每日上限可能单独是不够用的,可以施加附加的技术约束来防止计量,以便自动拒绝太大的查询。

一种简单且有效的方法是仅在总受众规模小于允许的最大用户数量(由计量阈值设置)时返回。在这种情况下,如图8中所图示,总体受众规模不得小于最小受众规模门控阈值,但也不得超过允许的最大用户数量。

应该在哪里设置最大阈值的问题取决于上下文。作为一个非常普遍的经验法则,预期在相关时间段内(全局独特用户计数)在整个平台上的活动用户总数的~5%的上限是足够的,但是这可以视情况而定。可以执行针对社交媒体平台的网络流量的统计分析以确定合适的上限。例如,对从平台接收的事件的统计分析。此处,目标是设置阈值,以使最大样本规模小到无法得出关于整个平台活动的任何统计上有意义的推断。

请注意,针对此类查询的独特用户计数的计算是密集的,因为对于广泛查询,该计数可能非常大:为了确定查询是否违反最大受众规模门(对于大型平台而言其可能是数百万用户),在系统能够决定拒绝该查询之前至少需要对许多事件进行计数。在最终拒绝查询的情况下,为了做出该决定而“浪费”了显著的计算资源量。

因此,作为优化,在确定是接受还是拒绝查询时,从索引中的事件的代表性样本初步估计独特用户计数可能是优选的。也就是说,通过仅过滤和计数索引中的事件的代表性子集。此估计计数可能会有相对较大的误差裕度,但仍表示最大受众规模的一个小百分比。这允许更有效地做出是否拒绝基于计量的查询的决定。

如果未超过最大上限,则可以按照上述方式从整个索引确定更准确的计数。然后,可以使用它来检查是否也满足了最小受众规模门控约束(估计计数通常不适合此操作,因为该误差将是较低门控阈值的较大百分比误差),并且如果是这样,则可以如上所述接受并响应查询。

可变的量化/编校参数

最小受众规模门S、量化范围ΔQ和编校阈值R是内容处理系统202的可个别配置的系统参数。

在以上示例中,为方便起见,S、ΔQ和R被分别固定为1000、100和100。尽管这是一种可行的方法,并且由于其简单性和透明性而在一些上下文中更可取,但存在可能期望变化这些参数的情形。

例如,可能期望量化范围ΔQ随量化值而变化,其中符号ΔQ(*)被用来表示可变量化范围。也就是说,其中每个计数被量化为一组量化值{Qn}={Q0,Q1,Q2,Q3,Q4,...}中的一个,其中:

·对于至少一个m,ΔQ(m)≠ΔQ(m-1),并且

·ΔQ(n):=Qn+1-Qn是第n个量化边界和第[n+1]个量化边界之间的差。

例如,可能是ΔQ(n)(至少近似地)随n线性增加,从而使量化误差保持为针对不同规模的计数而被量化的计数的近似固定百分比。

也可以取决于查询本身来设置针对给定查询的受众规模门R。也就是说,取决于不同查询的(一个或多个)参数,针对那些查询的是不同的最小受众规模门。例如,可能期望针对某些受众设置较高的最小受众规模门控阈值,这可以通过取决于在查询中定义或从查询中导出的(一个或多个)用户属性来设置门控阈值来实现。这也适用于个体存储桶编校阈值和存储桶大小(量化范围),这些值也可以取决于查询本身来进行设置,例如作为(一个或多个)用户属性和/或(一个或多个)其他查询参数的函数。

在实施例中,可以如下实现精确计数过程。

可以提供一种用于处理具有多个用户的内容发布平台的内容项目(交互事件)的内容处理系统,该内容处理系统包括:内容输入,其被配置为接收内容发布平台的内容项目,每个内容项目涉及一条发布内容并与发布或消费该条内容的用户之一的用户标识符相关联;用于处理内容项目的多个内容处理器;内容分配器,其被配置为基于与内容项目相关联的用户标识符将内容项目分配给内容处理器;和总计数发生器;其中,每个用户标识符被指派给内容处理器之一,并且内容分配器被配置为将与该用户标识符相关联的所有内容项目分配给该同一内容处理器;其中每个内容处理器被配置为从分配给它的内容项目生成局部用户计数,该局部用户计数指示与那些内容项目相关联的独特用户标识符的数量,其中总计数生成器被配置为通过对来自所有内容处理器的局部用户计数求和来生成总用户计数,该总用户计数指示内容发布平台的独特用户总数。

以这种方式分配内容项目允许极其快速且有效地生成局部和总体用户计数,这将在后面详细说明。

在每个内容处理器处,分配给该内容处理器的内容项目可以被存储在该内容处理器的本地储存器中。

可以根据与那些内容项目相关联的用户标识符将内容项目在本地储存器中分组,其中每个用户标识符一个群组。

内容处理系统可以包括过滤器协调器,其被配置为指令每个内容处理器应用过滤器,从而使每个内容处理器根据过滤器过滤分配给它的内容项目,并从过滤后的内容项目中生成其局部用户计数,其中局部用户计数指示满足该过滤器的分配给该内容处理器的内容项目的独特用户数目,由此,总用户计数指示满足该过滤器的独特用户总数。

在内容项目被本地存储和分组的情况下,每个内容处理器可以被配置为对所分组的内容项目重复应用边界计数过程,以选择性地增加局部边界计数如下:通过以下方式针对该群组中的最初一个应用该边界计数过程:对于该群组中的每个项目,确定该内容项目是否满足过滤器,仅当那些内容项目中的至少一个满足过滤器时才增加局部边界计数,并针对该群组中的下一个重复该边界计数过程;其中一旦针对指派给该内容处理器的所有用户标识符都已应用边界计数过程,则边界计数过程终止,其中在边界计数过程终止之后,该内容处理器单元的局部用户计数包括其局部边界计数或从其局部边界计数中导出。

每个用户标识符可以与一组用户属性相关联,并且可以基于与用户标识符相关联的用户属性来过滤内容项目;或者至少一些内容项目可以包括元数据(例如,其至少一些可以从多条内容中导出),并且可以基于内容项目中的元数据对内容项目进行过滤;或者可以基于用户属性和元数据的组合来过滤内容项目。

内容处理系统可以包括用于处理提交给内容处理系统的查询的查询处理机,并且查询处理机可以被配置为以包括总用户计数或从总用户计数中导出的结果来响应所提交的查询。

可以在查询中定义过滤器,并且过滤器协调器可以指令内容处理器响应于查询的提交来应用定义的过滤器。

每个内容项目可以包括与其相关联的用户标识符的副本,从而将该内容项目与该用户标识符相关联。

每个内容处理器可以是处理单元或线程。例如,每个内容处理单元可以是服务器中的CPU核心线程(在这种情况下,总用户计数是针对该服务器的计数)。

可替代地,每个内容处理器可以包括多个处理单元或多个线程。例如,内容处理单元可以是服务器(在这种情况下,总用户计数是在那些服务器上的计数)。在那种情况下,每个内容处理器可以被配置为并行地将边界计数过程应用于分配给它的内容项目的多个子分区,其中针对该内容处理器的每个用户标识符被指派给仅一个子分区,并且与该用户标识符关联的所有内容项目都在该同一分区中,其中,针对该内容处理器的局部用户计数是通过将所得的针对子分区的局部用户计数求和而生成的。

为了涵盖其他应用,可以提供一种用于处理来自具有多个用户的平台的用户事件的系统,该系统包括:输入,该输入被配置为接收平台的用户事件,每个事件与平台的用户之一的标识符相关联;用于处理用户事件的多个事件处理器;事件分配器,其被配置为基于与事件相关联的用户标识符将用户事件分配给事件处理器;和总计数发生器;其中每个用户事件被指派给事件处理器之一,并且事件分配器被配置为将与该用户标识符相关联的所有用户事件分配给该同一事件处理器;其中每个事件处理器被配置为从分配给它的用户事件生成局部用户计数,该局部用户计数指示与那些用户事件相关联的独特用户标识符的数量,其中总计数生成器被配置为通过将来自所有事件处理器的局部用户计数求和来生成指示平台的独特用户总数的总用户计数。

在这种上下文中,每个事件可以是与其相关联的与用户有关的任何事件。每个用户事件可以与平台的用户之一执行的动作或者另外与平台的用户之一相关的动作相关,并且包括该用户的标识符。即,每个用户事件可以是平台上与用户相关的动作的记录。

尽管这些事件可以与社交媒体平台上的社交交互(发布/消费内容)有关,但是本发明的第四方面不限于此,并且该系统可以被用于处理其他类型的事件,并且该平台可以是具有便于用户操作的用户基础的任何平台。例如,该平台提供者可以是电信运营商如Vodafone或Verizon、租车/乘车共享平台如Uber、在线商场如亚马逊、以及用于管理病历的平台。事件例如可以是经由平台实施、安排或执行的通话记录、乘车记录、财务交易记录、病历变更等。在许多情形中,从此类事件中提取匿名和聚合信息是有益的,其中需要获取在此类事件集合上的用户计数。

在这方面,应注意,本文中关于社交媒体平台的交互事件(内容项目)的所有描述均等同地适用于社交媒体以外的平台的其他类型的事件。这样的事件可以包括与它们相关的用户属性和/或针对动作的元数据或与之相关联,从而允许使用本文所述的任何技术来处理(例如,过滤和/或聚合)那些事件。

例如,该系统可以包括过滤器协调器,其被配置为指令每个事件处理器应用过滤器,从而使每个事件处理器根据过滤器过滤分配给它的用户事件并从过滤后的用户事件生成其局部用户计数,其中局部用户计数指示满足过滤器的分配给该事件处理器的用户事件的独特用户数目,由此,总用户计数指示满足过滤器的独特用户总数。

系统的随机化组件可以随机生成误差数据,并以上述方式应用之以有意将人为误差引入到总计数中(直接或在局部计数中的至少一个中)。

精确用户计数

上述过滤和计数过程的一个显著特征是,与概率HLL近似相反,通过该过程获得的总用户计数是精确的。在一些上下文中,显然希望获得精确用户计数,并且在这方面,相对于诸如HLL之类的现有概率方法,这是本发明的另一个明显的益处。

然而,如上所指出,本发明的发明人已经认识到,在当前上下文中,即提取匿名的聚合信息,从近似的用户计数(具有固有误差)转移到精确的用户计数,实际上可以将内容共享系统202开放给了特定的攻击形式,其在某些情形中允许个体用户被识别——因此采取了附加步骤来防止这种情况。

将理解的是,仅通过示例描述了上述实施例。鉴于本文给出的公开内容,本发明的其他变化和应用对本领域技术人员将是显而易见的。本发明不受所描述的实施例的限制,而仅受所附权利要求书的限制。

权利要求书(按照条约第19条的修改)

1.一种处理平台的用户事件以提取关于所述平台的用户的聚合信息的方法,所述方法包括在事件处理系统处:

接收与所述用户事件有关的查询;

从所述查询中确定用于多个存储桶中的每一个的至少一个查询参数;

对于每个存储桶,针对满足用于该存储桶的所述至少一个查询参数的用户事件集合,计算误差裕度至少为百分之二的近似独特用户计数;

将针对每个存储桶的所述近似独特用户计数与存储桶编校阈值进行比较;

将量化应用于针对至少一个存储桶的所述近似独特用户计数,以生成针对该存储桶的量化的独特用户计数;和

通过释放包括所述量化的独特用户计数或从所述量化的独特用户计数中导出的聚合信息来响应所述查询,其中所述近似独特用户计数低于由所述存储桶编校阈值所指示的最小用户计数的任何存储桶被编校,其中针对任何已编校存储桶,没有独特用户计数被释放。

2.根据权利要求1所述的方法,包括:

为每个存储桶计算针对满足该存储桶的所述至少一个查询参数的所述用户事件集合的事件计数,其中对于所述近似独特用户计数低于所述最小用户计数的任何已编校存储桶,没有事件计数被释放。

3.根据权利要求2所述的方法,其中针对每个存储桶的所述事件计数是近似事件计数。

4.根据权利要求1所述的方法,包括:

确定针对用户事件总体集合的近似总体独特用户计数,每一个用户事件集合是总体集合的子集。

5.根据权利要求4所述的方法,包括:

将总体独特用户计数与门控阈值进行比较以确定是接受还是拒绝所述查询,其中响应于确定所述总体独特用户计数至少是由所述门控阈值所指示的最小用户计数而接受所述查询。

6.根据权利要求4所述的方法,包括:

从所述查询中确定至少一个总体查询参数,所述用户事件总体集合是满足所述至少一个总体查询参数的用户事件的集合。

7.根据权利要求6所述的方法,其中所述平台是用于发布和消费内容的内容发布平台,所述用户事件与所述内容发布平台的所述用户的内容的发布和消费有关;

其中所述至少一个总体查询参数指定特定内容,并且其中针对每个存储桶的所述至少一个查询参数指定至少一个用户属性。

8.根据权利要求6所述的方法,其中所述平台是用于发布和消费内容的内容发布平台,所述用户事件与所述内容发布平台的用户的内容的发布和消费有关;

其中所述至少一个总体查询参数指定至少一个用户属性,并且其中针对每个存储桶的所述至少一个查询参数指定特定内容。

9.根据权利要求1所述的方法,其中所述平台是用于发布和消费内容的内容发布平台,所述用户事件与所述内容发布平台的用户的内容的发布和消费有关,并且针对每个存储桶的所述至少一个查询参数指定特定内容。

10.根据权利要求1所述的方法,其中针对每个存储桶的所述至少一个查询参数指定至少一个用户属性。

11.根据权利要求1所述的方法,其中不对低于年龄阈值的用户的用户事件进行计数。

12.根据权利要求1所述的方法,其中每个所述用户事件包括所述平台用户之一的标识符,并且从所述用户事件集合中的所述用户标识符来生成每个独特用户计数。

13.根据权利要求1所述的方法,其中所述平台是用于发布和消费内容的内容发布平台,所述用户事件与所述内容发布平台的用户的内容的发布和消费有关。

14.根据权利要求1所述的方法,其中所述误差裕度至少为百分之三。

15.根据权利要求1所述的方法,其中所述量化具有至少一百的量化范围。

16.根据权利要求1所述的方法,其中所述误差裕度是将人为误差引入到应用于所述用户事件的精确计数过程中的结果。

17.根据权利要求1所述的方法,其中所述误差裕度是应用于所述用户事件以生成所述计数的概率计数估计过程所固有的。

18.一种事件处理系统,包括:保存可执行指令的计算机储存器;以及一个或多个处理单元,所述一个或多个处理单元被配置为执行那些指令以执行任何前述权利要求的方法步骤。

19.一种计算机程序产品,包括存储在计算机可读存储介质上的可执行指令,并且所述可执行指令在事件处理系统处被执行时被配置为执行任何前述权利要求的方法步骤。

51页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于在通信会话内生成个性化响应的虚拟助手

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!