开源模型应用落地-LangChain实用小技巧-带阈值的相似性搜索(十五)

一、前言

     带阈值的相似性搜索是一种非常实用的信息检索方法。它允许用户设定一个具体的相似度标准,从而提升搜索结果的相关性和准确性。在面对大规模数据时,传统的相似性搜索往往难以满足用户的需求,因为返回的结果可能包含很多不相干的信息。而通过设定相似度阈值,系统只会返回那些在特定程度上和用户查询对象相似的结果。这种方法不仅提高了搜索效率,还有助于用户更集中地获取与他们需求匹配的信息。


二、术语

2.1.相似性搜索

    是一种信息检索技术,旨在找到与给定查询对象相似的其他对象。这种技术在多个领域都有广泛的应用,尤其是在文本处理、图像处理、推荐系统和数据挖掘等领域。

相似性搜索的关键点包括:

1. 相似性度量:为了比较对象之间的相似性,通常需要定义一个相似性度量或距离度量(如欧几里得距离、余弦相似度、曼哈顿距离等)。不同的度量适用于不同类型的数据。

2. 特征表示:对象通常需要通过某种方式进行特征提取,将其表示为向量或其他形式,以便于计算相似性。

3. 高效检索:对于大规模数据库,传统的线性搜索可能效率低下,因此常常采用高效的数据结构(如KD树、球树、LSH等)来加速搜索过程。

4. 应用场景:相似性搜索广泛应用于推荐系统(如电影或商品推荐)、图像搜索(如查找相似图片)、文本相似性检测(如抄袭检测)等。

2.2.带阈值的相似性搜索

    是一种相似性搜索方法,其中用户设置一个阈值,以限制返回的结果是足够相似的对象。这种搜索方式不仅寻找与查询对象相似的其他对象,而且还确保这些对象的相似度超过用户设定的阈值。

带阈值的相似性搜索的关键要素包括:

1. 阈值设定:用户可以指定一个具体的阈值,这个值代表了对象之间需要达到的最小相似度。例如,如果使用余弦相似度,阈值可能被设定为0.8,表示只返回与查询对象相似度大于或等于0.8的对象。

2. 相似性度量:需要选择适合的数据相似性度量方法(如余弦相似度、Jaccard相似度、欧几里得距离等),以便有效地计算对象之间的相似度。

3. 过滤结果:在检索过程中,只有那些满足阈值条件的对象会被纳入最终结果。这有助于用户更快速地找到最相关的信息,并减少无关信息的干扰。


三、前提条件 

3.1. 基础环境

  1.  操作系统:不限

3.2. 安装虚拟环境

conda create --name langchain python=3.10
conda activate langchain
pip install langchain langchain-openai langchain-community
# CPU版本安装
pip install faiss-cpu# GPU版本安装
pip install faiss-gpu

四、技术实现

 

4.1.传统的相似性检索

#!/usr/bin/env python
import osfrom langchain_community.vectorstores import FAISS
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddingsos.environ["OPENAI_API_KEY"] = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  # 你的Open AI Keyembedding = OpenAIEmbeddings(model="text-embedding-3-small")documents = [Document(page_content="在月光下,城市的喧嚣渐渐沉寂,只听见一只唱歌的猫咪,仿佛在讲述夜晚的秘密。", metadata={"page": 1}),Document(page_content="每当黄昏降临,时光咖啡馆的门口,总会出现一位会唱歌的叫小猫的少年,他的歌声像风铃般清脆,吸引着过路的行人。", metadata={"page": 2}),Document(page_content="长久以来,水晶球中的小镇有个传说,只有在下雪的日子里,许下的愿望才会变成现实。", metadata={"page": 3}),Document(page_content="一个人在沙滩上捡到一颗奇特的贝壳,听说它能听懂海浪的低语,带着他探索海底的神秘世界。", metadata={"page": 4}),Document(page_content="春天的第一场雨下过之后,花瓣上竟然映出了天空的彩虹,仿佛大自然在为人间铺设一条美丽的桥梁。", metadata={"page": 5}),Document(page_content="公园里,一只迷路的小狗不小心走进了时光隧道,突然变成了一个会说话的小精灵,开始了它的冒险旅程。", metadata={"page": 6}),Document(page_content="在遥远的山谷中,隐藏着一座会唱歌的瀑布,只有真正的勇者才敢去迎接这水的旋律。", metadata={"page": 7}),Document(page_content="一本无字书,翻开时却能让人看到自己未来的每一个选择,书页间飘散着淡淡的香气,令人心旷神怡。", metadata={"page": 8}),Document(page_content="有个城市的天空,每到午夜,会洒下星星的雨滴,居民们在梦中收集这些星星,实现心底的愿望。", metadata={"page": 9}),Document(page_content="星期五的晚上,神秘的镜子里会出现一位来自异界的旅行者,他带着五彩斑斓的故事,邀你一起进入奇幻的冒险。", metadata={"page": 10}),
]
db = FAISS.from_documents(documents, embedding)if __name__ == '__main__':print(db.similarity_search("我看见一只会唱歌的猫", k=2))

调用结果:

说明:

  1. k: 设置返回的结果数量,默认值是4

4.2.带阈值的相似性搜索

#!/usr/bin/env python
import osfrom langchain_community.vectorstores import FAISS
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddingsos.environ["OPENAI_API_KEY"] = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  # 你的Open AI Keyembedding = OpenAIEmbeddings(model="text-embedding-3-small")documents = [Document(page_content="在月光下,城市的喧嚣渐渐沉寂,只听见一只唱歌的猫咪,仿佛在讲述夜晚的秘密。", metadata={"page": 1}),Document(page_content="每当黄昏降临,时光咖啡馆的门口,总会出现一位会唱歌的叫小猫的少年,他的歌声像风铃般清脆,吸引着过路的行人。", metadata={"page": 2}),Document(page_content="长久以来,水晶球中的小镇有个传说,只有在下雪的日子里,许下的愿望才会变成现实。", metadata={"page": 3}),Document(page_content="一个人在沙滩上捡到一颗奇特的贝壳,听说它能听懂海浪的低语,带着他探索海底的神秘世界。", metadata={"page": 4}),Document(page_content="春天的第一场雨下过之后,花瓣上竟然映出了天空的彩虹,仿佛大自然在为人间铺设一条美丽的桥梁。", metadata={"page": 5}),Document(page_content="公园里,一只迷路的小狗不小心走进了时光隧道,突然变成了一个会说话的小精灵,开始了它的冒险旅程。", metadata={"page": 6}),Document(page_content="在遥远的山谷中,隐藏着一座会唱歌的瀑布,只有真正的勇者才敢去迎接这水的旋律。", metadata={"page": 7}),Document(page_content="一本无字书,翻开时却能让人看到自己未来的每一个选择,书页间飘散着淡淡的香气,令人心旷神怡。", metadata={"page": 8}),Document(page_content="有个城市的天空,每到午夜,会洒下星星的雨滴,居民们在梦中收集这些星星,实现心底的愿望。", metadata={"page": 9}),Document(page_content="星期五的晚上,神秘的镜子里会出现一位来自异界的旅行者,他带着五彩斑斓的故事,邀你一起进入奇幻的冒险。", metadata={"page": 10}),
]
db = FAISS.from_documents(documents, embedding)if __name__ == '__main__':print(db.similarity_search_with_relevance_scores("我看见一只会唱歌的猫", k=2, score_threshold=0.44))

调用结果:

说明:

  1. k: 设置返回的结果数量,默认值是4
  2. score_threshold:设置用于过滤检索到的文档的结果集,值在0~1之间。

相较于传统的相似性检索的结果,低于阈值的记录将会被过滤,仅返回大于阈值0.44的记录!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/456529.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字图像处理的概念(一)

一 何谓数字图像处理 1 图像的概念 图像是对客观存在的物体的一种相似性的、生动的写真或描述。 2 图像的类别 可见光成像和不可见光成像 单波段、多波段和超波段图像 伽马射线成像 主要用途包括核 医学和天文观测 等 。 核医学 a)同位素注射 骨骼扫描图像 b)正电子放射( …

华为“纯血鸿蒙”重磅发布!首次融入原生AI能力

华为成功举办“原生鸿蒙之夜暨全场景新品发布会”,会上隆重宣布:我国首个自主研发的移动操作系统——华为原生鸿蒙操作系统HarmonyOS NEXT正式面世,标志着鸿蒙历史上的一次重大飞跃,至此,鸿蒙系统已成为继苹果iOS与安卓…

算法革新决定未来!深挖数字北极星3.0背后的技术逻辑

2023年9月22日,望繁信科技首届PRO_大会在广州圆满举行,望繁信科技联合创始人&CTO李进峰博士在大会主论坛带来了《再突破——流程挖掘算法的革新和调优》的精彩分享,向大家详细介绍了数字北极星3.0以及流程资产等新功能背后的核心技术。 创新流程资产挖掘图算法 为中国企…

Flutter 状态管理框架Get

状态管理框架 Get的使用 目录 状态管理框架 Get的使用 GetMaterialApp 路由的注册 路由的跳转 middlewares的使用 组件使用 defaultDialog bottomSheet snackbar 状态刷新有很多种方式 ValueBuilder Obx 基础使用 是时候引入GetxController, 也是Get里面的常用的 G…

OpenCV与AI深度学习 | 实战 | OpenCV中更稳更快的找圆方法--EdgeDrawing使用演示(详细步骤 + 代码)

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:实战 | OpenCV中更稳更快的找圆方法--EdgeDrawing使用演示(详细步骤 代码) 导 读 本文主要介绍如何在OpenCV中使用E…

pycharm 中提示ModuleNotFoundError: No module named ‘distutils‘

在Pycharm 中的命令行中输入 pip install setuptools,即可解决

K8S测试pod内存和CPU资源不足

只设置requests参数 mysql主从pod启动后监控 读压测之后 同时设置limits和requests,只调低内存值 监控 压力测试 同时设置limits和requests,只调低CPU值 初始状态 开始压测 结论 对于CPU,如果pod中服务使用CPU超过设置的limits&…

(小白教程)MPV.NET 播放器安装和添加插件脚本Bilibili弹幕

MPV.NET安装和添加插件脚本 MPV跨平台播放器:该播放器基于流行的mpv媒体播放器。mpv.net 设计为与 mpv 兼容,几乎所有 mpv 功能都可用,这意味着官方mpv 手册适用于 mpv.net,差异记录在mpv.net 手册中。 主要差异是mpv.net为MPV添加…

Linux 字符设备驱动 之 无法归类的《杂项设备驱动》

学习目标: 了解 杂项设备驱动 和普通字符设备的异同,及杂项设备驱动程序的写法 学习内容: 一、杂项设备驱动的特别之处 杂项设备(Miscellaneous Devices)是一种通用的设备类型,用于表示那些不适合其他设备…

基于springboot企业微信SCRM管理系统源码带本地搭建教程

系统是前后端分离的架构,前端使用Vue2,后端使用SpringBoot2。 技术框架:SpringBoot2.0.0 Mybatis1.3.2 Shiro swagger-ui jpa lombok Vue2 Mysql5.7 运行环境:jdk8 IntelliJ IDEA maven 宝塔面板 系统与功能介绍 基…

ubuntu 安装haproxy

####安装##### sudo apt update sudo apt install haproxy sudo haproxy -v sudo systemctl status haproxy sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg-org####配置站点##### nano /etc/haproxy/haproxy.cfgfrontend www-httpbind *:5001mode httpdefault_ba…

SAP RFC 的几种类型

SRFC: ARFC: ARFC: TRFC: QRFC: QRFC-QIN Scheduler: *RFC: tables: RSTRFCTA RFC-TEST: Outbound Queue: STOP/RESTART (after STOP) RSTRFCTB RFC TEST: Outbound Queue: Get/Execute LUWs from Local/Remote Syst RSTRFCTC RFC-TEST: Inbound Que…

当有违法数据时,浏览器不解析,返回了undefined,导致数据不解析

现象:页面上没有看到数据 排查:断点到线上的源码里:1、协议回调确实没有拿到数据是个undefined 2、network里看服务确实响应了数据 3、控制台没有任何报错。 心情:莫名其妙的现象 我本地有json格式化工具,copy进去后&…

【论文阅读】Tabbed Out: Subverting the Android Custom Tab Security Model

论文链接:Tabbed Out: Subverting the Android Custom Tab Security Model | IEEE Conference Publication | IEEE Xplore 总览 “Tabbed Out: Subverting the Android Custom Tab Security Model” 由 Philipp Beer 等人撰写,发表于 2024 年 IEEE Symp…

linux入门之必掌握知识点

#1024程序员节|征文# Linux基础 top命令详解 top命令是用来查看进程系统资源使用情况的工具,它可以动态的现实。 top命令执行后,按大写M可以按内存使用情况进行排序,大写P可以按CPU使用情况进行排序,大写H可以显示线…

vue-vant框架引入

一、工具说明 vscode编辑器 二、安装 使用包管理器安装 npm install vant -S 查看是否安装成功:查看项目下的package.json文件中的依赖是否有vant: 三、导入 1、按需导入 按照node_mouduls目录下的vant文件夹的lib目录中的路径导入你要的组件 2、整体导入 在…

WPS电信定制版 v12.8.2.18205 自带 VBA\无广告

下载(哪个方便就下哪个):【1】https://pan.quark.cn/s/5373bf6cdcf5【2】链接: https://pan.baidu.com/s/1Vn2Bbhp8px-BBtlalkIIYg?pwdjgry 提取码: jgry 软件介绍: 1、VBA 组件更换为电信定制版,签名日期&#xf…

【进阶OpenCV】 (19)-- Dlib库 --人脸表情识别

文章目录 表情识别一、原理二、代码实现1. 摄像头前预处理2. 计算嘴唇变化3. 绘制嘴唇轮廓4. 显示结果5. 完整代码展示 总结 表情识别 目标:识别人物的喜悦状态。 一、原理 我们在对一张人脸图片进行关键点定位后,得到每个关键点的位置: 比…

疯狂变现!5分钟教你如何高效率制作AI商业海报!

在这个快节奏的时代,效率就是生命力。无论你是创业者、还是设计师,制作吸引人的详情海报都是日常工作中不可或缺的一环。传统的设计从构思到定稿,往往需要数小时甚至数天的时间。但现在,有了AI技术的加持——仅5分钟,你…

红帽Linux认证与其他认证相比优势在哪?

在各种各样的 IT 认证里头,红帽 Linux 认证凭借自身独特的地方和长处崭露头角。那红帽 Linux 认证跟其他认证相比,长处到底在啥地方呢? 接下来就给大伙简单说道说道。 首先,红帽 Linux 认证特别注重实践。它主要考查考生实际操作…