当前位置: 首页 > news >正文

【拥抱AI】向量数据库有哪些常见的检索算法?

在信息检索领域,有许多常见的算法用于帮助用户从大量数据中找到相关的信息。以下是一些常见的检索算法:

布尔模型示例(文本操作)

在文本操作中,布尔模型可以通过编写一个简单的脚本来实现。例如,你可以创建一个包含多个文档的文本文件,然后编写一个脚本来搜索包含特定关键词的文档。

# 布尔模型示例
# 假设我们有以下文档
documents = ["苹果手机 苹果手机价格","苹果手机介绍","华为手机介绍","小米手机介绍"
]
# 用户查询
query = "苹果手机"
# 布尔模型搜索
results = []
for document in documents:if query in document:results.append(document)
print(results)

向量空间模型示例(文本操作)

在向量空间模型中,你可以使用Python的nltk库来计算文档和查询的向量表示,并计算它们的相似度。

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.probability import FreqDist
from nltk.util import ngrams
from sklearn.feature_extraction.text import TfidfVectorizer
# 假设我们有以下文档
documents = ["苹果手机 苹果手机价格","苹果手机介绍","华为手机介绍","小米手机介绍"
]
# 用户查询
query = "苹果手机"
# 文本预处理
def preprocess_text(text):stop_words = set(stopwords.words('english'))words = word_tokenize(text.lower())return [word for word in words if word not in stop_words]
# 计算TF-IDF向量
vectorizer = TfidfVectorizer(preprocessor=preprocess_text)
tfidf_matrix = vectorizer.fit_transform(documents + [query])
# 计算相似度
cosine_similarities = tfidf_matrix * tfidf_matrix.T
# 返回相似度最高的文档
results = cosine_similarities.toarray()
print(results)

倒排索引示例(文本操作)

在倒排索引中,你可以使用Python的collections模块来创建一个简单的倒排索引。

from collections import defaultdict
# 假设我们有以下文档
documents = ["苹果手机 苹果手机价格","苹果手机介绍","华为手机介绍","小米手机介绍"
]
# 创建倒排索引
inverted_index = defaultdict(list)
for document in documents:words = document.split()for word in words:inverted_index[word].append(document)
# 打印倒排索引
print(inverted_index)

基于词频-逆文档频率(TF-IDF)的检索:

*** 基于词频-逆文档频率(TF-IDF)的检索是一种常用的文本信息检索技术,它通过计算词的TF-IDF值来衡量词的重要性,并据此对文档进行排序。TF-IDF算法的基本思想是,如果一个词在某个文档中出现的频率较高(词频,Term Frequency,TF),并且在整个文档集合中出现的频率较低(逆文档频率,Inverse Document Frequency,IDF),那么这个词对于这个文档的贡献较大,应该被赋予较高的权重。

计算步骤
  1. 词频(TF)计算
    • 对于文档中的每个词,计算它在文档中出现的次数。
  2. 逆文档频率(IDF)计算
    • 计算整个文档集合中包含这个词的文档数。
    • 计算文档总数。
    • 计算IDF值,公式为:[ IDF = \log_2 \frac{文档总数}{包含这个词的文档数} ]
  3. TF-IDF计算
    • 对于文档中的每个词,计算它的TF-IDF值,公式为:[ TF-IDF = TF \times IDF ]
  4. 文档向量表示
    • 将文档中每个词的TF-IDF值作为文档向量的一个维度。
  5. 相似度计算
    • 使用余弦相似度等方法计算查询向量与文档向量之间的相似度。
    • 返回相似度最高的文档。
示例说明

假设我们有一个包含以下文档的文档集合:

文档1: 苹果手机 苹果手机价格
文档2: 苹果手机介绍
文档3: 华为手机介绍
文档4: 小米手机介绍

用户查询为“苹果手机”。

  1. 词频(TF)计算
    • 在文档1中,“苹果手机”出现了2次,TF值为2。
    • 在文档2中,“苹果手机”出现了1次,TF值为1。
    • 在文档3和文档4中,“苹果手机”没有出现,TF值为0。
  2. 逆文档频率(IDF)计算
    • 在文档集合中,包含“苹果手机”的文档数为2(文档1和文档2)。
    • 文档总数为4。
    • IDF值为 [ \log_2 \frac{4}{2} = \log_2 2 = 1 ]
  3. TF-IDF计算
    • 在文档1中,“苹果手机”的TF-IDF值为 [ 2 \times 1 = 2 ]
    • 在文档2中,“苹果手机”的TF-IDF值为 [ 1 \times 1 = 1 ]
    • 在文档3和文档4中,“苹果手机”的TF-IDF值为0。
  4. 文档向量表示
    • 文档1的向量为 [2, 0, 0, 0]。
    • 文档2的向量为 [1, 0, 0, 0]。
    • 文档3和文档4的向量为 [0, 0, 0, 0]。
  5. 相似度计算
    • 假设查询向量为 [1, 0, 0, 0]。
    • 计算文档1和查询之间的余弦相似度为 [ \frac{2}{2} = 1 ]
    • 计算文档2和查询之间的余弦相似度为 [ \frac{1}{2} = 0.5 ]
    • 文档3和文档4与查询之间的余弦相似度为0。
  6. 返回结果
    • 基于余弦相似度,文档1与查询最相关,其次是文档2。

这些示例展示了这些算法在实际应用中的具体操作和效果。在实际的信息检索系统中,可能会根据具体需求和场景选择合适的算法或算法组合。

相关文章:

【拥抱AI】向量数据库有哪些常见的检索算法?

在信息检索领域,有许多常见的算法用于帮助用户从大量数据中找到相关的信息。以下是一些常见的检索算法: 布尔模型示例(文本操作) 在文本操作中,布尔模型可以通过编写一个简单的脚本来实现。例如,你可以创…...

Webpack前端工程化进阶系列(二) —— HMR热模块更新(图文+代码)

前言 之前更新过一篇Webpack文章:Webpack入门只看这一篇就够了(图文代码),没想到颇受好评,很快就阅读量就破万了hhh,应读者私信的要求,决定继续更新Webpack进阶系列的文章! 进入今天的主题 —— HMR 热模块替换(HotM…...

【RAG 项目实战 07】替换 ConversationalRetrievalChain(单轮问答)

【RAG 项目实战 07】替换 ConversationalRetrievalChain(单轮问答) NLP Github 项目: NLP 项目实践:fasterai/nlp-project-practice 介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用,分享大…...

godot游戏引擎_瓦片集和瓦片地图介绍

在 Godot 中,TileSet 和 TileMap 是用于处理瓦片地图的两个关键概念,它们的作用和用途有明显的区别。以下是两者的详细对比: 1. TileSet(瓦片集) TileSet 是资源,定义瓦片的内容和属性。 特点&#xff1a…...

7、深入剖析PyTorch nn.Module源码

文章目录 1. 重要类2. add_modules3. Apply(fn)4. register_buffer5. nn.Parametersister_parameters6. 后续测试 1. 重要类 nn.module --> 所有神经网络的父类,自定义神经网络需要继承此类,并且自定义__init__,forward函数即可: #!/usr…...

如何提升编程能力第二篇

如何提升编程能力2 1. 引言2. 掌握理论基础2.1 理解编程语言的核心2.2 数据结构与算法2.3 计算机基础与系统设计3.1 多写代码3.2 参与开源项目3.3 开发自己的项目 4. 提高代码质量4.1 代码风格与可读性4.2 测试驱动开发 1. 引言 编程是推动现代科技发展的核心技能,…...

问:SpringBoot核心配置文件都有啥,怎么配?

在SpringBoot的开发过程中,核心配置文件扮演着至关重要的角色。这些文件用于配置应用程序的各种属性和环境设置,使得开发者能够灵活地定制和管理应用程序的行为。本文将探讨SpringBoot的核心配置文件,包括它们的作用、区别,并通过…...

RHCSA作业

课后练习 将整个 /etc 目录下的文件全部打包并用 gzip 压缩成/back/etcback.tar.gz [rootlocalhost ~]# tar -czvf /back/etcback.tar.gz -C / etc 使当前用户永久生效的命令别名:写一个命令命为hello,实现的功能为每输入一次hello命令,就有hello&#…...

ESP32学习笔记_FreeRTOS(3)——SoftwareTimer

摘要(From AI): 这篇笔记全面介绍了 FreeRTOS 软件定时器的核心概念和使用方法,包括定时器的创建、管理、常用 API 和辅助函数,并通过示例代码演示了如何启动、重置和更改定时器的周期。它强调了软件定时器的灵活性、平台无关性以及与硬件定时器的对比 …...

文心一言与千帆大模型平台的区别:探索百度AI生态的双子星

随着人工智能技术的迅猛发展,越来越多的公司开始投入资源开发自己的AI解决方案。在中国,百度作为互联网巨头之一,不仅在搜索引擎领域占据重要位置,还在AI领域取得了显著成就。其中,“文心一言”和“千帆大模型平台”便…...

【c语言】文件操作详解 - 从打开到关闭

文章目录 1. 为什么使用文件?2. 什么是文件?3. 如何标识文件?4. 二进制文件和文本文件?5. 文件的打开和关闭5.1 流和标准流5.1.1 流5.1.2 标准流 5.2 文件指针5.3 文件的打开和关闭 6. 文件的读写顺序6.1 顺序读写函数6.2 对比一组…...

Flink Sink的使用

经过一系列Transformation转换操作后,最后一定要调用Sink操作,才会形成一个完整的DataFlow拓扑。只有调用了Sink操作,才会产生最终的计算结果,这些数据可以写入到的文件、输出到指定的网络端口、消息中间件、外部的文件系统或者是…...

pcl::PointCloud<PointType>::Ptr extractedCloud; 尖括号里的值表示什么含义?

在C中&#xff0c;pcl::PointCloud<PointType>::Ptr是一种智能指针&#xff0c;它是Point Cloud Library (PCL)中用于管理pcl::PointCloud对象的智能指针类型。这里的<pcl::PointCloud<PointType>::Ptr>尖括号里的值表示智能指针所指向的对象类型。 让我们分…...

《基于FPGA的便携式PWM方波信号发生器》论文分析(三)——数码管稳定显示与系统调试

一、论文概述 基于FPGA的便携式PWM方波信号发生器是一篇由任青颖、庹忠曜、黄洵桢、李智禺和张贤宇 等人发表的一篇期刊论文。该论文主要研究了一种新型的信号发生器&#xff0c;旨在解决传统PWM信号发生器在移动设备信号调控中存在的精准度低和便携性差的问题 。其基于现场可编…...

VsCode 插件推荐(个人常用)

VsCode 插件推荐&#xff08;个人常用&#xff09;...

路由策略与路由控制实验

AR1、AR2、AR3在互联接口、Loopback0接口上激活OSPF。AR3、AR4属于IS-IS Area 49.0001&#xff0c;这两者都是Level-1路由器&#xff0c;AR3、AR4的系统ID采用0000.0000.000x格式&#xff0c;其中x为设备编号 AR1上存在三个业务网段A、B、C&#xff08;分别用Loopback1、2、3接…...

训练的decoder模型文本长度不一致,一般设置为多大合适,需要覆盖最长的文本长度么

在训练解码器模型时,文本长度不一致是常见的情况,需要根据任务的特性和数据集的长度分布来设置合理的最大长度 (max_length)。以下是一些指导原则,帮助你设置合适的最大长度: 1. 是否需要覆盖最长文本长度 覆盖最长文本长度: 如果任务对完整性要求很高(例如生成数学公式、…...

过滤条件包含 OR 谓词,如何进行查询优化——OceanBase SQL 优化实践

这篇博客涉及两个点&#xff0c;一个是 “OR Expansion 改写”&#xff0c;另一个是 “基于代价的改写”。 背景 在写SQL查询时&#xff0c;难以避免在过滤条件中使用 OR 谓词&#xff0c;但其往往会导致索引利用效率下降的问题 。本文将分享如何通过查询改写的2种方式进行优化…...

通过异步使用消息队列优化秒杀

通过异步使用消息队列优化秒杀 同步秒杀流程异步优化秒杀异步秒杀流程基于lua脚本保证Redis操作原子性代码实现阻塞队列的缺点 同步秒杀流程 public Result seckillVoucher(Long voucherId) throws InterruptedException {SeckillVoucher seckillVoucher iSeckillVoucherServi…...

AI产业告别“独奏”时代,“天翼云息壤杯”高校AI大赛奏响产学研“交响乐”

文 | 智能相对论 作者 | 陈泊丞 人工智能产业正在从“独奏”时代进入“大合奏”时代。 在早期的AI发展阶段&#xff0c;AI应用主要集中在少数几个领域&#xff0c;如语音识别、图像处理等。这些领域的研究和开发工作往往由少数几家公司或研究机构即可独立完成&#xff0c;犹…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...