1.本公开一般涉及用户活动建模和相似性搜索。
背景技术:
2.在用于广告和市场营销的大数据系统中,寻找相似用户组并对其进行排名(这被称为最近邻搜索)是一项关键任务,尤其是对于诸如类似搜索(lookalike search)、用户划分(user segmentation)和推荐等的应用。包括电视和移动设备的多种类型的现代设备具有用户与内容的交互历史的详细简档,诸如直播电视、视频点播、游戏、应用和外部设备,这些详细简档可以用于计算用户之间的相似性,并最终计算他们的“最近邻”。然而,由于这种数据的大规模性质(其可能涉及不断更新交互历史的数千万用户,每个用户随时间都跨越数百万个会话),因此这样的任务的计算成本很高。
3.一种加速最近邻搜索的方法是使用深度神经网络进行散列(hashing)。散列将任意固定格式的数据(诸如图像、声音和文本)转换为固定大小的散列码。然后可以通过比较散列码来执行相似性操作。当生成的散列码是二进制向量(其比较仅是位运算)时,效率增益尤其明显。然而,用户行为历史具有不同于与这种技术兼容的数据格式的上下文特征和模式。
技术实现要素:
附图说明
4.图1示出了所公开的散列系统的实施例的示例高级结构架构。
5.图2示出了异构散列模型的示例架构。
6.图3示出了时间感知注意卷积神经网络的示例架构。
7.图4a
‑
图4c示出了用于生成和使用异构散列码的系统的示例架构。
8.图5示出了用于生成和使用异构散列码的系统的示例操作方法。
9.图6示出了用于生成和使用异构散列码的系统的示例操作方法。
10.图7示出了异构散列模型的示例架构。
11.图8示出了可训练门(trainable gate)的示例架构。
12.图9示出了聚合层的示例架构。
13.图10示出了异构散列模型的示例架构。
14.图11示出了示例预处理步骤和网络层。
15.图12a
‑
图12b示出了由异构散列模型的层执行的示例操作。
16.图13a
‑
图13b示出了由异构散列模型的层执行的示例操作。
17.图14示出了异构散列码。
18.图15示出了示例散列码。
19.图16示出了示例散列码。
20.图17示出了应用的散列系统的架构表示。
21.图18示出了用于训练异构散列模型的示例框架。
22.图19示出了用于训练和使用时间感知注意卷积神经网络的系统的示例模型。
23.图20a
‑
图20c示出了时间感知注意卷积神经网络的示例架构。
24.图21示出了示例用户行为表示。
25.图22示出了散列系统在各种数据集上的性能。
26.图23示出了示例计算机系统。
具体实施方式
27.在多种应用中,广泛采用散列学习作为用于大规模数据检索的近似最近邻搜索的解决方案。由于其计算效率和检索质量,应用深度架构来学习散列具有特殊的好处。然而,这些深度架构可能并不完全适合于正确处理被称为“顺序行为数据(sequential behavior data)”的数据。顺序行为数据可以包括在与用户建模相关的应用场景中观察到的数据类型。在特定实施例中,为了学习针对顺序行为数据的二进制散列,系统可以捕获用户不断演变的偏好(例如,在延长的时间段上测量的)或者利用用户在不同时间尺度上的活动模式(例如,通过比较短时间尺度和长时间尺度上的活动模式)。所公开的技术提供了新颖的基于深度学习的架构来学习针对顺序行为数据的二进制散列。通过不同的实验示出了所公开的技术的架构的有效性。
28.近似最近邻(approximate nearest neighbor,ann)搜索的问题在与大规模数据搜索和检索相关的多种应用中出现。例如,一个示例应用可以被称为“lookalike(类似)”扩展方法,其寻求识别种子对象或数据集合,并且识别与种子对象或数据集合具有阈值相似度的其他对象或数据集合。在广告定向中广泛使用的lookalike受众扩展方法的最终质量可能高度依赖于所使用的ann算法的性能。二进制散列是一种高效地处理高维空间中ann问题的方法。在二进制散列中,原始特征空间可以被投影到低维度汉明空间中,同时将原始数据的相似性值或排名保持在可预测的误差范围内。由于两点之间的汉明距离可以通过位运算来计算,所以在汉明空间中的搜索往往是快速且高效的。此外,与一般散列一样,可以极大地减少比较的次数。
29.深度二进制散列技术可以在高度复杂的特征空间中展示改进的性能。在特定实施例中,在深度二进制散列中,可以根据相似性或排名函数优化神经网络,同时保持损失函数,目的是将原始特征转换为它们相应的嵌入。相应的嵌入最终被转换为二进制散列码。后一个过程可以通过使用符号函数来实现。已经开发了连续(continuation)方法来在学习期间迭代地近似符号函数,以解决反向传播期间梯度消失(vanishing gradient)的问题。
30.深度二进制散列算法可能并不总是适合于行为数据,尤其是当行为数据本质上是连续的时候。在处理特定时间段内用户行为模式的应用中,经常会观察到顺序行为数据。示例包括用户与网站、移动应用、多媒体内容等进行交互。所公开的技术提供了一种对顺序行为数据进行二进制散列的方法,该方法捕获用户不断演变的偏好以及用户行为在不同时间尺度下的动态性质。作为示例而非限制,时间尺度可以包括每小时、每天、每周、每月或更短或更长的时间尺度,这取决于应用和用例。
31.在诸如lookalike的场景中,计算系统可以捕获其偏好和需求大致相似的用户组
的共同行为。在这种情况下,计算系统可以将特定用户组视为二进制散列投影的基本单元,这可以使用活动模式的相似性函数来建模。例如,两个用户经常访问同一个梦幻体育网站,因为他们两都是梦幻体育的狂热粉丝。此外,当行为数据是连续的时,尤其是当其与特定时间事件相关联时,计算系统可以跨不同的时间视域(temporal horizon)捕获用户行为的动态性质。例如,两个用户经常在一周的同一天和同一个时间观看同样的电视节目,因为他们两都生活在同一个时区,同时订阅了同一家有线电视提供商。
32.考虑到这些设计原理,所公开的技术提供了新颖的基于深度学习的架构,该架构与以前的深度二进制散列方法有很大不同。在特定实施例中描述的第一种基于深度学习的架构是类别注意(categorical attention),其使用新颖的中间注意层集来将原始特征数据转换为高级元数据(例如,类别或流派(genre))嵌入,目的是捕获用户不断演变的偏好。在特定实施例中描述的第二种基于深度学习的架构是关系和注意cnn(relation and attention cnn,racnn)。racnn采用表示2d空间中不同时间窗口大小的顺序用户行为的中间关系和注意层集,以及与关系和注意层相关联的附加卷积层,来最小化原始数据输入中孤立特征信息的损失。因为racnn基于用户交互的时间特征来揭示信息,所以其也可以被称为时间感知注意cnn(time
‑
aware attention cnn,taacnn)。
33.所公开的技术引入了统一的深度二进制散列框架,其目的是高效地学习针对顺序行为数据的散列。可以设想,可以存在与所公开的技术相关联的多种变体。所公开的技术提供了类别注意模型,其捕获用户对高级元数据信息的偏好。在特定实施例中,这种模型可能更适合于对用户的长期偏好和一致偏好进行建模。所公开的技术还提供了在各种时间尺度下捕获用户行为的racnn/taacnn模型。在特定实施例中,这种模型将用户的长期偏好与她的短期偏好相组合。因此,racnn/taacnn模型可能适合于对用户更动态的行为模式进行建模。此外,已经运行了若干次实验,这些实验表明所公开的技术优于其他基准散列方法。实验还证明,所公开的技术有效地处理针对顺序行为数据的最近邻搜索。
34.一种用于最近邻搜索的二进制散列的方法是局部敏感散列(locality
‑
sensitive hashing,lsh),其使用随机投影。已经引入了基于深度学习的二进制散列方法。多种基于深度学习的方法专注于多媒体内容(图像和视频),其中可以利用cnn型结构来创建图像嵌入,然后将其转换为相似性保持散列码。然而,顺序行为数据与多媒体数据明显不同,使得难以应用这些方法。
35.另一个研究方向是针对文本的深度二进制散列(例如,文档相似性匹配)。这些包括语义散列、使用标记和主题建模的语义散列(semantic hashing using tags and topic modeling,shttm)以及针对文本的变分深度语义散列(variational deep semantic hashing for text,vdsh)。这些方法将文档作为词语的输入包,然后使用编码器
‑
解码器网络学习二进制散列。深度二进制散列还被应用于推荐,其中离散深度学习方法将用户
‑
项目矩阵分解为汉明空间中的隐向量(latent vector),以生成用户和项目的二进制散列码。即使这些也不适合于顺序行为数据类型(诸如与所公开的技术相关的用户随时间的交互数据),因为最先进的词语包和矩阵分解方法忽略了顺序行为数据的时间敏感方面。
36.本公开扩展了从用户顺序行为数据生成用户嵌入的基于深度学习的方法。例如,对于顺序推荐系统,一种方法可以通过区分短期历史和长期历史来对随时间不断演变的用户长期偏好进行建模,然后使用注意生成长期历史表示。再次使用注意组合长期表示的输
出与短期历史表示。然而,这种方法的特定实施例的一个不足是,起仅从顺序用户
‑
项目交互中生成嵌入,而忽略了每个项目的高级元数据(例如,类别)信息。作为结果,其不能正确地捕获用户的喜好(例如,动作电影爱好者)。所公开的技术提供了一种改进的方法。
37.图1示出了包括深度二进制散列架构100的所公开的技术的实施例的示例高级结构架构。如图所示,架构100包括三个关键组成部分:(1)网络层120a和120b(例如,类别注意或racnn/taacnn),用于从行为数据生成用户表示;(2)完全连接的散列层130a和130b,用于将用户表示转换为k维用户嵌入;以及(3)符号激活函数140a和140b,用于二进制化嵌入以进行汉明距离比较。
38.所公开的技术的二进制散列的一个主要用途是如何基于两个用户的行为历史来快速确定他们是否彼此相似。所公开的技术将用户的行为历史定义为用户动作的序列(例如,同一用户的一系列书评或用户在网站上的一系列点击),用户动作中的每一个都与时间戳相关联。在特定实施例中,为了测量用户之间的相似性,所公开的技术可以高效地向量化他们的行为历史并利用向量距离度量。传统上,这种距离计算的一个缺点是随着相关联的向量维数的增加所涉及的复杂度。为了高效地近似最近邻搜索,所公开的技术的特定实施例可以降低整体计算复杂度和比较的次数。所公开的技术的特定实施例可以通过将用户的行为历史向量散列到汉明空间中来实现这一点。
39.图1示出了所公开的用于深度二进制散列的技术的示例实施例工作流程。输入115a和115b以经预处理的用户行为历史成对地到达,每个输入与相应的用户110a和110b相关联。根据siamese结构,经预处理的用户行为历史被馈送到网络层(例如,分别是120a和120b)。网络层120a和120b产生用户表示。用户表示分别被散列层130a和130b压缩为k维用户嵌入。利用符号激活函数140a和140b将嵌入二进制化为k位二进制散列码。最后,执行汉明距离计算150以确定两个用户是相似的还是不相似的。
40.作为对以前的基于深度学习的方法的改进,所公开的技术使用项目的高级元数据信息(例如,类别或流派)从顺序用户
‑
项目交互中生成用户嵌入。通过下面的示例可以说明根据偏好基于用户组生成用户嵌入的必要性。假设用户a是动作/冒险电影爱好者,而用户b是浪漫电影爱好者。假设向两个用户都推荐一部浪漫电影。用户b自然可能喜欢看该部浪漫电影,因为这部浪漫电影很好地符合其电影流派偏好。用户a可能仍然会观看这部电影,即使这部电影不是其最偏好的电影流派,但可能因为其是一部热门电影,并且在特定的上下文下,用户a喜欢观看热门电影。从这个示例中可以看出,用户事件可以具有不同的语义,因此用户的偏好是用户建模的影响因素。
41.为了高效地从顺序行为数据中学习用户表示(嵌入)以生成二进制散列,所公开的技术提供了一种新颖的混合注意网络(类别注意),以捕获用户的底层偏好。图2示出了包括类别注意网络200的整体结构架构的所公开的技术的示例实施例。在类别注意网络200中,通过组合每个高级元数据(例如,类别)的注意网络来学习用户表示。在特定实施例中,由于其优越的性能,可以选择注意作为所公开的技术的基本网络,而不选择长短期记忆(long short
‑
term memory,lstm)或门控循环单元(gated recurrent unit,gru)。所公开的技术的网络200包括四个层:(1)稀疏输入层210,其通过对每个高级元数据的项目进行分组来对用户和项目输入215a
‑
215f进行稀疏(例如,独热(one
‑
hot)表示);(2)嵌入层220,其学习每个项目的嵌入225a
‑
225f;(3)每个高级元数据的注意层230,其为每个组235a
‑
235c计算网
络中每个高级元数据的项目嵌入的加权和;以及(4)从高级元数据注意层组合的层240。这个特定层的输出250表示用户,同时也表示他们的类别偏好。
42.在特定实施例中,所公开的技术首先按时间顺序对所有项目进行排序,并根据它们的高级元数据信息对它们进行分类,以产生包含项目215a
‑
215f的项目组。元数据可以具有广泛的含义。元数据的示例包括但不限于流派、主题、类别、喜好等。在元数据组中找到的每个项目215a
‑
215f由giju表示,其中g是组,i是组的索引,j是第i组中项目的索引,并且u表示用户。根据项目组,嵌入层220产生与每个元数据组215a
‑
215f相对应的项目嵌入225a
‑
225f。注意层230层捕获在每个组的给定高级元数据组(例如,225a)中找到的所有项目之间的内部关系(创建注意网235a
‑
235c)。这里,所公开的技术使用用户喜好(例如,“运动”)来说明这一点。根据每种喜好的经分组的嵌入层220,所公开的技术捕获每个项目嵌入225a
‑
225f中的内部关系。随着所公开的技术捕获到这些内部关系,一些用户项目交互膨胀(inflate)或收缩(deflate)。嵌入层220的输出被视为反映其他项目对给定喜好的影响的用户的顺序行为的表示。所公开的技术可以修改另一种自注意结构,以考虑每种喜好的用户注意。设hi是包括来自以每种用户喜好i分组后的项目215a
‑
215f的嵌入输出的序列的矩阵,其中g是组,并且u表示用户(等式1)。所公开的技术可以将非线性函数tanh应用于hi(等式2)。ti表示第i喜好中定序后的项目的数量(等式3)。序列的表示ri由这些输出向量的加权和形成(等式4):
43.hi=giu
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)
44.mi=tanh(hi)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0045][0046][0047]
在使用等式4获得每种喜好的注意之后,所公开的技术将ri加在一起以检索用户嵌入,(255),其中n是喜好的数量。如下所示的算法1根据所描述的等式引入了类别注意的一般方法。
[0048]
算法1类别注意
[0049]
输入:用户组u,每个用户组u的经分组的项目gu高级元数据(例如,包含第i个高级元数据的项目id的列表的),k:散列位的维度
[0050]
输出:所生成的k维的用户嵌入ue
[0051]
for u中的每个用户ui do
[0052]
for ui中的每个组do
[0053]
itemlist=按时间戳排序的
[0054]
itemembedding=由k维的嵌入层生成的
[0055]
计算高级元数据注意(等式1
‑
4)
[0056]
end for
[0057]
uei=对所生成的高级元数据注意嵌入求和
[0058]
end for
[0059]
图3示出了包括racnn/taacnn 300的架构的所公开的技术的示例实施例。尽管图3暗示了特定参数选择,如将在下面深入讨论的,但是本公开设想了对该结构的特定概括。在图3中,“st”是短时间的缩写,“mt”是中等时间的缩写,“lt”是长时间的缩写,这将在下面进一步描述。
[0060]
众所周知,注意模型在处理顺序数据方面是有效的,但本公开是基于进一步展示cnn在处理顺序数据方面潜力的方法的。然而,在这些方法中,由于数据结构限制,即使在嵌入就位的情况下,cnn结构也应用其一个单个维度的卷积核。在所公开的具有顺序数据的技术的情况下,这有可能导致长期注意特征的损失,这可能影响二进制散列码生成期间的相似性保持。为了缓解这个潜在问题,所公开的技术提供了一种关系和注意cnn(racnn)架构/时间感知注意cnn(taacnn)架构300,以将顺序用户行为分解为散列码,同时保持顺序用户行为的相似性。所公开的技术的特定实施例能够将给定的顺序行为数据转换为高维结构,以提取每个用户的短期(关系)特征和长期(注意)特征,从而在二进制散列期间实现更好的相似性保持。
[0061]
该结构以输入层310中的用户行为表示315开始。因为用户行为数据通常以用户
‑
项目交互来表示,所以为了将顺序行为数据拟合到racnn/taacnn结构中,所公开的技术首先将每个项目映射到其类别域以降低其维度。例如,每个类别可以使用独热编码来进行编码,并且项目可以是多热(multi
‑
hot)编码,因为项目可以属于多个类别(例如,书或电影)。此后,采用racnn/taacnn结构的系统可以通过特定的时间单位(例如,小时、天、周等)来会话化(sessionize)用户的数据。在每个会话中,所公开的技术聚合用户在特定时间单位内已经与之交互的所有项目,使用每个项目的多热编码来表示该会话中的用户聚合行为。接下来,使用racnn/taacnn结构的系统可以将用户的行为重塑为高维空间u∈rh
×
w
×
c,其中h是短期维度(例如,天),w是长期维度(例如,月),并且c是类别大小。每个维度所需的确切时间可能与为会话选择的时间的长度相关。在获得用户行为表示315之后,使用嵌入层320。该层使用1
×
1卷积核325将低维稀疏输入u映射到高维自适应密集嵌入ue∈rh
×
w
×
e,其中e是嵌入大小(例如,这里为128)。
[0062]
在关系和注意层330中,所公开的技术利用不同的核来提取不同的特征,以更好地保持用户相似性。关系核集kr 332具有有限数量的核。在特定实施例中,关系核集332包括三个核,即{k3
×
1,k5
×
1,k7
×
1}。注意核集ka337也具有有限数量的核。在特定实施例中,注意核集337包括三个核,即{k1
×
3,k1
×
5,k1
×
7}。
[0063]
在特定实施例中,为了避免来自原始用户行为表示315的孤立特征损失,可以在关系和注意层330中添加基于平均池化函数333的孤立卷积338,如图3的左侧所示。下面的算法2示出了根据特定实施例的如何在所公开的技术的关系和注意层330中计算用户特征。从关系和注意层330c提取出的所有特征345a
‑
345g在聚合层340中被展平(flatten)并连结在一起,用于进一步的相似性计算。
[0064]
算法2关系和注意/时间感知注意特征提取
[0065]
输入:2d嵌入的用户行为表示
[0066][0067]
输出:用户特征(来自关系和注意层的专用
特征提取)
[0068]
for u
e
中的每个用户do
[0069]
for关系核集k
st
中的每个核do
[0070]
(每个卷积在其卷积轴上将具有步长2)
[0071]
(在每个轴上应用步长2)
[0072]
end for
[0073]
for关系核集k
lt
中的每个核do
[0074]
(每个卷积在其卷积轴上将具有步长2)
[0075]
(在每个轴上应用步长2)
[0076]
end for
[0077][0078][0079]
最终用户特征
[0080]
end for
[0081]
类别注意网络200和racnn 300两者的最后一个层(分别为250和350)以连续向量的形式生成用户嵌入(例如255)。因此,有必要将它们转换为二进制散列,如下所示。形式上,相似性保持散列是将数据从输入空间(由d维特征向量xi∈rd组成的)表示到散列空间(由k位二进制散列码yi∈{
‑
1,1}k组成的)、同时仍然保持相似性的问题。问题可以被描述为:给定d维输入数据x∈rn
×
d的n个点,目的是学习散列函数f:x
→
y,以生成k位二进制码y∈hn
×
k。
[0082]
为了定义相似性,在大多数siamese结构中,相似性通常被定义为:sij∈{0,1}。sij=1表示xi和xj相似,而sij=0表示它们不相似。在一种方法中,使用与每个对相关联的标记来确定每个对的相似性。在这种方法中,当两个输入对象共享至少一个标记时,sij=1,否则sij=0。然而,根据所公开的技术,这样的定义过于松散,并且更细粒度的相似性(例如,真实值相似性分数)是有益的。可以使用欧几里德(euclidean)、余弦或杰卡德(jaccard)距离来实现这样的目标。因此,所公开的技术将真实值相似性函数sij定义为:
[0083]
sij=ci
·
cj/(||ci||||cj||)
[0084]
其中ci、cj∈cm,并且m分别是划分(segment)、流派或类别的数量。对于二进制码,汉明距离是最广泛使用的相似性度量。观察到:汉明距离和内积也存在关系:
[0085][0086]
其中k为散列码的长度,w为k
×
k对角矩阵,yi=[h1(xi),...,hk(xi),...,hk
(xi)]和yj=[h1(xj),...,hk(xj),...,hk(xj)]∈y。由于汉明距离的基本概念不能完全捕获来自不同散列位的不同的影响级别,因此所公开的技术引入了加权汉明距离度量。更准确地说,在两个二进制码yi和yj之间,所公开的技术定义了
[0087][0088]
其中wk∈w。加权汉明距离度量也可以被写为:
[0089][0090]
给定n个训练数据点的成对相似性集合,令yiwyjt表示为<y
i
,y
j
>w,则似然函数是
[0091][0092]
因此,对所有训练点的散列码输出的最大似然估计给出如下:
[0093][0094]
对于每个对,p(s
ij|
<y
i
,y
j
>w)可以被定义为:
[0095]
p(s
ij
|<y
i
,y
j
>w)=1
‑
||s
ij
‑
σ(<y
i
,y
j
>w)||1
ꢀꢀꢀ
(7)
[0096]
其中σ(x)=1/(1 e
‑
αx)是自适应sigmoid函数,具有控制其带宽(即函数的陡度)的超参数α。||s
ij
‑
σ(<y
i
,y
j
)w)||1是相似性标签和<y
i
,y
i
>的sigmoid输出之间的欧几里德距离。根据等式7,其可以被获得为:
[0097][0098]
通过将等式7纳入等式6中的最大似然估计,优化问题可以被定义为:
[0099][0100]
其中θ表示给定深度网络中所有参数的集合。由于符号函数的梯度消失问题,交替松弛(alternated relaxation)方法可以用来优化等式8,诸如使用tanh或softsign进行连续松弛。
[0101]
在用于广告和市场营销的大数据系统中,寻找相似用户组并对其进行排名(最近邻搜索)是一项关键任务,尤其是对于诸如类似搜索、用户划分和推荐等的应用。现代设备(诸如电视和移动设备)具有用户与内容的交互历史的详细简档,诸如直播电视、视频点播、游戏、应用和外部设备,这些详细简档可以用于计算用户之间的相似性,从而计算他们的“最近邻”。然而,由于这种数据的大规模性质(其可能涉及不断更新交互历史的数千万用户,每个用户随时间都跨越数百万个会话),因此这样的任务的计算成本很高。
[0102]
一种用于加速最近邻搜索的方法是使用深度神经网络进行散列。散列将任意固定
格式的数据(诸如图像、声音和文本)转换为固定大小的散列码。然后可以通过比较散列码来更高效地执行相似性操作。当生成的散列码是二进制向量(其比较仅是位运算)时,效率增益尤其明显。然而,用户行为历史具有不同于图像、声音和文本的上下文特征和模式。本公开中描述的系统和架构的特定实施例可以利用这些不同来在散列时实现更好和更高效的结果,这将在诸如类似搜索、用户划分和推荐的应用中帮助操作者。
[0103]
可扩展性和效率是大数据用户行为建模当中最困难的问题。对于大型设备制造商来说,可能存在数百万用户提供用户行为数据,导致可能需要每天进行处理的数十亿条用户行为数据的单独记录。然而,对于像在线交互式广告这样的业务,服务可能需要在极其有限的时间段(通常在毫秒级)内提供响应。因此,可扩展且高效的框架是非常有益的。还可能需要框架组合离线和在线计算两者来最好地服务于广告请求。
[0104]
之前,使用散列解决最近邻问题的方法已经被用于大规模数据集,诸如lsh和其他二进制散列机制。通常,这些方法仅在高级别上或长时间内捕获用户的行为。考虑到改变用户行为的时间顺序,这些方法的性能一般很差。此外,这些历史方法不考虑基于用户可能正在其中生成用户行为数据(例如,用户如何与内容交互)的各种上下文环境的用户行为改变。例如,在广告领域,用户的偏好可能会随着时间的推移、从一个位置到另一个位置而改变,这取决于他们正在使用的设备、他们正在进行的活动的分类(class)或他们所在的社交组,这里仅举几个可以考虑的上下文。本文所公开的系统和架构的特定实施例解决了这些问题,使用新颖且高效的散列方法来捕获所有上下文方面,同时仍然保持用户的偏好。通过利用由这些新颖方法生成的散列码,所公开的技术可以被应用于诸如用户划分和类似用户搜索的应用中。
[0105]
本公开经由对用户行为历史进行散列来解决最近邻搜索的一般问题。本文描述的整体框架提供了解决如上所述的问题的新颖方法。此外,架构和框架解决了导致一般问题的多个技术问题。例如,本公开提供了用户行为历史的基于时间的散列,这是新颖的散列的实现方式。用户行为历史通常展现出特定的时间模式。例如,用户可能会根据一天中的时间有一些习惯,诸如在早上、晚上或节假日观看特定的节目。通过产生能够揭示这些模式的散列码,所公开的系统有助于随着时间的推移更有效地比较用户及其使用模式。作为另一个示例,本公开提供了用户行为历史的基于社交组的散列。可用于向用户行为数据提供附加上下文元素的元数据包括人口统计和社交网络信息。除了单独的散列码之外,人口统计和社交网络信息可以用于产生基于社交组的散列码。基于社交组的散列码根据对终端客户的定向和分析需求,来促进组内和组间的相似性搜索。作为另一个示例,本公开提供了用户行为历史的基于位置的散列。用户经常根据位置改变他们的行为。利用用户行为历史中的位置特定模式允许位置感知相似性搜索。作为另一个示例,本公开提供了用户行为历史的基于活动分类的散列。可以使用的元数据的另一个方面包括不同活动分类(诸如内容类型、流派等)的记录,以利用这些分类中独特的用户相似性模式。作为另一个示例,本文所描述的系统和架构采用异构散列码。现有系统中的散列码倾向于将用户的偏好作为整体值来捕获。然而,使用这样的散列码,以前的系统不能高效地辨别用户偏好的不同方面,并且不能基于这些偏好最优地区分用户。如本文所述的,本公开通过生成由散列划分(hash segment)组成的异构散列码来解决这个问题,该异构散列码可以捕获用户偏好和上下文的不同方面。作为另一个示例,本发明解决了如何高效地存储异构散列码并在需要时高效地
更新散列码的问题。因为散列的最终目的是加速诸如最近邻搜索的应用,所以降低存储和更新的复杂度是采用本文描述的技术的任何系统的重要组成部分。作为另一个示例,本文所描述的技术极大地改进了对用户行为历史散列码的使用和应用。一旦为用户(或用户组)生成了各种散列码,采用本文所描述的技术的系统可以在特定应用(诸如执行最近邻搜索)中使用它们。本公开解决了如何通过利用上下文、权重以及启发式和学习后的决策两者来以最优方式做到这一点的挑战。用户划分和类似用户搜索是诸如广告等问题领域的挑战性问题。首先使用机器学习方法和人为规则来分类和识别用户划分。然后,以前的方法对种子用户划分应用次优方法(诸如lsh)来寻找相似的用户。这些方法的一个显著问题是用户划分的质量,这对这些系统的性能有很大且不利的影响,最终影响向客户投放广告的投资的回报。通常,用户划分质量是广告定向服务提供商的关键绩效指标。本公开提供了高效地细化现有划分并以高质量用户扩展现有划分的解决方案。
[0106]
在特定实施例中,本公开描述了用于经由用户行为历史的深度散列来执行最近邻搜索的系统和架构。本公开描述了前面段落中描述的问题的解决方案。本文将详细描述的特定解决方案包括用户行为历史的基于时间的散列。所公开的架构在多个自适应时间窗口用内容对用户行为历史进行散列,以便用内容对用户行为中的时间结构模式进行建模。例如,这是通过启发式地或通过深度神经网络学习定义“连续性(serial)”和“周期性”模式来完成的。然后,用户的基于时间的偏好可以被直接散列为散列划分、或者用户的行为历史可以根据时间窗口被分解。最后,可以生成每个窗口的单独的散列码。本文所描述的另一种解决方案包括用户行为历史的基于社交组的散列。除了单独的散列码,本文所描述的架构使用可用的人口统计和社交网络信息来产生基于社交组的散列码。在特定实施例中,这是通过获得家庭(例如,组成家庭的个人)和社交网络的详细描述并将它们与家庭行为历史关联来完成的。例如,通过启发式或深度学习模型、利用内容执行该关联,以便产生用于联合交互以及单独交互的散列划分、或者将它们分解为不同的散列码。本文所描述的另一种解决方案包括用户行为历史的基于位置的散列。当位置信息可用时,所公开的系统和架构利用位置信息,要么生成用户位置的行为偏好的散列划分,要么为用户在不同位置的行为历史单独地生成散列码。这样的架构还使用启发式或深度学习模型,根据可用的标签(诸如“家”、“杂货店”、“餐馆”等)、利用每个标签的联合散列码来对这些位置进行聚类。本文所描述的另一种解决方案包括用户行为历史的基于活动分类的散列。使用启发式或深度学习模型,根据用户的活动分类对用户行为历史进行分组。在特定实施例中,所公开的系统可以产生表示用户的活动偏好的散列划分、或者可以根据每个活动分类将用户行为历史分解为单独的散列码。本文所描述的另一种解决方案包括异构散列码。在特定实施例中,每个上下文特征可以被训练为对每个上下文部分的最终散列码的特定部分有贡献。在这种情况下,可以不要求散列码符合固定长度。(根据给定的上下文)通过比较具有不同权重的相应的散列位,可以很容易地测量用户之间的相似性。本文所描述的另一种解决方案是对用户行为历史散列码的存储和更新。所公开的系统和架构为上述维度中的每一个的每个用户存储散列码,以及与这些散列码相关联的权重。在特定实施例中,可以例如从统计因素分析中获得权重。采用本文所描述的技术的系统还可以存储描述每个维度的重要性的一般权重,这也可以从因素分析中获知。可以根据用户行为历史中改变的长度和幅度来进行更新。本文所描述的另一种解决方案是使用用户行为历史散列码。在特定实施例中,由上下文感知决策引
擎执行检索和使用,该上下文感知决策引擎分析市场营销客户的广告和营销需求,并基于例如期望的相似性维度和检索的目的来检索最相关的散列码以用于比较。这样的架构支持至少三种搜索模式:扩展、细化和分析。扩展搜索模式找到与“种子”用户组最相似的目标数量的用户。细化搜索模式获取“种子”用户组,并试图过滤掉噪音。对于用户组,分析搜索模式描述了他们的散列码的统计属性,例如,平均相似性、最重要的维度、关联性等。
[0107]
图4a示出了根据特定实施例的用于生成和使用异构散列码的系统400a的示例架构。系统400a包括用户行为数据数据库410。用户行为数据库410存储关于用户与由用户设备跟踪的各种应用、内容项目、媒体、网站和其他可交互元素的交互的信息。用户行为数据库410还存储关于那些交互的元数据。系统400a包括上下文信息数据库420。上下文信息数据库420存储从用户用来与媒体或影响特定用户项目交互的其他项目进行交互的各种设备获取到的任何附加数据。作为示例而非限制,这样的上下文信息可以包括用户的人口统计分布(年龄、性别、收入等)、位置信息、时间信息、设备信息以及各种其他合适的上下文信息。系统400a还包括异构散列模型430。本文所描述的异构散列模型430是被训练为提供异构散列码的机器学习模型,该异构散列码能够实现所公开的系统的特征中的多个特征。系统400a包括异构散列码数据库440。异构散列码数据库410存储生成的散列码,该散列码捕获用户偏好的不同级别和方面,同时保持用户之间的相似性。在特定实施例中,异构散列码数据库440被组织用于对异构散列码的快速、按需检索。
[0108]
示例应用系统450也被示为系统400a的架构的部分。尽管仅示出了单个应用系统450,但是本公开考虑可以在系统内使用多个应用,并且多个应用可以与一个或多个异构散列码数据库440相结合。本公开将描述类似扩展应用的特定实例,尽管也考虑了其他合适的应用。对应用系统450的输入包括上下文条件460。上下文条件460描述了所请求的新的划分的联合因素(uniting factor)或条件。上下文条件460可以由客户(或客户应用)使用系统400a来指定。例如,上下文条件可以指定客户正在搜索在加利福尼亚观看体育比赛的四口之家。应用系统450包括应用块455。在特定实施例中,应用块455可以包括与应用本身的实现相关的编程。在图4所示的示例中,应用由类似用户划分扩展组成。应用块455解决的问题可以被概括为:给定种子用户划分,找到最适合于广告定向的最相似的用户。可以设想可以使用散列码的各种其他应用,诸如广告技术、市场营销技术、推荐引擎、用户简档、详细的用户划分、出价优化、倾向预测以及多种其他合适的应用。在特定实施例中,应用块455可以基于客户的需求描述应用的变化。例如,其可以指定可以使用各种距离函数(诸如汉明距离)来计算类似扩展。在特定实施例中,应用系统450还接收种子划分453作为输入。种子划分453可以基于应用块455而变化。在类似建模中,种子划分453可以表示已经被(例如,客户)选择作为目标划分的代表或者已经作为目标(例如,要从新用户中排除)的用户组。在特定实施例中,应用系统450的输出也可以随着应用块455而变化。例如,在类似建模中,输出可以是扩展的划分457(新的用户划分),其包括基于目标上下文条件460与种子划分最相似的用户。
[0109]
图5示出了根据本文所公开的架构的一个实施例的用于生成和使用异构散列码的公开系统的操作方法500。该方法可以从步骤510开始,其中计算系统可以从一个或多个客户端设备接收用户行为数据。例如,系统可以接收用户与应用的交互的记录或者对用户已经观看了特定视频的指示。在步骤515,系统还可以接收与用户行为数据相关联的上下文信
息。如本文所述的,上下文信息可以包括诸如交互的时间、交互的位置、用于交互的设备、与用户和用户家庭相关联的人口统计等信息。在步骤520,系统可以生成用户交互的向量嵌入。嵌入过程的结果可以是嵌入空间中用户行为的向量表示。在步骤525,系统可以从用户交互的向量表示和接收到的上下文信息构建用户表示。用户表示可以包括以人合理可读的格式所组织的关于用户偏好的信息。用户表示可以包括专用格式,以允许用户表示用作散列码生成模型(例如,异构散列模型430)的输入。在特定实施例中,步骤510
‑
525涉及预处理数据或构建推断或建模阶段的输入,推断或建模阶段为所有用户生成异构散列码。在步骤530,系统可以确认预处理步骤成功。如果确定处理不成功,则方法可以返回到步骤510以再次尝试。处理可能由于各种原因(包括为用户收集的数据量不足、数据可能过于稀疏而无法创建有意义的表示、或者各种其他原因)而不成功。如果确定处理成功,则方法可以前进到步骤535。
[0110]
在步骤535,系统可以使用异构散列模型430来基于用户表示生成异构散列码。该过程可以被不同地称为模型推断,如本文进一步描述的,因为异构散列模型430可以是已经被训练未生成异构散列码的机器学习模型。所生成的散列码可以被配置为保持关于用户活动数据的信息和计算用户在行为和上下文中的相似性所需的上下文信息。在特定实施例中,所生成的散列码可以不保持行为和上下文的确切历史。这样,散列码可以比它们编码的原始数据小得多,因此比较起来更快。在步骤540,系统可以评估所生成的散列码,以确认已经成功地创建了散列码。步骤540可以包含确认散列码符合与格式化、数据组织、错误检查和其他相关要求相关的规则。这些要求可以由异构散列模型430为其生成散列码的系统或应用系统来预先指定。步骤535和540一起负责为用户数据和上下文信息生成散列码。
[0111]
在特定实施例中,步骤545
‑
575可以部分或全部地由应用系统(例如,应用系统450)使用异构散列码来执行。在步骤545,应用系统450可以接收用户的种子划分。用户的种子划分可以是由应用系统450或其用户选择的用户的集合,作为用户想要识别的扩展的用户组的代表。在特定实施例中,种子划分可以包括已经接收到广告定向的用户或者已经被识别为类似扩展的成功匹配的用户。在步骤550,应用系统450可以接收应用系统450的用户期望作为目标的上下文条件460。在步骤555,应用系统450可以基于接收到的种子划分453和上下文条件460从异构散列码数据库440获得种子散列码。因为如本文所述的,异构散列码以允许应用系统450基于上下文条件460仅检索最相关的散列码的方式被存储,所以即使种子划分453相同,应用系统450也可以针对变化的上下文条件460检索不同的异构散列码。因此,对正确的异构散列码的检索是实现散列码比较加速的主要组成部分,这是所述技术的技术优势。
[0112]
在步骤560和565,应用系统450可以执行已经为其检索了异构散列码的应用。例如,应用系统450可以执行类似扩展。在步骤560,应用系统450可以比较不在种子划分453中的各种用户的散列码,以检索从异构散列码数据库440检索出的种子异构散列码。在特定实施例中,比较可以包括计算嵌入空间中异构散列码之间的距离。异构散列模型430可能已经产生了异构散列码,该异构散列模型430被训练为当底层用户活动数据相似时生成相似的异构散列码,并且当底层用户活动数据不相似时生成不相似的异构散列码。因此,两个异构散列码之间的距离大致反映了底层用户活动数据之间的差异。在步骤565,应用系统450可以检索与种子划分453中的用户最相似的用户。最相似的用户可以是嵌入空间中其相应的
异构散列码最接近种子异构散列码的用户。在特定实施例中,应用系统450可以识别阈值距离内的所有用户。在特定实施例中,应用系统450可以识别阈值数量的用户,例如五十个最接近的用户。
[0113]
在特定实施例中,应用系统450可以被配置为做出关于检索到的用户的新颖性确定。例如,在步骤570,应用系统450可以将检索到的用户划分与用户的种子划分进行比较,以确定检索到的划分是否具有足够数量的用户、或者检索到的用户划分是否满足阈值相似度。应用系统450可以确定检索到的用户划分与用户的种子划分具有过高的重叠度,并且前进到步骤555,在步骤555,应用系统450可以识别要与用户的种子划分进行比较的附加异构散列码。如果应用系统450确定检索到的用户划分满足阈值,则应用系统450可以前进到步骤575,在步骤575,应用系统450聚合用户划分的集合(例如,适当地包括种子划分或不包括种子划分),并且准备扩展的用户划分以返回给应用系统450的用户。
[0114]
在特定实施例中,比较用户的过程可以依赖于权重矩阵。如本文所述的,生成异构散列码的过程可以导致散列码对于特定上下文信息具有基本相似的散列值,而对于其他上下文信息具有基本不相似的散列值。比较散列值的系统或应用系统可以被配置为根据识别散列码的部分(例如,特定的上下文信息)(该部分在识别例如相似的用户划分时很重要)的加权矩阵来对散列码比较的特定部分进行加权。当生成异构散列码时,还可以使用加权矩阵作为加速比较的方法。存储在加权矩阵中的权重可以是机器学习的或者基于启发式值的,这取决于系统或应用系统的操作者可用的基于知识的方法。
[0115]
图7示出了异构散列模型的示例架构700。输入层710包括经预处理的数据,诸如一般行为数据711(例如从用户行为数据数据库410检索的)和各种上下文信息713a
‑
713c(例如从上下文信息数据库420检索的)。在这个示例中,经预处理的数据可以仅被考虑用于单个用户,仅用于说明的目的。相同的架构可以用于并行地处理多个用户的用户活动数据。数据可以基本上同时被传递给架构中的各种结构。例如,一般行为数据711可以被传递到为一般行为数据711专门设置的可训练门725a。可训练门725a可以只是构成该架构的可训练门层720的一个组成部分。可训练门层720可以被认为包括多个其他可训练门725b
‑
725d,每个其他可训练门725b
‑
725d对应于一个输入流(例如,对于每种类型的上下文信息713a
‑
713c有一个其他可训练门)。一般行为数据711也可以被传递到各种其他可训练门725b
‑
725d。如下文进一步描述的,每个门725a
‑
725d可以从每种类型的输入接收数据,作为辨识和实施数据的内部关系(即,在数据中收集到的每个上下文对用户活动数据和其他上下文数据的影响)的方法。一般行为数据711还可以被传递到网络架构的聚合层730的聚合块735a。聚合层730还可以包括多个其他聚合块735b
‑
735d,每个其他聚合块735b
‑
735d对应于一个输入流(例如,对于每种类型的上下文信息713a
‑
713c有一个其他聚合块)。一般行为数据711还可以被传递给网络架构的网络层740的类别感知注意(category
‑
aware attention,caa)块745a。网络层740还可以包括多个其他caa块745b
‑
745d,每个其他caa块745b
‑
745d对应于一个输入流(例如,对于每种类型的上下文信息713a
‑
713c有一个其他caa块)。经过模型架构700的相同的数据布置可以用于上下文信息数据类型713a
‑
713c中的每一种。例如,上下文信息1数据713a可以被传递到每个可训练门725a
‑
725d、上下文信息1聚合块735b和caa块745b。
[0116]
在特定实施例中,可训练门层720的每个门考虑所有行为和上下文信息,并相应地
在它们当中进行选择。门725a
‑
725d通过将学习到的权重应用于数据的值来在数据当中进行选择,因为学习到的权重将反映在最终保持在散列码分量中的数据中。可以通过值的反向传播或其他合适的神经网络训练技术来学习权重。训练的目的可以是使门强调(emphasize)对行为数据711值和与可训练门相关联的特定上下文信息数据有显著影响的上下文数据。例如,如果门正在对与所使用的设备相关的上下文信息的值进行加权,则门可以强调位置的值(因为家庭电视设备可能与在家庭位置处的交互是高度相关的),并且不强调(deemphasize)年龄人口统计信息的值,因为对家庭电视设备的使用可能与年龄不是高度相关的)。
[0117]
图8示出了单个可训练门800(例如门725a
‑
725d)的详细图。可训练门800接收多个数据源作为输入810a
‑
810c,将权重815a
‑
815c分别应用于每个输入810a
‑
810c,并将加权值组合为单个输出值820。输出值820可以是输入810a
‑
810c的加权和。可训练门800应用的权重是由随机梯度下降来确定的。在概念上,在特定实施例中,权重的值可以是基于权重被应用到的数据的变化量来学习的。例如,在时间上下文信息的值变化很大,而位置上下文信息的值变化不大的情况下,门800可以给予时间值更大的权重。可以针对整个系统学习权重值,并将权重值存储在全局权重矩阵中。在特定实施例中,可以针对独立的上下文学习权重(例如,时间上下文可以具有与位置上下文不同的权重值)。权重用于影响嵌入空间中上下文信息的表示。
[0118]
图9示出了聚合层的单个块900(例如,聚合块735a
‑
735d)的详细图。在特定实施例中,聚合块900接收多个输入910a和910b,并将它们相加在一起以生成聚合块920的输出920。在特定实施例中,输出920可以是具有学习到的权重的输入910a和910b的加权和的结果。可训练门层720和聚合层730的输出构成网络层740的输入。
[0119]
图10示出了也在图7中示出的异构散列模型的示例架构700的另一种布置。图10扩展了网络层740的元素,示出了网络层740的两个子层:注意层1000和嵌入层1010。来自输入层710的数据作为与上下文信息相关的顺序数据(例如,user_id、item_id)被接收(如图7所示)。聚合层730是图7所示的门层720的输出。注意,聚合层通过加权系统保持一般行为数据711和上下文信息713a
‑
713c的内部关系信息。内部关系信息记录所测量的一种类型的上下文信息对另一种类型的上下文信息的影响。注意层1000的块1005a
‑
1005d可以接收来自嵌入层1010的块1015a
‑
1015h和聚合层730的输入。嵌入层1010呈现一般行为数据711和上下文信息713a
‑
713c的输出在嵌入空间中的表示。注意层1000的块标记嵌入层1010和聚合层730中每个数据项目的重要性。注意层块1005a
‑
1005d的输出是一般行为散列码部分750和上下文信息散列码部分755a
‑
755c。每个注意层块被训练为生成相应散列码部分。为了清楚起见,一般行为数据的注意层1005a被训练为生成一般行为散列码750等。
[0120]
图11示出了预处理步骤和网络层740的示例。为了简单起见,图11仅示出了用上下文信息预处理项目历史的方法的一个示例,本公开考虑其他的方法。预处理步骤的目的是准备由注意层1000进行嵌入和处理的数据。图11示出了用户已经与之交互的各种内容项目1110a
‑
1110f以及项目的类别1120a
‑
1120f。类别1120a
‑
1120f可以是与每个项目交互一起记录的上下文信息类型的示例。沿着时间线1100组织项目1110a
‑
1110f,使得出现在另一个项目左侧的项目首先被交互。例如,用户在与项目1110d交互之前与项目1110b交互。此外,图11被分为两半。上半部分示出了在预处理步骤发生之前项目1110a
‑
1110f的组织(例如,
因为项目1110a
‑
1110f可以被组织在用户行为数据数据库410中)。下半部分示出了在预处理步骤发生之后项目1110a
‑
1110f的组织。系统首先按时间顺序对项目1110a
‑
1110f和相关联的上下文信息1120a
‑
1120f进行排序。接下来,项目1110a
‑
1110f根据它们的上下文信息被分组。例如,项目1110a
‑
1110f根据它们所声明的类别1120a
‑
1120f被分组。与特定上下文相关联的每个项目由(1130a
‑
1130b)表示,其中g是组,i是组的索引,j是第i个组中项目的索引。u表示用户。
[0121]
通过这种形式化的分组,可以正式地陈述注意层1000的操作。如前所述,注意层1000捕获在给定上下文信息分类中找到的所有项目之间的内部关系。根据按照每个上下文(例如,类别)分组的嵌入层1010,在每个项目嵌入1015a
‑
1015h中捕获到内部关系。在特定实施例中,一些用户项目交互可以膨胀或收缩(例如,可以调整附加到对用户项目交互的影响的权重)。注意层1000的输出被视为反映对给定偏好上下文信息中其他项目的影响的用户顺序行为的表示。如上所述,注意层1000可以被公式化如下:设h_i是由来自以每个用户的上下文信息i分组后的项目的嵌入输出序列组成的矩阵,其中g和u分别表示上下文组和用户组(等式1)。将非线性激活函数应用于h_i(等式2)。t_i表示第i个上下文中定序后的项目的数量(等式3)。序列的表示r_i由这些输出向量的加权和来形成(等式4)。在使用等式4获得每个上下文的注意之后,将r_i加在一起以检索用户嵌入(等式5)。在特定实施例中,可以部分地将等式5的操作替换到其他层。上面提供的算法1示出了注意操作的伪代码。
[0122]
图12a
‑
图13b示出了由图7
‑
图10所示的架构700的每个层执行的操作的详细示例。示例包括基于为被指定为“u1”的用户捕获到的用户行为数据准备异构散列码。图12a
‑
图12b示出了输入层1220和嵌入层1230a
‑
1230b的输入和输出。表1210表示从各种用户设备接收到的用户行为数据,该用户行为数据与u1的活动相关。用户行为数据可以存储在用户行为数据数据库410中,直到信息被检索以由异构散列模型430处理为止。已经按照时间顺序组织了用户行为数据,首先出现在表中的用户行为数据涉及与特定项目的早期交互。该表是这样组织的:该表呈现了用户的标识符(在本示例下,所有的交互都是由同一个用户u1进行的,然而,在实践中,可以记录多个用户的活动);该表记录了用户已经与之进行了交互的项目的标识符(例如i1、i2等);该表然后记录了与交互相关联的各种上下文。可用的特定上下文可以取决于例如交互的类型、与之交互的项目的类型、记录交互的设备等。在表1210中,所记录的交互包括上下文1(交互的位置)、上下文2(交互的大致时间)、上下文3(记录交互的应用)、上下文4(记录交互的设备的操作系统)、上下文5(记录交互的设备的模型标识符)以及上下文6(附加上下文信息的占位符)。
[0123]
通过输入层1220(例如,输入层710),基于要处理的上下文对数据进行分组。因此,在特定实施例中,行为数据(例如,与之交互的项目)或指针可以与上下文数据项目一起被处理。可以基本上按照上面参考图10描述的技术来执行分组。例如,如果对于特定客户应用,不需要所有的上下文来处理异构散列码,则不是所有的上下文都可以被分组。在本示例中,表1210中的项目被分组为上下文1 1225a、上下文2 1225b和上下文3 1225c。
[0124]
接下来,通过嵌入层1230a(例如,嵌入层1010),为每个特定上下文组中的每个项目生成嵌入。例如,如图12a所示,为上下文1 1225a中的每个项目生成嵌入1235
‑
1a至1235
‑
1f。如图12b所示,为上下文2 1225c中的每个项目生成嵌入1235
‑
2a至1235
‑
2f。在特定实施例中,嵌入可以包括给定维度的实值向量。维度可以由异构散列模型或者将使用散列码的
应用系统来指定。注意,在本示例中,嵌入是仅针对上下文项目本身的值而生成的,因此在同一位置发生的所有项目交互都将具有所生成的相似的嵌入。因此,将存在针对与“客厅”上下文值相关联的四个交互而生成的四个相同的嵌入1235
‑
1a、1235
‑
1c、1235
‑
1d和1235
‑
1f,并且存在针对与“家庭活动室”上下文值1235
‑
1b和“卧室”上下文值1235
‑
1e相关联的其他两个交互而生成的两个唯一的嵌入。生成嵌入,使得相似的上下文值将具有相似的上下文嵌入(例如,相似的上下文值具有在嵌入空间中彼此靠近的嵌入)。因此,在上下文1 1225a的示例中,“客厅”项目(1235
‑
1a、1235
‑
1c、1235
‑
1d和1235
‑
1f)的嵌入相比于“卧室”项目(1235
‑
1e)将更靠近“家庭活动室”项目(1235
‑
1b)的嵌入,因为从启发意义上讲,客厅相比于卧室与家庭活动室更相似。转向图12b中所示的示例嵌入,存在为“星期六晚上”上下文项目生成的唯一嵌入1235
‑
2b、为每个“星期日早上”上下文项目1235
‑
2a和1235
‑
2f生成的共同嵌入、为“星期日晚上”上下文项目生成的唯一嵌入1235
‑
2e以及为每个“星期一晚上”上下文项目1235
‑
2c和1235
‑
2d生成的共同嵌入。生成嵌入,使得相似的上下文值将具有相似的上下文嵌入。因此,在上下文2 1225b的示例中,“星期六晚上”项目(1235
‑
2b)的嵌入相比于“星期一晚上”项目(1235
‑
2c和1235
‑
2d)将更靠近“星期日晚上”项目(1235
‑
2e)的嵌入,因为启发意义上讲,星期六晚上相比于星期一晚上与星期日晚上更相似。嵌入可以从可学习的训练过程中生成,并从例如深度学习框架中提供。
[0125]
图13a
‑
图13b示出了嵌入层1230、聚合层(例如,聚合层730)、注意层1300、完全连接层1320和符号函数1330的输入和输出。图13a
‑
图13b继续图12a
‑
图12b中所示的示例。对于每个上下文,表中每次生成的嵌入连同来自聚合层(例如,730)的嵌入一起被传递到注意层。来自聚合层730的值包括对来自相应的可训练门的值和使用加权和组合的值上下文信息嵌入的聚合。例如,对于上下文1,嵌入1235
‑
1a至1235
‑
1f被传递到注意层1300。在注意层1300中,嵌入的值还和与该值的特定决定性影响相对应的权重1303
‑
1a至1303
‑
1c相关联。例如,在一些实施例中,为客厅上下文项目生成的嵌入1235
‑
1a、1235
‑
1c、1235
‑
1d和1235
‑
1f都可以与权重w1 1303
‑
1a相关联。为家庭活动室上下文项目生成的嵌入1235
‑
1b可以与权重w2 1303
‑
1b相关联。为卧室上下文项目生成的嵌入1235
‑
1c可以与权重w3 1303
‑
1c相关联。聚合嵌入1305a也可以与权重w4 1307a一起被传递到注意层1300。在特定实施例中,权重1303
‑
1a至1303
‑
1c以及1307a可以由注意层1300生成。权重可以被记录为权重矩阵。权重可以是从机器学习模型(诸如梯度下降过程)生成的学习权重。一旦权重稳定,注意层1300的输出被传递到完全连接层1320,完全连接层1320可以被分为多个块或阶段1323和1325。完全连接层1320的输出可以被传递给符号函数1330。符号函数1330可以评估完全连接层1320的输出的分量,并且确定例如每个分量是否满足特定阈值,并且确定上下文的散列码1340a中的值。对于满足阈值的值,符号函数1330可以指定散列码1340a中的值为1,对于不满足阈值的值,符号函数1330可以指定散列码1340a中的值为0。结果是上下文1的散列码1340a。
[0126]
对于上下文2的示例,嵌入1235
‑
2a至1235
‑
2f被传递到注意层1300。在注意层1300中,嵌入的值还和与该值的特定决定性影响相对应的权重1303
‑
2a至1303
‑
2d相关联。例如,在一些实施例中,为星期日早晨上下文项目生成的嵌入1235
‑
2a和1235
‑
2e可以都与权重w1 1303
‑
2a相关联。为星期六晚上上下文项目生成的嵌入1235
‑
2b可以与权重w3 1303
‑
2c相关联。为星期一晚上的项目生成的嵌入1235
‑
2c和1235
‑
2f可以与权重w4 1303
‑
2d相关联。为
星期日晚上上下文项目生成的嵌入1235
‑
2d可以与权重w2 1303
‑
2b相关联。聚合嵌入1305b也可以与权重w5 1307b一起被传递到注意层1300。注意层可以根据以上提供的架构和形式描述(例如,等式(4)和(5)以及图10)生成输出。注意层1300的输出被传递到完全连接层1320,完全连接层1320可以被分为多个块或阶段1323和1325。完全连接层1320的输出可以被传递给符号函数1330。符号函数1330可以评估完全连接层1320的输出的分量,并且确定例如每个分量是否满足特定阈值,并且确定上下文的散列码1340b中的值。符号函数1330的输出是上下文1的散列码1340a。在特定实施例中,完全连接层1320和符号函数1330在各种上下文中可以基本相似、或者可以基于上下文的类型以及该上下文对散列码的相似性预测能力的影响而变化。
[0127]
为与数据集中的每个用户相关联的每个上下文或每个实质上下文(substantial context)生成散列码1340a
‑
1340b。如图14所示,结果是散列码部分1410a
‑
1410d的序列。散列码部分1410a
‑
1410d的数量可以自然地基于被评估的上下文的数量而变化。每个散列码部分1410a
‑
1410d形成用户的异构散列码的部分。在已经生成了所有的散列码之后,这些散列码(例如,通过连结)被组合,以生成完整的异构散列码1400。尽管所示异构散列码1400的部分全部都具有相同的长度,但是可以设想,每个上下文的散列码的大小可以是可变的。可以以基本相同的方式为其活动存储在用户活动数据库中的每个用户生成异构散列码1400。
[0128]
可变的散列码大小可以通过使用指定异构散列码的每个上下文部分的长度的配置文件来实现。图17示出了散列系统和应用的架构表示1700。该系统可以结合对配置文件1710的使用。如图所示,配置文件至少包括上下文的标识符(例如,上下文1、上下文2
……
)和与每个上下文相关联的异构散列码1400的位范围。配置文件还可以指定每个散列码(或散列码部分)的起始位位置和长度。配置文件可以由系统的各种组件来指定、或者由系统的用户(包括应用客户或管理员)来指定。配置文件1710可以被传递到系统的模型训练模块1720或由系统的模型训练模块1720访问。在这种情况下,模型训练模块1720可以包含用于生成异构散列码的模型训练中涉及的架构的任何部分。模型训练模块1720可以使用配置文件1710来使得模型1730仅生成满足配置文件1710的异构散列码(例如,散列码部分)。例如,所生成的不满足配置文件1710的要求的散列码可以被训练模块1720直接拒绝。模型训练模块1720可以产生异构散列模型1730。尽管模型1730可能不一定能够直接访问配置文件1710,但是其在训练本质上仍然符合配置文件1710。此外,配置可以隐式地由架构的模型推断模块1740使用。模型推断模块1740表示架构中负责生成最终存储在异构散列码数据库440中的异构散列码1400的部分。配置文件1710也可以由应用455依赖于异构散列码来使用(或指定)。例如,应用455可以使用配置文件1710来指定当应用455运行时(例如,当类似扩展应用检查散列码相似性时),从异构散列码数据库440中检索出异构散列码1400的哪些部分。
[0129]
图18示出了用于训练异构散列模型1840的示例框架1800。框架1800被设置为以并行或siamese的方式来训练模型1840,其中训练输入包括关于两个用户的活动数据和上下文信息,并且基于对用户相似或不相似的确定,作为交叉熵和相对于参考标准(ground truth)的损失减少的函数来执行所述训练。关于两个用户1810a和1810b的信息分别被提供给输入模块1820a和1820b。与每个用户相关联的上下文信息1830a和1830b也被提供给相应的输入模块1820a和1820b。在特定实施例中,输入模块1820a和1820b可以进行对数据的预
处理,以一般地准备数据用于异构散列模型1840进行接收。预处理可以类似于前面描述的方法。在特定实施例中,数据可以在两条流水线中被提供给模型1840,使得同一模型1840同时有效地处理两个用户1810a和1810b的信息。首先,模型1840的相应的网络层1843a和1843b接收输入。网络层可以基本上类似于上述架构的网络层。网络层1843a和1843b的输出可以被传递到异构散列模型1840的相应的二进制散列层1845a和1845b。二进制散列层1845a和1845b可以生成包括二进制比较数据的散列码。二进制散列层1845a和1845b的输出可以被提供给比较器1850,比较器1850基于由模型1840生成的二进制散列来评估用户将被确定为相似还是不相似。可以将比较器1850的结果与参考标准值进行比较,并且该最终比较的结果可以用于修正模型1840。修正的性质可以是基于用于构建1843a和1843b以及二进制散列层1845a和1845b的底层机器学习过程的。不同的深度神经网络可以被应用于网络层1843a和1845b,诸如所描述的caa网络和taacnn。
[0130]
图4b示出了根据特定实施例的用于生成和使用异构散列码的系统400b的另一个示例架构。系统400b包括并行操作的多个异构散列码生成和存储系统,其中在生成上下文散列码之前,基于上下文信息的类型来分离散列码。因此,输出散列码是上下文散列码,其可以以多种方式被组合以构建异构散列码。本实施例的一个优点是,对于希望仅将特定上下文信息类型作为目标的应用客户,他们不需要管理或检索不必要的上下文信息。因此,在特定实施例中,对于特定客户,系统400b可以更有效地进行操作。
[0131]
系统400b包括多个用户行为数据数据库410a
‑
410b。用户行为数据库410a
‑
410b存储关于用户与由用户设备跟踪的各种应用、内容项目、媒体、网站和其他可交互元素的交互的信息。用户行为数据库410a
‑
410b进一步存储关于那些交互的元数据。系统400b包括多个上下文信息数据库420a
‑
420b。上下文信息数据库420a
‑
420b存储从用户用来与媒体或影响特定用户项目交互的其他项目进行交互的各种设备获取到的任何附加数据。作为示例而非限制,这样的上下文信息可以包括用户的人口统计分布(年龄、性别、收入等),位置信息、时间信息、设备信息和各种其他合适的上下文信息。当从各种设备接收到信息时,系统可以结合使用模块来基于上下文类型分离出用户行为数据和上下文信息。系统400b还包括多个异构散列模型430a
‑
430b。异构散列模型430a
‑
430b可以基本上类似于本文所描述的异构散列模型430。异构散列模型430a
‑
430b可以被专门训练为基于散列流水线已经被分配的特定类型的上下文信息来生成异构散列码。系统400c包括多个异构散列码数据库440a
‑
440b,以存储生成的散列码,该散列码捕获用户偏好的不同级别和方面,同时保持用户之间的相似性。应用系统450和相关组件可以是基本上类似于上面参考图4a所描述的,除此之外,其被配置为从多个异构散列码数据库440a
‑
440b检索信息。
[0132]
图15示出了可以由结合了多个上下文信息特定散列流水线的系统400b生成的散列码。所示的示例包括基于为被指定为“u1”的用户捕获到的用户行为数据来准备异构散列码。表1500a
‑
1500b表示从各种用户设备接收到的用户行为数据,该用户行为数据与u1的活动相关。用户行为数据可以存储在多个用户行为数据数据库410a
‑
410b中,直到信息被检索以由异构散列模型430a
‑
430b处理为止。已经按时间顺序组织了用户行为数据,首先出现在表1500a
‑
1500b中的用户行为数据涉及与特定项目的早期交互。该表是这样组织的:该表呈现了用户的标识符(在本示例下,所有的交互都是由同一个用户u1进行的,然而,在实践中,可以记录多个用户的活动);该表记录了用户已经与之进行了交互的项目的标识符(例如
i1、i2等);该表然后记录了与交互相关联的各种上下文。可用的特定上下文可以取决于例如交互的类型、与之交互的项目的类型、记录交互的设备等。在表1500a中,所记录的交互包括上下文1(交互的位置)、上下文3(记录交互的应用)、上下文4(记录交互的设备的操作系统)、上下文5(记录交互的设备的模型标识符)以及上下文6(附加上下文信息的占位符)。在表1500b中,所记录的交互包括上下文2(交互的大致时间)、上下文3(记录交互的应用)、上下文4(记录交互的设备的操作系统)、上下文5(记录交互的设备的模型标识符)以及上下文6(附加上下文信息的占位符)。对于表1500a和1500b两者,上下文3
‑
6可以被称为一般行为数据,因为其中的信息被记录并与两个上下文一起存储,因此可用于分别影响由异构散列模型430a
‑
430b生成的散列码。
[0133]
散列码可以基本上根据本文描述的技术来生成,但是需要注意的是,所得到的异构散列码被限制为每次仅受一个特定上下文的影响。所生成的散列码1510和1520可以包括两个分量:其中散列码对上下文类型的值进行编码的第一分量,以及其中散列码基于一般行为数据的第二分量。例如,散列码1510是基于上下文1 1505(位置上下文)而生成的。散列码1510包括基于位置1505的第一分量1515和基于一般行为数据1509的第二分量1519。散列码1520是基于上下文2 1507(时间上下文)而生成的。散列码1520包括基于时间1507的第一分量1525和基于一般行为数据1509的第二分量1529。注意,由于一般行为数据散列码部分受到表1500a和1500b中所示的上下文信息的影响,所以即使使用相同的一般行为数据,它们的原始值也通常是不同的。散列码1510和1520可以以各种方式被组合,以形成用户的异构散列码。组织第一异构散列码1530a,其中每个完整的散列码部分连结在一起。组织第二散列码1530b,其中首先连结基于上下文的部分,其次连结基于一般行为的部分。可以在配置文件中指定对异构散列码的布置。
[0134]
图4c示出了根据特定实施例的用于生成和使用异构散列码的系统400c的另一个示例架构。系统400c包括用户行为数据数据库410。用户行为数据库410存储关于用户与由用户设备跟踪的各种应用、内容项目、媒体、网站和其他可交互元素的交互的信息。用户行为数据库410还存储关于那些交互的元数据。系统400c包括上下文信息数据库420。上下文信息数据库420存储从用户用来与媒体或影响特定用户项目交互的其他项目进行交互的各种设备获取的任何附加数据。作为示例而非限制,这样的上下文信息可以包括用户的人口统计分布(年龄、性别、收入等)、位置信息、时间信息、设备信息以及各种其他合适的上下文信息。
[0135]
系统400c还包括上下文分解模块460。上下文分解模块460可以被配置为将用户行为数据分解为上下文特定的行为。例如,不是将交互的记录视为依赖于每一条上下文信息,而是上下文分解可以将特定的交互分组为因为它们的上下文信息而相关。在特定实施例中,分组可以通过聚合或经由聚类的机器学习来执行。上下文分解模块460将用户行为数据(例如,从用户行为数据库410检索的)和上下文信息420分解为上下文特定的行为470。上下文特定的行为470可以基于它们相关联的上下文标签被组织为它们的上下文划分。根据上下文特定的行为470,可以使用一个或多个多散列(multi
‑
hashing)和存储方法来将上下文特定的行为划分转换为高效的散列码。
[0136]
示例应用系统450还被示为系统400c的架构的部分。应用系统450可以基本上类似于上面参考图4a所描述的应用系统450,不同之处在于应用系统450被配置为使用基于上下
文的散列码。
[0137]
图16示出了可以由在散列之前结合了上下文分解模型的系统400c生成的散列码。所示的示例包括基于为被指定为“u1”的用户捕获到的用户行为数据来准备异构散列码。表1600表示从各种用户设备接收到的用户行为数据,该用户行为数据与u1的活动相关。已经按照时间顺序组织了用户行为数据,首先出现在表1600中用户行为数据涉及与特定项目的早期交互。该表是这样组织的:该表呈现了用户的标识符(在本示例下,所有的交互都是由同一个用户u1进行的,然而,在实践中,可以记录多个用户的活动);该表记录了用户已经与之进行了交互的项目的标识符(例如i1、i2等);该表然后记录了与交互相关联的各种上下文。可用的特定上下文可以取决于例如交互的类型、与之交互的项目的类型、记录交互的设备等。在表1600中,所记录的交互包括上下文1(交互的位置)、上下文2(交互的大致时间)、上下文3(记录交互的应用)、上下文4(记录交互的设备的操作系统)、上下文5(记录交互的设备的模型标识符)以及上下文6(附加上下文信息的占位符)。上下文3
‑
6可以被称为一般行为数据,因为其中的信息与所有上下文一起被记录和存储。系统400c已经被配置为不执行相对于这些上下文的上下文分解。
[0138]
散列码可以基本上根据本文所描述的技术来生成,但需要注意的是,生成所得的异构散列码是为了结合关于上下文分解的信息。为了执行上下文分解,上下文分解模块460(或一些实施例中的其他负责模块)选择分解将根据其发生的特定上下文类型。在本示例中,分解将是基于上下文1(交互的位置)的。上下文分解模块460识别用户行为数据库410中与上下文1 1605(例如,“家庭活动室”、“客厅”和“卧室”)相关联的各种值。散列特定行为模块470(或一些实施例中的其他负责模块)是基于与上下文1相关联的值来对交互记录进行分组的。例如,与“家庭活动室”值相关联的所有记录被分组,与“客厅”值相关联的所有记录被分组,并且与“卧室”值相关联的所有记录被分组。然后,多散列和存储模块480使用这些经分组的值来生成散列码部分(例如,这些经分组的值可以用作异构散列模型的输入)。
[0139]
所生成的散列码1610、1620和1630可以包括两个分量:其中散列码对上下文类型值1605进行编码的第一分量,以及其中散列码基于一般行为数据(例如,剩余的上下文值)的第二分量。例如,散列码1610是基于“客厅”值而生成的。散列码1610包括对“客厅”值进行编码的第一分量1615和基于一般行为数据的第二分量1619。散列码1620是基于“卧室”值而生成的。散列码1620包括对“卧室”值进行编码的第一分量1625和基于一般行为数据的第二分量1629。散列码1630是基于“家庭活动室”值而生成的。散列码1630包括对“家庭活动室”值进行编码的第一分量1635和基于一般行为数据的第二分量1639。散列码1610、1620和1630可以以各种方式被组合,以形成针对用户的特定上下文的异构散列码。组织第一异构散列码1630a,其中每个完整的散列码部分被连结在一起(例如,散列码1610、1620和1630的整体被连结)。组织第二散列码1630b,其中首先连结基于上下文的部分,其次连结基于一般行为的部分(例如,首先连结部分1615、1625和1635,其次连结部分1619、1629和1639)。可以在配置文件中指定对异构散列码的布置。然后,所生成的散列码可以与用户相关联地存储。系统可以基于不同的上下文值(例如,对于位置、时间、人口统计)生成多个散列码。系统可以针对用户将多个散列码组合(例如,连结)成单个散列码。
[0140]
图6示出了根据本文公开的架构的一个实施例的用于生成和使用异构散列码的公开系统的操作方法600。方法600可以包括与系统一起使用的过程,该系统被配置为类似于
结合上下文分解的系统架构400c。方法600可以从步骤610开始,其中计算系统可以从一个或多个客户端设备接收用户行为数据。例如,系统可以接收用户与应用的交互的记录或者对用户已经观看了特定视频的指示。在步骤615,系统还可以接收与用户行为数据相关联的上下文信息。如本文所述的,上下文信息可以包括诸如交互的时间、交互的位置、用于交互的设备、与用户和用户的家庭相关联的人口统计等信息。在步骤620,系统可以基于特定上下文过滤用户行为和上下文信息。系统还可以基于上下文的特定值来过滤用户行为。在特定实施例中,系统可以使用上下文分解模块460和上下文特定的行为模块470来过滤用户行为。在一个示例中,如上所述,系统可以基于位置过滤用户行为,并且进一步基于特定位置值过滤数据。在特定实施例中,步骤610
‑
620可以被视为涉及预处理数据或构建推断或建模阶段的输入,推断或建模阶段为所有用户生成异构散列码。在步骤625,系统可以确认预处理步骤成功。如果确定处理不成功,则该方法可以返回到步骤610以再试尝试。处理可能由于各种原因(包括为用户收集的数据量不足、数据可能过于稀疏而无法创建有意义的表示、或者各种其他原因)而不成功。如果确定处理成功,则该方法可以前进到步骤630。
[0141]
在步骤630,系统可以使用异构散列模型430来基于经过滤的数据生成异构散列码。在特定实施例中,系统可以使用多散列和存储模块480。异构散列模型430可以被结合到多散列和存储模块480中。该过程可以被不同地称为模型推断,因为如本文进一步描述的,异构散列模型430可以是已经被训练为生成异构散列码的机器学习模型。所生成的散列码可以被配置为保持关于用户活动数据的信息和计算用户在行为和上下文中的相似性所需的上下文信息。在特定实施例中,所生成的散列码可以不保持行为和上下文的确切历史。这样,散列码可以比它们编码的原始数据小得多,因此比较起来更快。在步骤635,系统可以评估所生成的散列码,以确认已经成功创建了散列码。步骤635可以包含确认散列码符合与格式化、数据组织、错误检查和其他相关要求相关的规则。这些要求可以由为其生成散列码的系统或应用系统来预先指定。步骤630和635一起负责为用户数据和上下文信息生成散列码。
[0142]
在特定实施例中,步骤640
‑
675可以部分或全部地由应用系统(例如,应用系统450)使用异构散列码来执行。在步骤640,应用系统450可以接收用户的种子划分。用户的种子划分可以是由应用系统450或其用户选择的用户的集合,作为用户想要识别的扩展的用户组的代表。在特定实施例中,种子划分可以包括已经接收到广告定向的用户或者已经被识别为类似扩展的成功匹配的用户。在步骤645,应用系统450可以接收应用系统450的用户期望作为目标的上下文条件460。在步骤650,应用系统450可以使用在前面的划分中接收到的上下文条件信息来分解种子划分。这可以包含基于目标条件分解种子划分数据。应用系统450可以以类似于上下文分解模块460分解用户行为数据410的方式来执行分解。在特定实施例中,出于此目的,应用系统450可以结合上下文分解模块。在步骤655,应用系统450可以基于分解后的种子划分453和上下文条件460从多散列和存储模块470获得种子散列码。在特定实施例中,种子划分可能需要对分解后的行为执行多散列,以在没有预先准备好分解后的种子散列码的情况下生成种子散列码。如本文所述的,因为异构散列码以允许应用系统450基于上下文条件460仅检索最相关的散列码的方式被存储,所以即使种子划分453相同,应用系统450也可以针对变化的上下文条件460检索不同的异构散列码。因此,对正确的异构散列码的检索是实现散列码比较加速的主要组成部分,这是所述技术的技术优势。
[0143]
在步骤660和665,应用系统450可以执行已经为其检索了异构散列码的应用。例如,应用系统450可以执行类似扩展。在步骤660,应用系统450可以将不在种子划分453中的各种用户的分解后的散列码与种子异构散列码进行比较。在特定实施例中,比较可以包括计算嵌入空间中异构散列码之间的逐位比较或距离。异构散列模型430可能已经产生了异构散列码,该异构散列模型430被训练为当底层用户活动数据相似时生成相似的异构散列码,并且当底层用户活动数据不相似时生成不相似的异构散列码。因此,两个异构散列码之间的距离大致反映了底层用户活动数据之间的差异。在步骤665,应用系统450可以检索与种子划分453中的用户最相似的用户。最相似的用户可以是嵌入空间中其相应的异构散列码最接近种子异构散列码的用户。在特定实施例中,应用系统450可以识别阈值距离内的所有用户。在特定实施例中,应用系统450可以识别阈值数量的用户,例如五十个最接近的用户。应用系统450可以将用户散列到桶(bucket)中,并且使用距离计算、使用上下文条件作为过滤器来对一般用户进行排名。
[0144]
在特定实施例中,应用系统450可以被配置为做出关于检索到的用户的新颖性确定。例如,在步骤670,应用系统450可以将检索到的用户划分与用户的种子划分进行比较,以确定检索到的划分是否具有足够数量的用户、或者检索到的用户划分是否满足阈值相似度。应用系统450可以确定检索到的用户划分与用户的种子划分具有过高的重叠度,并且前进到步骤655,在步骤655,应用系统450可以识别要与用户的种子划分进行比较的附加散列码。如果应用系统450确定检索到的用户划分满足阈值,则应用系统450可以前进到步骤675,在步骤675,应用系统450聚合用户划分的集合(例如,适当地包括种子划分或不包括种子划分),并且准备扩展的用户划分以返回给应用系统450的用户。
[0145]
在特定实施例中,比较用户的过程可以依赖于权重矩阵。如本文所述的,生成异构散列码的过程可以导致散列码对于特定上下文信息具有基本相似的散列值,而对于其他上下文信息具有基本不相似的散列值。比较散列值的系统或应用系统可以被配置为根据识别散列码的部分(例如,特定的上下文信息)(该部分在识别例如相似的用户划分时很重要)的加权矩阵来对散列码比较的特定部分进行加权。当生成异构散列码时,还可以使用加权矩阵作为加速比较的方法。存储在加权矩阵中的权重可以是机器学习的或者基于启发式值的,这取决于系统或应用系统的操作者可用的基于知识的方法。
[0146]
如前所述,在特定实施例中,用于经由对用户行为历史的深度散列来执行最近邻搜索的另一种方法涉及使用时间感知注意cnn(taacnn)来生成散列码以进行用户比较。taacnn以不同的时间尺度提取用户的行为。在特定实施例中,这种模型将用户的长期偏好的特征与她的短期偏好相组合。因此,racnn/taacnn模型可能适合于对用户更动态的行为模式进行建模。
[0147]
taacnn源于对用户活动建模领域中若干个技术问题的询问。例如,第一个问题涉及如何适当地预处理深度学习算法要使用的顺序行为数据?深度学习算法在处理顺序数据方面展示出希望。然而,当前用于顺序数据的深度学习模型是针对文本分析或视频分析来设计的。顺序行为数据是另一种类别的数据。例如,首先,顺序行为数据基本上是一维数据,不像图像数据那样包括相似性结构。其次,顺序行为数据是不连续的。第二个问题涉及当只有数据的特定部分可能可靠地具有元数据信息时,如何概括顺序行为数据的用户表示?与文本和视频等没有互补数据的其他顺序数据不同,顺序行为数据可以链接到元数据。元数
据信息可能被证明对二进制散列有用。因此,需要解决的一个问题是,如何制作一种通用的深度学习算法来创建在元数据可用时使用元数据但不完全依赖于元数据的用户表示。第三个问题涉及如何考虑处理用户的长期行为和短期行为?顺序行为数据固有地存储在其中的用户的长期行为信息和短期行为信息。例如,行为数据可以揭示用户在瞬间的偏好以及跨数月或数年的偏好。由于长期行为和短期行为可能表现出不同的模式,所以问题是如何单独地处理它们以提取准确的特征,而不会对散列性能产生负面影响。第四个问题涉及如何在多个时间感知尺度级别上提取用户的行为模式?即使在专门以长期或短期特征为目标时,如何在不同的时间尺度级别上动态地识别特征也是一个复杂且困难的问题。
[0148]
在特定实施例中,本公开考虑的解决诸如这些问题的一种解决方案是用于执行对顺序行为数据的二进制散列的时间感知注意卷积神经网络(taacnn)。这种二进制散列模型可以被集成到各种网络和应用中,这些(极大地简化的)网络和应用必须比较关于用户的信息(划分扩展、用户分析等)。这种新的基于深度学习的模型至少通过以下方式解决了前面所提到的问题。taacnn模型引入了对用户的顺序行为进行预处理并将一维数据映射到三维的输入层。这允许一维数据完全地由卷积神经网络来处理。在从低维数据到高维数据的映射过程中,聚合顺序行为数据以确保高维数据不会遭受严重的稀疏问题。一个额外的好处是,分析中的数据可以更自由地被视为连续的数据。所提出的输入层和所提出的嵌入层使得taacnn能够适应和兼容各种不同的嵌入算法。这样的特性使得taacnn与可能具有或可能不具有元数据信息的数据相兼容。taacnn的时间感知注意层中的两个核集帮助taacnn模型分离用户的长期行为注意和短期行为注意,并单独地提取其特征。这可以防止混淆与其他内容无关的注意特征,以帮助提高从taacnn生成的散列码的质量。所提出的taacnn在所提出的时间感知注意层中支持不同的核大小,以促进在不同时间尺度级别上对长期行为和短期行为的辨识。这增加了这种模型的时间感知的覆盖范围,并且创建了对用户简档的更深刻的表示。
[0149]
图19示出了用于训练和使用所提出的taacnn的系统的示例模型。正如模型1900所提出的,训练系统1980和散列系统1990紧密链接。如本文将要描述的,可以在训练过程期间(有时,在线地)更新taacnn 1920,这可以提高散列性能。
[0150]
在训练过程1980期间,用户对(包括关于两个用户1910a和1910b的数据)可以被加载到siamese或并行训练结构中。来自两个用户1910a和1910b的数据被传递到基于深度学习的taacnn模型1920中。taacnn 1920使用本文进一步描述的方法为两个用户生成用户嵌入。来自两个用户1910a和1910b的这些连续的嵌入被传递到两个二进制散列层1930a和1930b,以便为两个用户1910a和1910b中的每一个生成二进制散列码。二进制散列层1930a和1930b可以被配置为使用各种算法(包括,仅作为示例而非限制,不同的激活函数或不同的阈值)来生成散列码。在特定实施例中,用户1 1910a和用户2 1910b的二进制散列层1930a和1930b可以共享相同的二进制散列算法。在特定实施例中,如果需要,用户1 1910a和用户2 1910b的二进制散列层1930a和1930b可以基于用户数据的布置使用不同的算法。在为用户对生成了两个散列码之后,散列码被提供给相似性判断层1940以计算它们的相似性标签。相似性判断层1940可以支持各种比较方法,包括但不限于汉明距离、欧几里德距离等。在相似性判断层1940计算出为该用户对的相似性结果之后,将相似性结果与由训练过程1980的管理员提供的参考标准真实的相似性标签进行比较。相似性结果和真实的相似性
标签之间的任何误差都可以通过架构被反向传播,用于在训练过程中更新taacnn模型1920。
[0151]
在散列过程1990期间,根据训练过程1980训练的taacnn模型1920用于为存储在用户数据库1960中的大规模用户顺序行为数据生成散列码。在特定实施例中,用户数据库1960可以等同于用户活动数据数据库410。另一个二进制散列层1930c根据由taacnn模型1920生成的散列码生成二进制散列。输出(例如,散列码)存储在用户散列码数据库1970中。在特定实施例中,用户散列码数据库1970可以等同于异构散列码数据库440,但需要注意的是,用户散列码数据库1970存储的不是异构散列码,而是基于taa的用户散列码。散列过程1990中的taacnn模型1920直接来自训练过程1980,并且随着训练过程中的改变而被更新。本公开设想了至少两种更新taacnn模型1920的方法:在线更新和批量(batch)更新。在在线更新期间,训练过程1980和散列过程1990基本上同时运行,并且根据系统设计,taacnn模型1920在两个过程中同时被更新或在过程期间的特定检查点(例如,在没有更新的情况下经过时间量)被更新。在特定实施例中,在线更新可以为散列过程1990提供处理流数据的灵活性。对于批量处理,taacnn模型1920更新发生在完整的训练过程操作的结束时。在特定实施例中,批量更新确保只有被完整更新后的taacnn模型1920被传播到散列模型1990。
[0152]
图20a示出了taacnn 1920的示例架构2000a。taacnn 1920(实际上是示例架构2000a)的输出是用于二进制散列层(例如1930a和1930b)计算每个用户的散列码的用户嵌入2050。用户嵌入2050的质量在很大程度上决定了散列码的质量,从而决定了比较的质量。输入层2010是数据预处理层,其将顺序行为数据输入(在特定实施例中,具有或不具有元数据)映射为可以由cnn处理的三维结构。预处理的结果是用户行为表示2015,其可以通过参考图21来进一步理解。
[0153]
用户行为数据通常由用户与特定项目的交互的记录来表示。数据预处理阶段的第一个步骤是将每个项目嵌入到向量表示中。这里可以取决于例如输入数据是否具有与其相关联的元数据来使用各种适当的算法。如果没有元数据,这里可以使用类似于word2vec的嵌入算法。如果元数据可用,根据元数据的特定布置,可以使用类似于独热或多热嵌入的嵌入算法。数据预处理阶段的下一个步骤是按期望的时间单位对用户的活动历史进行会话化。对每个会话的时间单位的选择可能影响与特定时间尺度相关的用户嵌入2050的可靠性。作为一个示例,可以选择一个小时的会话长度。在特定实施例中,可以设想更长或更短的会话长度。对于每个会话,考虑中的用户在会话时间帧期间已经与其进行了交互的所有项目都使用从上一个步骤生成的相应的项目的嵌入来聚合。例如,在时间=0和时间=1小时之间,所有交互被放置在第一会话中,在时间=1小时和时间=2小时之间,所有交互被放置在第二会话中。这种聚合表示对于给定会话对用户行为的汇总。
[0154]
在会话化之后,每个用户的行为输入被重塑或被映射到高维空间u∈rh
×
w
×
c,其中h为短期维度(例如,天),w为长期维度(例如,月),并且c为类别/嵌入大小。每个维度所需的确切时间可以与为会话选择的时间长度相关。图21示出了如何在映射之后概念性地呈现用户顺序行为数据的实例。在图21中,短期轴2110对应于短期时间单位(例如,以小时为基础),长期轴2120对应于长期时间单位(例如,以天为基础),并且嵌入轴2130对应于不同的项目嵌入的嵌入大小。在特定实施例中,短期时间单位可以但不需要等于所选会话时间帧的长度。在特定实施例中,可以选择短期维度和长期维度来在用户表示中进行近似地平衡
(或避免不平衡)。例如,如果选择1小时的短期维度,则选择1年作为长期维度可能不合适或效率低下。这可以通过由客户应用设置的启发式模型来指定。
[0155]
在特定实施例中,来自输入层2010的嵌入可以是稀疏的或者是手动设计的嵌入(hand
‑
crafted embedding)的结果。因此,用户行为表示2015可以携带比实际相似性信息更多的概念信息。这种场景会对taacnn的整体性能,尤其是其以较大尺度保持相似性信息的能力产生负面影响。为了克服这个限制,引入嵌入层2020作为架构2000a的部分。嵌入层2020应用卷积核2025(例如,映射或嵌入核)来基于稀疏表示将输入层2010的输出转换为自适应分布式表示。嵌入层2020可以使用1
×
1卷积核2025来将低维稀疏输入u映射到高维自适应密集嵌入ue∈rh
×
w
×
e,其中e是嵌入大小(例如,128)。
[0156]
时间感知注意层2030用于提取taacnn模型的架构2000a中的时间感知注意特征。时间感知注意层2030将注意特征分离为短期特征和长期特征。短期注意特征(在图21中示为轴2110)是包含相对小的时间尺度相关性的特征提取。长期注意特征(在图21中示为轴2120)是封装较长时间段内相对独立的活动的重要性的特征提取。作为示例,短期注意特征可以描绘其中用户今天晚上8:00的电视观看行为与用户今天晚上9:00的电视观看行为高度相关的用户场景。然后,长期注意特征可以描绘用户在星期一晚上8:00的电视观看行为,而不是上个星期一晚上8:00的电视观看行为。由于时间单位表示的差异,短期注意特征和长期注意特征不容易组合。因此,在taacnn的架构2000a中单独地表示和处理短期注意特征和长期注意特征。由此可以看出,在以前的cnn中使用的传统方形卷积核是用于时间感知注意层2030的次优的核选项,而不是用于我们具有顺序行为数据的时间感知注意机制的最优核选项。
[0157]
为了解决这个问题,针对短期注意特征和长期注意特征,开发了对两个不同核集的两个独立的设计。在图20a所示的示例架构2000a中,使用具有不同维度的核沿着用户行为表示2015的短期轴2110应用短期核集(2035a
‑
2035c),其维度分别为:1xn(2035a)、1xm(2035b)和1xv(2035c),其中n<m<v。这些核分别是小短期(small short
‑
term,sst)、中短期(middle short
‑
term,mst)和大短期(large short
‑
term,lst)注意特征的提取。使用具有不同维度的核沿着用户行为表示2015的长期轴2120应用长期核集(2035d
‑
2035f),其维度分别为:tx1(2035d)、yx1(2035e)和ux1(2035f),其中t<y<u。长期核集分别是小长期(small long
‑
term,slt)、中长期(middle long
‑
term,mlt)和大长期(large long
‑
term,llt)注意特征的提取。对于每个核集,核集内不同的核大小用于在特征损失的情况下增加时间感知覆盖范围。尽管在本示例中,每个核集包括三个核,但是每个集可以使用更多或更少的核,并且在适当的情况下,这些集的大小可以不相等。在一些实施例中,核集的大小可以是基于所使用的顺序行为数据集的特性(例如,稀疏性、数据集的时间范围等)的。在一些实施例中,不管一个集中有多少个核,它们的大小可以遵循以下规则:
[0158]
2(i 1)
[0159]
其中i∈1,2,3,...,r,并且
[0160]
r是这个核集中核的数量。
[0161]
为了防止在短期注意特征和长期注意特征之间的可能的交互期间的信息损失,向时间感知注意层2030引入将池化层2037,以提取出相关性特征作为补充特征。池化层2037和各种卷积核2035a
‑
2035f用于对用户行为表示进行卷积(示为卷积块2039和2038)。已经
在前面讨论了解释时间感知层如何提取特征的伪代码算法(作为算法2)。算法2示出了根据特定实施例的如何计算时间感知注意层中的特征。
[0162]
卷积块2039和2038的输出是相关性特征2045a和各种注意特征2045b
‑
2045g。短短期特征2045b、中短期特征2045c和长短期特征2045d分别是通过卷积核2035a、2035b和2035c对用户行为表示2015进行卷积的结果。短长期特征2045e、中长期特征2045f和长长期特征2045g分别是通过卷积核2045d、2035e和2035f对用户行为表示2015进行卷积的结果。在聚合层2040中,从时间感知注意层2030输出的所有特征被展平并连结在一起。由此,准备最终用户嵌入2050。用户嵌入2050最终将用于相似性训练和/或散列。
[0163]
图20b示出了taacnn 1920的另一个示例架构2000b。架构2000b建立在图20a所示的架构2000a上,并且相似编号的组成部分应该被理解为作用相似,除非另外特别指出。图20b中所示的架构2000b包括聚合层2040之后的另一个注意层2060。如果顺序数据的时间范围太大(例如,超过几十年)、或者如果会话大小所覆盖的时间尺度与短期轴2110和长期轴2120两者中的一个或多个的时间尺度之间存在很大差异,则为了尽可能深地覆盖时间感知的分析,可能需要实现附加的核。在特定实施例中,这可能使得训练深度学习模型和从聚合层2040生成用户嵌入直接不切实际,因为聚合层2040可能被认为具有太多的参数(例如,所得到的用户嵌入2050可能具有太高的维度以至于不能被有效地存储、检索和比较)。在这种情况下,添加注意层2060来提取组合的短期注意特征2065和长期注意特征2067。短期注意特征2065提取短短期特征2045b、中短期特征2045c和长短期特征2045d,以及作为被选择来处理用户行为表示2015的附加核的结果而生成的其他附加特征。长期注意特征2067提取短长期特征2045e、中长期特征2045f和长长期特征2045g,以及作为被选择来处理用户行为表示2015的附加核的结果而生成的其他附加特征。在这个示例中,因为不需要对相关性特征2045a的附加提取,所以相关性特征2045a被简单地向前传递。相关性特征2045a、短期注意特征2065和长期注意特征2067(以及可以使用的任何注意特征)被组合以形成用户嵌入2050。
[0164]
图20c示出了taacnn 1920的另一个示例架构2000c。架构2000c与图20a中所示的架构2000a相关,并且相似编号的组成部分应该被理解为作用相似,除非另外特别指出。一般来说,架构2000c是架构2000a的简化版本。如果用户顺序行为数据的时间范围很小(例如,只有一天的行为数据可用),则长期注意和短期注意可能会变得彼此紧密相关。在这种情况下,架构2000a的非对称卷积核2035a
‑
2035f可以用更传统的类方形池化2053以及卷积核2055和2057来代替,以提取特征。池化2053、nxn卷积核2055和mxm卷积核2057(n<m)中的每一个都可以与用户行为表示2015进行卷积以生成注意特征。在这种架构中,短期注意特征2073是池化2053的结果,中期注意特征2075是nxn卷积核2055的结果,并且长期注意特征2077是mxm卷积核2057的结果。在聚合层2040中,注意特征2073、2075和2077被组合以形成用户嵌入2050。
[0165]
在特定实施例中,taacnn和这些自适应架构尤其可以用于各种应用系统。例如,本文所描述的方法可以用于快速且高效的用户分析。通过为用户行为的长期注意和短期注意提供准确的时间感知,taacnn提供了高质量的用户嵌入,其可以被各种应用客户用来作为用户分析模型的基础。特别地,嵌入可以通过为未来的系统提供强力且自适应的起点、同时避免与数据稀疏和噪声相关的问题,来促进准确的用户分析模型的更快发展。例如,广告分
析可以使用每个用户的散列码或嵌入来运行人口统计分析模型,以识别适当的目标客户。作为另一个示例,本文所描述的方法可以用于快速且高效的推荐系统。因为taacnn可以为用户提供高质量的散列码,并且(从taacnn的输入层)为项目提供嵌入,所以taacnn可以帮助提供高性能的推荐系统。此外,taacnn可以用于支持类似建模系统。因为taacnn为每个用户提供高质量的散列码,所以taacnn可以用来创建如上所述的高性能类似系统。例如,如果广告团队具有对编程类型感兴趣的种子用户组,则通过比较用户散列码,广告团队可以通过引入与种子用户组相比具有相似散列码的用户来容易地扩大种子组。
[0166]
已经进行了若干个个实验来评估所公开的技术相对于其他现有二进制散列技术的性能。更具体地,将所公开的技术与其他基准散列方法(如在公共(movielens,goodreads)和专有匿名用户活动数据上的lsh和vdsh
‑
s)进行比较。所有这些数据集都包含与特定项目相关的顺序用户活动。
[0167]
所有数据集都通过移除一些类似异常的用户活动(例如,单个用户的过多评级)来进行预处理,以确保更精确的评估结果。表1包含对此类经预处理的数据集的汇总统计数据。
[0168]
表1:数据集统计数据(预处理后)
[0169][0170]
由于没有对于给定数据集上的用户相似性标签的参考标准,因此使用来自每个数据集的最近时间段的杰卡德索引来创建参考标准。接下来,基于预定义的杰卡德索引值对关于每个用户的最相似和最不相似的用户(即,5个相似用户对5个不相似用户)进行分类。从最近时间段之前的那些实例中,为所公开的模型(类别注意和racnn/taacnn)提取输入特征。然后(从当前开始)重新集成提取出的特征与相似性标签,并且分别被分割为80%/20%来产生训练集和测试集。
[0171]
可以存在正确预测的数量除以通过经训练的类别注意和racnn/taacnn模型改变散列码长度而做出的预测的总数的计算(即准确性)。对于lsh,模型是基于项目类别在用户
‑
项目交互中出现的相对频率来构建的。然后对经训练的lsh模型执行近似相似性联接,以推断用户对的相似性或不相似性。对于vdsh
‑
s,结合用户最常查看的项目类别作为标签、使用为用户交互历史中存在的所有项目计算出的tf
‑
idf值来训练模型。接下来,提取由经训练的vdsh
‑
s模型生成的散列码,以基于给定散列码之间的汉明距离来预测成对用户的相似性。通过将lsh和vdsh
‑
s的预测输出与所公开的技术的相似性标签进行比较来测量它们的准确性。
[0172]
表2和图22示出了用于在实验中考虑的三个数据集的所有方法的性能。图22示出了来自三个所描述的用户行为数据集(即,goodreads 2200、movielens 2210和专有用户活动数据2220)的准确性评估结果。
[0173]
表2:三个用户行为数据集上不同数量散列位的用户相似性预测的准确性
[0174]
[0175]
从给定的结果中,可以观察到类别注意和racnn/taacnn跨不同的散列位长度在所有数据集上都显著优于其他基准二进制散列技术。这验证了lsh和vdsh
‑
s两者都不能考虑用户
‑
项目交互历史中的类别偏好或时间尺度。还可以观察到,在movielens数据集的情况下观察到最高的准确性提高(相对于vdsh
‑
s/lsh为0.34/0.2)。这是因为与其他数据集相比,movielens数据集的每个用户的交互数据点要稀疏得多(见表2)。因为本文所描述的技术可以使用高级元数据和各种时间尺度来高精度地对用户的顺序行为建模,所以相比于其他基准模型,为每个用户生成的散列码更准确。
[0176]
类别注意在如movielens和goodreads这样的数据集上显示出强大的性能,在这些数据集上,用户活动很稀疏,因为类别注意生成了捕获长期偏好的类别嵌入。racnn/taacnn可能适合于具有更密集的用户
‑
项目交互数据点的数据集,如所公开的技术的专有用户活动数据,因为racnn/taacnn对时间变化更敏感。
[0177]
本文描述了用于导出保持顺序行为数据的相似性的二进制散列码的两个示例深度二进制散列架构实施例。类别注意利用高级元数据来捕获用户的偏好。racnn/taacnn探索在不同时间尺度上不断演变的用户偏好。针对各种数据集的实验通过其相对于其他公知散列方法的显著性能改进展示了所公开的技术的实施例的有效性。本文还表明,类别注意对于那些用户活动随时间不是很频繁的数据集更有效,而racnn/taacnn对于那些用户活动随时间更频繁的数据集更有效。本公开说明了开发专门用于顺序行为数据的二进制散列的精确模型的重要性。
[0178]
图23示出了示例计算机系统2300。在特定实施例中,一个或多个计算机系统2300执行本文描述或示出的一个或多个方法的一个或多个步骤。在特定实施例中,一个或多个计算机系统2300提供本文描述或示出的功能。在特定实施例中,运行在一个或多个计算机系统2300上的软件执行本文描述或示出的一个或多个方法的一个或多个步骤、或者提供本文描述或示出的功能。特定实施例包括一个或多个计算机系统2300的一个或多个部分。这里,在适当的情况下,对计算机系统的引用可以包含计算设备,反之亦然。此外,在适当的情况下,对计算机系统的引用可以包含一个或多个计算机系统。
[0179]
本公开考虑了任何合适数量的计算机系统2300。本公开考虑了采取任何合适的物理形式的计算机系统2300。作为示例而非限制,计算机系统2300可以是嵌入式计算机系统、片上系统(system
‑
on
‑
chip,soc)、单板计算机(single
‑
board computer,sbc)系统(诸如,模块上计算机(computer
‑
on
‑
module,com)或模块上系统(system
‑
on
‑
module,som))、台式计算机系统、膝上型或笔记本计算机系统、交互式信息亭、大型机、计算机系统网格、移动电话、个人数字助理(pda)、服务器、平板计算机系统、增强/虚拟现实设备或这些中的两个或更多个的组合。在适当的情况下,计算机系统2300可以包括一个或多个计算机系统2300;是集成的或分布式的;跨越多个位置;跨越多台机器;跨越多个数据中心;或者驻留在云中,云可以包括一个或多个网络中的一个或多个云组件。在适当的情况下,一个或多个计算机系统2300可以执行本文描述或示出的一个或多个方法的一个或多个步骤,而没有实质的空间或时间限制。作为示例而非限制,一个或多个计算机系统2300可以实时地或以批量模式执行本文描述或示出的一个或多个方法的一个或多个步骤。在适当的情况下,一个或多个计算机系统2300可以在不同的时间或不同的位置执行本文描述或示出的一个或多个方法的一个或多个步骤。
[0180]
在特定实施例中,计算机系统2300包括处理器2302、存储器2304、存储装置2306、输入/输出(i/o)接口2308、通信接口2310和总线2312。尽管本公开描述并示出了在特定布置中具有特定数量的特定组件的特定计算机系统,但是本公开考虑了在任何合适的布置中具有任何合适数量的任何合适组件的任何合适的计算机系统。
[0181]
在特定实施例中,处理器2302包括用于执行指令(诸如构成计算机程序的指令)的硬件。作为示例而非限制,为了执行指令,处理器2302可以从内部寄存器、内部高速缓存、存储器2304或存储装置2306中检索(或获取)指令;解码并执行这些指令;然后将一个或多个结果写入内部寄存器、内部高速缓存、存储器2304或存储装置2306。在特定实施例中,处理器2302可以包括用于数据、指令或地址的一个或多个内部高速缓存。本公开考虑了在适当的情况下包括任何合适数量的任何合适的内部高速缓存的处理器2302。作为示例而非限制,处理器2302可以包括一个或多个指令高速缓存、一个或多个数据高速缓存以及一个或多个转译后备缓冲器(translation lookaside buffer,tlb)。指令高速缓存中的指令可以是存储器2304或存储装置2306中的指令的副本,并且指令高速缓存可以加速处理器2302对那些指令的检索。数据高速缓存中的数据可以是存储器2304或存储装置2306中用于在处理器2302处执行的指令对其进行操作的数据的副本;用于由在处理器2302处执行的后续指令访问或用于写入存储器2304或存储装置2306的、在处理器2302处执行的先前指令的结果;或其他合适的数据。数据高速缓存可以加速处理器2302的读或写操作。tlb可以加速处理器2302的虚拟地址转译。在特定实施例中,处理器2302可以包括用于数据、指令或地址的一个或多个内部寄存器。本公开考虑了在适当的情况下包括任何合适数量的任何合适的内部寄存器的处理器2302。在适当的情况下,处理器2302可以包括一个或多个算术逻辑单元(alu);是多核处理器;或者包括一个或多个处理器2302。尽管本公开描述并示出了特定的处理器,但是本公开考虑了任何合适的处理器。
[0182]
在特定实施例中,存储器2304包括用于存储供处理器2302执行的指令或供处理器2302操作的数据的主存储器。作为示例而非限制,计算机系统2300可以将指令从存储装置2306或另一个源(诸如,另一个计算机系统2300)加载到存储器2304。处理器2302然后可以将指令从存储器2304加载到内部寄存器或内部高速缓存。为了执行指令,处理器2302可以从内部寄存器或内部高速缓存中检索指令并解码指令。在指令的执行期间或之后,处理器2302可以将一个或多个结果(其可以是中间或最终结果)写入内部寄存器或内部高速缓存。处理器2302然后可以将这些结果中的一个或多个写入存储器2304。在特定实施例中,处理器2302仅执行一个或多个内部寄存器或内部高速缓存或者存储器2304(而不是存储装置2306或其他地方)中的指令,并且仅对一个或多个内部寄存器或内部高速缓存或者存储器2304(而不是存储装置2306或其他地方)中的数据进行操作。一个或多个存储器总线(每个可以包括地址总线和数据总线)可以将处理器2302耦合到存储器2304。总线2312可以包括一个或多个存储器总线,如下所述。在特定实施例中,一个或多个存储器管理单元(mmu)驻留在处理器2302和存储器2304之间,并且便于处理器2302请求的对存储器2304的访问。在特定实施例中,存储器2304包括随机访问存储器(ram)。在适当的情况下,该ram可以是易失性存储器。在适当的情况下,该ram可以是动态ram(dram)或静态ram(sram)。此外,在适当的情况下,该ram可以是单端口或多端口ram。本公开考虑了任何合适的ram。在适当的情况下,存储器2304可以包括一个或多个存储器2304。尽管本公开描述并示出了特定的存储器,但
是本公开考虑了任何合适的存储器。
[0183]
在特定实施例中,存储装置2306包括用于数据或指令的大容量存储装置。作为示例而非限制,存储装置2306可以包括硬盘驱动器(hdd)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(usb)驱动器或者这些中的两个或更多个的组合。在适当的情况下,存储装置2306可以包括可移动或不可移动(或固定)介质。在适当的情况下,存储装置2306可以在计算机系统2300的内部或外部。在特定实施例中,存储装置2306是非易失性固态存储器。在特定实施例中,存储装置2306包括只读存储器(rom)。在适当的情况下,该rom可以是掩模编程rom、可编程rom(prom)、可擦除prom(eprom)、电可擦除prom(eeprom)、电可改变prom(earom)或闪存或者这些中的两个或更多个的组合。本公开考虑了采取任何合适的物理形式的大容量存储装置2306。在适当的情况下,存储装置2306可以便于处理器2302和存储装置2306之间通信的包括一个或多个存储装置控制单元。在适当的情况下,存储装置2306可以包括一个或多个存储装置2306。尽管本公开描述并示出了特定的存储装置,但是本公开考虑了任何合适的存储装置。
[0184]
在特定实施例中,i/o接口2308包括硬件、软件或两者,为计算机系统2300和一个或多个i/o设备之间的通信提供一个或多个接口。在适当的情况下,计算机系统2300可以包括这些i/o设备中的一个或多个。这些i/o设备中的一个或多个可以实现人和计算机系统2300之间的通信。作为示例而非限制,i/o设备可以包括键盘、小键盘、麦克风、监视器、鼠标、打印机、扫描仪、扬声器、静态照相机、触笔、平板、触摸屏、轨迹球、摄像机、另外的合适的i/o设备或者这些设备中的两个或更多个的组合。i/o设备可以包括一个或多个传感器。本公开考虑了任何合适的i/o设备和用于它们的任何合适的i/o接口2308。在适当的情况下,i/o接口2308可以包括一个或多个设备或软件驱动程序,使得处理器2302能够驱动这些i/o设备中的一个或多个。在适当的情况下,i/o接口2308可以包括一个或多个i/o接口2308。尽管本公开描述和示出了特定的i/o接口,但是本公开考虑了任何合适的i/o接口。
[0185]
在特定实施例中,通信接口2310包括硬件、软件或两者,为计算机系统2300和一个或多个其他的计算机系统2300或一个或多个网络之间的通信(例如,基于分组的通信)提供一个或多个接口。作为示例而非限制,通信接口2310可以包括用于与以太网或其他基于有线的网络进行通信的网络接口控制器(nic)或网络适配器、或者用于与无线网络(诸如wi
‑
fi网络)进行通信的无线nic(wnic)或无线适配器。本公开考虑了任何合适的网络和用于该网络的任何合适的通信接口2310。作为示例而非限制,计算机系统2300可以与ad hoc网络、个人区域网(pan)、局域网(lan)、广域网(wan)、城域网(man)、或者互联网的一个或多个部分或者这些中的两个或更多个的组合进行通信。这些网络中的一个或多个的一个或多个部分可以是有线的或无线的。作为示例,计算机系统2300可以与无线pan(wpan)(诸如,例如,蓝牙wpan)、wi
‑
fi网络、wi
‑
max网络、蜂窝电话网络(诸如,例如,全球移动通信系统(gsm)网络)或其他合适的无线网络或者这些网络中的两个或更多个的组合进行通信。在适当的情况下,计算机系统2300可以包括用于任何这些网络的任何合适的通信接口2310。在适当的情况下,通信接口2310可以包括一个或多个通信接口2310。尽管本公开描述并示出了特定的通信接口,但是本公开考虑了任何合适的通信接口。
[0186]
在特定实施例中,总线2312包括将计算机系统2300的组件相互耦合的硬件、软件或两者。作为示例而非限制,总线2312可以包括加速图形端口(agp)或其他图形总线、增强
型工业标准架构(eisa)总线、前端总线(fsb)、hypertransport(ht)互连、工业标准架构(isa)总线、infiniband互连、低引脚数(lpc)总线、存储器总线、微通道架构(mca)总线、外围组件互连(pci)总线、pci
‑
express(pcie)总线、串行高级技术附件(sata)总线、视频电子标准协会本地(vlb)总线、或另外的合适的总线、或者这些总线中的两个或更多个的组合。在适当的情况下,总线2312可以包括一条或多条总线2312。尽管本公开描述并示出了特定的总线,但是本公开考虑了任何合适的总线或互连。
[0187]
这里,(多个)计算机可读非暂时性存储介质可以包括一个或多个基于半导体的或其他集成电路(ic)(诸如,例如,现场可编程门阵列(fpga)或专用ic(asic))、硬盘驱动器(hdd)、混合硬盘驱动器(hhd)、光盘、光盘驱动器(odd)、磁光盘、磁光盘驱动器、软盘、软盘驱动器(fdd)、磁带、固态驱动器(ssd)、ram驱动器、secure digital卡或驱动器、任何其他合适的计算机可读非易失性存储介质、或者这些中的两个或更多个的任何合适的组合。在适当的情况下,计算机可读非暂时性存储介质可以是易失性的、非易失性的或者易失性和非易失性的组合。
[0188]
这里,“或”是包含性的而非排他性的,除非另有明确指出或者通过上下文另有指示。因此,在本文中,“a或b”意味着“a、b或a和b两者”,除非另有明确指示或通过上下文以其他方式指示。此外,除非另有明确说明或者通过上下文另有指示,否则“和”都是连带的。因此,除非另有明确指示或通过上下文另有指示,否则本文中,“a和b”意味着“a和b,连带地”。
[0189]
这里,“自动地”及其派生词意味着“没有人为干预”,除非另有明确说明或通过上下文另有指示。
[0190]
本公开的范围包括本领域普通技术人员将理解的对本文描述或示出的示例实施例的所有改变、替换、变化、变更和修改。本公开的范围不限于本文所描述或示出的示例实施例。此外,尽管本公开在此描述和示出了包括特定组成部分、元素、特征、功能、操作或步骤的各个实施例,但是这些实施例中的任何一个都可以包括在此任何地方描述或示出的任何组成部分、元素、特征、功能、操作或步骤的任何组合或布置,这是本领域普通技术人员能够理解的。此外,在所附权利要求中,对适于、布置为、能够、配置为、实现为、可操作为或可运作来执行特定功能的装置或系统或装置或系统的组件的引用包含该装置、系统、组件,无论其或该特定功能是否被激活、开启或解锁,只要该装置、系统或组件如此适于、布置为、能够、配置为、实现为、可操作或可运作。此外,尽管本公开将特定实施例描述或示出为提供特定优点,但是特定实施例可以不提供或提供这些优点中的一些或全部。
再多了解一些
本文用于企业家、创业者技术爱好者查询,结果仅供参考。