一种基于向量表示的相似文本检索方法

文档序号:34592212发布日期:2023-06-28 18:02阅读:19来源:国知局
一种基于向量表示的相似文本检索方法

本发明属于相似文本检索领域,尤其涉及一种基于向量表示的相似文本检索方法。


背景技术:

1、如今人们在日常生活当中会经常使用搜索引擎,比如百度、搜狗等等,而这些搜索引擎原理上都是基于关键字的搜索引擎。所谓的基于关键字的搜索引擎,以简化的elasticsearch为例,elasticsearch使用标记器将文档拆分为多个关键字(即有意义的文本单元),然后这些关键字会被映射到数字序列并用于构建倒排索引。在搜索时,elasticsearch同样会将用户的查询文本拆分为多个关键字,然后查找哪些文档包含用户的查询,并对它们的相关程度进行评分,最后得出排名。elasticsearch在大多数情况下工作得很好,但是,基于关键字的搜索引擎通常会遇到以下问题:如不支持长文本检索,例如论文摘要或博客中的段落查询;对复杂的或具有多重语义的文本查询效果不好以及对不熟悉领域行话的用户或想做探索性搜索的用户不友好。

2、因此本发明希望能有一个关注单词上下文语义的向量表示搜索引擎。

3、在基于向量的搜索引擎中,faiss是目前较成熟的向量近似近邻搜索库,它为稠密向量提供高效相似度搜索和聚类,并支持十亿级别向量的搜索。faiss核心原理就两个,倒排索引ivf和乘积量化pq,这两个方法是faiss实现高速,少内存以及精确检索的主要手段。但是,使用faiss又会面临以下问题:如faiss本身没有将文本转化为向量的功能;对于海量的文本,faiss核心原理中的ivf方法在使用时要求用户自己设置搜索聚类数,而不是机器自动选择最合适的搜索聚类数,这可能会让搜索不够全面,导致错过最优解。

4、因此,上述基于关键字的搜索引擎未关注单词上下文语义和faiss的ivf方法搜索不全面的技术问题是亟需解决的。


技术实现思路

1、针对现有方法的不足,本发明提供一种基于向量表示的相似文本检索方法,具体技术方案如下:

2、一种基于向量表示的相似文本检索方法,该方法包含以下步骤:

3、(1)对篇章级文本进行按句切分,通过断句再拼接的方式将相邻的句子按文本顺序放入一个个segment,使得每一个segment中文本长度不超过510个字符,并在每个segment前添加[cls]标识;最终将整个文本拆分为多个segment,得到一个segment列表;

4、(2)将按句切分后得到的segment列表基于bert编码,利用bert学习得到segment列表中每个segment的向量表示,其中bert模型利用第一位[cls]的表示输出作为segment的向量表示,最终得到segment向量表示列表;

5、(3)利用max-pooling方法在步骤(2)所得到的segment向量表示列表中的所有[cls]向量上,取每个纬度的最大值,整合到一个向量上,pooling后的向量表示代表整个篇章文本的向量表示;

6、(4)利用ball树的思想方法把所有篇章文本向量表示作为数据点划分至一个个超球体当中,组成ball树,所述一个超球体由一个节点来表示,其数据点则指向一个个节点;

7、(5)基于步骤(4)得到的ball树,利用相似向量检索库faiss的乘积量化方法对所有篇章文本向量表示加上ball树所有中心点进行压缩和编码,即对向量表示聚类和量化后构建pq索引;

8、(6)基于步骤(5)得到的索引进行knn检索:

9、(6.1)通过步骤(1)-(3)的方法将拿到的查询文本转化为查询文本向量表示;

10、(6.2)利用乘积量化中相同的方法把128维向量表示分成4段32维向量表示,然后计算每一段向量与之前预训练好的簇心表中簇心的距离,得到一张1024*4的距离矩阵表,该表表示查询文本向量与pq索引中向量的距离;

11、(6.3)从ball树根节点开始自上而下寻找离查询文本向量最近的叶子节点,从叶子节点中找出离查询文本向量最近的k个数据点,存入一个knn缓存队列,并且以查询文本向量为中心点,以查询文本向量到knn缓存队列中第k个数据点的距离为半径,形成一个查询文本超球体;

12、(6.4)回退的查看当前节点的兄弟节点所对应的超球体是否与查询文本超球体相交;所述兄弟节点为属于同一个父节点的另外一个节点;根据三角定理判断两个超球体是否相交;

13、若查看到某一兄弟节点所对应的超球体与查询文本超球体相交,且该兄弟节点为叶子节点时,计算该节点中是否有比knn缓存队列中数据点离查询文本向量更近的数据点,若有,则更新knn缓存队列和查询文本超球体的半径;最后直到回退到根节点即结束检索,输出knn缓存队列中的k个数据点为查询文本的k个最近邻相似文本。

14、具体地,所述步骤(4)的ball树的思想方法为:开始ball树只有一个根节点,所有的数据点都指向它,之后每一次循环,每个节点会被划分为两个子节点。

15、进一步地,所述每一次循环的具体划分过程为:

16、(4.1)计算节点内所有数据点的中心点,即质心;

17、(4.2)找到离中心点最远的数据点作为左子节点,再找到离左子节点最远的数据点作为右子节点;

18、(4.3)让离左子节点近的数据点指向左子节点,否则指向右子节点,以此划分出了新的两个区域;

19、(4.4)计算出这两个区域的中心点和半径,形成两个超球体;按照以上划分过程循环至划分出的超球体中数据点的数量小于设定值时结束,最终构建出ball树索引。

20、进一步地,所述步骤(5)的聚类和量化,具体为:

21、(5.1)聚类:假设每个向量表示的维度为128,每个向量被切分为4段,得到4段32维的向量表示;然后对每堆小向量分别进行聚类,假设聚类个数为1024个,则可得到1024个簇心,再给每个簇心赋予id,最后得到4张有1024个簇心的表;

22、(5.2)量化:通过第一步得到的簇心表,找到每一个向量表示的4段切分向量表示在4张簇心表中对应的最近的簇心id,将对应的4个id赋予4段切分向量表示,这样一个128维的向量就变成了一个由4个id组成的向量;最后重新计算ball树所有中心节点所在超球体的半径,再构建pq索引。

23、进一步地,所述步骤(6.4)的根据三角定理判断两个超球体是否相交的判断公式为:

24、(radius(p)+r)≤|center(p)-q|

25、其中,p为当前节点的兄弟节点所对应的超球体,radius(p)为该超球体的半径,center(p)为该超球体的中心点,q为查询文本向量,r为查询文本超球体的半径,|center(p)-q|为p的中心点到q的距离;

26、若两个超球体中心点的距离小于等于两个超球体半径之和,则判断两个超球体相交;若两个超球体中心点的距离大于两个超球体半径之和,则判断两个超球体不相交。

27、本发明的有益效果是:

28、本发明构造的基于向量表示的相似文本检索方法支持长文本检索,相比传统的基于关键字检索的方法,输入的查询内容可以更加全面;对复杂的或具有多重语义的文本查询有很好的效果;同时对不熟悉某领域行话的用户或想做探索性搜索的用户非常友好且有帮助,尤其是在用户无法完全表达出专业术语时更为有效;最后相比于faiss中的indexivfpq方法搜索更加全面准确,准确度不会被人工规定的搜索聚类数所影响。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1