Locality Sensitive Hashing:主要用于高效处理海量高维数据的最近邻问题
,使得 2 个相似度很高的数据以较高的概率映射成同一个hash 值,而令 2 个相似度很低的数据以极低的概率映射成同一个 hash 值。
LSH详细内容请看:LSH原理与实现、LSH(局部敏感哈希)、深入浅出LSH
Locality Sensitive Hashing (LSH) Home Page (mit.edu)
Bloom filter:主要用于检索一个元素是否在一个集合中
,1970年由布隆提出,它实际上是一个很长的二进制向量(位图)和一系列随机映射函数(哈希函数)。存储的数据是 0 或 1 ,默认是0,0代表不存在
某个数据,1代表存在
某个数据。
布隆过滤器上面说了,就是一个二进制数据的集合。当一个数据加入这个集合时,经历如下洗礼:
例如,将“你好”存入布隆过滤器,第一个哈希函数返回 3,第二个第三个哈希函数返回 5 与 7 ,那么布隆过滤器对应的下标3,5,7的位置改成1。
布隆过滤器主要作用就是查询一个数据,在不在这个二进制的集合中,查询过程如下:
我们假设 BF 是一个 12bit 的二进制向量,{h1,h2}是两个哈希函数,{x,y,z}是一个集合。 用户想查询关键字 w,查询结果显示 w 在集合中不存在。
它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
添加数据是通过计算数据的 hash 值,那么很有可能存在这种情况:两个不同的数据计算得到相同的 hash值。这样查询的时候就会造成错误识别,同样如果已经存在有两个相同 hash 值的数据,删除时就会同时删除两个。
BF详细内容请看:最牛一篇布隆过滤器详解
也就是说,一次查询返回的结果是可能在集合里或者绝对不在集合里。
给定字符串 S1 = C1C2 … Cn 和二进制向量 S2 = b0b1 … bm-1 , S2 中每位元素的初始值为 0,其中 n < m .通过 Hash 函数 H,把 S1 中相邻 2 个字符散列映射为 0~(m -1) 之间的数,当且仅当 H ( Cj , Cj +1 ) = i 时,bi = 1。把 S1 → S2 的函数称为对偶编码函数。
在面向密文的多关键字模糊搜索方案中,构建索引、构建陷门和关键字查询的过程都是基于向量的操作过程。数据拥有者输入的关键字都由字符组成,由于字符的不可计算性,需要将其转换成向量的形式。
正排索引(forward index)
正排索引是指以文档 ID 为 Key,文档内容为 Value
倒排索引(inverted index)
倒排索引是指以文档内容为 Key,文档 ID 为 Value
举个例子🌰
例如,有 3 个文档及其对应关键词
ID | 文档 | 关键词 |
---|---|---|
id1 | 《手机》 | 苹果、小米 |
id2 | 《水果》 | 香蕉、苹果 |
id3 | 《粮食》 | 小米、玉米 |
正排索引:
{id1,苹果,小米}、{id2,香蕉,苹果}、{id3,小米,玉米}
倒排索引:
{苹果,id1,id2}、{小米,id1,id3}、{香蕉,id2}、{玉米,id3}
两种索引优缺点
索引 | 优点 | 缺点 |
---|---|---|
正排索引 | 易维护、构建方便 | 搜索耗时长 |
倒排索引 | 搜索耗时短 | 构建耗时、维护成本较高 |
KNN(k-nearest neighbour):就是 K 个最近的邻居的意思,说的是每个样本都可以用它最接近的 K 个邻近值来代表
安全K最近邻计算是 Wong 等人在2009年论文 Secure kNN computation on encrypted databases 提出的,用于计算两个加密数据库记录之间的距离。在一个安全的 KNN 计算中,所有的数据库记录都被扩展到 m 维的向量,并由 m位的向量 S 和两个 m × m 可逆矩阵 M1 和 M2 加密。
举个🌰
下图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形? KNN的算法过程是是这样的:
词频-逆文档频度(Term Frequency - Inverse Document Frequency)是一种用于信息检索与文本挖掘的常用加权技术,用来评估一个词对于一个文档集或语料库中某个文档的重要程度,主要用在自动提取关键词算法中。
指的是某一个给定的词语在该文件中出现的次数。
以统计一篇文档的关键词为例,最简单的方法就是计算每个词的词频,出现频率最高的词就是这篇文档的关键词,但是一篇文章中出现频率最高的词肯定是“的”、“是”、“在”……这样的词,这些词显然不能反应文章的意思,此时就需要对每个词加一个权重,最常见的词(”的”、”是”、”在”)给予最小的权重,较少见的但能反应这篇文章意思的词给予较大的权重,这个权重叫做逆文档频率。
IDF 是一个词语普遍重要性的度量。如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。
知道了 TF 和 IDF 以后,将这两个值相乘,就得到了一个词的 TF-IDF 值。某个词对文章的重要性越高,它的 TF-IDF 值就越大。所以,排在最前面的几个词,就是这篇文章的关键词。
可以看到,TF-IDF 与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的 TF-IDF 值,然后按降序排列,取排在最前面的几个词。
字词的重要性随着它在文件中出现的次数成正比增加 ,但同时会随着它在语料库中出现的频率成反比下降 。如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词。
TF-IDF详细内容请看:TF-IDF(词频-逆文档频率)介绍
从数据集中提取出的关键字集合进行“词根” 过滤,例如“walks”、“walking”、“walked”等近似的关键字,词根均为“walk”。后续的检索操作基于词根进行,大幅减少了计算量,且由于该操作只是在索引生成时执行一次,对整个系统的运行效率不会产生过大的影响。
N-gram 模型是一种语言模型(Language Model,LM),N-gram 的基本思想是将文本里面的内容按照字节进行大小为 N 的滑动窗口操作,形成了长度是 N 的字节片段序列。每个字节片段即为 gram 。
uni-gram
bi-gram
tri-gram
例如输入为西安交通大学
中文文本处理大多采用 bi-gram 进行分解,因为双字词出现概率比较大,即以大小为2的滑动窗口进行操作,切成长度为 2 的字节片段。
旨在获取相似度后,将其作为打分结果,根据匹配到的文件的分数,按照顺序返回给用户分数排名最高的K份数据,是搜索引擎中最常见的模式。简而言之,就是使用户快速找到最相关的 k 个结果。
a 和 b 的内积公式为:a∙b = a1b1 + a2b2 + … + anbn
内积的几何意义
内积的几何意义是可以用来表征或计算两个向量之间的夹角,以及在 b 向量在 a 向量方向上的投影。
伪随机函数(PRF)和置换(PRP),它们是多项式时间可计算的函数,不能被任何可能的多项式时间对手从随机函数中区分出来。
PRP(pseudo random permutation,伪随机置换)和PRF(pseudo random function,伪随机函数)之间的区别,可以从定义来看
PRF
取一个密钥和集合 X 中的元素作为输入,输出值在集合 Y 中,现在唯一要求的是存在一个有效的算法来实现这个函数。也就是说,要有一个有效的函数来实现 K × X → Y 的映射。
PRP
与 PRF 不同的是,多了一个条件,那就是要有一个算法 D 可以实现逆运算。
在PRP中,存在一个有效算法,能够实现 K × X → X 映射关系,也就是说该算法能够将随机密钥 K 与集合 X 中的元素作为输入,同时输出值也是集合 X 中的元素,那么就要求每个元素一一对应。从本质上来说,E(K,X) 是对元素 x 的置换,为了解密的需要,就要求 E 是可逆的。
同态MAC:任何消息 mi 被加密为一个 degree-1 多项式 y(x)
由于传统同态 MAC 仅支持有限域的计算,论文 VRFMS 采用了 realhomm-MAC,realhomm-MAC 的改进是将所有消息作为实数来处理,其编码格式类似于 IEEE 754 标准中定义的双精度浮点格式。也就是说,新算法在保留原算法同态的前提下能够处理实数。
KPA<IND-SCKA<IND-CKA<IND-CKA2
KPA
SCKA
IND-CKA1
IND-CKA2
参考:在 可搜索的对称加密:改进的定义和有效的构造 中,Curtmola 等人。为可搜索的加密方案提出非自适应和自适应(不可区分性和基于模拟器)的安全定义,通常称为IND-CKA1 和IND-CKA2。
1946年双线性对首先被法国数学家Weil提出并成为代数几何领域重要的概念和研究工具。
双线性映射可以用五元组 (p,G1,G2,GT,e) 来描述,G1,G2,GT 是三个素数阶乘法循环群,阶数皆为p,定义在这三个群上的一个映射关系e:G1*G2 —>GT,满足以下性质:
1、双线性性:对于任意a,b ∈ Zp 和 R,S ∈ G1,有e(Ra, Sb) = e(R, S)ab;
2、非退化性:存在R,S ∈ G1,使得 e(R, S) ≠ 1G2(1G2代表G2群的单位元);
3、可计算性:存在有效的算法对任意的 R,S ∈ G1,计算e(R, S)的值。
如果G1=G2则称上述双线性配对是对称的,否则是非对称的。