CN111414527B - 相似项目的查询方法、装置及存储介质 - Google Patents
相似项目的查询方法、装置及存储介质 Download PDFInfo
- Publication number
- CN111414527B CN111414527B CN202010182774.6A CN202010182774A CN111414527B CN 111414527 B CN111414527 B CN 111414527B CN 202010182774 A CN202010182774 A CN 202010182774A CN 111414527 B CN111414527 B CN 111414527B
- Authority
- CN
- China
- Prior art keywords
- algorithm model
- item
- query
- bytes
- index
- 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.)
- Active
Links
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/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
- G06Q30/0601—Electronic shopping [e-shopping]
- G06Q30/0631—Item recommendations
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种相似项目的查询方法、装置及存储介质。该方案通过接收业务模块对目标项目的相似项目查询指令,相似项目查询指令包括目标项目的标识,向内存中加载预先生成的算法模型文件,其中算法模型文件中包括查询算法模型数据、项目的索引与项目的标识之间的映射关系,查询算法模型数据用于表示查询算法模型,解析算法模型文件,以得到查询算法模型以及各个映射关系,根据映射关系,得到与目标项目的标识对应的索引,使用目标项目的索引调用查询算法模型,以得到与目标项目相似的相似项目的索引,根据映射关系,得到与相似项目的索引对应的标识,向业务模块返回相似项目的标识。本申请实可以提升近邻查询的效率以及准确性。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种相似项目的查询方法、装置及存储介质。
背景技术
目前,个性化推荐成了互联网产品的标配,推荐***也就应运而生。推荐***中的核心是从海量的商品库挑选合适商品最终展示给用户,由于商品库数量巨大,推荐***的架构常常由大部分由三部分组成:召回、排序、重排。其中召回层中利用向量来查询相似物品的索引服务成为召回算法中重要的一路召回方式。
我们利用最近邻算法作近邻查询时,原有的最近邻算法使用时,需要业务自身去维护索引到Item ID的映射关系,尤其是线上存储多个最近邻算法模型时,容易造成多个最近邻算法模型版本之间映射关系的混乱,造成查询结果错误,并且查询反馈效率较低。
发明内容
本发明实施例提供一种相似项目的查询方法、装置及存储介质,旨在提升近邻查询的查询效率以及准确性。
本发明实施例提供一种相似项目的查询方法,包括:
接收业务模块对目标项目的相似项目查询指令,所述相似项目查询指令包括所述目标项目的标识;
向内存中加载预先生成的算法模型文件,其中所述算法模型文件中包括查询算法模型数据、项目的索引与项目的标识之间的映射关系,所述查询算法模型数据用于表示查询算法模型;
解析所述算法模型文件,以得到查询算法模型以及各个所述映射关系;
根据所述映射关系,得到与所述目标项目的标识对应的索引;
使用所述目标项目的索引调用所述查询算法模型,以得到与所述目标项目相似的相似项目的索引;
根据所述映射关系,得到与所述相似项目的索引对应的标识;
向所述业务模块返回所述相似项目的标识。
本发明实施例还提供一种相似项目的查询装置,包括:
接收单元,用于接收业务模块对目标项目的相似项目查询指令,所述相似项目查询指令包括所述目标项目的标识;
加载单元,用于向内存中加载预先生成的算法模型文件,其中所述算法模型文件中包括查询算法模型数据、项目的索引与项目的标识之间的映射关系,所述查询算法模型数据用于表示查询算法模型;
解析单元,用于解析所述算法模型文件,以得到查询算法模型以及各个所述映射关系;
调用单元,用于根据所述映射关系,得到与所述目标项目的标识对应的索引,使用所述目标项目的索引调用所述查询算法模型,以得到与所述目标项目相似的相似项目的索引;
返回单元,用于根据所述映射关系,得到与所述相似项目的索引对应的标识,向所述业务模块返回所述相似项目的标识。
本发明实施例还提供一种存储介质,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本发明实施例所提供的任一相似项目的查询方法。
本发明实施例提供的近似最近邻算法的优化方案,通过接收业务模块对目标项目的相似项目查询指令,相似项目查询指令包括目标项目的标识,向内存中加载预先生成的算法模型文件,其中算法模型文件中包括查询算法模型数据、项目的索引与项目的标识之间的映射关系,查询算法模型数据用于表示查询算法模型,解析算法模型文件,以得到查询算法模型以及各个映射关系,根据映射关系,得到与目标项目的标识对应的索引,使用目标项目的索引调用查询算法模型,以得到与目标项目相似的相似项目的索引,根据映射关系,得到与相似项目的索引对应的标识,向业务模块返回相似项目的标识。本申请实施例所提供的方案可以在训练近似最近邻算法模型时,将索引到项目标识的映射数据保存到最后的模型中,并且返回的相似结果直接为项目标识,不再用进行映射,从而提升近邻查询的查询效率以及准确性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本发明实施例提供的相似项目的查询方法的第一流程示意图;
图1b是本发明实施例提供的相似项目的查询方法的第二流程示意图;
图2是本发明实施例提供的算法模型文件存储格式示意图;
图3a是本发明实施例提供的相似项目的查询装置的第一种结构示意图;
图3b是本发明实施例提供的相似项目的查询装置的第二种结构示意图;
图4是本发明实施例提供的服务器的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本发明实施例提供一种相似项目的查询方法,该相似项目的查询方法的执行主体可以是本发明实施例提供的相似项目的查询装置,或者集成了该相似项目的查询装置的服务器,其中该相似项目的查询装置可以采用硬件或者软件的方式实现。
目前,在使用近似最近邻算法模型(以下简称算法模型或查询算法模型)进行近邻查询时,以Annoy算法为例,该查询算法模型的输入为待查询项目的索引,因此业务模块为Annoy模型维护一套索引到项目标识的映射转换,业务模块得到待查询项目的项目标识后,需要将项目标识转换为待查询项目的索引。查询算法模型查询到与待查询项目相似的项目后,输出相似项目的索引给业务模块,业务模块通过映射关系将索引映射为最终的项目标识。
因此,算法查询模块原有的Annoy保存的模型文件为只保存和索引树相关的二进制文件。Annoy最近邻近似查询返回的结果都是整数型的索引,查询模块将索引交给业务模块,需要业务方自己把整数型的索引转换为业务侧的ID。
比如一个具体的查询示例为,有5个物品项目标识分别为a,b,c,d,e,业务模块预先建立并保存项目标识a,b,c,d,e与索引Index0,1,2,3,4之间的映射关系。然后,调用方要查询a的相似物品,那么需要进行以下的步骤:
1、查询模块找到a对应的Index:也就是0。
2、查询模块调用Annoy算法的get_nns_by_id方法,把0作为参数,Annoy算法会返回相似物品的Index,假如b,e与a相似,那么方法返回的列表为1,4。
3、查询模块把返回的1,4交给业务模块,业务模块从自己存储的映射关系中查询对应的Item的ID为b,e。
4、最后再返回给调用方。
这样的话,集成到线上服务时,生成多个版本的模型时,每个版本需要维护的数据包括三项:Item的向量存储、Annoy模型本身以及Index到Item ID的映射。其中,Index表示物品在Annoy算法中的索引,(该索引为整形,必须从1开始的连续数字),Item ID即为项目标识。每个版本维护的数据越多,线上越可能出现问题,尤其是多个版本中Annoy的查询结果和Index到Item ID的映射关系错误时,返回近似相似结果完全是错误的。因此,本申请实施例提供了一种相似项目的查询方法,避免先查询结果,再映射结果的步骤。
如图1a所示,图1a是本发明实施例提供的相似项目的查询方法的第一流程示意图,该相似项目的查询方法的具体流程可以如下:
101、在近似最近邻算法模型文件中添加索引与项目标识的映射数据,并按照预设存储格式进行存储。
在一实施例中,将Annoy算法作为上述近似最近邻算法进行说明。其中,Annoy的目标是建立一个数据结构,使得查询一个点的最近邻点的时间复杂度是次线性。Annoy通过建立一个二叉树来使得每个点查找时间复杂度是O(log n)。比如,随机选择两个点,以这两个节点为初始中心节点,执行聚类数为2的kmeans过程,最终产生收敛后两个聚类中心点,根据这两个中心点对空间进行划分,然后在划分的子空间内进行不停的递归迭代继续划分,直到每个子空间最多只剩下K个数据节点,通过多次递归迭代划分的话,最终原始数据会形成类似下面这样一个二叉树结构。二叉树底层是叶子节点记录原始数据节点,其他中间节点记录的是分割超平面的信息。Annoy建立这样的二叉树结构是希望满足这样的一个假设:相似的数据节点应该在二叉树上位置更接近,一个分割超平面不应该把相似的数据节点分割二叉树的不同分支上,上述步骤即为建立索引的过程。
在建立索引之后,即可进行查询,该查询的过程也就是不断的看节点在分割的超平面的哪一边的过程,从二叉树结构来看,就是从根节点不停的往叶子节点遍历的过程。通过对二叉树每个中间节点(分割超平面相关信息)和查询数据节点进行相关计算来确定二叉树遍历过程是往这个中间节点左孩子节点走还是右孩子节点走,通过以上方式完成查询过程。
在查询后返回最终近邻节点,具体的,所有树返回近邻点都***到优先队列中,求并集去重,然后计算和查询点距离,最终根据距离值从近距离到远距离排序,返回Top N近邻节点集合。
在一实施例中,可以先对上述近似最近邻算法模型进行训练,然后在训练后的算法模型后追加索引与项目标识的映射数据,然后按照预设存储格式进行存储。
比如在模型文件中,先存储Annoy本身的模型,紧接着存储的是Index到Item的ID的映射,模型文件最后分别表示Item的数量以及Annoy本身的模型的长度。
102、加载添加后的算法模型文件,得到算法模型的长度信息以及项目的数量信息。
在一实施例中,可以先读取添加后的算法模型文件的存储格式,读取最后的n个字节,其中,上述n个字节包括在步骤101当中添加的项目标识的数量信息以及Annoy本身的模型的长度信息,因此读取上述n个字节后即可得到项目标识的数量以及Annoy本身的模型的长度。需要说明的是,由于一个项目具有一个标识,一个标识与一个索引具有映射关系,因此项目的数量也可以认为是映射关系的数量。
具体的,比如上述模型文件最后4个字节表示Annoy模型的长度,倒数第5-8个字节存储Item的数量,也即上述模型文件最后的8个字节表示Annoy模型的长度以及存储Item的数量。因此,在读取添加后的算法模型文件的存储格式时,读取最后8个字节,可以转化为两个整形数字M和N,后4个字节转化为M,代表Annoy模型的长度,倒数第5-8个字节转化为N,代表Item的数量。
103、根据长度信息以及数量信息读取索引与项目标识的映射数据,得到索引与项目标识的映射关系。
在一实施例中,在根据长度信息以及数量信息读取索引与项目标识的映射数据之前,还可以修改Annoy本身的源码,采用预设方法映射模型文件时,指定映射长度为上述字节长度M。也即,在得到所述算法模型的长度信息以及项目的数量信息之后,所述方法还包括:
进一步的,在将上述添加后的算法模型文件偏移M处后,即可开始读取索引与项目标识的映射数据,且根据项目标识的数量多次读取该映射数据,得到多个索引与对应的多个项目标识,并建立映射关系并存储。也即所述根据所述长度信息以及数量信息读取所述索引与项目标识的映射数据的步骤,包括:
根据所述长度信息设置偏移量,以及根据所述数量信息设置读取次数;
根据所述偏移量以及读取次数,读取所述添加后的算法模型文件中的索引与项目标识的映射数据。
进一步的,在得到上述所索引与项目标识的映射关系后,可以存储在HashMap(哈希图)当中,其中,上述HashMap为基于哈希表的Map接口的实现,HashMap的底层实现是用哈希表,而Java中实现哈希表的数据结构是数组+链表,HashMap中将<key,value>看成一个Node类对象(实现的是Map.Entry<K,V>的接口),里面包括hash,key,value,next属性,put(key,value)时,HashMap会根据hash(key.hashCode())的值,确定该node对象所在数组中的位置,如果不同的hash(key)映射到相同的数组位置,就使用尾插法***到链表中。get(key)时,会根据hash(key)确定在数组的位置,该位置上的链表有多个值,使用key.equal(k)确定key所在位置,返回node对象,读取它的value。在本申请实施例中,可以在该HashMap中,Key设置为索引,Value设置为项目标识。
104、调用近似最近邻算法进行相似查找,并根据映射关系将查找结果中的索引转化为对应的项目标识。
在一实施例中,在调用上述近似最近邻算法对项目库中包括的待查询项目进行相似查询时,方法返回的是索引,然后在存储的映射关系中查找上述索引对应的项目标识,即可返回给调用方。比如,上述方法返回的索引为数字1、4,然后根据HashMap中的映射关系将Index转化为ItemID,比如将1转化为b,将4转化为e。
可以理解的是,算法模型在从项目库中查找某个待查找项目的相似项目时,需要使用项目库中每个项目的特征向量进行相似度计算。项目库中项目的特征向量是通过全量方式计算出来的,即需要使用项目库中多个项目的特征分别计算每个项目的特征向量,如果项目库中的项目有所改变如增加、删除或者改变,需要重新计算每个项目的特征向量。需要说明的是,项目的特征向量不同,其在算法模型中的索引也会不同。因此,如果项目库发生变化,需要为该项目库重新构建算法模型,并建立并保存该算法模型所依赖的索引与项目标识的索引关系。现有的相似查询方案至少存在以下缺点:
1、维护数据较多,容易出错。在项目库经常发生变化的应用场景中,需要构建多个版本的算法模型,且需要为每个算法模型单独维护索引与项目标识的映射关系。每个算法模型至少需要维护有两个层级的映射,第一层级为算法模型与映射关系的映射,第二层级为索引与项目标识的映射。
查询效率较低,映射关系存储在外部存储设备中,在实际进行查询时,需要通过读写接口将各个映射关系从外部存储设备读取至内存,增加了读写接口的压力,且查询步骤较多降低了查询效率。该缺点在项目数量较多如百万级别千万级别数量,且时延要求较高的场景中较为明显。
由上所述,本发明实施例提出的相似项目的查询方法可以在近似最近邻算法模型文件中添加索引与项目标识的映射数据,并按照预设存储格式进行存储,加载添加后的算法模型文件,得到算法模型的长度信息以及项目的数量信息,根据长度信息以及数量信息读取索引与项目标识的映射数据,得到所索引与项目标识的映射关系,调用近似最近邻算法进行相似查找,并根据映射关系将查找结果中的索引转化为对应的项目标识。本申请实施例所提供的方案可以在构建近似最近邻算法模型时,将索引到项目标识的映射数据保存到最后的算法模型文件中。在使用算法模型文件进行查询时,将算法模型文件加载到内存中,由于算法模型文件本身包含有索引与项目标识的映射,因此加载算法模型文件即记载了索引与项目标识的映射关系,无需再需要额外从外部存储设备中读取存储有映射关系的文件,不仅减小了读写接口的压力,而且查询服务流程变短从而提升了近邻查询的查询效率。另外只需要改进后的模型算法文件,维护成本减少,提高了数据维护的准确性进而提高了查询准确性。
根据前面实施例所描述的方法,以下将作进一步详细说明。
请参阅图1b,图1b是本发明实施例提供的相似项目的查询方法的第二流程示意图。所述方法包括:
201、在算法模型文件中添加索引与项目标识的映射数据,占用a个字节。
需要说明的是,每个映射数据分别占用a个字节,每个映射数据指的是索引与项目标识的一个映射关系。
202、在算法模型文件中添加项目的数量信息数据,占用b个字节。
203、在算法模型文件中添加算法模型的长度信息数据,占用c个字节。
在一实施例中,可以先对算法模型进行训练,得到训练好的算法模型。生成算法模型文件时,按照预设存储格式,先存储训练好的算法模型的模型数据,在算法模型数据之后依次存储索引与项目标识的映射数据、项目标识的数量以及算法模型数据的长度。需要说明的是,算法模型包括但不仅限于Annoy算法模型。
举例来说,改进后的算法模型文件的存储格式如图2所示,图2为本发明实施例提供的算法模型文件存储格式示意图,其中,Annoy算法模型数据后存储的是Index到Item的ID的映射,每个映射占用36个字节,算法模型文件最后4个字节表示算法模型数据的长度,倒数5-8个字节存储Item的数量。
进一步的,a个字节的索引与项目标识的映射数据可以进一步拆分为d个字节的索引数据以及e个字节的项目标识数据。继续参阅图2,若Index(索引)到Item(项)的ID的映射占用36个字节,则Index用4个字节表示,代表Item在Annoy中的Index,Item_ID本身为String类型,占用32个字节,其中,上述字节长度可以根据实际场景需求来进行修改,本申请对此不做进一步限定。
204、加载算法模型文件,读取算法模型文件的最后b+c个字节的数据。
205、将b+c个字节的数据中最后的c个字节的数据转化为算法模型的长度信息。
206、将b+c个字节的数据中剩余的b个字节的数据转化为项目的数量信息。
在一实施例中,可以先读取具有预设存储格式的算法模型文件,从中读取最后的b+c个字节的数据。举例来说若b=4、c=4,则b+c=8,也即读取最后的8个字节的数据。然后分别转化为两个整形数字M和N,最后4个字节转化为M,代表Annoy算法模型数据的长度,倒数第5-8个字节转化为N,代表Item的数量。
在一实施例中,可以修改Annoy本身的源码,其中,采用预设方法映射模型文件时,指定映射长度为上述字节长度M。
在一实施例中,上述预设方法可以为mmap方法,其中,上述mmap方法是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而***会自动回写到对应的文件磁盘上,即完成了对文件的操作而不必再调用***调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。
207、根据长度信息以及数量信息读取索引与项目标识的映射数据,得到所索引与项目标识的映射关系。
举例来说,从算法模型文件偏移M长度后,即可开始读取Index-Item的映射数据,每次读取36个字节,一共读取N次(Item的数量),每次读取的36个字节中,前4个字节代表Index,后32个字节代码Item的ID。其中,上述item的ID可以为String类型,最大长度为32字节。也即,读取索引与项目标识的映射数据,得到所索引与项目标识的映射关系的步骤,包括:
读取a个字节的数据中的前d个字节的数据,得到索引;
读取a个字节的数据中的后e个字节的数据,得到索引对应的项目标识;
多次读取以建立多个索引与多个项目标识之间的映射关系。
在一实施例中,在得到上述所索引与项目标识的映射关系后,可以存储在HashMap当中,在该HashMap中,Key设置为索引,Value设置为项目标识。在后续需要使用该映射关系时,只需对HashMap进行遍历,即可取出Key和Value。通常使用keyset及entryset来进行遍历,在用keySet(key)取value时候,需要key,比如:
208、调用近似最近邻算法进行相似查找,并根据映射关系将查找结果中的索引转化为对应的项目标识。
在一实施例中,根据算法模型数据的长度信息,从算法模型文件中读取相应长度的数据得到算法模型数据。算法模型数据也即近似最近邻算法,调用近似最近邻算法进行相似查询时,方法返回的是索引,然后在存储的映射关系中查找上述索引对应的项目标识,即可返回给调用方即业务模块。比如,上述方法返回的索引为数字1、4,然后根据HashMap中的映射关系将Index转化为ItemID,比如将1转化为b,将4转化为e。
需要说明的是,上述Annoy算法也可以替换为Faiss算法,虽然Faiss本身可以支持为Index添加映射,但是提供的API也是只能支持到ItemID为64位整形的类型,无法支持到ItemID为字符串类型,使用Faiss时,也可以使用上述方法,将映射关系追加到模型本身后面,然后再标识模型本身的长度用于加载算法使用。
由上所述,本发明实施例提出的相似项目的查询方法可以在近似最近邻算法模型之后添加索引与项目标识的映射数据,占用a个字节,在映射数据之后添加项目的数量信息数据,占用b个字节,在数量信息数据之后添加算法模型的长度信息数据,占用c个字节,加载添加后的算法模型文件,读取算法模型文件的最后b+c个字节的数据,将b+c个字节的数据中最后的c个字节的数据转化为算法模型的长度信息,将b+c个字节的数据中剩余的b个字节的数据转化为项目的数量信息,根据长度信息以及数量信息读取索引与项目标识的映射数据,得到所索引与项目标识的映射关系,调用近似最近邻算法进行相似查找,并根据映射关系将查找结果中的索引转化为对应的项目标识。本申请实施例所提供的方案可以在训练近似最近邻算法模型时,将索引到项目标识的映射数据保存到最后的模型中,返回给业务模块的相似结果直接为项目标识,不再需要业务模块进行映射,并且减少了从外部存储设备读取映射数据的步骤,从而提升近邻查询的查询效率以及准确性。
为了实施以上方法,本发明实施例还提供一种相似项目的查询装置,该相似项目的查询装置具体可以集成在终端设备如手机、平板电脑等设备中。
例如,如图3a所示,是本发明实施例提供的相似项目的查询装置的第一种结构示意图。该相似项目的查询装置可以包括:
接收单元301,用于接收业务模块对目标项目的相似项目查询指令,所述相似项目查询指令包括所述目标项目的标识。
在一实施例中,可以先对上述近似最近邻算法模型进行训练,然后添加单元301在训练后的算法模型后追加索引与项目标识的映射数据,然后按照预设存储格式进行存储。
比如在添加后的算法模型文件的存储格式当中,先存储Annoy本身的模型,紧接着存储的是Index到Item的ID的映射,模型文件本身最后分别表示Item的数量以及Annoy本身的模型的长度。
加载单元302,用于向内存中加载预先生成的算法模型文件,其中所述算法模型文件中包括查询算法模型数据、项目的索引与项目的标识之间的映射关系,所述查询算法模型数据用于表示查询算法模型。
在一实施例中,可以加载单元302先读取添加后的算法模型文件的存储格式,读取最后的n个字节,其中,上述n个字节包括在步骤101当中添加的项目标识的数量信息以及Annoy本身的模型的长度信息,因此读取上述n个字节后即可得到项目标识的数量以及Annoy本身的模型的长度。
解析单元303,用于解析所述算法模型文件,以得到查询算法模型以及各个所述映射关系。
在将上述添加后的算法模型文件偏移后,解析单元303即可开始读取索引与项目标识的映射数据,且根据项目的数量多次读取该映射数据,得到多个索引与对应的多个项目标识,并建立映射关系并存储。
在一实施例中,可以将上述映射关系存储在HashMap当中,其中Key设置为索引,Value设置为项目标识。
调用单元304,用于根据所述映射关系,得到与所述目标项目的标识对应的索引,使用所述目标项目的索引调用所述查询算法模型,以得到与所述目标项目相似的相似项目的索引;
返回单元305,用于根据所述映射关系,得到与所述相似项目的索引对应的标识,向所述业务模块返回所述相似项目的标识。
在一实施例中,在调用上述近似最近邻算法进行相似查询时,方法返回的是索引,然后在存储的映射关系中查找上述索引对应的项目标识,即可返回给调用方。
通过该方案的上线,使得线上的Annoy查询服务流程变短,由于只需要维护Item的向量和改进后的Annoy模型本身,使得维护成本减少,最容易导致错误的Index->Item ID之间的映射不用维护,由模型直接给出最后的Item ID
在一实施例中,请参阅图3b,所述加载单元302可以包括:
第一添加子单元3021,用于向所述算法模型文件中,添加查询算法模型的模型数据;
第二添加子单元3022,用于在所述查询算法模型的模型数据之后添加项目的索引与项目的标识之间的映射关系,其中每个映射关系占用a个字节,在所述映射关系之后添加映射关系的数量,所述数量占用b个字节,在所述数量之后添加所述查询算法模型数据在所述算法模型文件占用的长度,所述长度占用c个字节。
在一实施例中,所述解析单元303可以包括:
第一读取子单元3031,用于读取所述算法模型文件的最后b+c个字节的数据,以分别得到查询算法模型占用的长度以及映射关系的数量;
第二读取子单元3032,用于从所述算法模型文件的起始位置偏移所述长度,循环读取映射关系;其中每次读取的映射关系为a个字节,读取次数为所述映射关系的数量。
在一实施例中,所述a个字节的映射关系包括d个字节的索引以及e个字节的标识;
所述第二读取子单元3032,具体用于针对每次读取的a个字节数据,读取所述a个字节中的前d个字节的数据以得到项目的索引,读取所述a个字节中的后e个字节的数据以得到项目的标识,以及建立所述项目的索引与所述项目的标识之间的映射关系。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
应当说明的是,本发明实施例提供的相似项目的查询装置与上文实施例中的相似项目的查询方法属于同一构思,在相似项目的查询装置上可以运行相似项目的查询方法实施例中提供的任一方法,其具体实现过程详见相似项目的查询方法实施例,此处不再赘述。
本发明实施例提出的相似项目的查询装置,接收业务模块对目标项目的相似项目查询指令,相似项目查询指令包括目标项目的标识,向内存中加载预先生成的算法模型文件,其中算法模型文件中包括查询算法模型数据、项目的索引与项目的标识之间的映射关系,查询算法模型数据用于表示查询算法模型,解析算法模型文件,以得到查询算法模型以及各个映射关系,根据映射关系,得到与目标项目的标识对应的索引,使用目标项目的索引调用查询算法模型,以得到与目标项目相似的相似项目的索引,根据映射关系,得到与相似项目的索引对应的标识,向业务模块返回相似项目的标识。本申请实施例所提供的方案可以在构建近似最近邻算法模型时,将索引到项目标识的映射数据保存到最后的算法模型文件中。在使用算法模型文件进行查询时,将算法模型文件加载到内存中,由于算法模型文件本身包含有索引与项目标识的映射,因此加载算法模型文件即记载了索引与项目标识的映射关系,无需再需要额外从外部存储设备中读取存储有映射关系的文件,不仅减小了读写接口的压力,而且查询服务流程变短从而提升了近邻查询的查询效率。另外只需要改进后的模型算法文件,维护成本减少,提高了数据维护的准确性进而提高了查询准确性。
本发明实施例还提供一种服务器,如图4所示,其示出了本发明实施例所涉及的服务器的结构示意图,具体来讲:
该服务器可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图4中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
其中:
处理器401是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或单元,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监测。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及单元,处理器401通过运行存储在存储器402的软件程序以及单元,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
服务器还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理***与处理器401逻辑相连,从而通过电源管理***实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电***、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该服务器还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,服务器还可以包括显示单元等,在此不再赘述。具体在本实施例中,服务器中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
接收业务模块对目标项目的相似项目查询指令,所述相似项目查询指令包括所述目标项目的标识;
向内存中加载预先生成的算法模型文件,其中所述算法模型文件中包括查询算法模型数据、项目的索引与项目的标识之间的映射关系,所述查询算法模型数据用于表示查询算法模型;
解析所述算法模型文件,以得到查询算法模型以及各个所述映射关系;
根据所述映射关系,得到与所述目标项目的标识对应的索引;
使用所述目标项目的索引调用所述查询算法模型,以得到与所述目标项目相似的相似项目的索引;
根据所述映射关系,得到与所述相似项目的索引对应的标识;
向所述业务模块返回所述相似项目的标识。
在一些实施例中,在生成算法模型文件时,处理器401运行存储在存储器402中的应用程序,还可以实现如下功能:
向所述算法模型文件中,添加查询算法模型的模型数据;
在所述查询算法模型的模型数据之后添加项目的索引与项目的标识之间的映射关系,其中每个映射关系占用a个字节;
在所述映射关系之后添加映射关系的数量,所述数量占用b个字节;
在所述数量之后添加所述查询算法模型数据在所述算法模型文件占用的长度,所述长度占用c个字节。
在一些实施例中,在解析所述算法模型文件,以得到查询算法模型以及各个所述映射关系时,处理器401运行存储在存储器402中的应用程序,还可以实现如下功能:
读取所述算法模型文件的最后b+c个字节的数据,以分别得到查询算法模型占用的长度以及映射关系的数量;
从所述算法模型文件的起始位置偏移所述长度,循环读取映射关系;其中每次读取的映射关系为a个字节,读取次数为所述映射关系的数量。
在一些实施例中,所述a个字节的映射关系包括d个字节的索引以及e个字节的标识,在循环读取映射关系时,处理器401运行存储在存储器402中的应用程序,还可以实现如下功能:
针对每次读取的a个字节数据,读取所述a个字节中的前d个字节的数据以得到项目的索引,读取所述a个字节中的后e个字节的数据以得到项目的标识,以及建立所述项目的索引与所述项目的标识之间的映射关系。
在一些实施例中,内存中的各个所述映射关系存储在哈希图中。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
由上所述,本发明实施例提出的服务器,通过接收业务模块对目标项目的相似项目查询指令,相似项目查询指令包括目标项目的标识,向内存中加载预先生成的算法模型文件,其中算法模型文件中包括查询算法模型数据、项目的索引与项目的标识之间的映射关系,查询算法模型数据用于表示查询算法模型,解析算法模型文件,以得到查询算法模型以及各个映射关系,根据映射关系,得到与目标项目的标识对应的索引,使用目标项目的索引调用查询算法模型,以得到与目标项目相似的相似项目的索引,根据映射关系,得到与相似项目的索引对应的标识,向业务模块返回相似项目的标识。从而可以提升近邻查询的效率以及准确性。
另外,本发明实施例还提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种相似项目的查询方法中。例如,该指令可以执行:
接收业务模块对目标项目的相似项目查询指令,所述相似项目查询指令包括所述目标项目的标识;
向内存中加载预先生成的算法模型文件,其中所述算法模型文件中包括查询算法模型数据、项目的索引与项目的标识之间的映射关系,所述查询算法模型数据用于表示查询算法模型;
解析所述算法模型文件,以得到查询算法模型以及各个所述映射关系;
根据所述映射关系,得到与所述目标项目的标识对应的索引;
使用所述目标项目的索引调用所述查询算法模型,以得到与所述目标项目相似的相似项目的索引;
根据所述映射关系,得到与所述相似项目的索引对应的标识;
向所述业务模块返回所述相似项目的标识。
以上操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的指令,可以执行本发明实施例所提供的任一种相似项目的查询方法,因此,可以实现本发明实施例所提供的任一种相似项目的查询方法所能实现的有益效果,详见前面的实施例,在此不再赘述。以上对本发明实施例所提供的一种相似项目的查询方法、装置及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种相似项目的查询方法,其特征在于,包括:
接收业务模块对目标项目的相似项目查询指令,所述相似项目查询指令包括所述目标项目的标识;
向内存中加载预先生成的算法模型文件,得到查询算法模型的长度信息及项目的数量信息,其中所述算法模型文件中包括查询算法模型数据、项目的索引与项目的标识之间的映射关系,所述查询算法模型数据用于表示查询算法模型;
解析所述算法模型文件,根据所述长度信息设置偏移量及根据所述数量信息设置读取次数,根据所述偏移量及读取次数,多次读取所述映射关系,得到多个索引与对应的多个项目标识之间的映射关系,且根据所述长度信息得到查询算法模型;
根据所述映射关系,得到与所述目标项目的标识对应的索引;
使用所述目标项目的索引调用所述查询算法模型,以得到与所述目标项目相似的相似项目的索引;
根据所述映射关系,得到与所述相似项目的索引对应的标识;
向所述业务模块返回所述相似项目的标识。
2.如权利要求1所述的相似项目的查询方法,其特征在于,所述算法模型文件的生成方式包括:
向所述算法模型文件中,添加查询算法模型的模型数据;
在所述查询算法模型的模型数据之后添加项目的索引与项目的标识之间的映射关系,其中每个映射关系占用a个字节;
在所述映射关系之后添加映射关系的数量,所述数量占用b个字节;
在所述数量之后添加所述查询算法模型数据在所述算法模型文件占用的长度,所述长度占用c个字节。
3.如权利要求2所述的相似项目的查询方法,其特征在于,所述解析所述算法模型文件,以得到查询算法模型以及各个所述映射关系,包括:
读取所述算法模型文件的最后b+c个字节的数据,以分别得到查询算法模型占用的长度以及映射关系的数量;
从所述算法模型文件的起始位置偏移所述长度,循环读取映射关系;其中每次读取的映射关系为a个字节,读取次数为所述映射关系的数量。
4.如权利要求3所述的相似项目的查询方法,其特征在于,所述a个字节的映射关系包括d个字节的索引以及e个字节的标识;所述循环读取映射关系,包括:
针对每次读取的a个字节数据,读取所述a个字节中的前d个字节的数据以得到项目的索引,读取所述a个字节中的后e个字节的数据以得到项目的标识,以及建立所述项目的索引与所述项目的标识之间的映射关系。
5.如权利要求1所述的相似项目的查询方法,其特征在于,内存中的各个所述映射关系存储在哈希图中。
6.一种相似项目的查询装置,其特征在于,包括:
接收单元,用于接收业务模块对目标项目的相似项目查询指令,所述相似项目查询指令包括所述目标项目的标识;
加载单元,用于向内存中加载预先生成的算法模型文件,得到查询算法模型的长度信息及项目的数量信息,其中所述算法模型文件中包括查询算法模型数据、项目的索引与项目的标识之间的映射关系,所述查询算法模型数据用于表示查询算法模型;
解析单元,用于解析所述算法模型文件,根据所述长度信息设置偏移量及根据所述数量信息设置读取次数,根据所述偏移量及读取次数,多次读取所述映射关系,得到多个索引与对应的多个项目标识之间的映射关系,且根据所述长度信息得到查询算法模型;
调用单元,用于根据所述映射关系,得到与所述目标项目的标识对应的索引,使用所述目标项目的索引调用所述查询算法模型,以得到与所述目标项目相似的相似项目的索引;
返回单元,用于根据所述映射关系,得到与所述相似项目的索引对应的标识,向所述业务模块返回所述相似项目的标识。
7.如权利要求6所述的相似项目的查询装置,其特征在于,所述加载单元包括:
第一添加子单元,用于向所述算法模型文件中,添加查询算法模型的模型数据;
第二添加子单元,用于在所述查询算法模型的模型数据之后添加项目的索引与项目的标识之间的映射关系,其中每个映射关系占用a个字节,在所述映射关系之后添加映射关系的数量,所述数量占用b个字节,在所述数量之后添加所述查询算法模型数据在所述算法模型文件占用的长度,所述长度占用c个字节。
8.如权利要求7所述的相似项目的查询装置,其特征在于,所述解析单元包括:
第一读取子单元,用于读取所述算法模型文件的最后b+c个字节的数据,以分别得到查询算法模型占用的长度以及映射关系的数量;
第二读取子单元,用于从所述算法模型文件的起始位置偏移所述长度,循环读取映射关系;其中每次读取的映射关系为a个字节,读取次数为所述映射关系的数量。
9.如权利要求8所述的相似项目的查询装置,其特征在于,所述a个字节的映射关系包括d个字节的索引以及e个字节的标识;
所述第二读取子单元,具体用于针对每次读取的a个字节数据,读取所述a个字节中的前d个字节的数据以得到项目的索引,读取所述a个字节中的后e个字节的数据以得到项目的标识,以及建立所述项目的索引与所述项目的标识之间的映射关系。
10.一种存储介质,其特征在于,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1至5任一项所述的相似项目的查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010182774.6A CN111414527B (zh) | 2020-03-16 | 2020-03-16 | 相似项目的查询方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010182774.6A CN111414527B (zh) | 2020-03-16 | 2020-03-16 | 相似项目的查询方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111414527A CN111414527A (zh) | 2020-07-14 |
CN111414527B true CN111414527B (zh) | 2023-10-10 |
Family
ID=71491235
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010182774.6A Active CN111414527B (zh) | 2020-03-16 | 2020-03-16 | 相似项目的查询方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111414527B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112232195B (zh) * | 2020-10-15 | 2024-02-20 | 北京临近空间飞行器***工程研究所 | 一种手写汉字识别方法、装置及存储介质 |
CN112632331A (zh) * | 2020-12-18 | 2021-04-09 | 上海电气集团股份有限公司 | 一种信息处理方法、***、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622366A (zh) * | 2011-01-28 | 2012-08-01 | 阿里巴巴集团控股有限公司 | 相似图像的识别方法和装置 |
CN106777130A (zh) * | 2016-12-16 | 2017-05-31 | 西安电子科技大学 | 一种索引生成方法、数据检索方法和装置 |
KR20170090128A (ko) * | 2016-01-28 | 2017-08-07 | 한국전자통신연구원 | 하둡 환경에서 맵리듀스 기반 데이터 처리 성능 향상을 위한 인덱스 구축 및 활용방법 |
CN108460148A (zh) * | 2018-03-22 | 2018-08-28 | 腾讯科技(深圳)有限公司 | 一种获取商品附加信息的方法及相关设备 |
CN109710612A (zh) * | 2018-12-25 | 2019-05-03 | 百度在线网络技术(北京)有限公司 | 向量索引的召回方法、装置、电子设备和存储介质 |
CN110413611A (zh) * | 2019-06-24 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 数据存储、查询方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070127824A1 (en) * | 2005-12-07 | 2007-06-07 | Trw Automotive U.S. Llc | Method and apparatus for classifying a vehicle occupant via a non-parametric learning algorithm |
-
2020
- 2020-03-16 CN CN202010182774.6A patent/CN111414527B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622366A (zh) * | 2011-01-28 | 2012-08-01 | 阿里巴巴集团控股有限公司 | 相似图像的识别方法和装置 |
KR20170090128A (ko) * | 2016-01-28 | 2017-08-07 | 한국전자통신연구원 | 하둡 환경에서 맵리듀스 기반 데이터 처리 성능 향상을 위한 인덱스 구축 및 활용방법 |
CN106777130A (zh) * | 2016-12-16 | 2017-05-31 | 西安电子科技大学 | 一种索引生成方法、数据检索方法和装置 |
CN108460148A (zh) * | 2018-03-22 | 2018-08-28 | 腾讯科技(深圳)有限公司 | 一种获取商品附加信息的方法及相关设备 |
CN109710612A (zh) * | 2018-12-25 | 2019-05-03 | 百度在线网络技术(北京)有限公司 | 向量索引的召回方法、装置、电子设备和存储介质 |
CN110413611A (zh) * | 2019-06-24 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 数据存储、查询方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111414527A (zh) | 2020-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11347787B2 (en) | Image retrieval method and apparatus, system, server, and storage medium | |
CN110399104B (zh) | 数据存储方法、数据存储装置、电子设备、存储介质 | |
US20200210399A1 (en) | Signature-based cache optimization for data preparation | |
CN106874348B (zh) | 文件存储和索引方法、装置及读取文件的方法 | |
CN111414527B (zh) | 相似项目的查询方法、装置及存储介质 | |
CN109460406B (zh) | 一种数据处理方法及装置 | |
CN111817722A (zh) | 数据压缩方法、装置及计算机设备 | |
CN110134681A (zh) | 数据存储与查询方法、装置、计算机设备及存储介质 | |
CN115905630A (zh) | 一种图数据库查询方法、装置、设备及存储介质 | |
CN114817651A (zh) | 数据存储方法、数据查询方法、装置和设备 | |
CN112306957A (zh) | 获取索引节点号的方法、装置、计算设备和存储介质 | |
CN112800291B (zh) | 一种相似账户确定方法、装置、电子设备及存储介质 | |
CN114372165A (zh) | 一种跳跃式连接的优化路径查询方法、装置、设备及存储介质 | |
CN112667636B (zh) | 索引建立方法、装置及存储介质 | |
US8321429B2 (en) | Accelerating queries using secondary semantic column enumeration | |
CN111666302A (zh) | 用户排名的查询方法、装置、设备及存储介质 | |
CN111143373A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN114238334A (zh) | 异构数据编码、解码方法和装置、计算机设备和存储介质 | |
CN116010345A (zh) | 一种实现流批一体数据湖的表服务方案的方法、装置及设备 | |
CN113821514A (zh) | 数据拆分方法、装置、电子设备和可读存储介质 | |
CN114048219A (zh) | 图数据库更新方法及装置 | |
US20170031909A1 (en) | Locality-sensitive hashing for algebraic expressions | |
CN115221360A (zh) | 树形结构配置方法和*** | |
CN114490095B (zh) | 请求结果的确定方法和装置、存储介质及电子装置 | |
CN117785889A (zh) | 一种针对图数据库的索引管理方法及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |