RAG开发新技术 应用语义相似度优化标签过滤品质

  • 电脑网络维修
  • 2024-11-15

本文旨在引见如何应用语义相似度改良标签过滤以优化RAG运行开发品质。

要了解本文中的内容,你须要把握Jaccard相似性和向量搜查等预备常识。本文算法的成功已在GitHub()上颁布,并且是齐全开源的。

简介

多年来,咱们曾经发现了如何从诸如数字、原始文本、图像和标签等不同类型的形式数据中检索消息。

随着运行程序定制用户接口的日益遍及,标签搜查系统已成为一种繁难、准确的消息过滤方式。理论,经常使用标签搜查的一些代表性场景包括检索社交媒体帖子、文章、游戏、电影,甚至简历等畛域。

但是,传统的标签搜查缺乏灵敏性。假设咱们要过滤齐全蕴含给定标签的样本,或者会产生以下状况,特意是关于仅蕴含几千个样本的数据库,或者没有任何(或只要少数)与咱们的查问婚配的样本。

缺乏无关消息时两种搜查打算的搜查结果差异(作者自己提供图片)

经过上方的内容,我将引见几种新的搜查算法。就我所知,目前我还没有在网络上找到与此相反的算法。

传统标签搜查是如何上班的?

传统系统驳回一种称为Jaccard相似度的算法(理论经过Minhash算法口头),该算法能够计算两组元素之间的相似度(在咱们的例子中,这些元素是标签)。如前所述,这样的搜查基本不灵敏(无论汇合中蕴含或是不蕴含查问的标签)。

一个繁难的AND位操作示例(虽然这里给出的并非是Jaccard相似性,但是能够展现过滤方法的大抵概念)(作者自己提供图片)

咱们能做得更好吗?

假设咱们不只是从婚配的标签中过滤样本,而是思考样本中一切其余不相反但与咱们选用的标签相似的标签,那么状况会怎样样呢?咱们可以使算法愈加灵敏,将结果裁减到非完美婚配,但依然是良好的婚配。咱们的思绪是:间接将语义相似性运行于标签,而不是文本。

语义标签搜查算法

正如文章扫尾提到的那样,这种新方法试图将语义搜查的配置与标签过滤系统相结合。为了构建这个算法,咱们只要要做一件事:

在本文示例名目中,我将经常使用的参考数据是Steam游戏库的开源汇合(可从Kaggle下载:,遵照MIT容许证)——大概有00个样本,这是用于测试咱们算法的不错的样本。正如咱们从显示的数据帧中看到的,每个游戏都对应几个已调配的标签,咱们的数据库中共有多个惟一的标签。

示例源文件中提供的Steam数据帧截图(作者自己提供图片)

如今,咱们曾经预备好了初始数据,就可以继续接上去的上班了。

咱们的算法将经过以下步骤启动论述:

在本文中,我将只剖析这种新方法面前的数学原理(无关代码的深化解释和上班演示,请参阅本文示例工程源码:。无关如何经常使用simtag的说明,请参阅源码工程根目录下的README.md文件)。

1.提取标签相关

首先想到的疑问是,咱们如何找到标签之间的相关。请留意,目前曾经存在几种算法可用于取得相反的结果:

咱们可以用来提取标签相关的最繁难的方法称为共现矩阵(co-occurrence matrix),这是我将在本文中经常使用的格局(出于其有效性和繁难性)。

最先进的都是基于嵌入神经网络(如过去经常使用的Word2Vec;如今理论经常使用转换器,如LLM),可以提取样本之间的语义相关。创立一个神经网络来提取标签相关(以智能编码器的方式)是或者的,而且在面对某些状况时理论也是理智的打算。

由于标签是经常使用人类言语定义的,所以可以经常使用现有的预训练模型来计算曾经存在的相似性。这或者会更快,而且缩小了费事。但是,每个数据集都有其独个性。无余的一点是,经常使用预先训练的模型将疏忽客户行为。

例如,咱们稍后将看到2D与Fantasy有着亲密的相关:但是,经常使用预先训练的模型永远不会发现这样的婚配对。

算法的选用或者取决于许多起因,特意是当咱们必定处置庞大的数据池或有可裁减性疑问时(假设咱们领有太多的标签,那么咱们须要经常使用机器学习来处置这个疑问)。

a.经常使用Michelangiolo相似性构建共现矩阵

如前所述,我将经常使用共现矩阵作为提取这些相关的手腕。我的目的是找到每对标签之间的相关。为此,我将经常使用IoU(联结上的交加)对一切样本集(S)运行以下计数:

计算一对标签之间相似度的公式(作者自己提供图片)

该算法与Jaccard相似度十分相似。虽然这种算法针对样本启动操作(而我引见的那种算法针对元素启动操作),但是由于(据我所知)这个特定的运行程序尚未被编程成功过;因此,咱们可以将其命名为Michelangiolo相似性。(公平地说,这个算法的经常使用以前在StackOverflow疑问中曾经提到过,但从未被编程成功过)。

Jaccard相似性和Michelangiolo相似性的差异(作者自己提供图片)

关于00个样本,提取相似性矩阵大概须要一个小时,结果如下:

样本列表S中一切惟一标签的共现矩阵(作者自己提供图片)

接上去,让咱们手动审核前10个样本中一些比拟经常出现的标签,看看结果能否无心义:

从共现矩阵中提取的样本相关(作者自己提供图片)

结果看起来很有宿愿!咱们从繁难的分类数据(只能转换为0和1)开局,但咱们提取了标签之间的语义相关(甚至没有经常使用神经网络)。

b.经常使用预训练的神经网络

雷同,咱们可以经常使用预训练的编码器()提取样本之间的现有相关。但是,这种处置打算疏忽了只能从咱们的数据中提取的相关,只关注人类言语的现有语义相关。留意,这种算法或者不是一个十分适宜基于批发数据的上班处置打算。

另一方面,经过经常使用神经网络,咱们不再须要构建相关矩阵。因此,当关注可裁减性时,这是一种比拟适当的处置打算。例如,假设咱们必定剖析少量的推特数据,咱们会获取53.300个标签。依据这个数量的标签计算共现矩阵将获取大小为2500000000的稠密矩阵(这是一个十分不实际践的壮举)。相反,经过经常使用输入向量长度为384的规范编码器,获取的矩阵的总大小将为19200200。

经常使用预训练编码器对一组标签启动编码的快照数据

2.对查问和样本启动编码

咱们的目的是构建一个能够支持语义标签搜查的搜查引擎:依据咱们不时在构建的格局,惟一能够支持这种打算的技术是经常使用向量搜查。因此,咱们须要找到一个适宜的编码算法,将样本和查问转换为向量。

在大少数编码算法中,咱们都会经常使用相反的算法对查问和样本启动编码。但是,每个样本都蕴含多个标签,而每个标签都由一组不同的相关示意;因此,咱们须要在单个向量中捕捉这些相关。

协变量编码(作者自己提供图片)

此外,咱们须要处置上述可裁减性疑问,咱们将经过经常使用PCA模块来成功(当咱们经常使用共现矩阵时,咱们可以跳过PCA,由于不须要紧缩咱们的向量)。

当标签的数质变得太大时,咱们须要丢弃计算共现矩阵的或者性,由于它以平方速率缩放。因此,咱们可以经常使用预训练的神经网络提取每个现有标签的向量(PCA模块的第一步)。例如,all-MiniLM-L6-v2模型将每个标签转换为长度为384的向量。

而后,咱们可以转置取得的矩阵,并对其启动紧缩:咱们最后将经常使用1和0对可用标签索引对查问/样本启动编码,从而获取与初始矩阵(53300)长度相反的初始向量。此时,咱们可以经常使用预先计算的PCA实例在大小为384的维度中紧缩相反的稠密向量。

编码样本

就咱们的样本而言,该环节在PCA紧缩(激活时)后立刻完结。

编码查问:协变量编码

咱们的查问须要以不同的方式编码:咱们须要思考与每个现有标签相关的相关。这个环节是经过首先将紧缩向量与紧缩矩阵(一切现有相关的总和)相加来口头的。如今,咱们曾经取得了一个矩阵(384x384),咱们须要对其启动平均计算,从而取得咱们的查问向量。

由于咱们将经常使用欧几里德搜查,它将首先优先搜查得分最高的特色(现实状况下,咱们经常使用数字1激活的特色),但它也会思考额外的无所谓得分状况。

加权搜查

由于咱们将向量平均在一同,所以咱们甚至可以对此计算运行权重,向量将遭到与查问标签不同的影响。

3.经常使用向量检索口头语义标签搜查

你或者会问这样的疑问:为什么咱们要教训这个复杂的编码环节,而不只仅是将这对标签输入到函数f(query, sample)中并取得一个分值?

假设你相熟基于向量的搜查引擎,你曾经知道答案了。经过成对口头计算,在只要00个样本的状况下,所需的计算才干是渺小的(单个查问或者须要长达10秒):这不是一种可裁减的做法。但是,假设咱们选用对00个样本启意向量检索,搜查将在0.1秒内成功:这是一种高度可裁减的做法,在咱们的运行状况下这是十分完美的方法。

4.验证

为了使算法有效,须要对其启动验证。目前,咱们缺乏适当的数学验证(乍一看,对M的相似性得分启动平均曾经显示出十分有宿愿的结果,但须要进一步的钻研来取得有证据支持的主观目的)。

但是,当经常使用比拟示例并可视化比拟时,现有结果的长处是十分直观的。以下是两种搜查方法的最接近顶部的搜查结果比拟(你看到的是调配给此游戏的标签)。

传统标签搜查与语义标签搜查的比拟

咱们可以看到传统搜查或者会(在没有额外规定的状况下,样本会依据一切标签的可用性启动过滤,而不是排序)前往具备更多标签的样本,但其中许多标签或者并不相关。

语义标签搜查依据一切标签的相关性对一切样本启动排序。繁难来说,它敞开了蕴含不相关标签的样本的资历。

这个新系统的真正长处在于,当传统搜查无法前往足够的样本时,咱们可以经常使用语义标签搜查来选用恣意数量的样本。

两次搜查结果稀缺前的差异(作者自己提供图片)

在上方的例子中,经常使用传统的标签过滤不会从Steam库中前往任何游戏。但是,经过经常使用语义标签过滤,虽然咱们依然会获取不完美的结果,但会获取与咱们的查问最婚配的结果。你看到的是与咱们的搜查婚配的前5个游戏的标签。

论断

在此之前,假设不驳回复杂的方法,如聚类、深度学习或多个K近邻算法(KNN)搜查,就无法能在思考标签语义相关的状况下对标签启动过滤。

本文中给出的算法提供的灵敏性应准许与传统的手动标志方法分别,后者迫经常使用户在一组预约义的标签之间启动选用,并开拓了经常使用视觉言语模型的LLM自在地将标签调配给文本或图像的或者性,而不局限于预先存在的结构,从而为可裁减和改良的搜查方法开拓了新的选用打算。

最后,我怀着最美妙的祝愿选择向全环球开明这个算法,我也十分宿愿它能获取充沛的应用。

译者引见

朱先忠,社区编辑,专家博客、讲师,潍坊一所高校计算机老师,自在编程界老兵一枚。

原文题目:​ ​ Introducing Semantic Tag Filtering: Enhancing Retrieval with Tag Similarity ​ ​,作者:Michelangiolo Mazzeschi

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/5670.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号