联系了nju的一个导师,二面读了篇论文,感觉学术界的算法更多是特殊情况下的搞近似解优化时空复杂度,读研做这种研究也挺好的,然后nju夏令营没进。。。只能等九推,难顶。
链接:https://doi.org/10.1145/3366423.3380110
关键词搜索是一种在询问网络数据方面很重要的方法。对于图结构的数据,一个广泛流传的关键词的语义是基于群斯坦纳树的。对于NP-hard问题,存在很大的图中有合适的质量保证但耗时巨大的算法。在这篇论文中,我们提出有用的近似算法,这个算法有对于计算答案的质量有保障而且耗时很短。我们的算法是依赖HL算法的,一种在图中对每个点用一串连接它的点的标记的结构,我们用它来计算距离和最短路径。我们设计了两个HL:一个常规静态的使用一个新启发式去提高下标剪枝标签的HL,一个新颖的翻转和统计询问相关静态标签去更有效率处理点集的动态HL。我们的方法能在毫秒的时间内计算百万级的知识图谱中可靠的好的近似答案。
1.Hub-Labeling,集线器标签? 算法是一种比lookuptable消耗更少的资源反而能更快找到一张图两个点钟最短路径,这个方法允许至多两个声明和两个字符串的分析来计算出一张图中两个点间的最短路径。对于一个图,这种科技要求像收缩层次算法一样的对于结构中两个表的预处理。最后这两个计算表格会有和图中点数一样多的行,每一行一个标签会被计算。一个标签是一个包含当前点与其他所有以一个在相关的多高级结构上上升搜索能到达的点之间的距离,这些距离的优点是他们呈现了最短路径。所以对于未来的询问,最短路径的搜索会从第一张表格的源点和第二章表格的终点开始,在带有联系的距离信息的共有的点上搜索。只有最小距离之和会被保存进最短路径结果。
2.Contraction hierarchies,收缩层次?用来求两点之间的最短路,预处理一个多层的结构,人为设定一个点的优先级(这个随便拍,但是排序的好坏影响预处理的效率和搜索的效率),然后按优先级从低到高收缩,拿掉这个点,看会不会影响图中点对之间的最短路,只要看它邻接的比它优先级高的点两两之间最短路是否经过这个点,如果经过,就新增一条边存储它们的最短路,这条边叫shortcut。用双向dijkstra来实现。
大概介绍了一下关键词搜索。匹配关键词,提取数据,组织答案。
斯坦纳树问题,精准涵盖k个点的最小生成树问题,关键词可以涵盖知识图谱中的点或边。
GST问题是NP-hard的,一般的做法耗时很久,现有的基于GST的算法来做关键词搜索不适合一般知识图谱的规模。
前面和摘要一样
•第一个算法是对于所有关键词匹配的点集找一个GST,对于g个关键词,计算出来的GST的总共的边权重最多是(g-1)*最小值 ((g-1)-approximation algorithm)
•这个近似比例是可以接受的因为g一般在实践中很小。这个Hub Labeling(HL)是静态的常规的离线构造的。在大的知识图谱上,有一个静态HL的KeyKG算法会比一般的算法至少快一个数量级,而且近似答案也是在容许的质量范围内的。
第二个算法KeyKG+在keyKG之上使用了一种新颖类型的HL。这种HL是动态的,当处理一个具体的询问它在网络上会通过翻转和聚集与询问相关静态标签进行重构。这减少了重复的操作,尽管有在线构造的额外时间,但还是效率很高。在DBpedia上进行同样的计算同样的结果只用了几毫秒。
1.对于在GST语义上的知识图谱进行关键词搜索,提出了一个xxx的算法。
2.为了支持高效地在线计算距离和最短路径,提出了一种新颖的动态HL,使得算法表现更优秀,我们也提出了一种新的使用一个高效的启发式的静态HL。
知识图谱,就是一个带权无向图,不用考虑自环重边,边权非负。
关于图的属于,len§表示路径p的边权和,dist(u,v)表示u,v的最短路径长度,不连通则为无穷大
关键词映射,定义一个函数,把一个关键词集合映射到图上的点集。如果映射到图,那就把那条边中新增一个点w把edge(u,v)变成(u,w),(w,v)。在这篇论文的公式化问题中我们忽略这种映射到边。
关键词询问,对于询问Q,用hits(ki)表示关键词节点,图G上询问Q的答案是一棵GST,对于每个关键词映射的点集,GST至少有其中的一个点,还要满足权值之和最小。
getD表示计算距离,getSP表示计算最短路径,这两个函数是依赖HL的
首先,KeyKG算法贪心的选择一个彼此距离较近且对于每个关键词映射点集有一个点覆盖的一个点集记为U_x,然后贪心地找到一个GST覆盖U_x,记为T_u_min
对于K1中的每个点v1,找到Ki中每个离它最近的点vi,记U_v1为这些点的点集,W_v1为这些点到v1的距离之和,每一个v1都对应一个W_v1。记K1中的x有最小的W_v1,最后U_x中有所有Ki的至少一个点,这些点是因为他们彼此更近才被选出来的。因此,一个GST应该会有小的权重。
接下来就是从U_x中的每一个点u开始构造一棵GST T_u,然后从中选择一个权值和最小的。每一棵GST T_u初始只有一个点u,然后反复地操作直到T_u覆盖了U_x,一个点s_min在T_u中一个点t_min在U_X中但不在T_u中,被找到后把getSP(s_min,t_min)加入T_u。这个贪心的拓展应该会生成一个很小权值和的GST。然后找到最小的T_u对应的点u_min,最后返回T_u_min。
这里对介绍部分的那个(g-1)进行了证明,好评。
证明略。。。
直接使用在线求法(dijkstra)耗时很大,离线记录所有点对间的距离和最短路径又要求很大的空间。为了找到实用的时空平衡,我们使用HL,一个离线构造的索引结构
对于一张图,一个静态的把总点集变成2^V个点集,这些点集就叫hubs(感觉可以放到前面一点的地方介绍?),满足以下条件,对于联通的u,v,最短路径上的任一点h既属于L(u)又属于L(v),L(u)就是the label of u,L(u)的hubs是按他们的标识排序的,在L(u)中dist(u,h)也是经过排序的。
getD(u,v)就只要枚举L(u),L(v)的交集的每个点取最小值就行了
如果label能更小的话,在线计算getD就更快,然而最小化label是NP-hard问题。有大量各种各样的语义方法对给出的图构造想当小的labels.减枝后的界标标签(PLL)是一种流行的方法,它使用Dijkstra算法并高效减枝搜索减少labels,接下来将改进PLL得到更新的labels。
当L_i-1的某个点u比L_i中u这个点的距离更近一些,即dist(v_i-1,u) getSP算法是找到h_min后,从u,v分别开始利用pred(now,h_min)一直拓展到hmin并记录路径 我们想要更前面的labels支持更多的点对距离计算,原始的PLL启发式地对点按度数降序排序,原因是高度数的点更可能出线在更多的点对间最短路径中,我们不这样做,我们按照betweenness centrality 中间性排序,记作bc(v)。bc(v)为所有除了v点的点对(s,t)的 (其中经过v的数量)/(s,t之间的最短路径数量) 这个值之和 如果要准确计算的话需要耗费大量时间,我们将使用一个source sampling based 近似算法,推荐读 [4] 获取更多关于这个算法的细节。 对于每个hub:L(w)中的点v_i,我们同时存储dist(w,v_i)和前继节点pre(w,v_i) (这不是早就知道了。。。为什么代码放在那么前面的位置) n是知识图谱中的点数,g是关键词的个数,1-8行时间是O(n^2 g t_getD),9-18行用一下的技巧,对于在(U_x \ V_T_u)中的每一个点,也就是在U_x但不在V_T_u中的每个点,我们存储他到T_u中点的最小距离,当加入一个点p进T_u时,我们更新这个点到(U_x \ V_T_u)的剩下的点的存储距离,我们用这些存储的最小距离找到最小的(s_min,t_min),所以这部分优化到了O(n * g2)总共的复杂度是O(n2 * g * t_getD + n* g^2 * t_getD + g^3 + g^2*t_getSP); 分析t_getD ,根据公式6,发现这可以用归并排序解决两个排序的hub list,二路归并是O(|L(u)|+|L(v)|)的,比最短路快,在实际情况中这个复杂度远小于n,所有的L的大小加起来才接近O(n),所以静态HL的时空平衡做的很好。 分析t_getSP,首先找到h_min是O(n)的,然后就是还原路径,由于L(y)是有序的,所以可以直接二分朝招,所以复杂度是O(nlogn)的。 那么总复杂度是O(n3g+n2g2+g3+g^2nlogn),但是由于K1< 动态HL是一个(g-1)*n的矩阵M,行对应关键词的点集K_2…K_g,每一列就对应那些hub点,M的第i-1行M_i-1,翻转然后并到K_i中点的静态labels中。如果点h_j属于V且至少属于K_i中一个点的静态标签,那么M_i-1,j就不是null。 M_i-1,j是 所有点的label的并集中的某一个label h_j有着最小的dist(u,h_j),u是属于K_i中的点。如果M_i-1,j不是null,他的预计算的到h_j的距离就被存在M里面。 用二维数组存储M,那么在常数时间下就可以访问其中的任意值,M_i-1能从K_i和Labels中构造出来而不需要访问原图KG。在计算v_i的时候,M_i-1能够取代K_i中的点的静态HL,而且展示它的紧凑性和随机访问能力能提高效率。 注意dist(C,A)还是从静态HL求出来的。 是KeyKG的拓展,动态HL被构造并用在两个位置去提高效率并不改变计算结果。 算法步骤: 1.首先构造出M 2.用M_i-1去找到的v_i,添加进 U_v_1中去,还是照原来的方法一样求出所有的 U_v1和W_v1。注意,如果M_i-1,j不为null,才能计算dist(v_1,h_j)+dist(M_i-1,j,h_j),这表示最小的v_1和K_i点集中的点组成的点对中距离最小的。 3.还是取最小的W_v_1,对应的根节点为x 4.第二部分,我们给V_T_u构造M_u’,,对于每个属于U_x但不在V_T_u中的点t_i,M_u’,能够找到当前V_T_u中的某个点s_i,且dist(s_i,t_i)最小。 KeyKG+计算结果和KeyKG一样所以他也是(g-1)近似算法 O(n2)构造出M_i-1,第一部分求所有的U_v1和W_v1的复杂度就降到了O(n2g),第二部分求T_u的复杂度降到了(n2g+ng3),这在实际应用中ng3是远远小于n2g的,所以实际情况就是O(n^2g) 另外我们考虑keykg+的getSP,由于h_min可以直接表示出来而且可以重复利用,我们可以减少O(n)的寻找h_min的时间。另外由于T_u的构造,对静态labels的二分搜索总数不是O(gn)而是接近|E_T_u|<=O(n).因此getSP函数从O(g^2nlogn)减少到了O(gnlogn) 总复杂度是 O(n2g+n2g+ng^3+gnlogn) 也就是O(n2g+ng3) 我们实验的目的是凭经验调查这些研究的假设(RH)。 RH1:我们的方法跑art[27,38]中运行时间很长时间的KGs能跑出很好的结果 RH2:使用提出的动态HL方法能提高整体效率 RH3:我们的静态HL比HLs[3,14,39]更小的规模,所以能更快计算距离和最短路径。 KGs: MONDIAL小的地理KG, LinkedMDB中等的电影KG DBpedia大的百科全书KG 关键词,关键词映射,边权赋值 现有的KG上的关键词搜索在GST或者类GST的语义上,我们将我们的方法与两种方法对比 PrunedDP++是先进的准确算法使用A*算法。 BANKS-2是先进近似算法,使用双向搜索 我们的静态HL是排进了PLL,而且使用betweenness centrality对点进行排序的,我们将它与现有的3个HL对比 PLL,按度数排序 RXL,改进了PLL,基于最短路径树排序 SHP,最近的方法,基于重要的路径 开源代码:https://github.com/nju-websoft/KeyKG 把动态HL和静态HL都存进内存, 静态HLs选择200个pivots,分别花了37MB,183MB,7704MB 实现了 K e y K G + − D KeyKG^+-D KeyKG+−D ,静态HL使用MySQL被存储在硬盘里 还使用了KeyKG-PLL算法,使用了原始的PLL代替静态HL 两个静态HL的变种使用10pivots和100pivotes的称为SHL-10和SH-100。我们使用的默认的就是SHL-200。 对于计算最小的GST,测量答案的质量和运算时间 对于静态HL的衡量,测量一个点的label的平均大小。 实验结果证实了RH1,RH2,RH3的事实。 这一章节我们重新回顾相关的工作和考虑各种各样在图数据上进行关键词搜索的方法和HubLabeling的方法 有很多关键词搜索的工作室先把关键词询问转换成一个结构化的询问,比如比如对于RDF图的SPARQL询问,然后再执行结构化的询问得到答案,我们是用另一个方式,直接搜索一个最佳的子图来回答询问。 有BANKS,BANKS2,BLINKS,DPBF,PrunedDP++,这些近似方法的近似率是和KeyKG+一样的,但是运行时间通常与边数有关,而KeyKG+只与点数和询问的关键词的点集数有关,在实际应用中有很好的表现。当然还有一些算法不适合大型的图,这里不考虑。 GST问题是斯坦纳树的一个版本,斯坦纳树在关键词搜索上的应用的前提是每一个关键词只对应一个点。 为了适合大图的询问,有一种方法预处理然后得到大量的用大小做界限的子图作为答案。有些询问距离很远,他限制了这些方法的应用产生空的答案,而GSTs是不受结构界限的。 Pruned Landmark Labeling (PLL),Robust eXact Labeling (RXL)。 我们的静态HL在经验上胜过关键路径标记的基于Hub Pushing 的HL。那些标记特别点的做法也结合一些启发式思想。 另外我们还提出了动态HL,重新排列静态的labels并允许直接的随机访问,使得理论上和实际上的效率更好了 有一些计算近似距离的方法但是他们不合适,因为使用近似的距离会影响我们算法的近似率。还有一些更搞笑的做法对于路径网络,然而KGs没有road 网络的空间特性所以这些方法不能使用。 这篇论文中,我们研究了在GST语义下在KGs上做关键词索索。我们介绍了两种算法:KeyKG基于静态HL和KeyKG+基于动态HL,有效地回答基于GST的关键词查询。我们的实验表明了KeyKG+比之前的算法快3个数量级而且有可容忍的精度丢失。特别的,在大的KGs比如注明的DBpedia,可靠的好的答案能在毫秒级的时间内计算出来,证明了我们放的实用性。这样好的表现要归功于我们的动态HL能翻转重新编排询问相关的labels,也要归功于我们新的静态HL用betweenness centrality中心性来做启发式排序比现有的HLs表现更好。 这些HLs的潜在应用明确不会是我们方法的局限。 至于未来的工作,我们注意到很少求距离的方法支持高效的边的删除,在多项式延迟的top-k GSTs的框架中这是基本的操作,所以高效的top-k 关键词搜索在我们的方法里还是没有解决的,我们计划探索这一未来的工作。相比于BANKS2,KeyKG的近似率以后会进一步改进。另外,现在存在一些大的稠密图导致所有现存的HLs无法使用很小的label。为了解决这种图,需要有人去开发其他种类的高效距离求法或者考虑可替代的技术。索引结构的扩展
3.3运行时间分析
4.动态HL的$KeyKG^+ $算法
4.1动态HL
4.2 K e y K G + KeyKG^+ KeyKG+算法
4.3 运行时间分析
5.实验
5.1实验设置
5.2基线
5.3我们方法的实现
我们方法的配置
我们方法变种
5.4衡量指标
5.5结果和分析
6相关的工作
6.1图数据上的关键词搜索
询问解释
基于GST的方法
斯坦纳树
基于检索的方法
6.2Hub Labeling
准确的HLs
近似的和其他的HL
7总结