CN101432684A - 对非结构化内容进行高效索引存储的方法和装置 - Google Patents
对非结构化内容进行高效索引存储的方法和装置 Download PDFInfo
- Publication number
- CN101432684A CN101432684A CNA2006800108217A CN200680010821A CN101432684A CN 101432684 A CN101432684 A CN 101432684A CN A2006800108217 A CNA2006800108217 A CN A2006800108217A CN 200680010821 A CN200680010821 A CN 200680010821A CN 101432684 A CN101432684 A CN 101432684A
- Authority
- CN
- China
- Prior art keywords
- node
- avg
- vector
- value
- dispenser
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2264—Multidimensional index structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
- G06F16/322—Trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
- G06F16/3347—Query execution using vector based model
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/40—Information retrieval; Database structures therefor; File system structures therefor of multimedia data, e.g. slideshows comprising image and additional audio data
- G06F16/41—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Warehouses Or Storage Devices (AREA)
Abstract
公开了用于对非结构化内容进行高效索引存储的方法和装置。
Description
相关申请
本专利申请要求2005年2月24日提交的名称为“用于对非结构化内容进行高效索引存储的方法和装置”的美国临时申请序列号为60/656521的申请的优先权,其被包含在此以做参考。本专利申请要求2006年2月23日提交的名称为“用于对非结构化内容进行高效索引存储的方法和装置”的未被分配美国申请序列号的申请的优先权,其被包含在此以做参考。
技术领域
本发明涉及存储。本发明尤其涉及用于对非结构化内容(unstructuredcontent)进行高效索引存储(efficient indexed storage)的方法和装置。
背景技术
非结构化内容,例如多媒体,不完全符合传统的数据库。传统的数据库对结构化内容执行极好,但对非结构化内容它们缺乏通过高效索引插入和查询的能力。这就提出了问题。
其中非结构化内容包括文本、多媒体和最先进技术的数据类型例如基因序列。文本包括文档、电子邮件、博客(blog)等等。多媒体包括图像、音乐、声音、视频等等。没有坚实的可升级的索引技术将非结构化内容和结构化内容区别开来。然而结构化内容强烈地依赖于以散列表和基于树的技术为基础的索引,以使在储存库内快速搜索符合指定标准的项成为可能。非结构化内容统一缺乏相同类型的索引。这就提出了问题。
一个权宜之计(stop gap)的解决方案将非结构化内容的某些特性指定为“特征”。接下来对那些综合产生的特征应用传统的索引技术。例如,对于数字图像的储存库,添加主要由图像被拍的时间、所使用的摄像机、拍照片的人、地点和附加的描述性文字组成的特征。增加“特征”花费精力。这就提出了问题。首先,当项的数量很大时,手工应用一般称为“手动标记”的特征通常是不切实际的。其次,内容可能被手动标记一次,但由于另外的原因重新检查它们以标记它们可能是不切实际的。例如,我们可能设想用鼻子、眼睛或嘴唇的形状来标记脸的图像的集合。然而,当新的查询出现时,重新扫描整个图像的集合以给鼻子附近的痣或前额上的疤痕作标注可能是不切实际的。这就提出了问题。
附图说明
在附图中本发明作为例子而不是被限制地说明,其中:
图1示出可实现本发明的方法和装置的网络环境;
图2是可用于实现本发明的一些实施例的计算机系统的结构图;
图3示出作为一系列标记且然后被表示为概率转换矩阵的文本;
图4示出本发明的一个实施例,其显示向量的集合以及界定超平面的偏差值的中值,该超平面将向量分成两个不同的半空间;
图5示出显示三级GiST的本发明的一个实施例,其中数据元素驻留在叶节点,且内部节点包含分割器对象,该分割器对象或指向相同节点内的其它分割器,或向外指向其它节点;
图6示出本发明的一个实施例,其显示分割技术的流程图;
图7示出本发明的一个实施例,其显示小邻域搜索的流程图;以及
图8示出本发明的一个实施例,其显示搜索有限的邻域的流程图。
具体实施方式
本发明是用于对非结构化内容进行高效索引存储的方法和装置。本发明在一个实施例中使用非结构化内容类数据元素,正如内积空间中的矢量所表示的。在本发明的一个实施例中,基于内积空间的技术用于建立、维持并查询索引存储结构(indexed storage structure)。所公开的技术尤其允许非结构化内容受益于高效的基于相似性的索引存储结构。
本发明在一个实施例中示出如何有效地为非结构化内容编索引。例如,给定N项x.i的集合,存储结构被设计成以给定的查询项x*开始,我们可有效地得到集合中最相似的项。“有效地”意味着插入和查询时间都与log(N)成比例。“最相似的”意味着在用数值距离或度量的意义上接近。
通过分两个阶段——建模和编索引来考虑设计存储系统的方法,以便为特定类型的非结构化内容编索引,会更容易地解释本发明技术。在建模阶段,使用将非结构化内容项与在抽象的内积空间中的向量联系的方案。公开了一种高效索引方案,其中以这种方式表示每个非结构化内容项。
为数据元素编索引的方法依赖于将相似的元素一起分组的能力。典型的B树索引结构根据一些方案以固定大小的数据“页”对键值(key)分组,以分割大空间。例如,如果我们有雇员标识符集合{0,1,2,...199},在一个节点上拥有不多于199个键值的树,可能使用值id=100作为基准以将这些键值“分割”成两个节点,其中每个节点分别包括{0,...,99}和{100,...,199}。本发明在一个实施例中公开了与前面例子中的键值id=100起相似作用的“分割器”。在一个实施例中,分割器的值通过计算{0,...,199}中键值的平均值来确定,其为id.avg=100。形成与第i个id的偏差d.i=(id.i-id.avg)。接着计算偏差值d.i的中值。因为根据定义中值尽可能均等地分割集合,将偏差大于中值的元素分配到一个节点,而将其余的元素分配到另一节点。在一个实施例中,如下所示,公开了对内积空间的分割方法。
为了进行参考,对于在本公开内容中使用的项,附件1总结了向量空间、度量空间和内积空间的特性。
在本发明中使用的基本操作是将向量的集合分成两部分。为了举例说明本发明的实施例,本讨论将首先显示,标记序列可被模拟为向量,连同表示下面序列的相似性的内积函数。为了举例说明可能性的范围,本讨论显示,文本可被视为表示词、标点符号和相关格式的标记序列。第二个是基因数据,其由核苷酸密码的长序列组成。接下来本讨论显示,图像块可被视为向量,连同表示图像相似性的内积。最后本讨论显示,音乐可被表示为向量,连同捕获关于音乐类型和艺术家的相似性的所联系的内积。
标记序列
在本发明的一个实施例中,涉及标记序列的问题可通过将该序列表示为具有内积的概率变换矩阵来被处理。例如,我们可能有可列举的标记集合{s.j}及产生标记序列的源。标记源可为电子邮件中的词或以DNA编码的核苷酸基。根据对所发出的序列的观察,我们可将该序列模拟为静止的概率过程。在这种情况下,在给定的时间,源具有发出给定标记的条件概率,其以最近发出的K标记为条件。为方便起见,将最近的标记K称为元组{r.i}。假定我们有转换矩阵A=(a.i.j),其中a.i.j表示从元组r.i.转换为标记s.j的概率。矩阵A具有对每行i,数量sum(j,a.i.j)=1的特性。这表示,假定当前系统状态是元组i,则它必须转换为由矩阵A描述的一个标记。
矩阵及加法、结合与标量相乘的乘法的矩阵操作符合线性向量空间的特性。对于内积,我们采用下列内积:
<A,B>=对角线求和(A.转置*B)
换句话说,A和B的第一排列一致意味着它们在对其行和列的元组和标记的分配上一致。接着使A转置并使它与B相乘。最后,内积是乘积的对角线之和,对角线之和是对角元素的和。
标记序列例子#1:文本
给定一文本块,通过将单词、单词分割符、标点符号和其它格式映射到标记序列中来给它作标记。标记处理器(tokenizer)执行从文本到标记的期望映射。从上面的讨论可以推定,文本块相应于概率转换矩阵。换句话说,在内积空间中将文本块与其相应的向量联系。表示两个向量之间的距离的函数为:
Distance(A,B)=sqrt(<A-B,A-B>)
该距离也称为“范数”
Distance(A,B)=‖A-B‖=sqrt(<A-B,A-B>)
根据该度量,如果两个文本块的相应的概率转换矩阵之间的距离很小,我们就判定它们是相似的。实际上,我们发现这个数值测量证实了我们自己的“相似”文本的一般概念。例如,当两个文本块之间的距离很小时,文本令人满意地类似于人类读者。根据经验我们发现,使用记住两个最新近的单词的元组宽度往往操作得很好。通常仅仅一个小的措词变化就将两个文本块分离。
图3示出本发明的一个实施例,其显示标记序列如何转换成从描述在序列中最近看到的标记的元组到序列中的下一标记的概率状态转换。图中所示的文本是来自Dr.Seuss的题目为“我可以闭上眼睛读书!”的书。
标记序列例子#2:基因数据
另一种类型的非结构化内容是基因数据。使用本发明的实施例,核苷酸的DNA序列可被解析并转换成概率稀疏的元组到标记转换矩阵。例如,面包酵母(啤酒酵母(saccaromyces cerevisiae))的第7和第14条染色体分别由563,000和784,000个基组成。在本发明的一个实施例中,8、15和30的元组宽度用于执行“分割”操作。对于老式的2002桌面型计算机上的每个染色体,每个计算平均和偏差的操作需要40秒到3分钟,这取决于元组宽度。这证实,与原始的核苷酸数据联系的长标记序列可被映射到内积向量空间。
图像块
本发明的技术可用于图像块,因为两个图像之间的相似性可通过计算在从基于FFT的光谱分析得到的“签名”上的内积来表示。例如,当边缘探测滤波器被应用于像素之后,源图像中的方位信息可在角光谱中被捕获。使用FFT从源图像转换图像分量,并保留在55-125度范围内的角分量。用表格表示在直方图向量中的这些角度值的出现频率。将内积定义为与每个角关联的数的乘积的和。
如本发明中公开的,为图像块建立搜索索引结构很重要,这是只想定位图像的人所不能理解的。快速找到最相似的图像块是图像和视频压缩中重要的子问题。
音频块
本发明的技术可用于音频块,因为在短音频段上从MFCC转换得到的参数向量可代表音乐之间的相似性。例如,通过重叠26微秒的声音段、分析每段的光谱内容、得到每段的40个或更少的参数值、然后对于每个音群围绕16个最有代表性的质心将段集群,来得到对每段音乐的“签名”。因此,每段音乐可由大约40*16=640个参数值来表示。从而多媒体内容如音乐可由内积空间中的向量来表示,且在向量空间中内积接近的正确选择证实艺术家和流派相似性的人类评价。
分割算法
在本发明的一个实施例中,“分割操作”用于分离向量集合。这里使用的及下面描述的“算法”对本领域技术人员来说是表示具体真实的结果的简略表达方法。
给定n个向量x.i的集合,我们举例说明显示将它分成两部分的过程的本发明的一个实施例。
1.为了讨论方便,我们假定从集合x.i中除去了任何完全相同的项。换句话说,对于任何i!=j的x.i和x.j,我们有‖x.i-x.j‖!=0。这是合理的假设,因为x.i是基本的非结构化内容的键值。
2.计算平均值x.avg=(1/n)*sum(i,x.i)。
3.如果x.avg不为零,则我们如下将该集合分成两半。计算中值:对每个i,计算偏差d.i=<x.i-x.avg,x.avg>。我们知道,偏差的值将为正和负,因为我们可显示sum(i,d.i)=0。
sum(i,d.i)
=sum(i,<x.i-x.avg,x.avg>)
=sum(i,<x.i,x.avg>)-sum(i,<x.avg,x.avg>)
=<sum(i,x.i),x.avg>-sum(i,<x.avg,x.avg>
=<n*x.avg,x.avg>-n*<x.avg,x.avg>
=n*<x.avg,x.avg>-n*<x.avg,x.avg>
=0
此外,我们知道,所有的d.i不能为零,因为这意味着所有的x.i等于x.avg,这意味着所有的x.i都相等。我们明确地构造该集合以避免这种情况。
4.否则,如果x.i为零,或如果分割不能令人满意,则使用下面的一种技术(退回分割(fallback split)或抖动(gitter))。
退回分割
取n个不同的内容项,并应用保证最坏情况的分类标准以允许我们实现分割。例如,在文本字符串的情况下,我们应用字符串比较,其保证让我们区分n个不同的字符串并选择中间的字符串值。所有分类为大于中值的项被放入“上层”子树,其余的进入“下层”子树。
下面的例子显示退回分割如何工作。假定我们有下列项。
“联系我们(contact us)”
“更多信息(more information)”
“新闻发布(press releases)”
“我们的投资者(our investors)”
应用字符串比较产生最后的分类。
“联系我们”
“我们的投资者”
——分割在这里进行——
“更多信息”
“新闻发布”
分割器记住使用了退回技术,因此在“我们的投资者”之后分开的任何字符串进入“上层”集合。
抖动
在另一种技术中,修改x.avg=(1/n)*sum(i,x.i)以将预有准备的“抖动”引入平均计算:
x.pvg=sum(j,u.j*e.j)
其中,u.j是分布在值域[u.min,u.max]中的随机变量。
实际上,当u.j均匀分布在间隔[0.5,1.5]范围内时,我们得到可靠的结果。
这个预有准备的抖动所起的作用可通过描述这个问题出现的实际情况被阐明。假定我们计算文本的相似性,集合内的文本项如下:
“联系我们(contact us)”
“更多信息(more information)”
“新闻发布(press releases)”
“我们的投资者(our investors)”
我们观察到这些字符串有相同的字长,且这些文本字符串不共享相同的词。我们通过将每个词直接分配到一个标记来给这些文本字符串作标记,然后将相应的标记序列转换成转换矩阵表示A.1,...,A.4。使用迹范数作为内积:
<A.i,A.j>=对角线求和(A.i.转置*A.j)
因为词中没有重复部分,当我们比较不同的文本字符串时,矩阵的乘积由全部仅为零的元素组成。因此对角线和为零,我们得到零内积:
当i!=j时,<A.i,A.j>=0。
此外,如果字符串的长度相同,那么每一项与其本身的内积是相同的:
对所有的i,<A.i,A.i>=C。
在我们引入抖动之前,偏差变成:
d.i=<A.i-sum(k;A.k),sum(j;A.j)>
=<A.i,sum(k;A.k)>-<sum(k;A.k),sum(j;A.j)>
=sum(k;<A.i,A.k>)-<sum(k;A.k),sum(j;A.j)>
=<A.i,A.i>-<sum(k;A.k),sum(j;A.j)>
=<A.i,A.i>-<sum(k;A.k),sum(j;A.j)>
=常数,对所有的i。
我们看到当各项相互正交时,通常对每项提供不同值的项被略去,留给我们的所有偏差是相同。
由随机变量u.j引入的抖动通过将加权应用到平均值而避免了这种退化的情况:
d.i=<A.i-sum(k;u.k*A.k),sum(j;u.j*A.j)>
=sum(k;u.k*<A.i*A.k>)-<sum(k;u.k*A.k),sum(j;u.j*A.j)>
=u.i*<A.i,A.i>-<sum(k;u.k*A.k),sum(j;u.j*A.j)>
=u.i*C-<sum(k;u.k*A.k),sum(j;u.j*A.j)>
=对每个i不同
我们看到,随机抖动在平均向量x.avg或x.pvg的方向引入方差,这抵消了集合中各项的长度和方向中的对称性。
应牢记,一旦分割器计算出u.j的值,那些值就需要被记住,以随后用于应用到分割器的其它向量。这给出确定性特性,即,如果两个相同的向量被相继应用到分割器,因为值u.j是固定的,那么如果第一个转到“上层”侧,则第二个也将这么做。
将这个选定的向量称为伪平均x.pvg。在前面步骤的公式中使用它而代替x.avg。换句话说,计算偏差d.i=<x.i-x.pvg,x.pvg>(这构造了n个向量x.i的标准正交基),并如以前一样进行下去。
5.通过下列步骤得到中值,我们称其为“分割值”:
a.将D初始化为值d.i的集合。
b.当D包含多于两个元素时,从集合D中除去最小和最大值。重复该步骤直到剩余一个或两个元素。
c.在步骤b结束后,D必须由一个或两个元素组成。如果D包含一个元素,则它为中值。将它称为分割值。否则,如果D包含两个剩余的元素,则中间的分割值是相应于这两个元素的偏差的平均值。
6.在一些病理情况中,当平均的sum(i,x.i)为零时,在步骤0任意选择集合中的任何x.i可能不能产生恰当地分割集合的正确的分割值。如果出现这种情况,丢弃当前的x.pvg并重复步骤0-0,直到得到令人满意的分割。例如,我们可能希望拒绝将没有一个放在一侧,而将所有其它的放在另一侧的分割。然而,例如我们可接受将Z个元素放在一侧,而将Z-1个放在另一侧的分割。
作为概述,给定向量的集合,使用上面的步骤来计算平均值和分割值。使用平均值x.avg和中值或分割值d.mid,给了我们一种将向量空间分成“下”半部分和“上”半部分的方法。我们将平均值和分割值的组合共同称为“分割器”。
我们如下使用分割器:给定任意向量y,分割器计算值d=<y-x.avg,x.avg>。如果d>0,我们将y分配到“上层”组。否则,我们将y分配到“下层”组。
具有在向量空间上构造分割器的性能给了我们强大的能力,因为每个分割器将空间分成两个不同的部分。图4在相应于笛卡尔(Cartesian)平面的向量空间中显示了分割器的例子。图4示出向量集合的平均值以及偏差值的中值如何确定将向量分成两个不同的半空间的超平面。分割器S由平均值(x.avg)和分割值(d.mid)组成。
图6示出本发明的一个实施例,其显示分割技术的流程图。
静态二叉索引树
在本发明的一个实施例中,“索引操作”用于建立静态二叉树。这里使用的和下面描述的“算法”和“函数”对本领域技术人员来说是表示具体真实的结果的简略表达方法。
为了举例说明,我们假定我们有包括N个向量的集合T,其中N非常大。“非常大”意味着通过强制地两个两个比较其它N-1个向量来找到一个向量的最近邻居是不切实际的。相反,我们的方法是将集合N递归地细分为k个或更少向量的较小集合,其中k<<N。
建立静态二叉树
函数:BuildStaticBinaryTree(U)
输入:U为向量集合。
输出:返回给U中的向量编索引的子树的最根部的节点。
略述:递归地建立二叉树。内部节点具有分割器和两个子节点。叶节点包含k个或更少向量的集合。
1.如果U中元素的数量为k或更少,则构造由集合U组成的叶节点。返回对叶节点的引用。
2.否则,如前面所述,计算U中向量的分割器S,这需要计算平均值和分割值。
3.使用分割器S将U分成“下”半部分(U.lower)和“上”半部分(U.upper)。
4.“较低的”子节点引用为BuildStaticBinaryTree(U.lower)。
5.“较高的”子节点引用为BuildStaticBinaryTree(U.upper)。
6.创建主要由分割器S组成的内部节点,并引用下层子节点和上层子节点。
7.返回对内部节点的引用。
给定静态二叉树R和查询向量q,有可能在向量空间范数的意义上找到最近的q的向量。有两种情况要考虑。在第一种情况下,我们假定候选的最近向量被包含在查询q周围的小邻域内。在第二种情况下,我们假定候选者至多在某个有限距离处的更一般的情况。
情况1:小邻域
在小邻域的情况下,我们从根部到叶节点遍历树,在每个节点决定转到上层子节点或下层子节点,这取决于从分割器得到的偏差。
为了找到对给定查询向量q的最近的向量,调用SearchSmallNeighborhood(R,q),其中R为二叉树的根。
函数:SearchSmallNeighborhood(R,q)
1.如果N为叶节点,对包含在节点N中的每个向量x.i,计算距离e.i=‖q-x.i‖。返回具有最小距离e.i的元素。
2.如果N为内部节点,从节点N获得分割器S并计算偏差d=<q-S.avg,S.avg>。
3.如果d>S.split,返回SearchSmallNeighborhood(N.upper,q)。
4.否则,返回SearchSmallNeighborhood(N.lower,q)。
图7示出本发明的一个实施例,其显示小邻域搜索的流程图。
情况2:有限大小的邻域
在有限大小的邻域的情况下,我们希望找到比某个半径h离查询q更近的向量。我们采取与前面相同的基本步骤,除了我们需要考虑在一些情况下,我们需要考察树中的两个分枝。当从查询向量到与在特定节点的分割器联系的分割超平面的距离比我们的目标半径h近时,出现了这种情况。在该情况下,我们必须检查下层子节点和上层子节点。
为了找到给定查询向量q的距离h范围内的向量,调用SearchFiniteNeighborhood(R,q,h),其中R为二叉树的根。
SearchFiniteNeighborhood(N,q,h)
1.如果N为叶节点,对包含在节点N中的每个向量x.i,计算距离e.i=‖q-x.i‖。返回距离e.i<h的元素。
2否则,我们有内部节点。从节点N获得分割器S并计算偏差d=<q-S.avg,S.avg>。
3.计算从q到分离的超平面的距离。从q到超平面的距离是sqrt(|S.split-d|)。
4.如果h超过从q到超平面的距离,则计算SearchFiniteNeighborhood(N.upper,q,h)和SearchFiniteNeighborhood(N.lower,q,h),并返回结果的并集。
5.否则,如果d>S.split,从SearchFiniteNeighborhood(N.upper,q,h)返回结果。
4.否则,从SearchFiniteNeighborhood(N.lower,q,h)返回结果。
图8示出本发明的一个实施例,其显示用于搜索有限邻域的流程图。
注意,不象准确地沿着从树的根到单个叶节点的一条路径的SearchSmallNeighborhood,SearchFiniteNeighborhood沿着两个子节点向下的路径,只要查询位于足够接近于分割超平面的地方。我们看到,当期望的半径非常小时,“小邻域”是极限情况。相反,当期望的半径非常大时,越来越多的树被考察,直到在极限情况下当整个树被搜索时。
递增地扩展搜索范围的一种方法是以小邻域方式进行初期搜索。当我们遍历树时,记录从查询到分割超平面的距离。当搜索结束时,最小距离表示符合小邻域条件的最大搜索半径。从那一点以最小的间隔逐渐遍历节点,并继续记录超平面间隔。通过在扩展搜索的每个阶段特别注意还未被访问的节点的最小间隔,我们可正确地断言查询周围的半径,其中我们明确地进行了搜索。换句话说,我们可断言,不存在任何包含比搜索半径更近的向量的未访问的节点。
对此的证据如下。假定相反在叶节点上存在向量x*,使得‖q-x*‖<h。但这意味着当x*在每个节点被插入树时,它必须插在与搜索遍历采取的路径相对的子节点上,且那个节点不是在搜索扩展阶段被访问的节点,因为其检查两个子节点。但在一次检查的节点上,我们有下列条件,否则x*的插入路径与q的查询路径相同:
‖q‖+h<‖x*‖
‖x*‖-‖q‖>h
但三角形不等式告诉我们,‖q‖+‖x*-q‖>=‖x*‖。换句话说,我们有:
‖x*-q‖>=‖x*‖-‖q‖。
合并这两个表达式,我们证实,‖x*-q‖>h,这与我们的假设矛盾。
这说明在我们的搜索半径h的范围内的未检查的节点上不存在这种向量x*。因此,我们检查的所有节点包含可能在期望的搜索半径内的所有候选节点。
本发明在不同的实施例中介绍了如何使用分割器来利用内积空间的特性。关键的机械装置考虑分割节点并使用分割器来搜索树。为了清楚地解释,我们特意将注意力集中在构造和搜索简单的二叉树上。特别是,我们假定填充树的所有向量是大家提前知道的。这允许我们建立平衡的二叉树,而与重新平衡算法等无关。然而,本发明并不限制于此。
在下面部分中,我们将注意力转向高度平衡的树。再次为了解释,我们在现有方法的结构范围内示出本发明的不同实施例。为此,我们根据通用搜索树(GiST)来举例说明本发明的实施例。GiST结构提供维持索引结构的公共树操作,包括搜索、迭代、插入和删除。对GiST树结构的概述见附件2。
GiST为建立、维持和搜索高度平衡的树的过程中的基本步骤编码:
1.搜索
2.插入
3.选择子树
4.分割
5.调整键值
6.删除
7.压缩树
为了便于引用,在附件2中复制了这些算法。此外,因为我们集中在内积空间内的向量,我们从GiST结构中省略了特定的函数,该GiST结构为线性排列的域IsOrdered、Compare和FindMin引入特殊的支持。
该结构定义特定的“驱动器”算法,该算法使特定的GiST适合于特定的数据类型作为键值:
1.Consistent
2.Union
3.Penalty
4.PickSplit
5.Compress/Decompress
Consistent(q)
输入:给定查询谓词q。
输出:返回可能拥有满足谓词q的元素的当前节点的子树集合。
概述:使用早些时候描述的SearchSmallNeighborhood或SearchFiniteNeighborhood中的方法,这取决于查询谓词q暗示哪个模式。
1.[叶节点]如果当前节点是叶,则将查询谓词q应用到包含在当前节点中的每个数据元素。返回所有满足q的数据元素。
2.[内部节点]如果当前节点是内部节点,则在最顶部的分割器开始;将它称为当前分割器。(参考PickSplit以观察当最顶部的分割器被引入时,它如何被维持。)
3.将查询谓词应用到当前分割器,并转到下层或上层子节点,将该子节点称为当前节点。如果查询是以有限邻域模式进行,且从查询到分割超平面的距离小于搜索邻域,则需要访问两个子节点,直到我们在步骤0降至最低点。
4.如果当前节点是内部节点,则转到步骤0。
5.如果当前节点是指向子树的指针,则返回被该指针引用的子树。
Union(P)
输入:P的集合。
输出:返回谓词r,其拥有低于包含在P中的输入的所储存的所有元组。
概述:当节点被分割时调用Union。当这种情况出现时,分割的节点的父节点现在必须指向最新创建的节点以及现有的子节点。Union的目的是更新父节点的索引结构以适应最新创建的节点。
1.[基本情况]如果现有的子节点是当前节点上的唯一子引用节点,则将被创建为分割操作的一部分的分割器增加到当前节点,并用分割器代替子引用节点。在该分割器上,将下指针指向现有的子节点,将上指针指向新的子节点。
2.[扩展情况]否则,现有的子引用节点从当前节点上的现有分割器产生。将被创建为分割操作的一部分的分割器增加到当前节点。用对最新增加的分割器的引用代替现有分割器上的子参考引用。在该分割器上,将下指针指向现有的子节点,将上指针指向新的子节点。
Penalty(E.1,E.2)
输入:两项E.1和E.2。
输出:返回与将E.2插入在以E.1为根的子树中相联系的罚分。
概述:在GiST结构中,在选择子树期间调用Penalty函数,Penalty函数又在插入期间被调用,以帮助确定拥有给定数据元素的子节点的最佳选择。
1.从当前节点上最顶部的分割器开始,并将它应用到查询谓词。
2.从分割器的下层分枝或上层分枝向下遍历,这取决于偏差和分割器的分割值。继续进行直到达到子节点项的引用节点。该项没有得到罚分,所有其它的项接收高罚分。
PickSplit(P)
输入:M+1项P的集合。
输出:返回表示P中项的分割的两个集合P.1和P.1。
概述:有两种情况要处理。首先,如果当前节点是叶节点,其次,如果当前节点是内部节点。
1.[叶节点]如果当前节点是叶节点,则P的各项为数据元素向量。在这种情况下,使用早些时候描述的步骤来构造分割器。这需要计算数据向量的平均值和中间的分割值。
2.[内部节点]可选地,如果当前节点是内部节点,则P的各项为分割器。如上所述,一个分割器总是为在当前节点内分割器的二叉树的最顶部的节点。根部分割器具有下指针和上指针。每个指针或者引用当前节点中的另一分割器,或者引用在树中的下一各下级的节点。向下访问每个指针至叶节点,并计算数据元素的数量,以根据下指针和上指针确定分割是否是令人满意的。如果是肯定的,则创建新的节点并将当前节点中的所有分割器移到其中,当前节点沿着从上层子节点开始的路径生存。对于下层子引用节点,如果引用当前节点上的分割器,则该分割器变成新的最顶部的分割器。对于上层子引用节点,如果引用分割器,则该分割器变成在最新创建的节点上的最顶部的分割器。
如果根据最顶部的分割器进行的分割不是令人满意的,其它方法成为必需的。当分割器对数据元素执行不良时,通常出现这种情况,其中数据元素在最初构造分割器之后被插入树中。换句话说,分割器可完成合理的工作,在节点分割时分割出现在该节点中的数据元素。但在那个时间之后,使用那个分割器不能很好地分离随后的数据元素。在本发明的一个实施例中,我们使用解除正被使用的分割器、收集所有沿着下层分枝和上层分枝的数据元素、以及将那些元素重新插在树的顶部的方法。注意,这可能需要解除驻留在当前节点上和在树中下级处的其它节点上的附加的分割器。
我们以下列方式处理重新插入的情况:
1.给定要被解除的分割器S.old,访问下层分枝和上层分枝,一直到叶节点。收集在“重新插入”序列Q中的数据元素。
2.使用Q的元素构造新的分割器S.new。
3.将分割器S.new插入S.old离开的位置。
4.对于S.new上的下层子指针,在大于零级处建立相链接的内部节点线性链,并以0级处的空的叶节点终止。
5.对S.new上的上层子指针做同样的事情。
6.最后,对Q中的每个数据元素,将其插入树中。
实际上该方法运行得很好。首先,它实施起来简单,且理解起来简单。其次,重新插入现象出现得有些稀少,当现有的分割器的集合变得不平衡时被触发。当数据元素的收集证明是不转换成对随后的插入有效的分割策略时,往往出现这种情况,其中分割器是以数据元素为基础的。在重新插入集合上散布跟随有新的预先计算的分割器的重新插入工作得很好,因为对于该集合新的分割器被最佳化了。
图5显示三级GiST。数据元素驻留在叶节点。内部节点包含指向相同节点内其它分割器或指向外部其它节点的分割器对象。该文本来自Dr.Seuss。
如上面在不同实施例中公开的,本发明举例说明非结构化内容可如何被模拟为向量空间中的元素、内积函数可如何表示两个数据元素的相似性、以及赋予内积向量空间索引能力的技术。
因此描述了用于对非结构化内容进行高效索引存储的方法和装置。
回来参考图1,图1示出网络环境100,其中可应用上述技术。网络环境100具有连接S服务器104-1到104-S,以及和连接C客户机108-1到108-C的网络102。如所示,以S服务器104-1到104-的和C客户机108-1到108-C的形式的几个计算机系统通过网络102彼此连接,网络102可以是例如公司的基本网络。注意,网络102可选地可能为或可包括一个或多个:互联网、局域网(LAN)、广域网(WAN)、卫星链路、光纤网络、电缆网络或这些和/或其它的组合。例如服务器可代表单独的磁盘存储系统或存储和计算资源。同样,客户机可具有计算、存储和浏览能力。这里描述的方法和装置可实际上应用于任何类型的通信装置或设备,不管是局部或远程设备,例如LAN、WAN、系统总线等。
回来参考图2,图2示出以结构图形式的计算机系统200,其可表示图1所示的任何客户机和/或服务器。该结构图是高级概念表示并可以各种方法和通过各种结构实现。总线系统202与中央处理单元(CPU)204、只读存储器(ROM)206、随机存储器(RAM)208、存储器210、显示器220、音频222、键盘224、指示器226、各种输入/输出(I/O)设备228和通信设备230互相连接。总线系统202例如可为一个或更多这种总线如系统总线、外围组件互联(PCI)、高级图形端口(AGP)、小计算机系统接口(SCSI)、电气和电子工程师协会(IEEE)标准号1394(火线)、通用串行总线(USB)等等。CPU 204可为单个、多个或甚至分布式计算资源。存储器210可为紧密光盘(CD)、数字化通用光盘(DVD)、硬盘(HD)、光盘、磁带、闪存、记忆棒、视频记录器等等。显示器220例如可为阴极射线管(CRT)、液晶显示器(LCD)、投影系统、电视机(TV)等等。注意,根据计算机系统的实际实现,计算机系统可包括结构图中的一些、所有、多个组件或组件的重新布置。例如,薄的客户机可主要由例如没有传统键盘的手持设备组成。因此,对图2的系统的很多更改是可能的。
为了讨论和理解本发明,应理解,本领域技术人员使用不同的术语来描述技术和方法。此外为了解释,在说明书中阐明了很多特定的细节,以便提供对本发明的彻底理解。然而,对本领域的普通技术人员来说很明显,本发明没有这些特定的细节也可实践。在一些例子中,公知的结构和设备以结构图而不是详细地显示,以便避免使本发明难以理解。这些实施例被足够详细地描述,以使本领域的普通技术人员能够实践本发明,且应理解,也可利用其它实施例,以及可进行逻辑、机械、电子和其它改变而不脱离本发明的范围。
说明书的一些部分可通过算法(或函数)和例如代表对计算机存储器内数据位的操作的符号表示来介绍。这些算法描述和表示是数据处理领域的普通技术人员用来最有效地将他们工作的主旨传达给本领域的其他普通技术人员的工具。这里的算法通常被认为是导致期望结果的有条理的行为序列。这些行为是物理量的那些需要的物理操作。通常,虽然不是必须,这些量采取能被储存、传输、合并、比较和另外被操作的电或磁信号的形式。有时主要因为普遍的使用,将这些信号称为位、值、元素、符号、字符、项、号码等被证明是方便的。
然而应牢记,所有这些和类似的术语都与适当的物理量联系且仅仅是应用于这些量的方便的标记。除非特别说明,否则根据本讨论很明显,应认识到,在整个本说明书中,讨论使用术语如“处理”或“用计算机计算”或“计算”或“确定”或“显示”等,其可指计算机系统或类似的电子计算设备的操作和处理,该计算设备将表示为在计算机系统的寄存器和存储器内的物理(电子)量的数据操作和转换为类似地表示为在计算机系统的存储器或寄存器或其它这样的信息存储、传输或显示设备内的物理(电子)量的其它数据。
在这里执行操作的装置可实现本发明。该装置可特别为所要求的目的构造,或它可包括被储存在计算机内的计算机程序选择性地启动或重新配置的通用计算机。这样的计算机程序可储存在计算机可读存储介质中,例如但不限于任何类型的磁盘包括软盘、硬盘、光盘、压缩盘-只读存储器(CD-ROM)以及磁光盘、只读存储器(ROM)、随机存储器(RAM)、电可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、闪存储器、磁卡或光卡等等,或适于将电子指令储存到本地计算机或远程计算机的任何类型的介质。
这里介绍的算法和显示器不是固有地与任何特定的计算机或其它装置有关。各种通用系统根据这里的教导可用于程序,或构造更专用的装置来执行所要求的方法可以证明是方便的。例如,根据本发明的任何方法可通过给通用处理器编程或通过硬件和软件的任何组合在硬线电路中实现。本领域的普通技术人员将立刻认识到,本发明可用不同于所描述的计算机系统配置实践,包括手持设备、微处理器系统、基于微处理器的或可编程的消费性电子产品、数字信号处理(DSP)设备、机顶盒、网络PC、小型计算机、大型计算机等。本发明还可在由通过通信网络链接的远程处理设备执行任务的分布式计算环境中实践。
可使用计算机软件来实现本发明的方法。如果用与公认的标准一致的程序设计语言编写,设计成实现本方法的指令序列可被编译以在各种硬件平台上执行并作为各种操作程序的接口。此外,本发明不是参考任何特定的程序设计语言来描述的。应认识到,各种程序设计语言可用于实现在这里所述的本发明的教导。而且,在本领域中,当采取行动或引起结果时,通常谈到以一种形式或另一种(例如,程序、过程、应用程序、驱动器...)的软件。这样的表达方式仅仅是陈述通过计算机的软件执行使计算机的处理器执行操作或产生结果的简略表达方法。
应理解,本领域技术人员使用不同的术语和技术来描述通信、协议、应用程序、实现、机制等等。一个这样的技术是根据算法或数学表达式的技术实现的说明。也就是说,虽然本技术例如可实现为在计算机上的执行代码,该技术的表达方式可以更适宜和简洁地作为公式、算法或数学表达式被传播和传递。因此,本领域技术人员将表示A+B=C的块认可为附加函数,其在硬件和软件中的实现采用两个输入(A和B)并产生总和输出(C)。因此,如说明书,公式、算法或数学表达式的使用被理解为至少在硬件和/或软件中具有物理体现(例如本发明的技术可被实践以及实现为实施例的计算机系统)。
机器可读介质被理解为包括任何用于以可被机器(例如计算机)读取的形式储存或传送信息的机制。例如,机器可读介质包括只读存储(ROM)、随机存储器(RAM)、磁盘存储介质、光学存储介质、闪存储设备、电、光、声或其它形式的传播信号(例如载波、红外信号、数字信号等)等等。
如在本说明书中使用的,“一个实施例”或“实施例”或类似的短语意指所描述的特征包括在本发明的至少一个实施例中。在本说明书中对“一个实施例”的参考不一定指相同的实施例,然而,这样的实施例也不是相互排斥的。“一个实施例”也不是意味着只有本发明的单个实施例。例如,在“一个实施例”中描述的特征、结构、行为等也可包括在其它实施例中。因此,本发明可包括这里所描述的实施例的各种组合和/或集成。
因此描述了用于对非结构化内容进行高效索引存储的方法和装置。
附件1:各种空间的特性
线性空间
线性空间S中的元素具有下列特性:
1.(零)在S中有零个元素。称其为0。
2.(乘法闭包)对于标量a和元素x,a*x在S中。
3.(加法闭包)对于S中的元素x和y,x+y在S中。
度量空间
度量空间S中的元素具有下列特性:
在线性空间内有函数距离d(.,.),其也称为“范数”‖.‖:满足空间中元素的下列特性的SxS->R:
1.对所有的x和y,0<=d(x,y)<无穷大。
2.当且仅当x=y时,d(x,y)=0。
3.对所有的x和y,d(x,y)=d(y,x)。
4.对所有的x、y、z,d(x,z)<=d(x,y)+d(y,z)。
内积空间
有内积函数<.,.>:满足下列特性的SxS->R:
1.(正)对所有的x和y,<x,y>>=0。
2.(零)对所有的x,当且仅当x=0时,<x,y>=0。
3.(对称性)对所有的x和y,<x,y>=<y,x>。
4.(线性)对所有的标量a以及x和y,<a*x,y>=a*<x,y>。
5.(三角性)对所有的x、y、z,<x,z><=<x,y>+<y,z>。
讨论
距离函数D(x,y)可从通常被写为范数‖x-y‖的内积D(x,y)=sqrt(<x-y,x-y>)得到。这表明内积空间是度量空间,其中我们使用范数作为距离函数。但是反过来可能不成立。
下列令人感兴趣的定理正确地指出度量空间和内积空间之间的不同。
定理:当且仅当下列条件成立时赋范线性空间才为内积空间:
(平行四边形定律)
‖x+y‖^2+‖x-y‖^2=2(‖x‖^2+‖y‖^2)
本论文中介绍的“分割器”是将整个空间分成两个半空间的超平面。我们选择超平面的位置以将N个数据元素分成其相应的半空间。这再次说明内积空间的优点,因为单纯的度量空间没有足够的几何结构来允许超平面。
附件2:通用搜索树(GiST)树结构函数
GiST树可通过研究它如何搜索和插入项来理解。
Search(R,q)
输入:以R为根的GiST,谓词q。
输出:所有满足q的元组。
概述:在树中从键值与q一致的所有路径递归地传下来。
S1:[搜索子树]如果R不是树叶,对R调用Consistent以获得输入E的集合。在根节点被E.ptr引用的子树上调用Search。
S2:[搜索叶节点]如果R是叶,对R调用Consistent以确定输入E是否满足谓词q。如果是,则E为合格的输入。在此点,可取来E.ptr以准确地检查q,或该检查可留到调用步骤。
Insert(R,E,I)
输入:以R为根的GiST,输入E=(p,ptr)和级I,其中p为谓词,以便p拥有可从ptr到达的所有元组。
输出:由E在级I的插入产生新的GiST。
概述:找到E应该去的地方,并将其加在那里,如果必要,分割以让出地方。
l1:[调用ChooseSubtree以找到E应该去的地方],使L=ChooseSubtree(R,E,I)。
l2:如果L上有E的地方,将E安置在L上。否则调用Split(R,L,E)。
l3:[向上传播变化]AdjustKeys(R,L)。
ChooseSubtree(R,E,I)
输入:以R为根的GiST,输入E=(p,ptr)和级I。
输出:在级I最适于拥有具有特征谓词E.p的输入的节点。
概述:从树递归地传下来最小化Penalty。
CS1:如果R在级I,返回R;
CS2:否则在R上所有的项F=(q,ptr’)中找到一个,使得Penalty(F,E)最小。返回ChooseSubtree(F.ptr’,E,I)。
Split(R,N,E)
输入:具有节点N的GiST R和新的项E=(p,ptr)。
输出:N被分为两组及E被插入的GiST。
概述:根据PickSplit将N的键值以及E分成两组。将一组放入新的节点并将此新的节点插入N的父节点。
SP1:在N和{E}元素的并集上调用PickSplit,将两个分割部分之一放在节点N上,而将剩余的分割部分放在新的节点N’上。
SP2:[在父项中插入N’的项]使E.N’=(q,ptr’),其中q为N’上所有项的并集,且ptr’是指向N’的指针。如果在Parent(N)上有E.N’的地方,在Parent(N)上安置E.N’。否则调用Split(R,Parent(N),E.N’)。
SP3:修改指向N’的项F,使得F.p是N上所有项的并集。
AdjustKey(R,N)
输入:以R为根的GiST,树节点N。
输出:具有包含正确和特定键值的N的祖先的GiST
概述:父节点从树中的节点N追溯,使谓词为子树的准确特征。在根之后或当发现谓词已经准确时停止。
AK1:如果N是根,或指向N的项具有对N上项的并集的已经准确的表示,则返回。
AK2:否则,修改指向N的项E,使得E.p为N上所有项的并集。然后AdjustKeys(R,Parent(N))。
Delete(R,E)
输入:GiST R,叶项E=(p,ptr)。
输出:移去E,平衡GiST。
概述:将E从其叶节点除去。如果这引起下溢,则相应地调整树。更新祖先中的谓词以尽可能明确地保持它们。
D1:[找到包含项的节点]调用Search(R,E.p)并找到包含E的叶节点L。如果没有找到E则停止。
D2:[删除项]从L中除去E。
D3:[传播变化]调用CondenseTree(R,L)。
D4:[缩短树]如果在树被调整之后根节点只有一个子节点,则使该子节点成为新的根。
CondenseTree(R,L)
输入:包含叶节点L的GiST R。
输出:特性保持不变的GiST。
概述:如果L比k*M个元素少,消除L并重新定位其项,或从其它地方借用项来放在L上。必要时向上传播节点消除。在到根的路径上调整所有谓词,使其适当地更明确。
CT1:[初始化]设置N=L。将Q,所消除的节点集合设为空。
CT2:如果N为根,转到CT6。否则使P=Parent(N),并使E.N为在P上指向N的项。
CT3:[处理不完整的节点]如果N少于k*M个项。
CT3.1:[假定没有IsOrdered]将N个元素加到Q集合,从P中删除E.N,并调用AdjustKey(R,P)。
CT4:[调整包含的谓词]如果E.N没有从P中删除,然后AdjustKey(R,N)。
CT5:[传播删除]如果E.N从P中删除,使N=P,并转到CT2。
CT6:[重新插入孤立的项]如果Q不为空,则对Q的所有元素E调用Insert(R,E,level(E))。
Algorithm PickSplit(P)
输入:给定M+1个下(p,ptr)的集合P。
输出:项P1和P2的两个集合,每个的大小至少为k*M。
概述:给定向量x.i的集合,我们希望设计将其分成两个部分的程序。
Claims (20)
1.一种方法,包括:
(a)输入n个向量x.i的集合;
(b)计算平均值x.avg=(1/n)*sum(i,x.i);
(c)如果x.avg不为零,则:
(c1)对每个i计算偏差d.i=<x.i-x.avg,x.avg>;
(d)如果x.avg为零,则
(d1)选择不为零的特定x.i,并将其表示为x.pvg;
(d2)对每个i计算偏差d.i=<x.i-x.pvg,x.pvg>;
(e)将D初始化为所述值d.i的集合;以及
(f)如果D包含多于两个元素且D的最小项和最大项不同,则:
(f1)从所述集合D中除去所述最小值和最大值;
(f2)重复(f)-(f1);
(g)如果D包含一个元素,则:
(g1)将所述D的一个元素作为分割值输出;
(h)如果D包含两个元素,则:
(h1)计算相应于所述D的两个元素的偏差的平均值;
(h2)将相应于所述D的两个元素的偏差的所述平均值作为分割值输出。
2.如权利要求1所述的方法,其中所述x.i没有完全相同的。
3.如权利要求1所述的方法,进一步包括:
确定x.pvg是否产生合适的分割值;以及
如果没有,则:
丢弃所述x.pvg值;且
重复(d)-(d2)。
4.如权利要求1所述的方法,进一步包括:
对任何任意的向量y,计算值d=<y-x.avg,x.avg>;以及
如果d>0,则:
将所述向量y分配到“上层”组;
否则:
将所述向量y分配到“下层”组。
5.一种其上储存指令的机器可读介质,当所述指令被执行时执行权利要求1所述的方法。
6.一种包括耦合到存储器的处理器的系统,当所述系统执行一组指令时执行权利要求1所述的方法。
7.一种装置,包括:
(a)用于输入n个向量x.i的集合的装置;
(b)用于计算平均值x.avg=(1/n)*sum(i,x.i)的装置;
(c)如果x.avg不为零,则:
(c1)用于对每个i计算偏差d.i=<x.i-x.avg,x.avg>的装置;
(d)如果x.avg为零,则
(d1)用于选择不为零的特定x.i并将其表示为x.pvg的装置;
(d2)用于对每个i计算偏差d.i=<x.i-x.pvg,x.pvg>的装置;
(e)用于将D初始化为所述值d.i的集合的装置;以及
(f)如果D包含多于两个元素且D的最小项和最大项不同,则:
(f1)用于从所述集合D中除去最小值和最大值的装置;
(f2)用于重复(f)-(f1)的装置;
(g)如果D包含一个元素,则:
(g1)用于将所述D的一个元素作为分割值输出的装置;
(h)如果D包含两个元素,则:
(h1)用于计算相应于所述D的两个元素的所述偏差的平均值的装置;
(h2)用于将相应于所述D的两个元素的所述偏差的所述平均值作为分割值输出的装置。
8.一种方法,包括:
(a)输入节点N;
(b)输入查询向量q;
(c)如果N为叶节点,则:
(c1)对包含在节点N中的每个向量x.i计算距离e.i=‖q-x.i‖;以及
(c2)返回具有最小距离e.i的元素;
(d)否则;
(d1)从节点N获得分割器S;
(d2)计算d=<q-S.avg,S.avg>;
(e)如果d>S.split,则:
(e1)返回(N.upper,q);
(g)否则:
(e2)返回(N.lower,q)。
9.如权利要求8所述的方法,其中所述(e)包括:
如果d>=S.split,则:。
10.一种其上储存指令的机器可读介质,当所述指令被执行时执行权利要求8所述的方法。
11.一种系统,包括耦合到存储器的处理器,当所述处理器执行一组指令时执行权利要求8所述的方法。
12.一种方法,包括:
(a)输入节点N;
(b)输入查询向量q;
(c)输入距离h;
(d)如果N为叶节点,则:
(d1)对包含在节点N中的每个向量x.i计算距离e.i=‖q-x.i‖;以及
(d2)返回距离e.i<h的所有元素;
(d)否则;
(d1)从节点N获得分割器S;
(d2)计算d=<q-S.avg,S.avg>;
(d3)计算从q到超平面的距离=sqrt(|S.split-d|);
(e)如果h>sqrt(|S.split-d|),则:
(e1)通过完成步骤(a)-(x),来计算SearchFiniteNeighborhood(N.upper,q,h),其中N在步骤(a)中为N.upper;
(e2)通过完成步骤(a)-(g),来计算SearchFiniteNeighborhood(N.lower,q,h),其中N在步骤(a)中为N.lower;
(e3)计算结果(e1)和(e2)的并集并返回所述结果的并集;
(f)否则如果d>S.split,则:
(f1)返回来自SearchFiniteNeighborhood(N.upper,q,h)的结果;
(g)否则:
(f1)返回来自SearchFiniteNeighborhood(N.lower,q,h)的结果。
13.一种其上储存指令的机器可读介质,当所述指令被执行时执行权利要求12所述的方法。
14.一种系统,包括耦合到存储器的处理器,当所述处理器执行一组指令时执行权利要求12所述的方法。
15.一种装置,包括:
(a)用于输入节点N的装置;
(b)用于输入查询向量q的装置;
(c)用于输入距离h的装置;
(d)如果N为叶节点,则:
(d1)用于对包含在节点N中的每个向量x.i计算距离e.i=‖q-x.i‖的装置;以及
(d2)用于返回距离e.i<h的所有元素的装置;
(d)否则;
(d1)用于从节点N获得分割器S的装置;
(d2)用于计算d=<q-S.avg,S.avg>的装置;
(d3)用于计算从q到超平面的距离=sqrt(|S.split-d|)的装置;
(e)如果h>sqrt(|S.split-d|),则:
(e1)用于通过完成步骤(a)-(x)计算SearchFiniteNeighborhood(N.upper,q,h)的装置,其中N在步骤(a)中为N.upper;
(e2)用于通过完成步骤(a)-(g)计算SearchFiniteNeighborhood(N.lower,q,h)的装置,其中N在步骤(a)中为N.lower;
(e3)用于计算结果(e1)和(e2)的并集并返回所述结果的并集的装置;
(f)否则如果d>S.split,则:
(f1)用于返回来自SearchFiniteNeighborhood(N.upper,q,h)的结果的装置;
(g)否则:
(f1)用于返回来自SearchFiniteNeighborhood(N.lower,q,h)的结果的装置。
16.一种装置,包括:
用于使用多个内积来建立索引结构的装置;以及
用于找到与所述索引结构中的项最相似的项的装置。
17.如权利要求16所述的装置,进一步包括用于通过所述多个内积中的向量来表示非结构化内容数据元素的装置。
18.如权利要求16所述的装置,进一步包括用于插入的装置和用于查询的装置,其中所述插入的装置和所述用于查询的装置在定时上与log(N)成比例相关,其中N为所述索引存储结构中N个项的集合。
19.如权利要求16所述的装置,进一步包括用于确定分割值的装置。
20.如权利要求19所述的装置,进一步包括用于在装置中使用所述分割值将所述多个内积分成两组的装置。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US65652105P | 2005-02-24 | 2005-02-24 | |
US60/656,521 | 2005-02-24 | ||
US11/361,166 | 2006-02-23 | ||
US11/361,166 US7650320B2 (en) | 2005-02-24 | 2006-02-23 | Method and system for efficient indexed storage for unstructured content |
PCT/US2006/006450 WO2006091739A2 (en) | 2005-02-24 | 2006-02-24 | Method and apparatus for efficient indexed storage for unstructured content |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101432684A true CN101432684A (zh) | 2009-05-13 |
CN101432684B CN101432684B (zh) | 2013-04-24 |
Family
ID=36914055
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006800108217A Active CN101432684B (zh) | 2005-02-24 | 2006-02-24 | 对非结构化内容进行高效索引存储的方法和装置 |
Country Status (6)
Country | Link |
---|---|
US (3) | US7650320B2 (zh) |
EP (1) | EP1851617A4 (zh) |
CN (1) | CN101432684B (zh) |
CA (1) | CA2598750C (zh) |
TW (1) | TWI329817B (zh) |
WO (1) | WO2006091739A2 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102779186A (zh) * | 2012-06-29 | 2012-11-14 | 浙江大学 | 一种非结构化数据管理的全过程建模方法 |
CN112685603A (zh) * | 2019-10-18 | 2021-04-20 | 百度(美国)有限责任公司 | 顶级相似性表示的有效检索 |
US11914669B2 (en) | 2019-11-25 | 2024-02-27 | Baidu Usa Llc | Approximate nearest neighbor search for single instruction, multiple thread (SIMT) or single instruction, multiple data (SIMD) type processors |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080002830A1 (en) * | 2006-04-14 | 2008-01-03 | Cherkasov Aleksey G | Method, system, and computer-readable medium to maintain and/or purge files of a document management system |
US7644090B2 (en) | 2006-06-27 | 2010-01-05 | Nahava Inc. | Method and apparatus for fast similarity-based query, self-join, and join for massive, high-dimension datasets |
US8046353B2 (en) * | 2007-11-02 | 2011-10-25 | Citrix Online Llc | Method and apparatus for searching a hierarchical database and an unstructured database with a single search query |
US8185531B2 (en) * | 2008-07-24 | 2012-05-22 | Nahava Inc. | Method and apparatus for partitioning high-dimension vectors for use in a massive index tree |
CN101510217B (zh) * | 2009-03-09 | 2013-06-05 | 阿里巴巴集团控股有限公司 | 图像数据库中的图像更新方法、服务器及系统 |
US9298722B2 (en) * | 2009-07-16 | 2016-03-29 | Novell, Inc. | Optimal sequential (de)compression of digital data |
US9063932B2 (en) * | 2009-12-18 | 2015-06-23 | Vertafore, Inc. | Apparatus, method and article to manage electronic or digital documents in a networked environment |
US8700682B2 (en) * | 2009-12-24 | 2014-04-15 | Vertafore, Inc. | Systems, methods and articles for template based generation of markup documents to access back office systems |
US8782734B2 (en) * | 2010-03-10 | 2014-07-15 | Novell, Inc. | Semantic controls on data storage and access |
US8832103B2 (en) * | 2010-04-13 | 2014-09-09 | Novell, Inc. | Relevancy filter for new data based on underlying files |
US9384198B2 (en) | 2010-12-10 | 2016-07-05 | Vertafore, Inc. | Agency management system and content management system integration |
US8731973B2 (en) | 2011-04-19 | 2014-05-20 | Vertafore, Inc. | Overlaying images in automated insurance policy form generation |
JP5592337B2 (ja) * | 2011-11-18 | 2014-09-17 | 日本電信電話株式会社 | コンテンツ変換方法、コンテンツ変換装置及びコンテンツ変換プログラム |
US8572092B2 (en) * | 2011-12-16 | 2013-10-29 | Palo Alto Research Center Incorporated | Generating sketches sensitive to high-overlap estimation |
US9336302B1 (en) | 2012-07-20 | 2016-05-10 | Zuci Realty Llc | Insight and algorithmic clustering for automated synthesis |
US9298754B2 (en) * | 2012-11-15 | 2016-03-29 | Ecole Polytechnique Federale de Lausanne (EPFL) (027559) | Query management system and engine allowing for efficient query execution on raw details |
US9507814B2 (en) | 2013-12-10 | 2016-11-29 | Vertafore, Inc. | Bit level comparator systems and methods |
US9367435B2 (en) | 2013-12-12 | 2016-06-14 | Vertafore, Inc. | Integration testing method and system for web services |
US9747556B2 (en) | 2014-08-20 | 2017-08-29 | Vertafore, Inc. | Automated customized web portal template generation systems and methods |
CN104268558B (zh) * | 2014-09-15 | 2017-10-24 | 武汉大学 | 用于光谱图像数据降维的邻居点搜索方法及系统 |
US9600400B1 (en) | 2015-10-29 | 2017-03-21 | Vertafore, Inc. | Performance testing of web application components using image differentiation |
US11205103B2 (en) | 2016-12-09 | 2021-12-21 | The Research Foundation for the State University | Semisupervised autoencoder for sentiment analysis |
CN108228676B (zh) * | 2016-12-22 | 2021-08-13 | 腾讯科技(深圳)有限公司 | 信息抽取方法和系统 |
CN110659286B (zh) * | 2019-09-05 | 2023-11-24 | 苏州大学 | 基于弱平衡空间树动态空间索引方法及其存储介质、装置 |
TWI768982B (zh) * | 2021-06-23 | 2022-06-21 | 鼎新電腦股份有限公司 | 表格佈署系統和其方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2156972B (en) | 1984-04-06 | 1988-07-06 | Plessey Co Plc | Improvements relating to the manufacture of optical devices |
US6714909B1 (en) * | 1998-08-13 | 2004-03-30 | At&T Corp. | System and method for automated multimedia content indexing and retrieval |
US6266048B1 (en) | 1998-08-27 | 2001-07-24 | Hewlett-Packard Company | Method and apparatus for a virtual display/keyboard for a PDA |
GB9820499D0 (en) | 1998-09-22 | 1998-11-11 | Adflash Limited | Visual image display devices |
KR100284778B1 (ko) * | 1998-10-28 | 2001-03-15 | 정선종 | 내용기반 이미지 검색을 위한 고차원 색인구조의 삽입 방법 |
US6694311B1 (en) * | 1999-01-25 | 2004-02-17 | International Business Machines Corporation | Method and apparatus for fast query approximation using adaptive query vector projection |
US7472062B2 (en) | 2002-01-04 | 2008-12-30 | International Business Machines Corporation | Efficient recursive clustering based on a splitting function derived from successive eigen-decompositions |
US7146361B2 (en) * | 2003-05-30 | 2006-12-05 | International Business Machines Corporation | System, method and computer program product for performing unstructured information management and automatic text analysis, including a search operator functioning as a Weighted AND (WAND) |
-
2006
- 2006-02-23 US US11/361,166 patent/US7650320B2/en active Active
- 2006-02-24 CN CN2006800108217A patent/CN101432684B/zh active Active
- 2006-02-24 WO PCT/US2006/006450 patent/WO2006091739A2/en active Application Filing
- 2006-02-24 CA CA2598750A patent/CA2598750C/en active Active
- 2006-02-24 EP EP06721009A patent/EP1851617A4/en not_active Ceased
- 2006-02-24 TW TW095106352A patent/TWI329817B/zh active
-
2009
- 2009-11-30 US US12/628,007 patent/US20100076981A1/en not_active Abandoned
-
2011
- 2011-04-24 US US13/092,965 patent/US8032476B2/en active Active
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102779186A (zh) * | 2012-06-29 | 2012-11-14 | 浙江大学 | 一种非结构化数据管理的全过程建模方法 |
CN102779186B (zh) * | 2012-06-29 | 2014-12-24 | 浙江大学 | 一种非结构化数据管理的全过程建模方法 |
CN112685603A (zh) * | 2019-10-18 | 2021-04-20 | 百度(美国)有限责任公司 | 顶级相似性表示的有效检索 |
US11914669B2 (en) | 2019-11-25 | 2024-02-27 | Baidu Usa Llc | Approximate nearest neighbor search for single instruction, multiple thread (SIMT) or single instruction, multiple data (SIMD) type processors |
Also Published As
Publication number | Publication date |
---|---|
WO2006091739A3 (en) | 2009-04-16 |
US20060190465A1 (en) | 2006-08-24 |
TWI329817B (en) | 2010-09-01 |
EP1851617A4 (en) | 2011-02-02 |
CA2598750A1 (en) | 2006-08-31 |
CA2598750C (en) | 2013-05-21 |
US20110202540A1 (en) | 2011-08-18 |
US7650320B2 (en) | 2010-01-19 |
WO2006091739A2 (en) | 2006-08-31 |
TW200701017A (en) | 2007-01-01 |
US20100076981A1 (en) | 2010-03-25 |
EP1851617A2 (en) | 2007-11-07 |
CN101432684B (zh) | 2013-04-24 |
US8032476B2 (en) | 2011-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101432684B (zh) | 对非结构化内容进行高效索引存储的方法和装置 | |
JP2022050489A (ja) | 統計プロファイリングおよびリファレンススキーママッチングによるオントロジー帰納のためのシステムおよび方法 | |
US20100049766A1 (en) | System, Method, and Computer Program for a Consumer Defined Information Architecture | |
CN101582080B (zh) | 一种基于图像和文本相关性挖掘的Web图像聚类方法 | |
CN109446341A (zh) | 知识图谱的构建方法及装置 | |
US8073849B2 (en) | Method and system for constructing data tag based on a concept relation network | |
US7818323B2 (en) | Discovering topical structures of databases | |
US20150193533A1 (en) | Finding Data in Connected Corpuses Using Examples | |
US11170306B2 (en) | Rich entities for knowledge bases | |
WO2015050909A1 (en) | Extracting relational data from semi-structured spreadsheets | |
CN106528648B (zh) | 结合Redis内存数据库的分布式RDF关键词近似搜索方法 | |
Gu et al. | Codekernel: A graph kernel based approach to the selection of API usage examples | |
Andoni et al. | Log Diameter Rounds Algorithms for $2 $-Vertex and $2 $-Edge Connectivity | |
CN111611266A (zh) | 知识驱动的联合大数据查询和分析平台 | |
WO2015051481A1 (en) | Determining collection membership in a data graph | |
Ahmad | 40 Algorithms Every Programmer Should Know: Hone your problem-solving skills by learning different algorithms and their implementation in Python | |
AU2019200371A1 (en) | Utilizing artificial intelligence to integrate data from multiple diverse sources into a data structure | |
López et al. | An efficient and scalable search engine for models | |
CN113254507A (zh) | 一种数据资产目录智能构建盘点方法 | |
Staar et al. | Corpus processing service: a knowledge graph platform to perform deep data exploration on corpora | |
Wen et al. | Crossing scientific workflow fragments discovery through activity abstraction in smart campus | |
Yi et al. | A method for entity resolution in high dimensional data using ensemble classifiers | |
KR20210129465A (ko) | 연구노트 관리 장치 및 이를 이용한 연구노트 검색 방법 | |
US8149240B2 (en) | Efficient symbolic differentiation using derivative graph factorization | |
US20220156285A1 (en) | Data Tagging And Synchronisation System |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1127654 Country of ref document: HK |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1127654 Country of ref document: HK |