一种基于活动影响力的语义轨迹查询方法

文档序号:7671 发布日期:2021-09-17 浏览:16次 英文

一种基于活动影响力的语义轨迹查询方法

技术领域

本发明属于空间数据处理

技术领域

,尤其涉及一种基于活动影响力的语义轨迹查询方法。

背景技术

随着移动社交网络和基于位置服务应用的不断发展,形成了大量语义轨迹数据。语义轨迹不仅包含传统时空轨迹中带有的经纬度和时间戳信息,还附带描述用户行为活动的文本信息。对语义轨迹数据的查询研究产生了很多应用价值,例如:在社交网络中推荐具有相同兴趣或相似习惯的朋友、在广告营销中为商家提供合适的广告投放对象或选择合适的广告主题、在旅游应用上为游客提供个性化的旅游路线推荐等。

轨迹的高效查询依赖于有效的索引机制,IR-Tree常被用于索引语义轨迹数据。IR-Tree的本质就是在R树的基础上扩展倒排索引,在IR-Tree的每个结点上,都含有一个指向倒排文件的指针,该文件描述了结点表示的最小边界矩形内包含的所有关键词。与中间结点关联的倒排文件中的每个倒排列表记录着关键词出现的所有子结点;而与叶子结点关联的倒排文件中的倒排列表则记录着具体的轨迹点。IR树还存在若干变体,如DIR树、CIR树等。DIR树在构建过程中,同时考虑空间文本对象的空间信息和语义信息,使得在同一结点内的对象在语义属性上也尽可能相似。CIR树根据结点内所有对象的空间邻近性,将对象划分到不同的簇,并记录各个簇中关键词的分布情况。

在现有的专利“基于语义轨迹大数据的反向最近邻查询方法及装置”中,该专利在语义轨迹数据中设计了一种针对反向最近邻的查询方法,该方法并不能适用于本发明解决的查询问题。

为实现语义轨迹的快速查询处理,目前仍然存在诸多困难:(1)随着基于位置服务应用的不断发展,用户会提出更个性化和多样性的查询需求,传统的查询技术已无法满足日益复杂的查询请求。(2)IR-Tree等索引结构在面对海量定制化的查询时,由于没有充分利用语义轨迹中的各类信息进行剪枝,显得不够高效。(3)目前,针对传统轨迹的查询处理框架和优化机制不适用于语义轨迹查询,而存在的处理语义轨迹查询的算法框架和优化机制并不能完全适用于本发明提出的查询问题。

发明内容

为解决上述问题,本发明提供一种基于活动影响力的语义轨迹查询方法,能够优先搜索具有更大活动影响力的轨迹。

一种基于活动影响力的语义轨迹查询方法,包括以下步骤:

S1:获取语义轨迹数据集D的基本信息,其中,所述基本信息包括语义轨迹数据集D中每条语义轨迹T的轨迹编号、每条语义轨迹T上各个轨迹点p对应的关键词的活动影响力,且每个轨迹点至少对应一个关键词,各轨迹点对应的关键词不完全相同,同一个关键词在不同轨迹点处的活动影响力不完全相同;同时,关键词在任意一个轨迹点上的活动影响力为该关键词在该轨迹点上的出现次数;

S2:基于语义轨迹数据集D的基本信息构建混合网格索引HGI,其中,所述混合网格索引HGI由混合四叉树索引HQ-tree与混合倒排索引HIF组成;

S3:对于用户给定的查询需求Q=(loc,acts,dmax),基于混合网格索引HGI在语义轨迹数据集D中找出与查询需求Q最匹配的k条语义轨迹,其中,loc为用户设定的查询位置,acts为用户设定的关键词集,dmax为用户设定的预期旅程最大值,k至少为3。

进一步地,步骤S2中所述的混合四叉树索引HQ-tree的构建方法如下:

S21:将语义轨迹数据集D所在的真实地理区域分别划分为d个层级的网格,其中,每个层级包括2d-1×2d-1个网格,且d至少为3,每个网格均对应一个网格编号;

S22:分别判断各层级的各个网格中是否存在轨迹点,剔除不包含轨迹点的网格,将剩余网格按照网格的层级包含关系构建四叉树,其中,不存在孩子结点的结点为叶子结点,其余结点为非叶子结点;

S23:分别为四叉树的各结点关联索引条目和位图信息,具体如下:

对于任意一个非叶子结点g0,其关联的索引条目为三元组(Gid0,{g′∈g.subgrids},ifile),其中,Gid0表示非叶子结点g0对应的网格的编号,{g′∈g.subgrids}表示非叶子结点g的所有孩子结点的指针列表,ifile表示非叶子结点g0对应的网格中存在的所有轨迹点对应的关键词的第一倒排索引,且第一倒排索引包括如下信息:各关键词在非叶子结点g0对应的网格中的活动影响力、出现各关键词的非叶子结点g0的孩子结点对应的网格编号;

对于任意一个叶子结点g1,其关联的索引条目为二元组(Gid1,ilist),其中,Gid1表示叶子结点g1对应的网格的编号,ilist表示叶子结点g1对应的网格中存在的所有轨迹点对应的关键词的第二倒排索引,且第二倒排索引包括如下信息:各关键词在叶子结点g1对应的网格中的活动影响力、出现各关键词的语义轨迹的编号;

对于四叉树的任意一个结点,其位图信息为由0和1组成的数据序列,且数据序列上的每一个数据位对应一条语义轨迹,其中,0表示该数据位对应的语义轨迹不经过当前结点对应的网格,1表示该数据位对应的语义轨迹经过当前结点对应的网格。

进一步地,关键词在任意一个结点对应的网格中的活动影响力的计算方法为:

获取关键词在当前结点对应的网格中所有轨迹点处的活动影响力,将其中的最大值作为关键词在当前结点对应的网格中的活动影响力。

进一步地,步骤S2中所述的混合倒排索引HIF由语义轨迹数据集D中的各条语义轨迹对应的活动列表、活动倒排列表以及子轨迹长度列表构成,其中,活动列表用于存储语义轨迹上所有轨迹点对应的关键词,活动倒排列表用于存储各关键词与出现各关键词的轨迹点之间的关联关系,子轨迹长度列表用于存储语义轨迹上各轨迹点到起始轨迹点的长度。

进一步地,步骤S3中基于混合网格索引HGI在语义轨迹数据集D中找出与查询需求Q最匹配的k条语义轨迹具体为:

S31:设定一个堆集合,自顶向下遍历混合四叉树索引HQ-tree,首先将根结点放入堆集合中,并获取根结点的孩子结点,然后将根结点剔出堆集合,将根结点的符合设定剪枝规则的孩子结点加入堆集合中;

S32:找出当前堆集合中活动影响力最大的结点,然后将该结点剔出堆集合,并将该结点的符合设定剪枝规则的孩子结点加入堆集合中,再重复本步骤,直到遍历到叶子结点;

S33:根据遍历得到的叶子结点关联的索引条目,获取该叶子结点中出现了用户设定的关键词acts的语义轨迹,并将得到的语义轨迹作为待验证轨迹;获取各待验证轨迹的活动影响力,将活动影响力最大的前k条作为备选轨迹;

S34:将步骤S33中的叶子结点剔出堆集合,将当前堆集合重复步骤S32~S33,直到提前终止条件被满足或者遍历完所有结点,最终得到的k条备选轨迹为与用户给定的查询需求Q=(loc,acts,dmax)最为匹配的语义轨迹。

进一步地,步骤S31中所述设定剪枝规则为:孩子结点对应的网格中至少存在一个轨迹点与用户设定的查询位置loc之间的距离不大于dmax;孩子结点的活动影响力不为0;经过孩子结点对应的网格的所有语义轨迹中,至少有一条未被访问过。

进一步地,步骤S32中任意一个结点的活动影响力的计算方法为:

在该结点对应的所有关键词中,找出属于用户设定的关键词acts的关键词;将找出的关键词在该结点中的活动影响力最大值进行求和,所得和值再除以词集acts中的关键词总数,得到该结点的活动影响力。

进一步地,步骤S33中的各待验证轨迹的活动影响力的计算方法如下:

S331:初始化窗口端点s和e,并将窗口每次提取出的子轨迹记为T[s,e];

S332:左端点s固定为第一个轨迹点不变,右端点e从第一个轨迹点开始,沿着待验证轨迹的方向增大,每增大一次右端点,则截取一段子轨迹T[s,e],判断当前截取的子轨迹T[s,e]与用户设定的查询位置loc之间的距离是否大于dmax,若大于,则保持右端点e当前位置不变,增大左端点s,直到重新获取的子轨迹T[s,e]与用户设定的查询位置loc之间的距离不大于dmax,再按照如下公式计算子轨迹T[s,e]的活动影响力;若不大于,则直接按照如下公式计算子轨迹T[s,e]的活动影响力;

其中,Inf(T[s,e],Q)表示子轨迹T[s,e]的活动影响力,|Q.acts|表示词集acts中的关键词总数,Infp.poi(w)表示在子轨迹T[s,e]中出现且属于词集acts的关键词的活动影响力,Infmax(w)表示属于词集acts的关键词在所有轨迹点处的活动影响力的最大值,Q.acts为用户设定的关键词集,w为属于Q.acts的关键词,p为子轨迹T[s,e]中出现的轨迹点;

S333:保持左端点s的当前位置不变,右端点e沿着待验证轨迹的方向继续增大,继续对截取的子轨迹进行条件判断,并得到符合条件的子轨迹的活动影响力,以此类推,直到右端点e到达最后一个轨迹点;

S334:将得到的所有子轨迹的活动影响力的最大值作为当前待验证轨迹的活动影响力;

进一步地,步骤S332中子轨迹T[s,e]与用户设定的查询位置loc之间的距离的计算公式为:

其中,d(T[s,e],Q)为子轨迹T[s,e]与用户设定的查询位置loc之间的距离,dist(Q.loc,ps)为用户设定的查询位置loc与左端点s之间的欧氏距离,dist(pi,pi+1)为子轨迹T[s,e]中除右端点e以外的任意两个相邻轨迹点pi与pi+1之间的欧氏距离。

进一步地,步骤S34中所述提前终止条件为:第一和值小于当前计算得到的k条备选轨迹中轨迹活动影响力的最小值,其中,所述第一和值的计算方法如下:

分别将用户设定的每一个关键词acts作为当前关键词执行以下操作:找出当前关键词在当前堆集合所有结点对应的所有轨迹点处的活动影响力最大值,并将该活动影响力最大值作为当前关键词对应的最大影响力;

将用户设定的所有关键词acts对应的最大影响力进行求和,所得和值再除以词集acts中的关键词总数,得到第一和值。

有益效果:

1、本发明提供一种基于活动影响力的语义轨迹查询方法,深入研究了语义轨迹数据的索引结构、查询处理算法以及查询优化技术;具体来说,本发明在语义轨迹数据中提出活动影响力的概念,并据此定义了一个基于活动影响力的语义轨迹查询需求;同时,为了实现语义轨迹查询的高效处理,本发明设计了一个同时整合语义轨迹空间位置、关键词以及活动影响力多种信息的混合网格索引结构,比现有的索引技术具有更强的剪枝能力,基于该索引结构,能够优先搜索具有更大活动影响力的轨迹。

2、本发明提供一种基于活动影响力的语义轨迹查询方法,基于混合网格索引结构设计实现了一个高效的启发式搜索方法,通过堆集合的方式遍历混合网格索引结构,快速的找出与查询需求Q最匹配的k条语义轨迹,并能够在语义轨迹数据集中找到符合用户查询需求的关键词,也就是说,本发明优先匹配出了距离在用户指定阈值内的活动影响力最大的前k条轨迹,大大提高了轨迹查询的处理效率。

3、本发明提供一种基于活动影响力的语义轨迹查询方法,在启发式搜索过程中,引入提前终止条件,能够加速查询处理过程。

附图说明

图1为本发明提供的一种基于活动影响力的语义轨迹查询方法的流程图;

图2为本发明提供的基于活动影响力的语义轨迹数据集示意图;

图3为本发明提供的二维地理空间网格划分示意图;

图4(a)为本发明提供的四叉树示意图;

图4(b)为本发明提供的非叶子结点的索引条目示意图;

图4(c)为本发明提供的叶子结点的索引条目示意图;

图5为本发明提供的混合倒排文件示意图;

图6为本发明提供的启发式搜索框架图;

图7为本发明提供的主堆与副堆的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。

本发明在大规模语义轨迹数据中提出并解决了一个新颖的语义轨迹查询,深入研究了语义轨迹数据的索引结构、查询处理算法以及查询优化技术。具体来说,本发明在语义轨迹数据中提出活动影响力的概念,并据此定义了一个基于活动影响力的语义轨迹查询模型(Activity Influence based Trajectory Query,AITQ)。为了实现该查询的高效处理,本发明设计了一个同时整合语义轨迹空间位置、活动关键词以及活动影响力多种信息的混合网格索引结构,并基于该索引设计并实现了一个启发式搜索框架,该框架可以优先搜索具有更大活动影响力的轨迹。在启发式搜索过程中,本发明引入提前终止条件以加速查询处理过程。

首先给出如表1所示的本发明所采用的符号和意义。

表1 本发明的符号和意义

下面给出一些基本定义:

定义1:语义轨迹.包含n个POI(Point Of Interest,兴趣点)位置的语义轨迹T被定义为T={p1,p2,…,pn},其中pi=(poi,act,t),poi表示可以被语义标注的任意二维空间位置,act表示由一些关键词组成的描述用户行为活动的文本记录,t则代表时间戳。

定义2:子轨迹.给定一个由n个轨迹点构成的语义轨迹T=(p1,p2,…,pn),将由连续的轨迹点(ps,ps+1,…,pe)构成的点序列称为轨迹T的子轨迹,其中1≤s≤e≤n,记作T[s,e]。用W[s,e]表示子轨迹T[s,e]上包含的所有活动关键词,即

定义3:查询.给定一个用户指定的查询Q=(loc,acts,dmax),其中loc表示由经度纬度坐标表示的查询位置;acts是一个活动关键词集,用于描述用户打算进行的一系列活动;dmax是用户从查询位置起进行所有活动的预期最大旅行路程。

定义4:查询与子轨迹间距离.给定查询Q=(loc,acts,dmax),语义轨迹T的一个子轨迹T[s,e],将查询Q与子轨迹T[s,e]的距离记为d(T[s,e],Q),且

其中,dist表示两个位置的欧氏距离。

定义5:查询与子轨迹匹配.给定一个语义轨迹T,给定查询Q=(loc,acts,dmax),如果轨迹T中的一个子轨迹T[s,e]满足:(1)(2)d(T[s,e],Q)≤dmax,则称子轨迹T[s,e]与查询Q匹配。

定义6:候选轨迹.给定查询Q,如果语义轨迹数据集D中的一条轨迹T存在至少一个子轨迹T[s,e]与查询Q匹配,就将轨迹T称为查询Q的一个候选轨迹。

在图2中,当前用户提交的查询活动为{w1,w2,w4},旅行最大路程为d。轨迹T1中不包含活动w4,因此T1中不存在与查询匹配的子轨迹,故T1不是该查询的候选轨迹。在T2中只存在子轨迹T2[1,5]满足查询的活动要求,从图中可以看出该子轨迹与Q之间距离d(T2[1,5],Q)很大,假设d(T2[1,5],Q)>d,那么T2也不是候选轨迹。在轨迹T3中,认为子轨迹T3[3,4]与Q匹配,因为T3[3,4]上的活动集W[s,e]={w1,w2,w3,w4}包含查询活动集{w1,w2,w4},并且认为T3[3,4]与Q的距离较小,满足旅程限制(即d(T3[3,4],Q)<d),因此T3是Q的候选轨迹。

定义7:活动影响力.给定语义轨迹数据集D,集合表示D中的所有POI,集合表示D中的所有活动关键词。假设某项活动由关键词表示,定义活动w在处的影响力为在该poi处包含活动关键词w的语义轨迹数量,即:

定义8:候选轨迹的活动影响力.给定查询Q=(loc,acts,dmax)及其一个候选轨迹T,若子轨迹T[s,e]与查询Q匹配,将查询Q下的子轨迹活动影响力定义为:

其中,Infmax(w)表示活动w在所有poi的最大影响力,即 由于在查询Q中的各活动影响力可能存在较大差异,造成子轨迹活动影响力高度依赖某些活动,使用Infmax(w)获得相对活动影响力,无差别地聚合所有查询活动的影响力,并将子轨迹的活动影响力归一化到[0,1]。在T中可能存在多个子轨迹与查询Q匹配,将在查询Q下候选轨迹T的活动影响力定义为:

Inf(T,Q)=max1≤s≤e≤n且T[s,e]与Q匹配(Inf(T[s,e],Q)) (4)

参考图2,在图2中只存在给定查询Q的一个候选轨迹T3,在T3的所有子轨迹中只存在子轨迹T3[3,4]与Q匹配。在这三条轨迹组成的数据集中,关键词w1、w2、w4最大活动影响力分别为:Infmax(w1)=1,Infmax(w2)=2,Infmax(w4)=1。

根据定义7,计算出Inf(T3,Q)=Inf(T3[3,4],Q)=(1/1+1/2+1/1)/3=0.833,即候选轨迹T3在查询Q下的活动影响力大小为0.833。

定义9:基于活动影响力的语义轨迹查询.给定查询Q=(loc,acts,dmax)、语义轨迹数据集D,输入一个正整数k。假设集合C包含数据集D中查询Q的全部候选轨迹,则一个基于活动影响力的语义轨迹查询(Activity Influence based Trajectory Query,AITQ)会从候选集C中返回一个结果集RS满足:(1)且|RS|=k;(2)对都有Inf(Q,T)≥Inf(Q,T′)。

具体的,如图1所示,一种基于活动影响力的语义轨迹查询方法,包括以下步骤:

S1:获取语义轨迹数据集D的基本信息,其中,所述基本信息包括语义轨迹数据集D中每条语义轨迹T的轨迹编号、每条语义轨迹T上各个轨迹点p对应的关键词的活动影响力,且每个轨迹点至少对应一个关键词,各轨迹点对应的关键词不完全相同,同一个关键词在不同轨迹点处的活动影响力不完全相同。

需要说明的是,关键词在任意一个轨迹点上的活动影响力为该关键词在当前轨迹点上的出现次数。

S2:基于语义轨迹数据集D的基本信息构建混合网格索引HGI,其中,所述混合网格索引HGI由混合四叉树索引HQ-tree(Hybrid Quad-tree,HQ-tree)与混合倒排索引HIF(Hybrid Inverted File,HIF)组成。

需要说明的是,HGI索引以轨迹作为索引对象,同时将空间、活动关键词以及活动影响力整合到索引结构中。混合四叉树索引HQ-tree驻留在内存中,混合倒排索引HIF存储在磁盘上。

S3:对于用户给定的查询需求Q=(loc,acts,dmax),基于混合网格索引HGI在语义轨迹数据集D中找出与查询需求Q最匹配的k条语义轨迹,其中,loc为用户设定的查询位置,acts为用户设定的关键词集,dmax为用户设定的预期旅程最大值,k至少为3。

下面详细陈述混合网格索引HGI的构建方法。

第一方面,混合四叉树索引HQ-tree的构建方法如下:

S21:将语义轨迹数据集D所在的真实地理区域分别划分为d个层级的网格,其中,每个层级包括2d-1×2d-1个网格,且d至少为3,每个网格均对应一个网格编号。

也就是说,HQ-tree通过空间网格划分的方式组织语义轨迹信息,递归地将整个二维空间划分为四个相等的子空间,依次形成1-Grid,2-Grid,……,(d-1)-Grid,d-Grid的层次结构,直到最后一层形成2d-1×2d-1个最小的网格,然后使用Quad-tree索引所有网格,并将轨迹信息、活动关键词、活动影响力嵌入到Quad-tree索引中,形成HQ-tree索引。同时,HQ-tree索引中的每个结点都代表一个网格区域对应的MBR,每个结点都与一个活动关键词倒排索引相关联。

参见图2,为语义轨迹数据集D所在的真实地理区域示意图,该区域中有3条语义轨迹T1~T3表示轨迹T1上4个轨迹点,表示轨迹T2上4个轨迹点,表示轨迹T1上5个轨迹点,w1~w6则表示语义轨迹T1~T3上的轨迹点对应的关键词。

参见图3,为网格划分示意图。整个二维空间被划分为3-Grid,所有的网格都有一个网格编号Gid,1-Grid由网格0表示,网格0被分割成四个网格(网格1-4)构成2-Grid,网格5-20构成了3-Grid。

S22:分别判断各层级的各个网格中是否存在轨迹点,剔除不包含轨迹点的网格,将剩余网格按照网格的层级包含关系构建四叉树,其中,不存在孩子结点的结点为叶子结点,其余结点为非叶子结点;

S23:分别为四叉树的各结点关联索引条目和位图信息,具体如下:

对于任意一个非叶子结点g0,其关联的索引条目为三元组(Gid0,{g′∈g.subgrids},ifile),其中,Gid0表示非叶子结点g0对应的网格的编号,{g′∈g.subgrids}表示非叶子结点g的所有孩子结点的指针列表,ifile表示非叶子结点g0对应的网格中存在的所有轨迹点对应的关键词的第一倒排索引,且第一倒排索引包括如下信息:各关键词在非叶子结点g0对应的网格中的活动影响力、出现各关键词的非叶子结点g0的孩子结点对应的网格编号。

需要说明的是,第一倒排索引由两个哈希表实现,关键词是哈希表中的key。第一个哈希表的value记录当前key(假设为w)在g中的最大影响力其中Infmax(w)表示w在所有poi中的最大影响力;第二个哈希表的value是一个指针列表,记录包含该活动的孩子结点。

同时,关键词在任意一个结点对应的网格中的活动影响力的计算方法为:获取关键词在当前结点对应的网格中所有轨迹点处的活动影响力,将其中的最大值作为关键词在当前结点对应的网格中的活动影响力。

对于任意一个叶子结点g1,其关联的索引条目为二元组(Gid1,ilist),其中,Gid1表示叶子结点g1对应的网格的编号,ilist表示叶子结点g1对应的网格中存在的所有轨迹点对应的关键词的第二倒排索引,且第二倒排索引包括如下信息:各关键词在叶子结点g1对应的网格中的活动影响力、出现各关键词的语义轨迹的编号。

需要说明的是,与非叶子结点的ifile不同之处在于,ilist指向的倒排列表第二个哈希表的value存放的是当前结点MBR范围内包含关键词key的轨迹id,能够通过轨迹id从磁盘上快速获取该轨迹。ifile和ilist均使用哈希表实现,能够以O(1)的时间访问每个结点的倒排索引。

对于四叉树的任意一个结点,其位图信息为由0和1组成的数据序列,且数据序列上的每一个数据位对应一条语义轨迹,其中,0表示该数据位对应的语义轨迹不经过当前结点对应的网格,1表示该数据位对应的语义轨迹经过当前结点对应的网格。

也就是说,本发明每个结点node维护一个位图SIG,这个位图标记了所有经过结点node的轨迹。具体来说,使用一个哈希函数将每个轨迹的id映射到SIG中的一位,如果轨迹T中存在轨迹点在node代表的网格内,使用的哈希函数将T的id映射为i,即hash(T)=i,则把node中SIG的第i位设为1(初始为0)。

例如,图4(a)为使用HQ-tree索引图3中的网格后得到的索引结构。网格7不包含任何轨迹的轨迹点,在索引结构中该结点被设置为null,在图4(a)中所有null结点均没有被表示出来。图4(b)表示非叶子结点2的结构,其有结点9和结点11两个孩子,在图中还展示了用于索引结点2内活动w1和w2的倒排列表的结构。图4(c)表示叶子结点11的具体结构,其是结点2的一个孩子结点。在整个网格中一共有三条轨迹,设置位图长度为3,如果hash(T1)=1且hash(T2)=2,经过结点2和结点11的轨迹只有T1、T2,因此结点2和结点11的位图SIG均为110。

总体来说,HQ-tree索引轨迹数据集的离线构建方法可以总结为如下步骤2-1-1到步骤2-1-3:

步骤2-1-1:对数据集构成的二维空间进行网格划分,划分结束后使用Quad-tree组织所有层次的网格。

步骤2-1-2:通过插入操作依次处理数据集中每条轨迹的每个轨迹点,自顶向下不断更新中间结点的ifile和SIG,直到轨迹点到达叶子结点,更新叶子结点的ilist和SIG之后返回。

步骤2-1-3:处理完所有轨迹之后,所有结点都被更新,将不包含任何轨迹点的叶子结点设为null,然后通过自底向上的方式对所有孩子结点都为null的中间结点进行同样的处理,直到根结点被返回。最后,根结点的倒排文件会包含所有活动关键词以及其对应的最大活动影响力,根结点位图SIG中每一位都被置1。

第二方面,混合倒排索引HIF由语义轨迹数据集D中的各条语义轨迹对应的活动列表、活动倒排列表以及子轨迹长度列表构成,其中,活动列表用于存储语义轨迹上所有轨迹点对应的关键词,活动倒排列表用于存储各关键词与出现各关键词的轨迹点之间的关联关系,子轨迹长度列表用于存储语义轨迹上各轨迹点到起始轨迹点的长度。

需要说明的是,HIF索引中第一个列表包含T中的所有活动并按照升序排列,用于快速过滤掉不满足查询活动要求的轨迹;第二个列表存储T中每个轨迹点的活动倒排索引,可以利用此列表过滤不需要处理的轨迹点;第三个列表存放轨迹T中以p1为起点的所有子轨迹的长度,即len(T[1,e]),可以通过此列表中的子轨迹长度快速得到目标子轨迹的长度。

参考图5,图5磁盘上两条轨迹的混合倒排文件示意图。若当前匹配的子轨迹为T[3,5],则len(T[3,5])=len(T[1,5])-len(T[1,3])。当轨迹数据集较小时,可以将活动列表提前加载到内存中用于快速过滤,其他列表在获取到需要进一步验证的轨迹时才从磁盘上加载。

下面详细陈述当用户在线提交AITQ查询Q时,如何基于混合网格索引HGI进行启发式搜索。在处理AITQ查询时,本发明基于HGI索引设计了一个启发式的查询框架,该框架启发式地遍历HQ-tree,从中优先获取具有更大活动影响力的待验证轨迹,在轨迹验证阶段借助HIF索引快速计算轨迹的实际活动影响力值,在遍历过程中依据提前终止策略可以提前终止处理过程。

具体的,参考图6,图6为启发式搜索框架示意图。给定轨迹数据集D,查询Q=(loc,acts,dmax),正整数k,HQ-tree和HIF。先初始化结果集RS、待验证集VS,初始化位图BM记录已搜索到的轨迹;在遍历HQ-tree结点的过程中,使用一个大顶堆Heap按照结点的F(node,Q)值对每个需要进一步访问的结点进行排序,堆顶结点的F(node,Q)值最大,将HQ-tree的根结点入堆。

进一步地,步骤S3中基于混合网格索引HGI在语义轨迹数据集D中找出与查询需求Q最匹配的k条语义轨迹具体包括以下步骤:

S31:设定一个堆集合,自顶向下遍历混合四叉树索引HQ-tree,首先将根结点放入堆集合中,并获取根结点的孩子结点,然后将根结点剔出堆集合,将根结点的符合设定剪枝规则的孩子结点加入堆集合中。

所述设定剪枝规则为:孩子结点对应的网格中至少存在一个轨迹点与用户设定的查询位置loc之间的距离不大于dmax;孩子结点的活动影响力不为0;经过孩子结点对应的网格的所有语义轨迹中,至少有一条未被访问过。

需要说明的是,对于剪枝规则1来说,若d(Q,node)>dmax,则说明node里不存在轨迹点满足距离约束,node里的所有轨迹可以被安全地剪枝;对于剪枝规则2来说,若通过公式(1)计算出的Inf(node,Q)为0,则表明node里不存在任何Q.acts里的活动关键词,则对node剪枝;对于剪枝规则3来说,若经过node的所有轨迹都已经在之前被访问过,则对node剪枝。通过SigCheck(node,BM)函数检查node里是否存在未访问轨迹。具体而言,如果执行按位操作node.SIG&BM^node.SIG后的结果中存在有1的位,则说明node中存在未访问轨迹,SigCheck返回false;否则,SigCheck返回true,则可以对node剪枝。例如,node.SIG=[1,1,0,1,0]、BM=[1,0,1,0,1]时,显然node中存在轨迹还未访问,即映射到SIG的第2、4位置的轨迹,此时SIG&BM^SIG=[0,1,0,1,0],显然需要访问node结点。

需要说明的是,本发明通过HQ-tree索引中的位图信息快速判断出经过孩子结点对应的网格的语义轨迹。

S32:找出当前堆集合中活动影响力最大的结点,然后将该结点剔出堆集合,并将该结点的符合设定剪枝规则的孩子结点加入堆集合中,再重复本步骤,直到遍历到叶子结点。

也就是说,当堆集合Heap非空时,弹出堆顶结点node,如果该结点是叶子结点,则得到一些待验证轨迹,如果该结点是非叶子结点,则获取其孩子结点,将通过3个剪枝规则的孩子结点入堆。

进一步地,任意一个结点的活动影响力的计算方法为:在该结点对应的所有关键词中,找出属于用户设定的关键词acts的关键词;将找出的关键词在该结点中的活动影响力最大值进行求和,所得和值再除以词集acts中的关键词总数,得到该结点的活动影响力。

需要说明的是,每个关键词在结点对应的网格中可能在多个轨迹点上都出现了,然而每个关键词在不同轨迹点上的活动影响力(即出现次数)不一定是相同的,因此,关键词在哪个轨迹点上的活动影响力最大,就将该活动影响力作为该关键词在当前结点中的活动影响力最大值。

进一步地,任意一个结点的活动影响力的计算公式表示如下:

活动关键词w在结点node中的最大影响力可以从node的倒排索引中获得。然后依次得到Q.acts中每个活动关键词w在node中的最大影响力就能通过公式(1)计算出Inf(node,Q)。为了在进行启发式遍历时同时考虑结点node与查询Q空间上的邻近性以及它们之间的活动影响力,使用一个常数c将node与Q之间的空间距离和活动影响力进行整合,得到下面这个函数F(node,Q):

其中,d(Q,node)表示node的MBR与Q.loc之间的最小距离(Q.loc在node内,二者距离视为0),并使用dmax进行归一化。c∈[0,1]用于控制空间邻近性的影响,默认c=0.2。在HQ-tree结点遍历过程中,启发式地优先访问F函数值更大的结点。

S33:根据遍历得到的叶子结点关联的索引条目,获取该叶子结点中出现了用户设定的关键词acts的语义轨迹,并将得到的语义轨迹作为待验证轨迹;获取各待验证轨迹的活动影响力,将活动影响力最大的前k条作为备选轨迹。

需要说明的是,对当前得到的所有待验证轨迹,先在位图BM中标记其为已搜索到轨迹,并用HIF索引筛选出还未验证过的所有轨迹,然后开始执行S331~S334的验证,即计算各待验证轨迹的活动影响力,选出前k条。其中,若某条待验证轨迹的活动列表中不包含Q.acts中的所有活动关键词,则直接跳过该条待验证轨迹,不进行活动影响力的计算。

进一步地,各待验证轨迹的活动影响力的计算方法如下:

S331:初始化窗口端点s和e,并将窗口每次提取出的子轨迹记为T[s,e];

S332:左端点s固定为第一个轨迹点不变,右端点e从第一个轨迹点开始,沿着待验证轨迹的方向增大,每增大一次右端点,则截取一段子轨迹T[s,e],判断当前截取的子轨迹T[s,e]与用户设定的查询位置loc之间的距离是否大于dmax,若大于,则保持右端点e当前位置不变,增大左端点s,直到重新获取的子轨迹T[s,e]与用户设定的查询位置loc之间的距离不大于dmax,再按照公式(7)计算子轨迹T[s,e]的活动影响力;若不大于,则直接按照公式(7)计算子轨迹T[s,e]的活动影响力;

其中,Inf(T[s,e],Q)表示子轨迹T[s,e]的活动影响力,|Q.acts|表示词集acts中的关键词总数,Infp.poi(w)表示在子轨迹T[s,e]中出现且属于词集acts的关键词的活动影响力,Infmax(w)表示属于词集acts的关键词在所有轨迹点处的活动影响力的最大值,Q.acts为用户设定的关键词集,w为属于Q.acts的关键词,p为子轨迹T[s,e]中出现的轨迹点;

同时,步骤S332中子轨迹T[s,e]与用户设定的查询位置loc之间的距离的计算公式为:

其中,d(T[s,e],Q)为子轨迹T[s,e]与用户设定的查询位置loc之间的距离,dist(Q.loc,ps)为用户设定的查询位置loc与左端点s之间的欧氏距离,dist(pi,pi+1)为子轨迹T[s,e]中除右端点e以外的任意两个相邻轨迹点pi与pi+1之间的欧氏距离。

S333:保持左端点s的当前位置不变,右端点e沿着待验证轨迹的方向继续增大,继续对截取的子轨迹进行条件判断,并得到符合条件的子轨迹的活动影响力,以此类推,直到右端点e到达最后一个轨迹点;

S334:将得到的所有子轨迹的活动影响力的最大值作为当前待验证轨迹的活动影响力;

S34:将步骤S33中的叶子结点剔出堆集合,将当前堆集合重复步骤S32~S33,直到提前终止条件被满足或者遍历完所有结点,最终得到的k条备选轨迹为与用户给定的查询需求Q=(loc,acts,dmax)最为匹配的语义轨迹。

需要说明的是,每执行一次步骤S32~S33,均会得到k条备选轨迹。启发式搜索过程结束后,返回在查询Q下活动影响力最大的top-k轨迹,查询处理方法结束。

进一步地,所述提前终止条件为:第一和值小于当前计算得到的k条备选轨迹中轨迹活动影响力的最小值,其中,所述第一和值的计算方法如下:

分别将用户设定的每一个关键词acts作为当前关键词执行以下操作:找出当前关键词在当前堆集合所有结点对应的所有轨迹点处的活动影响力最大值,并将该活动影响力最大值作为当前关键词对应的最大影响力;

将用户设定的所有关键词acts对应的最大影响力进行求和,所得和值再除以词集acts中的关键词总数,得到第一和值。

也就是说,本发明为了能在堆Heap为空之前尽可能早结束结点的遍历,试图找到堆内结点中所有轨迹的活动影响力上界Infub(Heap,Q),搜索过程维护结果集RS中第k大的活动影响力Infk,如果发现Infk≥Infub(Heap,Q),便可以提前结束搜索过程。

定义10:HQ-tree结点的活动影响力.给定查询Q=(loc,acts,dmax)和HQ-tree中的一个结点node,定义在查询Q下Heap的活动影响力为:

其中,表示Heap中活动w的最大影响力。为node结点内活动w的最大影响力,可以从结点的倒排索引获得。

定理1:Inf(Heap,Q)是所有还未验证轨迹的活动影响力的上界,即对于任意一个还未验证的轨迹T都有:Inf(T,Q)≤Inf(Heap,Q)。

证明:假设轨迹T是一条还未验证的轨迹,T肯定会经过Heap中至少一个结点,对任意w∈Q.acts,T中可能匹配w的轨迹点一定在Heap中某个结点内,因此InfT(w)≤Infw(Heap,Q),根据定义7和定义10有Inf(T,Q)≤Inf(Heap,Q)。定理1证明完毕。

为了在遍历HQ-tree结点的过程中有效地更新Inf(Heap,Q),为每个w∈Q.acts都维护一个最大堆Heapw,每个堆中的结点按值排序。这些堆的堆内结点都与主堆Heap中的结点完全相同,但是结点顺序不同。为了能够从这些堆中立刻找到Heap中某个结点,将这些堆中的结点与Heap中相同的结点链接起来。每当一个结点node从Heap中弹出时,同时将与node链接的结点从所有Heapw中弹出;在将孩子结点加入Heap时,同样需要将该孩子结点加入每个Heapw。对任意w∈Q.acts,Heapw的堆顶结点的即为活动w在主堆Heap中的最大影响力Infw(Heap,Q)。在遍历结点的任意阶段,可以通过每个Heapw的堆顶结点得到对应的Infw(Heap,Q),通过公式(9)计算出堆Heap的活动影响力Inf(Heap,Q),当发现结果集中第k大的活动影响力Infk≥Inf(Heap,Q)时,搜索过程便可结束。

参考图7,图7为主堆与副堆的结构示意图,除堆Heap外还存在两个堆这三个堆中都有相同的结点N1-N5,各堆中结点的顺序存在差异,两个副堆中的结点都与主堆中的相同结点链接。在中堆顶结点N4即为Heap中活动w1的最大影响力,故通过即可得到未验证轨迹活动影响力上界Inf(Heap,Q)。

也就是说,中间的主堆Heap是按照结点的总活动影响力从大到小进行排序,左堆是按照关键词w1的活动影响力从大到小对结点进行排序,右堆对按照关键词w2的活动影响力从大到小对结点进行排序,假设w1和w2是用户给定的关键词,则把结点N4中关键词w1的活动影响力和结点N3中关键词w2的活动影响力相加,则得到剩余还未搜索的所有结点的最大活动影响力;如果该最大活动影响力比当前算出来的前k个备选轨迹的活动影响力的最小值还要小,则提前结束迭代。

综上所述,本发明针对基于活动影响力的语义轨迹查询设计了新颖的索引结构,该结构同时融合了地理位置信息、活动关键词信息以及活动影响力信息,比现有的索引技术具有更强的剪枝能力。此外,本发明提出的索引结构设计的查询处理框架和优化机制,能够高效处理基于活动影响力的语义轨迹查询,而现有的技术达不到这样的处理效率。

当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当然可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

完整详细技术资料下载
上一篇:石墨接头机器人自动装卡簧、装栓机
下一篇:一种基于TextCNN的学生线上学习行为检测方法及系统

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!