当前位置: 首页 > 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。

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

http://www.lryc.cn/news/491937.html

相关文章:

  • Webpack前端工程化进阶系列(二) —— HMR热模块更新(图文+代码)
  • 【RAG 项目实战 07】替换 ConversationalRetrievalChain(单轮问答)
  • godot游戏引擎_瓦片集和瓦片地图介绍
  • 7、深入剖析PyTorch nn.Module源码
  • 如何提升编程能力第二篇
  • 问:SpringBoot核心配置文件都有啥,怎么配?
  • RHCSA作业
  • ESP32学习笔记_FreeRTOS(3)——SoftwareTimer
  • 文心一言与千帆大模型平台的区别:探索百度AI生态的双子星
  • 【c语言】文件操作详解 - 从打开到关闭
  • Flink Sink的使用
  • pcl::PointCloud<PointType>::Ptr extractedCloud; 尖括号里的值表示什么含义?
  • 《基于FPGA的便携式PWM方波信号发生器》论文分析(三)——数码管稳定显示与系统调试
  • VsCode 插件推荐(个人常用)
  • 路由策略与路由控制实验
  • 训练的decoder模型文本长度不一致,一般设置为多大合适,需要覆盖最长的文本长度么
  • 过滤条件包含 OR 谓词,如何进行查询优化——OceanBase SQL 优化实践
  • 通过异步使用消息队列优化秒杀
  • AI产业告别“独奏”时代,“天翼云息壤杯”高校AI大赛奏响产学研“交响乐”
  • Hot100 - 字母异位词分组
  • 力扣hot100-->排序
  • 【VRChat 全身动捕】VIVE 手柄改 tracker 定位器教程,低成本光学动捕解决方案(持续更新中2024.11.26)
  • 【Nginx】核心概念与安装配置解释
  • Qt界面篇:QMessageBox高级用法
  • 【二叉树】【2.1遍历二叉树】【刷题笔记】【灵神题单】
  • Mongo数据库 --- Mongo Pipeline
  • Adobe Illustrator 2024 安装教程与下载分享
  • javax.xml.ws.soap.SOAPFaultException: ZONE_OFFSET
  • 常用的数据结构
  • javaweb-day01-html和css初识